DNSfinder.net
SPF Validator

SPF Checker

Enter a domain and the checker fetches its v=spf1 TXT record, follows every include and redirect, and counts the DNS-querying terms against the 10-lookup limit in RFC 7208. You get a status tile, a lookup counter, the qualifier on the final all term, every authorized IP range, an expandable include tree and findings sorted by severity. It is built for mail admins chasing a PermError and for anyone about to add a sending service.

Loading SPF Checker...

Querying live edge resolvers and network infrastructure...

How to use the SPF Checker

  1. Type the bare domain, for example example.com, and press Check SPF. The tool fetches the TXT records that start with v=spf1.
  2. Read the four tiles: SPF status, the DNS lookup counter out of 10, the policy taken from the all qualifier, and the number of authorized IP ranges.
  3. Open the Analysis card and work through the findings from the top. Failures come first, then warnings, then notes and passes.
  4. Expand the include tree to see which include costs which lookups, then copy the authorized ranges or download the JSON.

What to look for

Lookup counter at 8 or more

The counter turns amber at 8 lookups and red above 10. Every include, a, mx, ptr, exists and redirect term costs one, and nested includes count too. A domain at 9 has room for one more service. A domain at 11 fails SPF for every message.

Void lookups and dead includes

An include or redirect that points at a name with no SPF record is a failure, because receivers return PermError for it. An a or mx term that resolves to nothing is a void lookup. RFC 7208 allows two, and the checker reports a third as a failure.

What the all qualifier says

The Policy tile shows the qualifier on the final all term. -all and ~all both pass. ?all is a warning because it protects nothing, +all is a failure because it authorizes every host on the internet, and no all term at all leaves unlisted senders at neutral.

Guide

Reading an SPF evaluation and fixing what it finds

How receivers evaluate v=spf1

SPF is a TXT record at the domain in the envelope sender (the MAIL FROM address). The record is a list of terms read left to right, and each mechanism is a test against the connecting IP: ip4:203.0.113.0/24 matches a range, a and mx compare against the domain's own A or MX hosts, and include evaluates another domain's record. The first match wins, and its qualifier (+, -, ~ or ?) becomes the result.

A Google Workspace domain that also sends through one marketing service typically publishes v=spf1 include:_spf.google.com include:servers.mcsv.net ~all. The receiver resolves both includes, which carry their own ip4, ip6 and include terms, and only falls through to ~all when nothing matched. SPF says nothing about the From header a person sees. Tying the two together is DMARC's job.

Why the 10-lookup limit matters

RFC 7208 caps the number of DNS-querying terms a receiver will evaluate at 10, counted across the whole tree: include, a, mx, ptr, exists and the redirect modifier. ip4 and ip6 are free, which is why replacing an include with its address ranges lowers the count. A receiver that reaches term eleven stops and returns PermError, which DMARC treats as an SPF failure.

The checker increments one shared counter as it walks the tree, so a provider include that itself holds three includes costs four lookups, exactly as a receiver would count it. The Include tree card puts a 1 lookup pill next to each term that costs one and shows how many terms each child contains. The walk stops after 40 nested records and says so.

Reading the Analysis card finding by finding

A failure means receivers would return PermError or the record protects nothing: a second v=spf1 record, a term that is not valid syntax, an ip4 or ip6 value that is not an address or CIDR range, an include whose target has no SPF record, more than 10 lookups, more than two void lookups, or +all. Clear every failure before you look at anything else.

Warnings cover things that still work but should change: 8 or 9 lookups, a ptr mechanism (deprecated in RFC 7208 section 5.5), ?all, a missing all term, or a record longer than 450 characters that risks a truncated DNS response. Inside the tree, terms after all are marked as never evaluated and unknown modifiers as ignored. An include that uses macros cannot be expanded statically and gets a note instead, as does an include loop.

Fixing the common failures

Too many lookups: drop services you no longer send through, move bulk mail to a subdomain with its own record, or replace an include that wraps a few fixed ranges with those ip4 and ip6 terms, remembering that a flattened copy goes stale when the provider changes addresses. Rebuild the line with the SPF Generator.

Two records: merge them into one line. A second v=spf1 line is the usual result of following a vendor's setup guide too literally. A missing include target usually means the vendor renamed or retired the domain, so take the current include from their documentation. An invalid term is most often a stray character, a space inside a CIDR range or a typo in a mechanism name.

  • Keep ~all until DMARC reports confirm every sender passes, then move to -all if you want receivers to reject unlisted hosts outright.
  • Add each new sending service to the existing record instead of creating another TXT line.
  • Re-run the checker after every DNS change. Results are cached for about a minute.

What the checker cannot tell you

The evaluation is static: it reads the record as published and counts lookups the way a receiver would, but it does not test a particular message or sending IP, so it cannot say whether yesterday's bounce was an SPF failure. For that, read the Authentication-Results header in the Email Header Analyzer or the per-source rows in the DMARC Report Analyzer.

Queries go to the public resolvers at Cloudflare, Google and Quad9 with a three-second timeout, so a transient DNS problem can produce a failed include that clears on retry. Lookups are not stored. The domain you enter is mirrored into the page URL as ?domain= so the result can be shared.

Knowledge Base & FAQ

SPF Checker FAQs

Common questions about the spf checker.

SPF (Sender Policy Framework, RFC 7208) is a TXT record at your domain that begins with v=spf1 and lists the hosts allowed to use the domain in the envelope sender address. Receivers compare the connecting IP against it and produce pass, fail, softfail, neutral, none, temperror or permerror.