notspoofed.com SPF · DKIM · DMARC

About

A free set of email authentication tools, built because the existing free checkers tell you what is broken and stop there.

What we found when we measured it

In August 2026 we scanned every domain in the Y Combinator company directory — 6,157 domains — reading each one's public DNS records directly, and repeated the whole scan on 3 September. 60.5% of them can be email-spoofed today: they publish no DMARC record, or one set to p=none, which asks receivers to do nothing. Nearly a third are at p=none specifically, which means somebody set DMARC up and stopped one setting short of the one that protects them.

The finding we did not expect is that it has not improved. A company founded in 2025 is as likely to be spoofable as one founded in 2013, and the newest arrivals are worse than the population they join. Enforcement is not something organisations grow into; it happens when somebody decides to do it.

Both runs are published in full, with the method, the exclusions and every row we corrected by hand: the study, and the raw CSVs under CC BY 4.0. Failed lookups are reported as unknown and excluded from the percentages rather than counted as absent — that single distinction moved the headline figure by four and a half points, which is roughly the size of the error in a scan that treats a DNS timeout as a missing record.

Why it exists

Since February 2024, Google and Yahoo have required SPF, DKIM and DMARC from anyone sending them mail in volume. A lot of organisations discovered at that point that they had no idea what any of those were.

There is no shortage of tools that will tell you your SPF record exceeds the ten-lookup limit. There are very few that hand you a corrected record. That gap is the whole reason this exists: every finding here ends in something you can publish or a specific action, not a description of the problem.

What it checks

What it deliberately will not tell you

Overclaiming is how tools in this space lose trust, so these limits are stated here as well as in the results:

“No DKIM found” is not proof that DKIM is missing
Selectors cannot be listed from DNS. We try 50 common ones and say so. Some providers — Amazon SES among them — use random selectors that are unguessable by construction.
SPF lookup counts are worst-case
A real evaluator stops at the first match, so a sender listed early may never reach term eleven. We count the full walk, because the sender that breaks is the one in the last include.
SPF macros are counted but not resolved
Terms like exists:%{i}… expand using the connecting server's address. There is no honest static answer, so they are reported as unevaluable rather than guessed.
A refused blocklist query is never reported as “not listed”
Some lists decline queries under certain conditions. When that happens you get “unknown”, because a false all-clear on a tool people reach for mid-incident is worse than no answer.
A clean result is not a guarantee of delivery
Dozens of private blocklists exist, and every mailbox provider runs internal reputation scoring that is invisible from outside. This checks configuration, which is necessary but not sufficient.

What it records about you

No cookies, no third-party scripts, no advertising, no accounts. The pages load no JavaScript at all except the header analyzer, which needs it to parse in your browser.

The domains, headers and addresses you check are never stored. Header analysis never leaves your browser at all, and the domain you type into the checker is used to make DNS queries and then discarded — it is not written to any log, counter or database, and it is not sent to the analytics described below.

Two things do get written down, and both live on this same server.

Daily counters. How many times each page was viewed and how many checks ran, as running totals per day. No addresses, no identifiers, nothing per visitor. Kept for 90 days.

A self-hosted Umami instance for a more detailed breakdown than a counter can give. It runs on this server, not a third party's — no data goes to Google, Cloudflare or anyone else — and because this site loads no analytics script, the page view is reported by the server rather than by your browser. That is why there is no cookie and nothing to consent to. For each page view it records:

Your IP address itself is not stored. It is used to work out the country and to compute that hash, and then dropped — there is no column for it. But the hash is stable rather than rotating, so two visits from the same network and browser are recognisable as the same visitor over time. That is a pseudonym, not anonymity, and it would be dishonest to describe it as the latter.

You do not have to take any of this on trust. The whole site is open source under the MIT licence. The counters are in stats.ts and everything sent to Umami is in umami.ts — two files, both short. What no public repository can prove is that the running server matches the published code. It does mean the claim is specific enough to be checked, and wrong enough to be called out if it were false.

That is not a hypothetical. Referrer URLs were being forwarded to Umami complete with their query strings, so a visitor who moved from a result page to a guide handed over the domain they had just checked — contradicting the promise at the top of this section. It was found on 3 August 2026, fixed the same day, and the affected rows were deleted. It is written up here rather than quietly corrected because a privacy page that only ever reports good news is not worth reading.

Reporting a wrong result

Please do. Correctness is the entire value here, and a checker that is confidently wrong is worse than no checker. Several bugs have already been found by pointing the tools at domains whose real configuration was known.

Email hello@notspoofed.com with:

That last line matters most — the useful reports are the ones that say “the record actually reads X, here is the dig output”.

Who runs it

One person — Jose Pollman — independently, on a single server. It is not backed by a vendor and does not sell your results to one. There is no upsell in the findings: where a commercial product genuinely is the right answer — DMARC report monitoring, for instance — it says so plainly rather than steering you somewhere.

The checks are built directly against the RFCs (7208 for SPF, 6376 for DKIM, 9989 and 9990 for DMARC, 8461 for MTA-STS) and tested against a corpus of real domains whose configuration is verified independently. DMARC moved to 9989 in May 2026, which deprecated pct=, added np= and t=, and replaced the Public Suffix List with a DNS tree walk — the checks follow it rather than the superseded RFC 7489.

Written elsewhere

Two pieces that cover the reasoning behind the tools at more length than a results page can:

Contact

hello@notspoofed.com — bug reports, corrections, and requests for a higher API rate limit if you are building something.