Daily threat feed subscription

The whole phishing database, delivered every morning

A complete, DNS-verified export of 390,000+ active phishing domains as CSV or JSON, rebuilt and published at 04:30 UTC with a per-day changelog. Built for the enforcement points that cannot make an API call per request.

390K+Domains in every export
04:30 UTCDaily publication time
3Columns: domain, category, DNS
$499Per month, cancel anytime
CSV and JSON formats Daily added / removed changelog Active A record required API pull or dashboard download Historical snapshot archive Unlimited feed downloads
Why a bulk feed

Some enforcement points cannot afford a network round trip

A recursive DNS resolver answering thousands of queries a second has no budget for an outbound HTTPS call per name. Nor does a firewall evaluating a rule at line rate, nor an isolated analysis host with no route to the internet at all. These are exactly the places where a phishing block is most valuable, because they cover every device on the network regardless of what application generated the traffic.

The feed exists for those places. The whole list lives inside your perimeter, enforcement becomes a local set-membership test, and no query about your users' browsing ever leaves the network — the answer for any assessment that rules out a per-request external call.
  • No per-query cost and no per-query latency once the file is loaded.
  • No runtime dependency on reachability — the list keeps working if the link drops.
  • Nothing about your traffic is transmitted, because the data only moves one way.
  • Three columns, no nesting, so it loads into anything that can parse a CSV.
phishing_domains.csv
# fetched 04:41 UTC
domain,category,dns_status
0-105.com,phishing/malware,resolves
0-amazon.weebly.com,phishing/malware,resolves
0-amfc.firebaseapp.com,phishing/malware,resolves
00-ede.pages.dev,phishing/malware,resolves
000-access-secure.web.app,phishing/malware,resolves
001-ede.pages.dev,phishing/malware,resolves
002-s.pages.dev,phishing/malware,resolves
... 390,000+ more rows

# changelog_2026-07-27.csv
action,domain
added,secure-verify-login.pages.dev
added,account-hold-review.web.app
removed,expired-notice-portal.example
Contents

Six things arrive with every subscription

Everything below is included from the first month. There is no add-on tier for the changelog or for the API pull.

Full domain database

A complete CSV containing every actively-resolving phishing domain in the database, categorised and DNS-verified. Currently 390,000+ domains and growing with each daily build.

Daily changelog

A separate file showing exactly which domains were added and removed each day. Ideal for incremental updates to a blocklist you do not want to reload in full every morning.

DNS verified

Every domain is verified via DNS resolution through rotating proxy infrastructure. Only hosts with an active A record are included, so there is no stale data to filter out yourself.

24-hour updates

The database is refreshed daily at 04:30 UTC. New phishing domains are ingested from threat-intelligence feeds and verified before they are allowed into the export.

API and download access

Pull the file programmatically from /api/v1/feed or download it by hand from the dashboard. Both are included, and feed downloads are unlimited.

Historical archive

Access to previous daily snapshots for trend analysis, research and compliance auditing — the way you reconstruct what was known on the day an incident happened.

Sample rows

What the file actually looks like

Three columns, one row per host, no nesting and no quoting surprises. Here are the first seven rows of a real export.

DomainCategoryDNS status
0-105.comphishing/malwareresolves
0-amazon.weebly.comphishing/malwareresolves
0-amfc.firebaseapp.comphishing/malwareresolves
00-ede.pages.devphishing/malwareresolves
000-access-secure.web.appphishing/malwareresolves
001-ede.pages.devphishing/malwareresolves
002-s.pages.devphishing/malwareresolves
… 390,000+ more domains in the full feed.

Read those hostnames again. Four of the seven are subdomains of platforms with impeccable reputations — weebly.com, firebaseapp.com, pages.dev, web.app. Any control that reasons about the registrable parent domain, or about how popular a site is, will wave all four straight through. Host-level enforcement is not a refinement here; it is the entire point.

Subscription

Feed subscription plans

Three ways to buy the same daily export. The differences are commitment length, archive depth and delivery flexibility.

Monthly

$499/mo

Rolling monthly subscription.

  • Full phishing domain database
  • Daily updates at 04:30 UTC
  • Daily changelog
  • CSV download + API access
  • Email support
  • Cancel anytime
Subscribe Monthly

Enterprise

Custom

Tailored to your organisation.

  • Everything in Annual
  • Custom delivery (SFTP, S3)
  • STIX/TAXII format
  • Custom update frequency
  • SLA guarantee
  • On-premise deployment
Contact Sales
pull_feed.sh / load_feed.py
# Download the latest feed via cURL
curl -o phishing_domains.csv \
  "https://phishingdetectionapi.com/api/v1/feed?apikey=YOUR_KEY"

# Python: download and load into a set
import requests, csv, io

