Free SPF checker — no account, no card
Does your SPF record still authorise your own mail?
We read your published record, count the DNS lookups it costs, and flag the mechanisms that quietly let anyone send as you. DKIM, DMARC, MX and blacklists come with it, in the same run.
What we read in your SPF record
The five ways an SPF record fails.
SPF in one minute
A list of who is allowed to send as you.
SPF is a TXT record on your domain naming the servers permitted to send your mail. Receivers read it, compare it to the server that actually connected, and score you on the answer.
A healthy record
v=spf1 include:_spf.google.com include:sendgrid.net ~all
The 10-lookup limit is the one that bites. Each
include: costs a DNS lookup, and the includes have
includes of their own. Google alone spends three. Add a CRM, a helpdesk and a newsletter tool and
you are over ten — at which point SPF returns permerror and receivers treat your mail as if you had
published nothing at all. Nothing warns you. It just starts failing.
The last mechanism is a policy, not decoration.
~all means "anything else is suspicious",
-all means "anything else is forged", and
+all means "anyone on earth may send as me" — which
is worse than having no record, and more common than you would think.
The ten-lookup ceiling
Why includes quietly nest past the limit.
Every include:, a:,
mx:, ptr and
exists: costs a DNS query, and the count is cumulative across
every level of nesting — not per line, per record.
How four vendors spend eleven lookups
include:_spf.google.com → 4 (nested)
include:spf.protection.outlook.com → 3
include:mailgun.org → 2
include:_spf.brevo.com → 2
─────
11 → permerror
Permerror is not a soft fail. It is a structural
error that tells the receiver your record is broken, and a broken record authenticates nothing —
every message is scored as if you had published no SPF at all. Google spends three or four lookups
behind a single include; Microsoft 365's
spf.protection.outlook.com resolves cleanly today but
Microsoft has widened it before without notice. You do not have to be careless to cross ten. You
just have to add a CRM, a helpdesk and Mailchimp.
Flattening buys lookups back, and freezes a moving target.
Replacing includes with the raw ip4: ranges they resolve
to today drops your count — but Google, SendGrid and Amazon SES rotate their sending ranges, and the
day one adds an address your flattened record has never heard of, that mail fails SPF with no include
left to keep it current. Flatten only what you control, or what a service keeps in sync for you.
Envelope vs the visible From
SPF checks an address your reader never sees.
There are two sender addresses on every message. SPF only ever looks at one of them, and it is not the one that appears in the inbox.
Two different From addresses
MAIL FROM: [email protected] ← SPF checks this From: [email protected] ← your reader sees this
SPF authenticates the envelope, not the header. The
MAIL FROM is the return-path the sending server hands
over during the SMTP conversation — invisible to recipients. The
From: they actually read is a separate field written
into the message itself, and SPF never inspects it.
This is the gap spoofers walk through. A forger
sends from a domain they own, passes SPF on that domain perfectly, and drops your domain into the
visible From:. SPF passes. The forgery lands. Closing
that gap is DMARC's job — it demands the domain SPF authenticated align with the name your reader
sees. On its own, SPF proves a server was allowed to send. Not that the name on the letter is real.
What we flag beyond the count
Six mistakes hiding in a record that "works".
A record can parse, resolve and still be wrong. These pass a glance and cost you later.
Two records. More than one
v=spf1 string is a permerror on its own — receivers ignore
both. Merge into a single record with one all mechanism.
The ptr mechanism. It does a reverse DNS lookup on the connecting IP, is slow and unreliable, and the specification explicitly tells receivers they may skip it. Delete it.
+all. A record ending in
+all authorises every server on the internet to send as
you. It is almost always a copy-paste accident, and it is worse than publishing nothing.
Dangling includes. An
include: for a vendor you stopped using still resolves,
still burns a lookup, and still authorises their entire estate to send under your name.
Hand-written macros. Macros like
%{i} and %{d}
are valid, and outside the handful of ESPs that generate them for you, almost always a mistake — usually
a hidden exists: lookup you did not intend.
Whitelisting whole blocks. Authorising a provider's
entire /8 to make a stubborn sender work hands sending
rights to every tenant on that network — shared-host neighbours included.
What DNS shows, and what it cannot
A checker reads the record. Only mail reads the traffic.
Half of SPF is structural and readable from DNS this second. The other half is behaviour, and it lives in the mail itself.
From DNS alone we can prove a lot. Whether a record
exists, whether there is exactly one, how many lookups it will cost, which mechanism ends it, and whether
every include: still resolves. That is the half you fix
today by editing a TXT record.
What DNS cannot show is behaviour. Which of your senders
actually pass SPF in real mail, whether a passing sender is aligned with your
From:, and who is spoofing you right now. That lives in the
traffic, and only DMARC aggregate reports collect it. A checker tells you the record is sound. The
reports tell you the record is true.
Common questions
About SPF, specifically.
How it works
Real DNS queries, not a cached database.
We query your records live, the way Gmail or Outlook would at the moment of delivery. What you see is what receivers see.
- 1 You enter a domain. No verification needed — the records we read are public DNS, the same ones every mail server reads.
- 2 We run ~90 live queries. DNS records, selector probes, and one lookup per blacklist — about 40 seconds in total.
- 3 Every finding is scored and explained. Problems that cost you deliverability today, watches that will — each with numbered steps to fix it.
- 4 The report gets its own link. It stays at that URL: send it to your host, your IT provider or your client instead of a screenshot. Public DNS only — we store the answers, never your mail.
The other free checks