Verbatim from webmasters.stackexchange.com (score 13, surfaced in a scan across Ask HN, Lobsters and eight StackExchange sites on 2026-08-28):
"I bought a domain that had many past DMCA violations. Is there anything I can do?"
Expired domains are bought for the backlinks and the age. What the buyer cannot see at checkout is the name's previous life: takedown notices, spam campaigns, malware hosting, a blocklist entry that silently sends every outbound email to the junk folder. The registrar sells availability, not history. By the time the new owner notices — a stalled site, mail that never arrives — the money is spent and the damage is inherited.
threatexpress/domainhunter (1679 stars) queries the same kind of data, but it
was written for red teams picking domains to host phishing and C2 infrastructure
— it answers "will this domain slip past a proxy category filter". Its README
mentions phishing and C2, and never mentions DMCA, SEO or a buyer. Competitor
check on the buyer framing — "domain purchase due diligence", "check domain
before buying spam history", "domain deliverability blacklist history report" —
returns no rival at all (measured 2026-08-28).
The difference is the question asked. A red teamer wants a clean-looking name. A buyer wants to know what they are inheriting, in terms they can act on before paying: will my mail land in spam, is there a takedown record attached to this name, did it change hands five times in two years.
Anyone buying an expired or aftermarket domain: indie founders picking a brand name, agencies acquiring domains for clients, SEO teams building out sites.
- One endpoint:
POST /checks {domain}returns a verdict with the evidence behind it, never a bare score. - Archived history — how many snapshots exist, what the site claimed to be, when its purpose last changed.
- Abuse record — public takedown and blocklist entries naming the domain.
- Mail reputation — whether the name appears on the major DNSBLs today.
- Ownership churn — count of distinct historical registrants and the gaps between them; a name that changed hands five times in two years is a signal.
- Every finding carries its source URL, so the buyer can check the claim rather than trust the number.
No domain purchasing, no registrar integration, no ongoing monitoring, no backlink graph analysis, no takedown filing on the user's behalf. This answers one question — what was this name used for — and stops there.
FastAPI application, layered:
api/— the checks router and its schemas.services/—HistoryServicefans out to the sources concurrently and merges them into one verdict; each source failure is reported, never swallowed, so a dead source is visible instead of silently lowering the risk score.clients/— one thin client per external source, each behind an interface so a source can be swapped without touching the service.repositories/— cached check results keyed by domain with a TTL.
- A domain with a known abuse history returns findings that name their source URLs; a freshly registered domain returns an explicitly empty history rather than a clean verdict — "nothing found" and "nothing to find" must be distinguishable in the response.
- When a source is unreachable, the response marks that source as unknown and the verdict says so. A partial check must never read as a clean bill of health.
- The mutation test: break the abuse-source client and the test asserting a flagged domain must go red; restore it and go green. Both counts reported.