The exact SPF record
Copy the example that matches your setup. Each one is a single TXT record; the host is shown as your DNS provider usually expects it (@ means the domain itself).
Bounce domain on a subdomain (CNAME, not TXT)
Type: CNAME · Host: bounces
sparkpostmail.com
SparkPost EU accounts point to eu.sparkpostmail.com. Enterprise accounts use <public_tenant_id>.mail.e.sparkpost.com.
Your main domain on Microsoft 365 stays as it is
Type: TXT · Host: @ · 1 of 10 DNS lookups
v=spf1 include:spf.protection.outlook.com -all
Your main domain on Google Workspace stays as it is
Type: TXT · Host: @ · 1 of 10 DNS lookups
v=spf1 include:_spf.google.com ~all
How SPF applies to SparkPost mail
SparkPost sends with a bounce (MAIL FROM) address on a domain it manages, so receivers check SPF there, not on your domain. You don't add anything to your SPF record for it; your domain is authenticated with DKIM instead.
- A bounce domain can be used only once its CNAME status is valid; MX verification is limited to Enterprise accounts.
- Because the bounce subdomain is a CNAME, SPF lookups for it follow the CNAME to SparkPost's own published record. On 3 November 2026,
sparkpostmail.compublishedv=spf1 exists:%{i}._spf.sparkpostmail.com ~all. - A CNAME can't share a name with other records, so use a subdomain that has no MX, TXT or A record.
How to add it
- Create the sending domain in SparkPost and publish its DKIM TXT record (see our SparkPost DKIM page).
- Pick a subdomain for bounces, such as
bounces.example.com, and create a CNAME there pointing tosparkpostmail.com, oreu.sparkpostmail.comfor SparkPost EU. - Add the subdomain as a sending domain and verify it with CNAME verification (
cname_verifyin the API). - Once its CNAME status is valid, set it as your default bounce domain (
is_default_bounce_domain) or pass it in each transmission'sreturn_path. - Verify within two weeks: SparkPost removes sending domains that stay unverified longer. Leave your root SPF record unchanged.
DKIM and DMARC alignment
SparkPost signs with your domain once its DKIM TXT record is verified, and that aligned DKIM pass is what DMARC needs. A bounce subdomain of your From domain adds SPF alignment under relaxed mode. SparkPost warns that verifying a domain by mailbox instead of DNS means it can't DKIM-sign your mail. See our SparkPost DKIM page.
DMARC passes when SPF or DKIM passes and the domain it checked matches your From domain. Our guide to SPF, DKIM and DMARC explains how the three fit together.
Common mistakes
- Two SPF records. A domain may publish only one record that starts with
v=spf1. With two, receivers return a permanent error and SPF fails for all your mail (RFC 7208 section 3.2). Merge every sender into one record. - More than 10 DNS lookups. Each
include,a,mx,existsandredirectcosts a lookup, nested ones included; over 10 is a PermError (section 4.6.4). SparkPost adds nothing to your count, which is one more reason not to add an include for it. See how to fix too many SPF lookups. - Choosing
~allor-allwithout a plan.-allasks receivers to reject unlisted servers;~allasks them to accept but mark the mail. Once DMARC is enforced, receivers act on DMARC instead. Read SPF soft fail vs hard fail before you choose. - Adding an include for SparkPost to your root SPF record. SPF is checked on the bounce domain, so the root include spends lookups without changing results.
- Using a US account target (
sparkpostmail.com) on a SparkPost EU account, or the other way round. The CNAME must point at your account's own domain. - Setting
aspf=sin DMARC. A bounce subdomain only aligns with your From domain under relaxed SPF alignment.
Check your SPF record
See your live record, every nested include and the real lookup count. Free, reads public DNS only.
Building a record for your other senders? Use the SPF Record Generator.
Frequently asked questions
Do I add include:sparkpostmail.com to my SPF record?
Not to your root record. SPF for SparkPost mail is evaluated on the bounce (return-path) domain. Point a subdomain at sparkpostmail.com with a CNAME and verify it as a bounce domain; the CNAME brings SparkPost's SPF record with it.
What CNAME does a SparkPost EU bounce domain use?
eu.sparkpostmail.com. US accounts point to sparkpostmail.com, and Enterprise accounts to <public_tenant_id>.mail.e.sparkpost.com. The target has to match the region your account runs in.
How do I make a SparkPost bounce domain the default?
After the CNAME verifies, set is_default_bounce_domain on that sending domain. SparkPost then uses it whenever a transmission doesn't name another bounce domain in its return_path field.
Sources
Values checked against SparkPost's documentation on November 3, 2026. Lookup counts measured with our SPF Checker on November 3, 2026; providers change their records, so check yours before relying on a number.
SPF records for other providers
- Microsoft 365include:spf.protection.outlook.com
- Google Workspaceinclude:_spf.google.com
- Zoho Mailinclude:zoho.com
- GoDaddyinclude:secureserver.net
- Fastmailinclude:spf.messagingengine.com
- Proton Mailinclude:_spf.protonmail.ch
- iCloud Mailinclude:icloud.com
- Rackspace Emailinclude:emailsrvr.com
- Hostingerinclude:_spf.mail.hostinger.com
- Private Emailinclude:spf.privateemail.com
- IONOSinclude:_spf-us.ionos.com
- Amazon SESinclude:amazonses.com
- SendGridinclude:sendgrid.net
- Mailguninclude:mailgun.org
- PostmarkNone needed
- Mailjetinclude:spf.mailjet.com
- SMTP2GONone needed (return-path CNAME)
- MandrillNone needed
- Elastic Emailinclude:_spf.elasticemail.com
- Resendinclude:amazonses.com
- MailerSendinclude:_spf.mailersend.net
- MailchimpNone needed
- BrevoNone for standard sending; spf.brevo.com with a dedicated IP
- HubSpotAccount-specific (copy from HubSpot)
- KlaviyoNone needed
- ActiveCampaignNone needed (Mailserver Domain CNAME)
- SquarespaceNone needed
- ShopifyNone needed (CNAME records)
- Dynamics 365 Customer InsightsNone needed (optional: your envelope-from domain)
- MailerLiteinclude:_spf.mlsend.com
- Campaign Monitorinclude:_spf.createsend.com
- KitNone needed (ckespa CNAME)
- Marketoinclude:mktomail.com
- Account Engagement (Pardot)None needed (SPF passes automatically)
- Customer.ioCopy from Customer.io (cio##### subdomain)
- Constant ContactNone needed
- Zoho Campaignsinclude:zcsend.net
- Salesforceinclude:_spf.salesforce.com
- Zendeskinclude:mail.zendesk.com
- Freshdeskinclude:email.freshdesk.com
- IntercomNone needed
- Help ScoutNone needed (old value: helpscoutemail.com)
- Odooinclude:_spf.odoo.com
Related guides
SPF record syntax and examples
SPF record syntax explained: mechanisms, qualifiers and modifiers, with copy-ready examples for Microsoft 365, Google Workspace, subdomains and parked domains.
9 min read SPF, DKIM & DMARCHow to fix SPF PermError: too many DNS lookups
Why SPF breaks at 10 DNS lookups, how to count them, and step-by-step fixes for Microsoft 365 and Google Workspace domains with many senders.
8 min read SPF, DKIM & DMARCSPF softfail vs hardfail: should you use ~all or -all?
What ~all, -all and ?all mean in SPF, what receivers really do with each, how DMARC changes the choice, and which one to use for sending and parked domains.
8 min readLast updated