SPF Exists Mechanism: What It Does and When You Need It

Learn what the SPF exists mechanism does, how it uses macros and DNS A records for IP authorization, and when to use exists vs include in your SPF record.

Last updated: 2026-05-25

Most SPF records rely on include and ip4 to authorize sending servers. But there's another mechanism you might encounter — exists — that works in a completely different way. It's less common, more powerful in specific situations, and can be confusing when you first see it.

This guide explains what the exists mechanism does, how it works under the hood, and whether it's something your business needs to worry about. For a comprehensive overview of all mechanisms, see our complete SPF guide.

What the Exists Mechanism Does

The exists mechanism, defined in RFC 7208, checks whether a specific DNS A record exists for a constructed domain name. If the A record is found, SPF passes. If it's not found, SPF moves on to the next mechanism in the record.

Unlike include, which points to another SPF record for evaluation, exists just asks one simple question: "Does this particular DNS entry exist — yes or no?"

Here's what makes it special: exists almost always uses SPF macros — dynamic variables that get replaced with real values when the record is evaluated. The most common macro is %{i}, which represents the IP address of the sending server.

v=spf1 exists:%{i}._spf.example.com ~all

When a mail server at IP address 192.0.2.1 sends an email, the receiving server replaces %{i} with the actual IP and looks up 192.0.2.1._spf.example.com. If an A record exists at that address, the email passes SPF.

This is an advanced mechanism

If you're setting up SPF for the first time or managing email for a small business, the exists mechanism is almost certainly not what you need. Standard include statements for your email services (Google Workspace, Microsoft 365, etc.) are the right approach for most organizations.

How It Works Step by Step

Receiving server reads your SPF record

When an email arrives, the receiving server looks up the SPF record for the sending domain and starts evaluating mechanisms from left to right.

Server encounters the exists mechanism

When it reaches exists:%{i}._spf.example.com, it needs to resolve the macro before doing anything else.

Macro gets replaced with real values

The %{i} macro is replaced with the actual IP address of the sending server. So if the server's IP is 198.51.100.25, the domain becomes 198.51.100.25._spf.example.com.

Server performs a DNS A record lookup

The server checks whether an A record exists for 198.51.100.25._spf.example.com. It doesn't matter what the A record points to — only whether it exists.

Result determines authorization

If an A record is found, the exists mechanism returns a match, and the email passes SPF. If no A record is found, the server moves to the next mechanism in the record.

The Key Advantage: One Lookup, Unlimited IPs

Here's why exists matters for large organizations: it only costs one DNS lookup in your SPF evaluation, regardless of how many IP addresses you authorize.

With the include mechanism, each included domain triggers a lookup, and nested includes within those domains add more. A single Google Workspace include costs 3-4 lookups out of your 10-lookup budget. If you're using multiple services, you can hit the limit quickly.

The exists mechanism sidesteps this entirely. The SPF record itself only triggers one lookup (the A record check). The authorization happens through the presence or absence of individual A records, which are managed separately in your DNS zone. You could authorize 10, 100, or even 1,000 IP addresses this way, and it still counts as just one lookup in SPF evaluation.

To authorize a new IP, you simply create an A record. To revoke authorization, you delete it. The SPF record never needs to change.

Exists vs Include: When to Use Which

For most businesses, include is the right choice. But in certain situations, exists solves problems that include cannot.

Factorincludeexists
DNS lookups used1+ per include (nested includes add more)Always 1, regardless of IP count
Best forThird-party email services (Google, Mailchimp, etc.)Large IP lists, custom infrastructure
Ease of setupSimple — just add the provider's include valueComplex — requires macro knowledge and A record management
MaintenanceProvider maintains their SPF record automaticallyYou manage individual A records yourself
TransparencyEasy to see what's authorized by reading the recordNeed to query individual A records to see authorizations
Receiver supportUniversal — all mail servers support itWell supported, but some older systems may not handle macros

Use include when:

  • You use standard email services like Google Workspace, Microsoft 365, SendGrid, or Mailchimp
  • You have a manageable number of sending services (5 or fewer)
  • You want a simple, easy-to-read SPF record
  • You want your email provider to maintain authorization automatically

Use exists when:

  • You're managing dozens or hundreds of sending IPs
  • You've hit the 10-lookup limit and need to reduce your count
  • You need to frequently add and remove sending servers
  • You're an ESP or enterprise managing complex mail infrastructure

Who Actually Uses Exists?

The exists mechanism is primarily used by large email service providers (ESPs), enterprises with complex sending infrastructure, and organizations that have outgrown the 10-lookup limit through standard mechanisms.

If you're a small or medium business using a handful of email services, you'll almost certainly never need exists. Even if you're close to the 10-lookup limit, solutions like SPF flattening or consolidating your email services are usually simpler approaches.

That said, if you inherit a domain that already uses exists, don't remove it without understanding what it does. It may be authorizing a significant number of sending IPs through A records that aren't visible in the SPF record itself.

Common Macros Used with Exists

While %{i} (sender IP) is the most common macro paired with exists, other macros can be used too:

  • %{i} — The sending server's IP address. Used for per-IP authorization.
  • %{l} — The local part of the sender address (the part before @). Used for per-user policies.
  • %{d} — The sending domain. Less common with exists but can be used in multi-domain setups.

For a complete breakdown of all available macros, see our SPF macros guide.

Debugging Exists Mechanisms

Troubleshooting an exists mechanism is harder than debugging a standard SPF record. Because the authorization lives in individual A records rather than the SPF record itself, you need to manually check whether the expected A records are published.

If SPF is failing for a specific IP and your record uses exists:%{i}._spf.yourdomain.com, check whether an A record exists for [IP]._spf.yourdomain.com. If it doesn't, that IP isn't authorized.

Complete Your Email Authentication

SPF — whether using exists, include, or any other mechanism — is just one layer of email authentication. For full protection, you also need:

  • DKIM to cryptographically sign your outgoing emails. Check yours with DKIM Test.
  • DMARC to tie SPF and DKIM together and define a policy for failed checks. Verify yours at DMARC Record Checker.

If you're building or rebuilding your SPF record from scratch, SPF Creator can generate the correct syntax for standard setups.

References

Never miss an SPF issue

Monitor your SPF, DKIM, DMARC and MX records daily. Get alerts when something breaks.

Start Monitoring