What is an SPF record checker?
An SPF record checker reads a domain’s Sender Policy Framework record and tells you whether it works. SPF is a single DNS TXT record, starting with v=spf1, that lists every server and service allowed to send email for your domain. When a message arrives, the receiving server checks the sending IP address against that list. Pass, and the message has one strong signal in its favour. Fail, or return an error, and it is more likely to land in spam or be rejected.
This free SPF checker finds your record, confirms there is exactly one, counts every DNS lookup it triggers (including those hidden inside other providers’ includes) against the hard limit of 10, explains how the record ends, flags deprecated mechanisms, and shows the full include tree so you can see which service is responsible for what.
How to use the SPF checker
- Enter your sending domain, for example
yourcompany.com. Pasting an email address works too. - Press “Check SPF”. The tool fetches your record and follows every
include:andredirect=recursively. - Read the score and checks. Red means SPF is broken for every message right now. Amber means it works but is fragile. Green means it is healthy.
- Use the include tree to see which services are in the record and whether any of them has no SPF of its own, which also breaks the result.
How SPF works, in plain English
When your mail server hands a message to Gmail, Gmail sees two things relevant to SPF: the IP address that connected, and the domain in the envelope sender (the technical “return path”, which is usually your domain or a subdomain of your sending tool). Gmail looks up that domain’s SPF record and walks through it from left to right until something matches the IP address. Each piece of the record is called a mechanism:
| Mechanism | What it means | Costs a DNS lookup? |
|---|---|---|
ip4:203.0.113.0/24 |
These IPv4 addresses may send. | No |
ip6:2001:db8::/32 |
These IPv6 addresses may send. | No |
include:_spf.google.com |
Whatever that domain’s SPF record allows, we allow too. | Yes, plus all lookups inside it |
a |
The IP addresses of the domain’s A record may send. | Yes |
mx |
The domain’s incoming mail servers may send. | Yes |
exists: |
Advanced macro-based check. | Yes |
ptr |
Reverse-DNS match. Deprecated: slow and unreliable. | Yes |
redirect= |
Use another domain’s SPF record entirely. | Yes |
all |
Everything else. Always the last term. | No |
Each mechanism can have a qualifier in front: + pass (the default), - fail, ~ soft fail and ? neutral. In practice the qualifier only matters on the final all.
The checks, explained
Exactly one SPF record
The SPF standard (RFC 7208) allows one v=spf1 record per domain. Two records produce a “permanent error” and receivers treat SPF as failed. This usually happens when a new tool’s setup guide says “add this SPF record” and someone creates a second one instead of adding the tool’s include: to the existing record. The fix is always to merge them into one.
The 10 DNS lookup limit
To stop SPF being used to overload DNS servers, receivers stop evaluating a record after 10 DNS lookups and return a permanent error. The count includes every include, a, mx, ptr, exists and redirect, including those inside the records you include. That is the trap: Google’s include costs several lookups on its own, and a typical stack of mailbox provider, CRM, marketing platform, help desk and outreach tool can pass 10 without anyone noticing. The checker counts them all and warns you from 8 upwards.
How the record ends
~all(soft fail): mail from unlisted servers is marked suspicious. The most common choice, and the safe one while DMARC handles enforcement.-all(hard fail): mail from unlisted servers should be rejected. Strict and correct once you are sure every legitimate sender is listed.?all(neutral): says nothing about unlisted servers. Gives receivers almost no protection; replace it.+all: allows every server on the internet to send as you. Never use it.- No
allat all: behaves like neutral. Add~all.
Includes that have no SPF record
If you include a domain that has no SPF record, perhaps a service you have stopped using that has since changed its setup, the evaluation returns a permanent error. The include tree marks these in red. Remove them.
Deprecated ptr
The ptr mechanism is slow, unreliable and discouraged by the standard. Some receivers ignore it. Replace it with the actual ip4: ranges.
SPF record examples
| Setup | SPF record |
|---|---|
| Google Workspace only | v=spf1 include:_spf.google.com ~all |
| Microsoft 365 only | v=spf1 include:spf.protection.outlook.com -all |
| Zoho Mail | v=spf1 include:zoho.com ~all (or the regional include, such as zoho.eu or zoho.in, from your Zoho console) |
| Google Workspace plus a marketing platform | v=spf1 include:_spf.google.com include:servers.mcsv.net ~all |
| Domain that never sends email | v=spf1 -all |
Always copy the include value from each provider’s own documentation; the examples show the shape, and providers do change their values occasionally.
How to fix “too many DNS lookups”
- Remove services you no longer use. Old tools are the most common source of wasted lookups.
- Check which includes are actually needed. A tool that sends through your Google or Microsoft mailbox (connected by OAuth or SMTP) does not need its own include; your mailbox provider’s include already covers it.
- Replace
aandmxwithip4:when the addresses are stable. IP mechanisms cost no lookups. - Move bulk senders to a subdomain. Send newsletters from
news.yourcompany.comwith its own SPF record, keeping the main domain lean. - Be careful with “SPF flattening”. Replacing includes with the IP addresses they currently resolve to fixes the count, but breaks silently when the provider changes its IPs. If you flatten, use a service that keeps the list updated.
SPF and cold email
For cold outreach, SPF is one of three records that must pass, alongside DKIM and DMARC. A few points specific to outbound:
- Every sending domain needs its own SPF record. If you use secondary domains for outreach, each one needs SPF, DKIM and DMARC. Check each with the Domain Health Checker.
- Sending through your mailbox keeps SPF simple. Outreach tools that send through your own Google or Microsoft account inherit your provider’s SPF. Tools that send through their own servers need their include added.
- SPF alone does not satisfy DMARC for forwarded mail. SPF breaks when a message is forwarded, which is why DKIM matters just as much. Check your keys with the DKIM Checker.
- Alignment matters for DMARC. For SPF to count towards DMARC, the envelope sender domain must match (or be a subdomain of) your visible From domain. Tools that use their own bounce domain pass SPF but not SPF alignment; they rely on DKIM alignment instead.
How to create or edit an SPF record, step by step
- List every service that sends email as your domain. Your mailbox provider, CRM, marketing platform, help desk, billing system, website contact form and any outreach tool that sends through its own servers. Ask colleagues; this list is always longer than expected.
- Find each service’s SPF include in its documentation, usually on a page called “authenticate your domain” or “SPF setup”.
- Check whether a record already exists by running this checker. If it does, you will edit it; never add a second one.
- Write the record:
v=spf1, then each include separated by spaces, then~all. For examplev=spf1 include:_spf.google.com include:mail.zendesk.com ~all. - Publish it at your DNS host as a TXT record on the root of the domain (host
@or empty). - Run this checker again and confirm one record, under 10 lookups, ending in
~allor-all. - Send a test email through each service and confirm SPF passes in the message headers.
Reading SPF results in email headers
Every receiving mailbox records its SPF verdict in the message headers. In Gmail choose “Show original”; in Outlook open the message, then File, Properties, Internet headers. Look for two lines:
Received-SPF: pass (google.com: domain of [email protected] designates 203.0.113.5 as permitted sender)Authentication-Results: … spf=pass smtp.mailfrom=yourdomain.com; dkim=pass header.d=yourdomain.com; dmarc=pass
The possible SPF results are pass, fail (hard fail), softfail, neutral, none (no record), temperror (a temporary DNS problem) and permerror (a broken record, such as two SPF records or more than 10 lookups). A permerror is the one to fix immediately, because it fails every message.
Less common SPF rules worth knowing
The void lookup limit
Besides the 10-lookup limit, the standard recommends receivers fail SPF after more than two “void” lookups: lookups that return no answer, such as an include pointing at a domain that no longer has SPF. Removing dead includes fixes this too.
Subdomains need their own record
SPF is not inherited. If you send from mail.yourcompany.com, that subdomain needs its own v=spf1 record. Many email platforms use a subdomain as the envelope sender for exactly this reason: they publish SPF on their own subdomain so you do not have to change your root record.
Forwarding breaks SPF
When a recipient forwards your message, the forwarding server’s IP is not in your record, so SPF fails at the final destination. Some forwarders rewrite the envelope sender (SRS) to avoid this; many do not. This is why DKIM, which survives forwarding, matters just as much for DMARC.
Record length
A single DNS text string is limited to 255 characters; longer SPF records are split into several quoted strings that receivers join. Most DNS hosts handle this automatically. Very long records are a sign it is time to simplify.
SPF, DKIM and DMARC compared
| SPF | DKIM | DMARC | |
|---|---|---|---|
| Proves | The sending server is authorised. | The message is unaltered and signed by the domain. | SPF or DKIM passed for the visible From domain. |
| Where it lives | TXT at the domain | TXT or CNAME at selector._domainkey | TXT at _dmarc |
| Survives forwarding | No | Usually | Depends on DKIM |
| Common failure | Two records, over 10 lookups | Signing not switched on, wrong selector | Missing, duplicated or p=none forever |
| Check it with | This tool | DKIM Checker | DMARC Checker |
Where to find the SPF include for common services
Providers change their values occasionally, so always confirm in the provider’s own documentation. These are the usual places to look and the shape of the value:
| Service type | Where to look | Typical form |
|---|---|---|
| Google Workspace | Google Workspace Admin Help, “Set up SPF” | include:_spf.google.com |
| Microsoft 365 | Microsoft Learn, “Set up SPF” | include:spf.protection.outlook.com |
| Zoho Mail | Zoho Mail admin console, Domains, Email configuration | include:zoho.com or a regional variant |
| Marketing platforms | Domain authentication settings | Often none: many use their own return-path subdomain and DKIM instead |
| Transactional email services | Sending domain setup | A provider include, or a custom return-path subdomain |
| Help desks and CRMs | Email channel or domain settings | A provider include such as include:mail.zendesk.com |
A useful rule of thumb: if a service sends through your own Google or Microsoft mailbox, it needs no include. If it sends through its own servers with your From address, it needs either an include in your SPF or its own return-path subdomain plus DKIM.
Glossary
- Envelope sender (return path): the technical sender address SPF checks, separate from the visible From.
- Mechanism: one term in an SPF record, such as
include:orip4:. - Qualifier: the prefix that sets the result for a match:
+,-,~or?. - Permerror: a permanent SPF error caused by a broken record; fails every message.
- Flattening: replacing includes with the IP ranges they resolve to, to save lookups.
A quick SPF audit checklist
- One
v=spf1record on the root of the domain. - Every active sending service included, and no services you have stopped using.
- Eight lookups or fewer, leaving headroom for the next tool.
- Ends in
~allor-all. - No
ptr, no+all, no includes that return nothing. - Every sending subdomain has its own record.
- Non-sending domains you own publish
v=spf1 -allso nobody can use them for spoofing.
Testing SPF after a change
After editing your record, run the checker again. Most DNS hosts publish changes within minutes, but receivers may cache the old record until its TTL expires. For a real-world test, send an email to a Gmail address you control, open it, choose “Show original” and look for SPF: PASS with your domain.
How Prosyo helps
Prosyo sends LinkedIn and email outreach from your own connected mailboxes, so your existing SPF and DKIM setup covers it with no extra records to add. It keeps each account inside safe daily limits, verifies contacts before sending and stops every sequence the moment someone replies. Start a 7-day free trial.
Related free tools
These tools are often used together with the SPF Checker. All of them are free, and the checkers and calculators run instantly in your browser.
- Domain Health Checker: Score your sending domain on MX, SPF, DKIM, DMARC, BIMI, MTA-STS and blocklists in one click, with a fix for everything that fails.
- DKIM Checker: Find your DKIM keys by selector or scan 40+ common selectors, with key length and revocation checks.
- DMARC Checker: Read your DMARC policy in plain English, get a grade from A to F and a safe path to full enforcement.
- DNS Lookup: Query A, AAAA, CNAME, MX, TXT, NS, SOA and CAA records for any name from a public resolver.
Frequently asked questions
How do I check my SPF record?
Enter your domain in the SPF checker above. It finds your v=spf1 record, counts its DNS lookups against the limit of 10, explains how it ends and shows every include it relies on.
What happens if I have two SPF records?
Receivers return a permanent error and treat SPF as failed for every message. Merge the two into a single record that contains all the include mechanisms you need.
What is the SPF 10 lookup limit?
Receivers stop evaluating an SPF record after 10 DNS lookups. Every include, a, mx, ptr, exists and redirect counts, including those nested inside included records. Going over the limit makes SPF fail.
Should my SPF record end in ~all or -all?
Both are fine. ~all (soft fail) is the most common choice and is safe while DMARC handles enforcement. -all (hard fail) is stricter and appropriate once you are certain every legitimate sender is listed. Never use +all.
Do I need SPF if I have DKIM?
Yes. Gmail, Yahoo and Microsoft expect both from bulk senders, and DMARC passes when either one passes with alignment. Having both makes your mail more resilient.
How do I add a new email service to my SPF record?
Add the service’s include mechanism to your existing record, before the final all. For example, change v=spf1 include:_spf.google.com ~all to v=spf1 include:_spf.google.com include:sendgrid.net ~all. Then check the lookup count here.
What does SPF permerror mean?
A permanent error: the record itself is broken, so receivers cannot evaluate it. The usual causes are two SPF records, more than 10 DNS lookups, or an include that points to a domain without SPF. Every message fails SPF until it is fixed.
Does an SPF record help cold email land in the inbox?
It is one of the baseline requirements. Without SPF, or with a broken one, authentication fails and placement suffers whatever the copy says. With it, along with DKIM and DMARC, receivers judge you mainly on reputation and engagement.
Is this SPF checker free?
Yes. It runs in your browser using public DNS-over-HTTPS resolvers, with no sign-up and nothing stored.


