Free SPF Checker
Validate SPF syntax, count DNS lookups, inspect include/redirect chains, and find SPF flattening risks before mail starts failing DMARC.
Run the check
Enter a domain to check it live against the IntoDNS.ai engine. No signup, no trial gating.
What this SPF checker verifies
This tool fetches the SPF TXT record published at your root domain and evaluates it the way a receiving mail server does under RFC 7208. It confirms the record starts with v=spf1, validates every mechanism (ip4, ip6, a, mx, include, exists, redirect) for correct syntax, and recursively resolves each include and redirect to build the full lookup graph. It reports the total DNS-lookup count against the hard limit of 10, identifies the final qualifier on all (-all, ~all, ?all, or +all), and flags multiple-SPF-record conflicts that cause a permanent error.
Why SPF matters for deliverability
SPF is one of the two authentication methods DMARC relies on. If SPF fails or breaks alignment, your mail leans entirely on DKIM to satisfy DMARC — and if both fail, a p=reject policy will bounce legitimate mail. The most common silent failure is the 10-lookup limit: large include chains from ESPs (Google, Microsoft 365, SendGrid, Mailchimp) quietly push you past 10 nested lookups, which returns PermError. Receivers treat PermError as a hard SPF failure, so messages that should pass start landing in spam or getting rejected with no obvious cause.
How to read the result
A healthy record shows 10 or fewer lookups, valid syntax, and -all as the policy. ~all (softfail) is acceptable while you are still confirming every sender, but it tells receivers to accept unauthenticated mail and merely mark it suspicious — move to -all once your sender list is complete. ?all (neutral) and +all (pass) offer no protection; +all is effectively an open invitation to spoof your domain. If the lookup count is at or above 10, treat it as urgent: SPF is either failing now or one include change away from failing.
Common failure causes and fixes
Too many lookups is the headline problem — fix it by replacing include mechanisms you control with explicit ip4:/ip6: ranges (which cost zero lookups), removing senders you no longer use, or flattening the record. A second frequent issue is two separate v=spf1 TXT records on the same name, which invalidates both; merge them into one. Watch for a missing all term (treated as neutral), use of the deprecated ptr mechanism, and includes that themselves have broken or empty records. After any change, re-run this checker, then verify alignment in the full report.
SPF, DKIM, and DMARC together
SPF never works in isolation. DMARC only passes when SPF or DKIM both authenticates and aligns with the visible From domain, so a technically valid SPF record can still leave DMARC failing if the Return-Path domain differs from the From domain — a common situation when an ESP sends on your behalf. That is why the practical workflow is: get SPF clean and within the lookup limit here, confirm DKIM is signing and aligned with the DKIM checker, then verify the combined result in DMARC. Treat this checker as the first of three steps, not a finish line, and use the full deliverability test to confirm all three line up before tightening any policy.
What This Checks
- SPF TXT record discovery at the root domain
- Syntax and mechanism validation
- Recursive include and redirect lookup graph
- 10 DNS lookup limit risk
- Dangerous policies such as +all or weak softfail defaults
Common Fix Path
- Merge multiple SPF records into one TXT record
- Remove unused include mechanisms
- Replace high-risk includes with controlled IP ranges only when you own the sender list
- Move toward -all once every legitimate sender is covered
Frequently Asked Questions
What is the SPF 10 DNS lookup limit?
Should I use -all or ~all?
Why does this checker say my SPF is failing when the record looks fine?
Can I have more than one SPF record?
What is SPF flattening and do I need it?
Does SPF on its own stop spoofing?
Machine-Readable Evidence
AI assistants and automation can cite the stable explanation page, then fetch the live check result for a specific domain.
GET https://intodns.ai/api/email/spf?domain=example.com