SPF Record Generator
Pick the services that send email for your domain and get a correct SPF record, with the 10-lookup limit tracked for you. Free, no signup.
Who sends email for this domain?
Each service adds its documented include mechanism.
From your provider’s docs, e.g. spf.example-esp.com: commas or spaces between multiple. Some services (Klaviyo, HubSpot, Mailchimp Transactional) authenticate through their own CNAME records instead of a shared include, check their DNS settings page.
How should receivers treat everyone else?
Your SPF record
0/10 lookupsPublish as a TXT record at the domain root. One SPF record per domain: if one exists, merge into it instead of adding another.
yourdomain.com (or @)v=spf1 ~allClick the record to select all of it.
Record type: TXT · ip4/ip6 mechanisms don’t count against the 10-lookup limit.
After you publish
- Add the TXT record at your DNS host.
- Verify it with the free SPF checker.
- SPF alone doesn’t stop spoofing, pair it with DKIM and a DMARC policy. Generate one with the DMARC record generator.
This record authorizes nothing yet
Palisade reads your DMARC reports to show every service actually sending as your domain, no guessing.
Find my real sendersWhat is an SPF record maker?
This SPF record maker generates a TXT value from the services that send email for your domain and tracks its DNS lookup count as you build. As you add or remove senders, the generated value and lookup count update together. When it’s published, validate it with the SPF checker, and see the step-by-step SPF setup guide for provider-specific instructions.
Email authentication knowledge base
How do I create an SPF record?
List every service that sends email for your domain: your mailbox provider (Google Workspace or Microsoft 365), marketing platforms, transactional senders, your CRM, help desk, and any mail server you run. Each has a documented SPF mechanism, usually an include. Select them in the generator, choose how receivers should treat everything else (~all to start), and publish the result as a TXT record at your domain root. The hard part isn't syntax, it's remembering every service. DMARC aggregate reports are how you find the ones you forgot.
Can I have two SPF records on one domain?
No. The SPF standard requires exactly one: if receivers find two v=spf1 TXT records, the result is a permerror and both are effectively ignored, which is worse than having neither. If your domain already has an SPF record, merge the new mechanisms into it: keep one v=spf1 at the front, combine the include and ip mechanisms, and keep a single all qualifier at the end.
What is the SPF 10-DNS-lookup limit?
Receivers stop evaluating an SPF record after 10 DNS lookups; anything more returns permerror, which mailbox providers treat as a failure. The mechanisms a, mx, include, exists, redirect and ptr each cost one lookup, and includes often trigger further lookups inside themselves, so a record that lists 6 includes can silently blow past the limit. ip4 and ip6 mechanisms cost nothing, which is why the fix for a too-long record is usually replacing includes with your providers' published IP ranges or using a flattening service.
Should I use ~all or -all at the end of my SPF record?
Use ~all if the domain sends email, and -all only if it sends none. ~all (softfail) asks receivers to accept but mark unlisted senders; -all (hard fail) tells them to refuse outright, which also refuses forwarded mail that was legitimately yours. Once DMARC is enforcing, the two give the same protection against spoofing, so on a sending domain ~all is the end state rather than a step toward -all. What tightens over time is the DMARC policy. Avoid ?all: it is equivalent to having no opinion, offers zero protection, and reads as neglect.
What SPF record does Google Workspace or Microsoft 365 need?
Google Workspace documents include:_spf.google.com and Microsoft 365 documents include:spf.protection.outlook.com, one include each, both built into this generator. Everything Google or Microsoft sends for you is covered by that single mechanism, so you don't add individual server IPs for them. If you also send through a marketing or transactional platform, its include goes in the same single record, not a second one.
Does an SPF record stop email spoofing on its own?
No, and this surprises people. SPF validates the hidden envelope sender (Return-Path), not the From address displayed to recipients, so a spoofer can pass SPF for their own domain while showing yours in the From line. Closing that gap is exactly what DMARC does: it requires the SPF-validated domain to align with the visible From domain and lets you tell receivers to reject mail that fails. Publish SPF, then add DKIM and a DMARC policy. That trio is what actually stops spoofing.
What SPF record should a parked domain have?
v=spf1 -all: a record that authorizes nothing. Domains that send no email are favorite spoofing targets precisely because nobody is watching them, and mailbox providers explicitly recommend publishing a deny-everything SPF record on them. Tick the parked-domain option in the generator to get it, and pair it with a p=reject DMARC record for complete lockdown.
Why isn't my email provider in the list?
Not every service uses a shared SPF include anymore. Klaviyo, HubSpot, Mailchimp Transactional (Mandrill), Constant Contact, and SparkPost, for example, authenticate through CNAME records or account-specific values that their dashboard generates for you. Adding a generic include for them would do nothing. Check your provider's domain-authentication or DNS-settings page: if it gives you an include value, paste it into the Other includes field above; if it gives you CNAME records, publish those instead and leave SPF alone.
I published my SPF record. How do I know it works?
Run it through the SPF checker, which fetches the live record, validates the syntax, counts the DNS lookups, and flags problems like multiple records or unresolvable includes. Then send a test message to a Gmail address and use Show original to confirm spf=pass. For ongoing certainty across every sending service, DMARC aggregate reports show you SPF results as every receiver in the world sees them.
Every mechanism and qualifier you can put in an SPF record, explained.
- v
- The version tag must exclusively be “spf1”. Incorrect or missing versions result in the SPF record being disregarded.
- ip4
- This tag lists IPv4 addresses authorized to send emails for the domain.
- ip6
- This tag specifies IPv6 addresses permitted to email on the domain’s behalf.
- a
- The A record tag permits sender validation via the domain’s IP address, defaulting to the current domain if unspecified.
- mx
- The MX record tag validates the mail server’s MX record, defaulting to the current domain if not specified.
- ptr
- The PTR tag initiates a PTR check for client IP hostnames, advised against in RFC 7208 due to excessive DNS lookups.
- exists
- The exists tag verifies the presence of an A record on the specified domain.
- include
- The include tag is crucial for accurate SPF records, confirming all listed domains/subdomains as legitimate sending sources to recipients.
- all
- The all tag is mandatory, positioned at the SPF record’s end, guiding recipients on handling emails from unauthorized sources based on its qualifiers (~, +, -, ?).