diff --git a/app.py b/app.py
index bbea236c55ded25b8adbd15a94f7aa5c8f0a6bb5..d476316bf7fd82d7baecefda872f752dc18037e3 100644
--- a/app.py
+++ b/app.py
@@ -14,6 +14,8 @@ DISPLAY_DATE_FORMAT = '%A, %B %-d, %Y'
 DISPLAY_TIME_FORMAT = '%-I:%M %p on %A'
 
 
+app.config['APPLICATION_ROOT'] = '/armory'
+
 def _make_cache_key():
     """Create a cache key for Flask-Caching."""
     path = request.path
diff --git a/scraper.py b/scraper.py
index 37f9e59c5ae7107dba3211257664771b52a272d9..12914771cb1cc4d995485dfe3e54153941348dca 100644
--- a/scraper.py
+++ b/scraper.py
@@ -5,6 +5,7 @@ from concurrent.futures import ThreadPoolExecutor
 from datetime import date, datetime, timedelta
 from urllib.parse import urlparse, urljoin, urlencode
 from lxml import html  # nosec ; Bandit suggests defusedxml but defusedxml.lxml is dead
+from json.decoder import JSONDecodeError
 import requests
 from models import Event, EventPhase, Fencer, Tournament
 
@@ -125,27 +126,34 @@ class FTLiveScraper(Scraper):
     """
 
     BASE_URL = 'https://fencingtimelive.com'
-    TOURNAMENTS_URL = urljoin(BASE_URL, 'tournaments/list/data?{query}')
+    TOURNAMENTS_URL = urljoin(BASE_URL, 'tournaments/search/data?{query}')
     TOURNAMENT_URL = urljoin(BASE_URL, 'tournaments/eventSchedule/{tournament_id}')
     FENCERS_URL = urljoin(BASE_URL, 'events/competitors/data/{event_id}')
     EVENT_URL = urljoin(BASE_URL, 'events/view/{event_id}')
     START_FORMAT = '%Y-%m-%dT%H:%M:%S.000Z'
     EVENT_DATETIME_FORMAT = '%A %B %d, %Y %I:%M %p'
-    MAX_AGO = timedelta(days=7)
-    MAX_AHEAD = timedelta(days=7)
+    DATE_MODE = -2  # Last 30 days
+    SEARCH_FROM = timedelta(days=21)  # Start search x days into future
 
-    def list_tournaments(self, search=None, from_date=None, to_date=None):
+    def list_tournaments(self, search=None, date_mode=None, search_date=None):
         """Get a list of tournaments in FTLive."""
-        if not search and not from_date and not to_date:
-            from_date = date.today() - self.MAX_AGO
-            to_date = date.today() + self.MAX_AHEAD
+        if not search_date:
+            search_date = date.today() + self.SEARCH_FROM
+        if not date_mode:
+            date_mode = self.DATE_MODE
         args = {
-            'tname': search or '',
-            'from': from_date or '',
-            'to': to_date or ''
+            'search': search or '',
+            'today': search_date,
+            'date': date_mode,
+            'filter': 'Country',
+            'country': 'USA',
         }
         url = self.TOURNAMENTS_URL.format(query=urlencode(args))
-        tournaments = requests.get(url).json()
+        try:
+           tournaments = requests.get(url).json()
+        except JSONDecodeError:
+            raise ScrapeError("Failed to decode tournament list from URL {url}"
+                              .format(url=url))
         return [{'start': datetime.strptime(t['start'], self.START_FORMAT),
                  'id': t['id'],
                  'name': t['name'],