Prowlarr Indexer Setup (Apps, FlareSolverr, Sync + Test)
Wire indexers into Prowlarr once: register Radarr and Sonarr as applications, add FlareSolverr for Cloudflare-protected indexers, then sync and test every indexer from the API.
bash# Prowlarr indexer sync + test — run from any host that can reach Prowlarr's
# web port. Swap in your own Prowlarr URL and API key (Settings -> General).
PROWLARR_URL="http://10.0.0.10:9696"
PROWLARR_API_KEY="YOUR_PROWLARR_API_KEY"
# Push Prowlarr's current indexer list to every registered app (Radarr/Sonarr)
# right now. Prowlarr also does this automatically whenever you add or remove
# an indexer, so this is only needed to force an out-of-band re-sync.
curl -s -X POST "$PROWLARR_URL/api/v1/command" \
-H "X-Api-Key: $PROWLARR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"ApplicationIndexerSync"}'
# Test every configured indexer in one shot. The response is a JSON array of
# { "id", "isValid", "validationFailures" } — any entry with "isValid": false
# is an indexer that needs attention (login, captcha, or a dead tracker).
curl -s -X POST "$PROWLARR_URL/api/v1/indexer/testall" \
-H "X-Api-Key: $PROWLARR_API_KEY"
What this does
This is the “wire it together” half of the Arr stack — the part people most often get subtly wrong. Prowlarr is the one place you manage indexers (the trackers and Usenet sites that supply release links); once it’s set up, it pushes those indexers into Radarr and Sonarr for you, so you never maintain two lists. This playbook covers the four moving parts that make that work: registering Radarr and Sonarr as applications, adding FlareSolverr so indexers hidden behind Cloudflare’s anti-bot challenge still load, and then a one-command sync + test so you can prove the whole thing before you ever search for a release. It assumes the containers are already running — the Arr Stack Compose playbook or the deploy guide stands those up.
Every specific-looking value below is a placeholder. Replace 10.0.0.10 with your Prowlarr host’s IP; YOUR_PROWLARR_API_KEY with the key from Prowlarr → Settings → General; the container URLs (http://radarr:7878, http://sonarr:8989, http://flaresolverr:8191) with whatever names your own Compose stack uses; and any tag name (cloudflare) with your own. Rule of thumb: if a value looks specific to one machine, it’s a placeholder to change — not a literal to copy.
The mental model in one picture: you configure indexers in exactly one place, and Prowlarr fans them out to the apps. FlareSolverr sits in front of only the indexers that need it.
Prerequisites
- Prowlarr, Radarr, and Sonarr already running and reachable — see the Arr Stack Compose playbook.
- The apps on a shared Docker network so they can reach each other by container name (the LinuxServer.io images in the Compose playbook already are).
- Each app’s API key to hand, from its own Settings → General page.
Step 1 — Register Radarr and Sonarr as applications
In Prowlarr → Settings → Apps → Add, add Radarr and then Sonarr. For each one, three fields matter:
- Prowlarr Server — the URL of Prowlarr as the app will reach it (e.g.
http://prowlarr:9696). - Application Server — the app’s own URL (
http://radarr:7878,http://sonarr:8989). - API Key — the app’s key from its Settings → General.
Set Sync Level to Add and Remove Only to start — Prowlarr adds and removes indexers on the app but leaves your per-app tweaks alone. Switch to Full Sync once you want Prowlarr to be the single source of truth (it will then overwrite indexer settings you change inside Radarr/Sonarr). The third option, Disabled, stops syncing entirely — so make sure you pick one of the first two, or nothing reaches your apps.
Once the apps are registered, never add indexers directly in Radarr or Sonarr. Prowlarr syncs them in — adding them in two places is the classic “why do I have duplicate indexers” mess.
Step 2 — Add FlareSolverr for Cloudflare-protected indexers
Some indexers sit behind Cloudflare’s “checking your browser” challenge, which a plain HTTP request can’t pass. FlareSolverr is a small proxy that solves that challenge in a headless browser and hands the result back to Prowlarr. Add it to your Compose stack as its own service on the same network:
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
- LOG_LEVEL=info
- TZ=Etc/UTC
ports:
- "8191:8191" # optional — only needed to reach it from the host
restart: unless-stopped
Bring it up (docker compose up -d flaresolverr), then register it in Prowlarr → Settings → Indexer Proxies → Add → FlareSolverr:
- Name — anything, e.g.
FlareSolverr. - Tags — a tag such as
cloudflare. This is the important field: a proxy with no tag does nothing, and a proxy only applies to indexers carrying the same tag. - Host — the full URL to FlareSolverr, e.g.
http://flaresolverr:8191. - Request Timeout (seconds) — leave at the default
60; raise it only if challenges are timing out.
FlareSolverr will fetch any URL it’s told to, so an open instance is an abuse magnet. Keep it on your internal Docker network — the ports: mapping above is optional and only for local testing.
Step 3 — Add an indexer and tag it
In Prowlarr → Indexers, click Add Indexer, search for the tracker or Usenet indexer you use (or fall back to Generic Newznab for Usenet / Generic Torznab for torrents), fill in your credentials, and Test before you Save. For any indexer that lives behind Cloudflare, set its Tags field to the same tag you gave the FlareSolverr proxy (cloudflare) so requests route through it. That tag match is the entire link between the two — there’s no other setting to flip.
Step 4 — Sync and test everything at once
Adding or removing an indexer triggers an automatic sync to your apps, but you can force one and verify every indexer from the API without clicking through each app. The script at the top of this page does exactly that: it fires the ApplicationIndexerSync command, then calls testall and returns one JSON array you can eyeball for any "isValid": false.
Notes
- The API key lives in Settings → General, per app and for Prowlarr itself. Treat it like a password — keep it in your secret store, never paste it into a note or a public repo.
- Sync direction is one-way: Prowlarr → apps. Registering Radarr/Sonarr under Settings → Apps is what enables that; the indexers themselves are only ever configured in Prowlarr.
- If a Cloudflare indexer still fails, confirm the proxy tag and the indexer tag are byte-for-byte identical, and that Prowlarr can actually reach
http://flaresolverr:8191(same Docker network, container name resolves). FlareSolverr is actively maintained — v3.5.0 is current as of this writing. isValid: falseon a test usually means expired credentials, a captcha the indexer added, or a tracker that’s simply down — not a Prowlarr misconfiguration. Re-test after fixing credentials.
Related reading: What the Arr stack is · Deploy the Arr stack · Automating the Arr stack · VPN-shielded torrent stack.
Sources: Prowlarr / Servarr Wiki, Prowlarr API (source), FlareSolverr.