Pre-optimized, deduplicated blocklists for Pi-hole
Note
New — nsfw_abp.txt, a subdomain-blocking NSFW list. An ABP-format version of nsfw.txt that blocks adult domains and all their subdomains (e.g. cdn.example.com as well as example.com) for more complete filtering. Requires Pi-hole Core ≥ 5.16 / FTL ≥ 5.22. See Available Lists.
Looking for more features? Check out Zach's Lists — a full-featured blocklist platform with custom source selection, smart whitelisting, and multiple output formats.
| List | Description | Domains |
|---|---|---|
| all_domains.txt | Everything combined (except NSFW) | 2,985,495 |
| advertising.txt | Ad networks & services | 102,920 |
| tracking.txt | Analytics & telemetry | 14,985 |
| malicious.txt | Malware, phishing, scams | 2,706,179 |
| suspicious.txt | Potentially unwanted | 75,484 |
| comprehensive.txt | Curated multi-category | 426,470 |
| nsfw.txt | Adult content (separate) | 513,953 |
| nsfw_abp.txt | Adult content — ABP format, blocks subdomains too | 513,953 |
Note:
nsfw.txtis not included inall_domains.txtbecause it blocks legitimate adult sites. Add it separately if you want NSFW blocking.nsfw_abp.txtis the same domains in ABP form (||domain^) so subdomains are blocked too — use it instead ofnsfw.txtfor more thorough filtering (needs Pi-hole Core ≥ 5.16).
Last updated: August 02, 2026
- Go to Pi-hole admin → Settings → Adlists
- Add the raw URL for your chosen list(s)
- Run
pihole -gto update
The lists may include ABP-style entries (
||domain^) that block a domain and all its subdomains. These require Pi-hole Core ≥ 5.16 / FTL ≥ 5.22 (released 2023; standard on current installs). Note thatpihole -qwon't enumerate the individual subdomains covered by an ABP entry.
Found a domain that should be blocked or a false positive? Open an issue using one of the templates:
- Block Domain — request a malicious, ad, tracking, or suspicious domain to be blocked
- False Positive — report a legitimate domain that's being incorrectly blocked
- Bug Report — report a problem with the lists or automation
The maintainer reviews each report, verifies it, and opens a PR. Once merged, the change takes effect on the next weekly update.
What's the difference between this and Zach's Lists?
This repository provides static, pre-built blocklists updated weekly. Zach's Lists offers additional features:
- Custom source selection — pick which blocklists to include
- Smart whitelisting — regex, wildcards, subdomain patterns
- Multiple formats — hosts, plain, and Adblock syntax
- Real-time build progress
Both use the same underlying sources and are maintained by the same person.
How often are these lists updated?
Every Sunday at midnight UTC via GitHub Actions. Community-reported domains are included once their PR is merged before the next run.
Which list should I use?
- comprehensive.txt — Good balance for most users
- all_domains.txt — Maximum blocking (may cause false positives)
- Individual category lists — If you want granular control
How do community-reported domains work?
Domains reported via issues are added to custom/<category>.txt files in the repo. These are referenced as sources in blocklists.conf via raw GitHub URLs, so the optimizer picks them up on the next weekly run just like any other upstream source.
See CONTRIBUTING.md for details on how to report domains, submit PRs, and use the automated workflows.
Thanks to everyone who supports this project.
One-Time
MIT License — see LICENCE for details.