Check a domain's SPF record online: recursively expands every include and redirect, counts DNS lookups against the RFC 7208 limit of 10, and flags void lookups, multiple SPF records, +all, ptr and over-long strings. Free, no signup.
include: and redirect= and shows the expanded tree with each DNS-querying term numbered.include, a, mx, ptr, exists and redirect each cost one lookup, nested ones included. ip4, ip6 and all are free. Go over 10 and receivers return permerror, which DMARC treats as an SPF fail.Need SPF, DMARC and MX checks across a whole client list? Run the Bulk SPF / DMARC / MX Auditor on Apify ($2 per 1,000 domains).
RFC 7208 caps the mechanisms that need a DNS query (include, a, mx, ptr, exists and the redirect modifier) at 10 per SPF check, nested includes counted. Going over makes receivers return permerror, so SPF fails for every message.
Remove includes for services you no longer use, replace a and mx with the ip4/ip6 ranges they resolve to, ask vendors for a smaller include, or move bulk senders (newsletters, ticketing) to a subdomain with its own SPF record.
A DNS query from SPF that comes back NXDOMAIN or with no records, usually an include for a vendor that changed its hostname. More than 2 void lookups is a permerror.
No. Two TXT records that start with v=spf1 is a permerror. Merge them into one record with every include in it.
~all (softfail) is the safe default while you find every sender. With DMARC at p=quarantine or p=reject either works, because DMARC makes the final decision. Never use +all.
Runbooks, checklists and helpdesk templates: IT Admin Packs on Gumroad.