SPF Analyzer.
Verify your Sender Policy Framework records in real-time. Detect lookup overflows, syntax errors, and IP misconfigurations before they impact your deliverability.
Check live DNS records and review lookup pressure before delivery breaks.
Example SPF records
Three real-world SPF records covering the three patterns you will see on production domains: a single-provider record, a record that uses include= to authorize multiple sending services, and a tightly-scoped IP-based record. The hard rule on every one of these is the 10-DNS-lookup limit — go past it and SPF returns PermError.
example.com TXT v=spf1 include:_spf.google.com -all
example.com TXT v=spf1 include:spf.protection.outlook.com include:_spf.salesforce.com include:sendgrid.net -all
example.com TXT v=spf1 ip4:192.0.2.0/24 ip6:2001:db8::/32 ~all
Every SPF mechanism and qualifier, explained
-
includeAuthorize another SPF chain - Defers authorization to another domain's SPF record. The most common mechanism for SaaS senders. Every include= burns one of your 10 DNS lookups — and the included chain may burn more. include:_spf.google.com
-
ip4Authorize an IPv4 range - Authorizes a specific IPv4 address or CIDR block. Costs zero DNS lookups, so prefer this over include= when you know the sender's static IPs. ip4:192.0.2.0/24
-
ip6Authorize an IPv6 range - IPv6 equivalent of ip4. Also zero DNS lookups. Cloud providers (Azure, GCP) increasingly send over IPv6 — include both ip4 and ip6 for the same range when possible. ip6:2001:db8::/32
-
aAuthorize the A records - Authorizes whatever IPs the host's A record currently points at. Costs one DNS lookup. Useful for domains whose web server also sends transactional mail. a:mail.example.com
-
mxAuthorize the MX records - Authorizes the host's MX records as senders. Costs one DNS lookup plus one for each MX returned. Largely a legacy mechanism — modern SaaS senders publish via include= instead. mx
-
existsConditional authorization - Authorizes the connecting IP if a specific DNS query returns ANY answer. Used for IP-block-based whitelists. Rarely seen in production. exists:%{i}.spf.example.com
-
redirectReplace the whole record - Delegates the entire SPF evaluation to another domain. The redirect target supplies the final qualifier. Used by managed SPF services to keep your apex record short and let the vendor manage the chain. redirect=spf.vendor.com
-
-allHard fail (qualifier) - Hard-fails any sender not authorized by the mechanisms above. Best at SMTP-time rejection, but breaks legitimate forwarded mail (Mailman, fwd-as-attachment). -all
-
~allSoft fail (qualifier) - Soft-fails (treats as suspicious) any unauthorized sender. Recommended when DMARC is at p=reject — DMARC enforces alignment, SPF stays safe for legitimate forwarders. ~all
-
?allNeutral (qualifier) - No opinion on unauthorized senders. Effectively the same as having no SPF record at all from the receiver's perspective. Do not use in production. ?all
-
+allPass everything (qualifier) - Authorizes every sender on the internet. A configuration mistake, almost always — it means anyone can spoof your domain via SPF. The checker flags this as an error. +all
Common SPF mistakes and how to fix them
These are the six failure modes the SPF analyzer catches most often. Every one silently breaks deliverability or, worse, leaves the domain wide open to spoofing.
| Issue | What it means | How to fix it |
|---|---|---|
|
Too many DNS lookups (>10)
|
SPF burns DNS lookups for every include=, a, mx, ptr, exists and redirect=. RFC 7208 caps the total at 10. Past that, receivers return PermError and SPF effectively fails. | Collapse include= chains, switch to ip4: / ip6: where IPs are known, or use a flattening service. |
|
Multiple SPF records
|
More than one TXT record starting with v=spf1 exists at the apex. Receivers return PermError and ignore both. | Merge them into one. Every authorized sender must be in a single v=spf1 record. |
|
Permanent +all qualifier
|
The record ends with +all, authorizing every sender on the internet. The domain is fully spoofable from an SPF perspective. | Change to -all (strict) or ~all (soft-fail). Only specific apex SPF records (e.g. SaaS vendor lists) should ever use +all. |
|
Void lookups
|
An include= or a mechanism points at a host with no SPF record. RFC 7208 caps void lookups at 2 — past that, evaluation fails. | Remove the offending include= or update the target host so it publishes SPF. |
|
Missing sending service
|
A legitimate sender (marketing platform, transactional service, support desk) is not authorized. Mail from that sender fails SPF and may fail DMARC alignment too. | Add the vendor's recommended include= to your SPF record. Watch the lookup count. |
|
No final qualifier
|
The record ends with neither -all, ~all, nor ?all. Receivers default to neutral. | Append -all or ~all to the end of the record. Without it, SPF effectively does nothing for unauthorized senders. |
- What it means
- SPF burns DNS lookups for every include=, a, mx, ptr, exists and redirect=. RFC 7208 caps the total at 10. Past that, receivers return PermError and SPF effectively fails.
- How to fix it
- Collapse include= chains, switch to ip4: / ip6: where IPs are known, or use a flattening service.
- What it means
- More than one TXT record starting with v=spf1 exists at the apex. Receivers return PermError and ignore both.
- How to fix it
- Merge them into one. Every authorized sender must be in a single v=spf1 record.
- What it means
- The record ends with +all, authorizing every sender on the internet. The domain is fully spoofable from an SPF perspective.
- How to fix it
- Change to -all (strict) or ~all (soft-fail). Only specific apex SPF records (e.g. SaaS vendor lists) should ever use +all.
- What it means
- An include= or a mechanism points at a host with no SPF record. RFC 7208 caps void lookups at 2 — past that, evaluation fails.
- How to fix it
- Remove the offending include= or update the target host so it publishes SPF.
- What it means
- A legitimate sender (marketing platform, transactional service, support desk) is not authorized. Mail from that sender fails SPF and may fail DMARC alignment too.
- How to fix it
- Add the vendor's recommended include= to your SPF record. Watch the lookup count.
- What it means
- The record ends with neither -all, ~all, nor ?all. Receivers default to neutral.
- How to fix it
- Append -all or ~all to the end of the record. Without it, SPF effectively does nothing for unauthorized senders.
From manual to managed
From one-off SPF check to continuous monitoring
An SPF checker reads the record in DNS the moment you press Analyze. What it cannot see is the SPF record that was correct yesterday but broke last night when a SaaS vendor rotated their sending host.
DMARC AI watches every client SPF record and the include= chains they depend on, flagging new lookups, void lookups, and qualifier changes as soon as they appear. The same checker you use for onboarding becomes the daily watchtower — without you running anything manually.
- Continuous monitoring of every apex + subdomain SPF
- Alerts when lookup count crosses 8, 9, and 10
- New-sender detection from DMARC aggregate reports
- Cross-tenant view: every client SPF in one dashboard
- Webhook + API for ticketing-system integration
Related tools
Validate the rest of your email-authentication stack alongside SPF.
DMARC Checker
Verify your DMARC record, policy, alignment, and aggregate-report destinations.
Open tool keyDKIM Validator
Fetch a DKIM public key by selector and domain, verify the record structure and key length.
Open tool paletteBIMI Generator
Build a valid BIMI DNS record, check your SVG logo, attach a VMC certificate URL.
Open tool lockMTA-STS Checker
Verify your domain's MTA-STS policy — TLS mode, allowed MX hosts, max_age — in one HTTPS probe.
Open toolContinue learning
Deeper Academy reading on SPF and adjacent protocols.
SPF (Sender Policy Framework) — Complete guide
Every mechanism, qualifier, void-lookup rule, and the include= chain that breaks most production SPF records.
7 min readDMARC explained — Complete guide
Why SPF without DMARC is fragile, how DMARC enforces alignment, and how the two protocols work together to actually stop spoofing.
8 min readDKIM — Complete guide
The third leg of the authentication tripod. DKIM signatures survive forwarding when SPF does not, which is why DMARC alignment usually leans on DKIM.
6 min readBIMI — Display your verified brand logo
BIMI prerequisites, SVG Tiny PS logo specs, VMC certificates, and the deliverability story that justifies the project budget.
5 min readFree check is good — running a portfolio is better
Two ways to go from a one-off check to a managed practice.
Start a free 30-day Premium trial
Sign up, add a domain, see real DMARC reports inside 48 hours. No credit card. Premium AI features included for the trial; drop back to free Basic monitoring afterwards or convert per-active-domain.
Book demo
Walk through the multi-tenant dashboard with a real engineer. Bring a client domain — we will load it live and show what the reports look like for your portfolio.
SPF FAQ for Professionals
What is an SPF checker? expand_more
An SPF checker reads the v=spf1 TXT record published at your apex domain (or sending subdomain) and reports the authorized senders, the DNS lookup count against the RFC 7208 limit of 10, the final qualifier, and any syntax issues. It tells you what receivers like Gmail, Microsoft, and Yahoo see when they evaluate mail from your domain.
What is the SPF 10 DNS lookup limit? expand_more
RFC 7208 caps the number of DNS lookups an SPF record can trigger at 10. Each include=, a, mx, ptr, exists, and redirect= burns one — and the chain of records they target may burn more. Past 10, receivers return PermError and treat the SPF check as failed. The analyzer above counts the lookups for you.
Can a domain have multiple SPF records? expand_more
No. RFC 7208 says exactly one v=spf1 TXT record may exist per domain. When receivers find two, they return PermError and treat SPF as failed. Merge every authorized sender into a single record.
What does SPF PermError mean? expand_more
PermError is a permanent failure in evaluating the SPF record — either the syntax is broken, the lookup count is over 10, void lookups are over 2, or there are multiple v=spf1 records. Receivers treat PermError the same as a missing SPF record from a DMARC perspective: SPF cannot align.
Is ~all or -all better? expand_more
It depends on the DMARC policy. If you are at p=reject, soft-fail (~all) is the recommended posture — DMARC enforces alignment and SPF stays safe for legitimate forwarded mail (Mailman lists, fwd-as-attachment, etc). If you are not yet at p=reject, hard-fail (-all) de-risks the rollout. Both score equally on the analyzer above when paired with p=reject.
Why does SPF fail after forwarding? expand_more
SPF authenticates the connecting IP, not the message. When mail is forwarded (a corporate distribution list, a fwd-as-attachment to a personal address), the forwarder's IP is what the receiver sees — and that IP is not in your SPF record. DKIM signatures, by contrast, survive forwarding when the body and signed headers are preserved. This is why DMARC alignment usually leans on DKIM rather than SPF in the wild.
Why do MSPs need continuous SPF monitoring? expand_more
SPF records drift. Marketing rotates a sender, IT procures a SaaS tool without checking DNS, the SPF chain quietly creeps past 10 lookups, the vendor at the end of an include= rotates their sending host. A point-in-time check catches the snapshot you take today. Continuous monitoring catches the changes that happen next week before they affect deliverability or DMARC alignment.
Stay Secure. Automate Monitoring.
Manual SPF checks are a thing of the past. DMARC Intelligence monitors your DNS 24/7 and alerts you the moment a change is detected.