How to Self-Host Prowlarr with Docker
What Is Prowlarr?
Prowlarr is a centralized indexer manager that integrates with the entire *arr stack — Sonarr, Radarr, Lidarr, Readarr, and more. Instead of manually adding and maintaining indexers in each application separately, you configure them once in Prowlarr and it syncs everything automatically. It supports both torrent trackers and Usenet indexers. Official site
Prerequisites
- A Linux server (Ubuntu 22.04+ recommended)
- Docker and Docker Compose installed (guide)
- 500 MB of free disk space
- 256 MB of RAM (minimum)
- At least one *arr app to connect to, such as Sonarr or Radarr
- Indexer accounts (public or private torrent trackers, Usenet indexers, or both)
Docker Compose Configuration
Create a docker-compose.yml file:
services:
prowlarr:
image: lscr.io/linuxserver/prowlarr:2.3.0.5236
container_name: prowlarr
environment:
- PUID=1000 # Your user ID (run `id -u` to find it)
- PGID=1000 # Your group ID (run `id -g` to find it)
- TZ=America/New_York # Your timezone (find yours: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
volumes:
- prowlarr_config:/config # Prowlarr database, settings, and logs
ports:
- "9696:9696" # Web UI
restart: unless-stopped
volumes:
prowlarr_config:
driver: local
Start the stack:
docker compose up -d
Prowlarr’s web UI is now available at http://your-server-ip:9696.
Initial Setup
1. Set Up Authentication
On first launch, Prowlarr requires you to configure authentication. Navigate to Settings > General > Security and set:
- Authentication Method: Forms (Login Page)
- Username: Choose a username
- Password: Choose a strong password
Save and restart the container if prompted.
2. Add Indexers
Go to Indexers > Add Indexer. Prowlarr ships with definitions for hundreds of public and private indexers. Search for your preferred indexer by name and click it.
For each indexer, fill in the required fields:
- Name: A label for your reference
- URL: Usually pre-filled for public trackers
- API Key / Username / Password: Required for private trackers and Usenet indexers
- Categories: Which content categories to search (TV, Movies, Music, etc.)
Click Test to verify the connection, then Save.
3. Connect to Sonarr and Radarr
This is where Prowlarr earns its place in your stack. Go to Settings > Apps > Add Application.
For Sonarr:
- Sync Level: Full Sync (recommended — pushes all indexers and syncs changes automatically)
- Prowlarr Server:
http://prowlarr:9696(if on the same Docker network) orhttp://your-server-ip:9696 - Sonarr Server:
http://sonarr:8989(if on the same Docker network) orhttp://your-server-ip:8989 - API Key: Found in Sonarr under Settings > General > API Key
For Radarr:
- Sync Level: Full Sync
- Prowlarr Server:
http://prowlarr:9696 - Radarr Server:
http://radarr:7878 - API Key: Found in Radarr under Settings > General > API Key
Click Test on each, then Save. Prowlarr immediately pushes all configured indexers to the connected apps.
Shared Docker Network
If your *arr apps run in separate Compose files, create a shared network so they can communicate by container name:
docker network create arr-network
Then add this to each service’s Compose file:
services:
prowlarr:
# ... existing config ...
networks:
- arr-network
networks:
arr-network:
external: true
Do the same for Sonarr, Radarr, qBittorrent, and any other *arr stack containers.
Configuration
Indexer Sync Profiles
Under Settings > Apps, each connected application uses a Sync Profile that controls which indexers sync to it. The default profile pushes all indexers, but you can create custom profiles:
- Go to Settings > Sync Profiles > Add
- Name the profile (e.g., “TV Only” or “Movies Only”)
- Enable or disable specific indexer categories
- Assign the profile to the relevant app connection
This is useful if you have indexers that only carry certain content types — no reason to push a movie-only indexer to Sonarr.
Indexer Proxies
Under Settings > Indexers, you can configure proxies for indexers that require them:
- HTTP Proxy: For indexers behind a firewall or geo-restriction
- Flaresolverr: For indexers protected by Cloudflare challenges (see Advanced Configuration)
- SOCKS5: For routing through a VPN or tunnel
Download Client Integration
Prowlarr can also manage download clients for manual searches. Go to Settings > Download Clients and add your client:
- qBittorrent:
http://qbittorrent:8080with username/password - Transmission:
http://transmission:9091 - SABnzbd:
http://sabnzbd:8080with API key - NZBGet:
http://nzbget:6789with username/password
This lets you grab releases directly from Prowlarr’s search interface without going through Sonarr or Radarr.
Tags
Tags let you control which indexers sync to which apps at a granular level:
- Create a tag under Settings > Tags (e.g., “anime”)
- Apply the tag to specific indexers
- Apply the same tag to the relevant app connection
- Only indexers with matching tags sync to that app
Advanced Configuration
Flaresolverr Integration
Many indexer sites use Cloudflare protection. Flaresolverr acts as a proxy that solves Cloudflare challenges so Prowlarr can access these sites.
Add Flaresolverr to your docker-compose.yml:
services:
prowlarr:
image: lscr.io/linuxserver/prowlarr:2.3.0.5236
container_name: prowlarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- prowlarr_config:/config
ports:
- "9696:9696"
restart: unless-stopped
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:v3.3.21
container_name: flaresolverr
environment:
- LOG_LEVEL=info
- TZ=America/New_York
ports:
- "8191:8191"
restart: unless-stopped
volumes:
prowlarr_config:
driver: local
Then in Prowlarr, go to Settings > Indexers > Add Indexer Proxy > FlareSolverr and set the host to http://flaresolverr:8191.
Indexers that need Cloudflare solving will automatically route through Flaresolverr.
API Access
Prowlarr exposes a REST API for automation. Find your API key under Settings > General > API Key.
Example — search all indexers programmatically:
curl "http://localhost:9696/api/v1/search?query=ubuntu&type=search" \
-H "X-Api-Key: your-api-key-here"
Useful API endpoints:
| Endpoint | Purpose |
|---|---|
/api/v1/indexer | List all configured indexers |
/api/v1/search | Search across indexers |
/api/v1/indexerstats | Indexer performance statistics |
/api/v1/health | Health check for monitoring |
Custom Category Mappings
Some indexers use non-standard category IDs. You can override the default mappings per indexer:
- Edit the indexer under Indexers
- Scroll to Mapped Categories
- Adjust which Prowlarr categories map to which indexer-specific category IDs
This is mainly needed for niche private trackers with unusual category schemes.
Reverse Proxy
To access Prowlarr securely over HTTPS with a domain name, put it behind a reverse proxy. Prowlarr’s web UI listens on port 9696.
Example Nginx location block:
location / {
proxy_pass http://127.0.0.1:9696;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
If using a URL base (subfolder), set it under Settings > General > URL Base before configuring the reverse proxy.
For full reverse proxy setup instructions, see our Reverse Proxy guide.
Backup
Prowlarr stores all its data in the /config volume:
- prowlarr.db — Main database (indexers, app connections, settings)
- logs/ — Application logs
- Backups/ — Prowlarr’s built-in backup files
Built-in Backups
Prowlarr automatically creates backups under System > Backup. By default it keeps 7 daily backups. You can trigger a manual backup from this page or adjust retention under Settings > General > Backups.
Manual Backup
To back up the entire config volume:
docker compose stop prowlarr
tar -czf prowlarr-backup-$(date +%Y%m%d).tar.gz -C /var/lib/docker/volumes/prowlarr_config/_data .
docker compose start prowlarr
Restore
To restore from a built-in backup:
- Stop Prowlarr
- Copy the
.zipbackup file into the config volume - Start Prowlarr and go to System > Backup
- Click Restore on the backup file
For a comprehensive backup strategy, see our Backup 3-2-1 Rule guide.
Troubleshooting
Indexer Test Fails with “Unable to connect”
Symptom: Adding an indexer and clicking Test returns “Unable to connect to indexer” or a timeout error.
Fix: Verify the indexer site is actually online by visiting it in a browser. If it is online, the issue is usually DNS or firewall-related on your server. Check that your container can resolve external DNS:
docker exec prowlarr nslookup example.com
If DNS resolution fails, ensure your Docker daemon has proper DNS configuration in /etc/docker/daemon.json:
{
"dns": ["1.1.1.1", "8.8.8.8"]
}
Restart Docker after changing this file.
Indexers Not Syncing to Sonarr/Radarr
Symptom: You added indexers and connected Sonarr/Radarr, but no indexers appear in the connected apps.
Fix: Check three things in order:
- Sync Level — Under Settings > Apps, verify the app connection uses “Full Sync,” not “Disabled.”
- API Key — Re-enter the API key from the target app. A wrong key silently fails.
- Network connectivity — If apps are in separate Docker networks, they cannot reach each other by container name. Use the shared network approach described in the Initial Setup section, or use the host IP instead.
Check System > Tasks > Sync Indexers and run it manually to trigger an immediate sync.
Cloudflare-Protected Indexers Return 403
Symptom: Some indexers fail with HTTP 403 or “Cloudflare challenge” errors.
Fix: These indexers require Flaresolverr. Follow the Flaresolverr setup in the Advanced Configuration section. After adding Flaresolverr as an indexer proxy, re-test the failing indexers.
If Flaresolverr itself is having issues, check its logs:
docker logs flaresolverr
Common Flaresolverr issues include running out of memory (it uses a headless browser) — allocate at least 512 MB of RAM for it.
High CPU Usage During Searches
Symptom: Prowlarr spikes CPU usage when running searches, especially with many indexers configured.
Fix: Reduce the number of simultaneous indexer queries. Under Settings > Indexers, check the Maximum Simultaneous Requests setting per indexer and lower it. Also remove any indexers you no longer use — every configured indexer gets queried on every search.
App Connection Shows “Unable to connect” After Working Previously
Symptom: A previously working Sonarr or Radarr connection now shows an error.
Fix: The target app likely restarted and its API key or IP changed. Verify:
- The target app is running:
docker ps | grep sonarr - The API key has not changed (check in the target app’s Settings)
- The container IP has not changed (use container names instead of IPs to avoid this)
If you are using container names, ensure both containers share the same Docker network.
Resource Requirements
- RAM: 150 MB idle, 300 MB during active searches (add 512 MB if running Flaresolverr)
- CPU: Low — spikes briefly during searches but negligible at idle
- Disk: Under 100 MB for application data (config, database, logs)
Prowlarr is one of the lightest apps in the *arr stack. It runs comfortably on a Raspberry Pi 4 or any low-power server.
Verdict
Prowlarr is a must-have if you run more than one *arr app. The moment you have both Sonarr and Radarr, managing indexers individually becomes tedious — add Prowlarr and you configure each indexer exactly once. It syncs everything to all connected apps automatically, and adding a new indexer takes seconds instead of repeating the same setup across multiple services.
If you only run a single *arr app, Prowlarr is still worth it for the cleaner indexer management interface and the Flaresolverr integration. But the real payoff comes at scale: add Lidarr for music, Readarr for books, and Bazarr for subtitles, and Prowlarr keeps all of them fed with indexers without any extra work.
Skip Prowlarr only if you exclusively use a single *arr app with one or two indexers that never change. Everyone else should deploy it.
Related
- How to Self-Host Sonarr with Docker Compose
- How to Self-Host Radarr with Docker Compose
- How to Self-Host qBittorrent with Docker
- How to Self-Host Bazarr with Docker
- Sonarr vs Radarr
- Sonarr vs Prowlarr
- Jackett vs Prowlarr
- Prowlarr vs Jackett
- Docker Compose Basics
- Reverse Proxy Setup
- Backup Strategy
- Docker Networking
Get self-hosting tips in your inbox
New guides, comparisons, and setup tutorials — delivered weekly. No spam.