resp = requests.get(
    "https://phishingdetectionapi.com/api/v1/feed",
    params={"apikey": "YOUR_KEY"}
)
reader = csv.DictReader(io.StringIO(resp.text))
phishing_domains = {
    row["domain"] for row in reader
}
print(f"Loaded {len(phishing_domains)} domains")

# Cron: daily update at 05:00 local
# 0 5 * * * /usr/bin/curl -o /etc/blocklists/phishing.csv \
#   "https://phishingdetectionapi.com/api/v1/feed?apikey=KEY"
Integration

Pull it straight into the infrastructure you already run

The feed endpoint is an ordinary authenticated GET that returns a file. There is no handshake, no pagination and no state to track between runs, so the entire client is a cron line and a loader. Schedule the pull for shortly after 04:30 UTC and the enforcement layer is never more than a day behind the pipeline.

Where you load it decides what it covers. Resolver policy zones catch every device on the network; firewall categories catch everything routed through the perimeter; an application-side set gives the fastest test of all, with no network hop.
  • Automate with cron or any scheduled-task runner.
  • Import into Splunk, QRadar or any SIEM as a lookup table.
  • Feed into a DNS sinkhole — Pi-hole, Bind or Unbound.
  • Update firewall blocklists automatically each morning.
Daily cycle

One day in the life of the feed

Every build follows the same five stages, and the file you download is the output of the fifth.

Stage 1 — ingest

Candidates arrive from collection

Newly reported phishing hosts are pulled from curated threat-intelligence feeds including phish.co.za and other OSINT sources. At this point the set is a raw list of names with no guarantee that any of them are still serving anything.

Stage 2 — verify

Fifty threads resolve every candidate

Each name is resolved through rotating proxy infrastructure using 50 concurrent threads with a ten-second timeout. Only hosts returning an active A record survive. This is the stage that decides whether the export is enforceable or merely interesting.

Stage 3 — classify

Deduplicate, label, diff

Survivors are deduplicated and labelled phishing/malware, then diffed against the previous day's build. That diff is the changelog: every domain that entered the list and every domain that left it, with no reconciliation work required at your end.

Stage 4 — 04:30 UTC

The export is published

The verified set is written out as CSV and JSON and the API index is swapped over in the same pass, so a lookup and a feed row can never disagree about the state of a domain. The previous export is retained in the archive.

Stage 5 — your side

Your cron pulls and your resolver reloads

A scheduled job downloads the file, transforms it into whatever format your enforcement point expects, and reloads. From that moment every device behind that resolver or firewall fails to reach every domain on the list, with no application changes and no per-query cost.

Questions

What subscribers ask before the first pull

Five practical answers about sizing, format and how the feed sits next to per-lookup credits.

Do I need API credits as well as a feed subscription?

Only if you also want interactive lookups. The feed subscription covers unlimited downloads of the full export and the changelog; it does not consume credits, and credits are not required to use it. The Annual plan includes 100,000 API credits so you can run both models without a second purchase.

Most subscribers do exactly that — feed for network-layer enforcement, credits for the one-off questions an analyst or an application asks. Packs are on the pricing page and compared on the credit packages page.
How large is the file, and how long does a pull take?

It is a three-column CSV with one row per domain and no quoting overhead, so the size is dominated by the domain strings themselves across 390,000+ rows. It is a single ordinary HTTP download, not a paginated API walk, which is why the whole pull is one cron line.

Want only the delta? Pull the changelog instead of the full export. That is the recommended pattern once the initial load is in place — transfer and reload shrink to the handful of domains that actually changed.
What formats are available?

CSV by default and JSON on request, both from the same /api/v1/feed endpoint using the format parameter. The CSV columns are domain, category and dns_status, which map cleanly onto an RPZ zone file, a firewall URL category or a SIEM lookup table with a short transform script.

Enterprise adds STIX/TAXII output and custom delivery over SFTP or S3, for environments where an outbound HTTPS pull is not the shape the architecture wants.
How current is the data at the moment I pull it?

The build publishes at 04:30 UTC, so a pull scheduled just after that is working with a set that was resolved and verified hours earlier at most. Schedule the job for 05:00 UTC and you will never be more than one build behind.

Need sub-daily freshness for specific domains? That is what the lookup endpoints are for. API and feed come from the same build, so combining them never yields contradictory answers.
What happens to a domain that gets taken down?

It stops resolving, fails the verification stage on the next build, and is removed from the export. It appears in that day's changelog under removals, so your incremental loader drops it without you writing any expiry logic.

Deliberate: a blocklist that only ever grows eventually contains reclaimed domains belonging to somebody legitimate. Pruning on failure to resolve is what keeps this one safe to point a production resolver at.

Start protecting your network tomorrow morning

Subscribe today, schedule the pull for 05:00 UTC, and your resolver will be refusing 390,000+ verified phishing hosts before the first user logs in.