Friday, May 22, 2026Today's Paper

Omni Apps

How to Check SPF Record with Dig: The Complete CLI Guide
May 21, 2026 · 15 min read

How to Check SPF Record with Dig: The Complete CLI Guide

Learn how to check your SPF record using the dig command-line tool. Troubleshoot email deliverability, audit DNS TXT records, and fix the 10-lookup limit.

May 21, 2026 · 15 min read
DNS TroubleshootingEmail DeliverabilitySystem Administration

Email deliverability lies at the absolute heart of your domain’s reputation. When outbound marketing campaigns fail or password reset notifications land in the spam folder, email authentication protocols like SPF (Sender Policy Framework), DKIM (DomainKeys Identified Mail), and DMARC (Domain-based Message Authentication, Reporting, and Conformance) are almost always the culprits. While many developers and IT administrators turn to slow, third-party web tools to diagnose DNS issues, command-line warriors rely on the Domain Information Groper (dig) utility. If you need to check spf record dig commands offer the fastest, most granular, and authoritative way to inspect real-time DNS data directly from your terminal. In this guide, we will explore exactly how to check, analyze, and troubleshoot SPF records using dig, bypass local recursive caching, audit nested includes, and keep your domain's sending reputation safe from spoofers.

Why Use the DIG Command to Check SPF Records?

Email authentication has evolved from an optional security best practice to an absolute requirement enforced by major inbox providers like Google and Yahoo. If you do not have a correctly configured SPF record, your emails will face strict filtering, rate-limiting, or outright rejection.

While web-based diagnostic forms are useful for basic verification, they suffer from critical limitations. Experienced system administrators prefer checking their records via the command line using dig for several reasons:

  1. Real-Time Data (Bypassing DNS Cache): Web-based tools frequently query public recursive resolvers that cache DNS records. If you just updated your SPF configuration, a web checker might show outdated information for hours. dig allows you to query your authoritative nameservers directly, giving you instant verification of changes.
  2. Security and Privacy: When staging a private domain, configuring internal mail routing, or troubleshooting private enterprise subdomains, typing your hostnames into public web forms can expose sensitive infrastructure details. dig runs entirely within your local terminal, keeping your queries private.
  3. Granular Output: Web interfaces hide the underlying DNS headers, return codes, and system flags. dig displays the raw payload returned by DNS resolvers, which is critical for finding edge-case delegation failures and zone-file syntax errors.
  4. Scriptability and Automation: Since dig is a native terminal command, you can easily integrate it into shell scripts, CI/CD deployment pipelines, or cron-based uptime monitoring tools to audit domain records at scale.

How to Run a Basic SPF Lookup Using DIG

To check your domain’s SPF record, you must query its associated DNS TXT records. Historically, RFC 4408 introduced an exclusive SPF record type (Type 99) specifically for this purpose. However, due to limited software adoption and compatibility issues across various DNS servers, the Internet Engineering Task Force (IETF) formally deprecated the SPF resource record type in RFC 7208 (2014) in favor of standard TXT (text) records. As a result, modern SPF configurations must reside within a TXT record.

To query the TXT records of any domain, open your terminal and run the following command:

dig targetdomain.com TXT

Let’s look at a realistic raw response returned by this command:

; <<>> DiG 9.18.12-Ubuntu <<>> targetdomain.com TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14209
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;targetdomain.com.			IN	TXT

;; ANSWER SECTION:
targetdomain.com.		3600	IN	TXT	"v=spf1 include:_spf.google.com ~all"
targetdomain.com.		3600	IN	TXT	"google-site-verification=some_hash_here"

;; Query time: 14 msec
;; SERVER: 127.0.0.53#53(UDP) (AD)
;; WHEN: Wed May 20 14:22:10 UTC 2026
;; MSG SIZE  rcvd: 145

Breaking Down the Raw DIG Output

  • Header Status (status: NOERROR): This is the most crucial status indicator. NOERROR means the query was successful, and records were found. If the domain did not exist, you would see NXDOMAIN. If your network resolver failed, you might see SERVFAIL. If the target server actively blocked your query, it would display REFUSED.
  • Flags (qr rd ra): These tell you how the transaction occurred. qr indicates a query response, rd means recursion was desired (the client requested the resolver to query upstream servers on its behalf), and ra denotes recursion was available (the resolver support recursion).
  • QUESTION SECTION: This section simply confirms your query. In this case, it states that we queried for internet-class (IN) records of the type TXT for the target domain.
  • ANSWER SECTION: This contains the actual payload returned by the DNS server. In our example, we received two TXT records. One is our SPF record, easily recognized because it begins with the standard identifier v=spf1. The other is a Google Site Verification TXT record. The number 3600 is the Time to Live (TTL) in seconds, indicating how long recursive servers can cache this record before fetching a fresh copy from the authoritative nameservers.
  • Query stats: Shows the round-trip query time (e.g., 14 msec), the local IP address of the resolver that answered the query (e.g., 127.0.0.53 over port 53), and the timestamp of the query.

Advanced DIG Commands for Direct & Real-Time SPF Queries

Now that you understand the basic mechanics of a lookup, let’s look at advanced tactics to make your troubleshooting faster, cleaner, and more precise.

1. Stripping Out the DNS Noise with +short

By default, dig returns a verbose payload that includes system metrics, timing, and headers. When writing scripts or doing quick verifications, you can suppress this extra output by adding the +short option:

dig targetdomain.com TXT +short

This instructs dig to print only the raw record values themselves, which will look like this:

"v=spf1 include:_spf.google.com ~all"
"google-site-verification=some_hash_here"

2. Isolating the SPF Record Using Command Line Filters

If a target domain publishes dozens of TXT records (such as domain verifications for various tools, security tags, etc.), finding the SPF string can be painful. You can use standard Linux pipe tools like grep to filter out non-SPF entries instantly:

dig targetdomain.com TXT +short | grep -i "v=spf1"

This filters the output and displays only the string containing the SPF record:

"v=spf1 include:_spf.google.com ~all"

3. Querying Authoritative Name Servers Directly

To bypass local DNS caches (including your computer’s local resolver, your office router, or your ISP's cache), you can instruct dig to fetch the record directly from the domain's authoritative nameservers. This is critical during server migrations or domain record updates.

First, discover the authoritative nameservers for your domain:

dig targetdomain.com NS +short

This will output a list of servers:

ns1.dnsimple.com.
ns2.dnsimple.com.

Now, query one of these authoritative servers directly by prefixing its hostname with the @ symbol:

dig @ns1.dnsimple.com targetdomain.com TXT +short

This bypasses all middleman recursive resolvers, delivering the real-time record published on your active DNS manager.

4. Auditing Path and Delegation via +trace

If you are seeing inconsistent DNS returns or suspect a parent domain delegation issue, you can inspect the entire lookup path starting from the root hint servers down to your zone file using the trace flag:

dig targetdomain.com TXT +trace

This outputs every authoritative step in the DNS lookup chain, exposing slow resolvers, broken records, or incorrect parent-child DNS delegation paths.

Decoding Your SPF Record Structure and Syntax

To troubleshoot an SPF record, you must know how to parse what dig returns. An SPF record is a string of text evaluated from left to right. It contains three primary components: the version prefix, mechanisms, and modifiers/qualifiers.

1. The Version Prefix

An SPF record must always start with exactly v=spf1. It must be in lowercase, and no spaces are permitted between the letters, the equal sign, or the digit.

2. Mechanisms

Mechanisms designate which hosts are authorized to send mail on behalf of the domain. If a sender matches a mechanism, the evaluation process ends, and the qualifier associated with that mechanism is applied.

  • ip4: Specifies an IPv4 address or subnet range (e.g., ip4:192.168.10.1 or ip4:192.168.0.0/16).
  • ip6: Specifies an IPv6 address or subnet range (e.g., ip6:2001:db8::/32).
  • a: Evaluates the A or AAAA records of the domain (e.g., a:mail.targetdomain.com or simply a to match the current domain's main IP).
  • mx: Evaluates the MX records of the domain, authorizing the inbound mail servers to also send outbound mail.
  • include: Delegates authority to a third-party domain's SPF record (e.g., include:_spf.google.com or include:spf.protection.outlook.com).
  • redirect: Points to a different domain's SPF record to manage multiple domains with a single central policy.
  • exists: Executes a reverse DNS check (less common; used for complex network authorization schemas).
  • all: Matches any host. This must always sit at the very end of the record as a catch-all mechanism.

3. Qualifiers

Each mechanism is prefixed with a qualifier. If no qualifier is defined, the default is + (Pass).

  • + (Pass): The sender is authorized to send mail.
  • - (Fail): The sender is unauthorized. The receiving mail server should reject the email immediately.
  • ~ (Soft Fail): The sender is unauthorized. However, instead of rejecting the email outright, the receiving server is asked to accept it but flag it as suspicious or mark it as spam. This is highly recommended when transitionally deploying SPF.
  • ? (Neutral): No assertion is made about the sender's validity. The email is treated as if no SPF record existed.

The Recursive Hunt: Auditing Nested Includes and the 10-Lookup Limit

One of the most common and difficult issues with SPF configurations is the 10 DNS lookup limit. RFC 7208 Section 4.6.4 dictates that during the evaluation of an SPF record, a mail transfer agent (MTA) must limit the total number of DNS queries to no more than 10. This design prevents infinite recursive loops and defends receiving mail servers against Domain Name System amplification DDoS attacks.

If your record requires 11 or more DNS queries to resolve, the validating MTA returns a PermError (Permanent Error), and SPF checks fail completely for your legitimate emails.

Most sysadmins fail to realize how quickly their records reach this limit because third-party service providers hide nested lookups inside their include statements.

Which Mechanisms Count Toward the 10-Lookup Limit?

  • These count (+1 lookup each): include, a, mx, exists, and redirect.
  • These DO NOT count (0 lookups): ip4, ip6, and all (since they are raw text values evaluated directly in-line, triggering no DNS queries).

How to Trace and Count Nested Lookups Using DIG

Let’s perform a manual recursive analysis on a hypothetical domain, company.com, to map out its lookup hierarchy using dig.

Step 1: Check the Parent Record

First, query the parent domain's TXT record:

dig company.com TXT +short | grep "v=spf1"

Output:

"v=spf1 include:_spf.google.com include:sendgrid.net mx ~all"

Let’s start our lookup counter:

  • include:_spf.google.com (+1 lookup)
  • include:sendgrid.net (+1 lookup)
  • mx (+1 lookup)
  • Current Total: 3 lookups

Step 2: Resolve the First Nested Level (_spf.google.com)

Since include statements act as recursive pointers, we must perform a lookup on the delegated domain:

dig _spf.google.com TXT +short

Output:

"v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"

These three new include statements must be added to our counter:

  • include:_netblocks.google.com (+1 lookup)
  • include:_netblocks2.google.com (+1 lookup)
  • include:_netblocks3.google.com (+1 lookup)
  • Current Total: 6 lookups

Now we must query these individual blocks to see if they nested even deeper:

dig _netblocks.google.com TXT +short

Output:

"v=spf1 ip4:172.217.0.0/16 ip4:172.253.0.0/16 ip4:108.177.0.0/17 ~all"

Because this record contains only ip4 mechanisms, it triggers 0 further DNS lookups. The same is true for _netblocks2 and _netblocks3. Our Google Google Workspace path is fully resolved.

Step 3: Resolve the Second Nested Level (sendgrid.net)

Now we must examine the Sendgrid inclusion from Step 1:

dig sendgrid.net TXT +short

Output:

"v=spf1 include:u12345.wl.sendgrid.net ~all"

This adds another lookup:

  • include:u12345.wl.sendgrid.net (+1 lookup)
  • Current Total: 7 lookups

Let’s resolve that final sub-domain:

dig u12345.wl.sendgrid.net TXT +short

Output:

"v=spf1 ip4:167.89.0.0/17 ~all"

This contains only ip4, which adds 0 lookups. Our total lookup count for company.com resolves safely to 7, meaning this record complies with the RFC limit.

If your total lookup count is 11 or higher, you must optimize your record using a technique called SPF flattening, where you replace third-party domains directly with their resolved IPv4/IPv6 addresses.

Diagnosing Common SPF Misconfigurations with DIG

By examining raw dig outputs, you can immediately identify critical configuration mistakes that disrupt outbound email flows. Let's look at the four most common issues and how to resolve them.

1. The Multiple SPF Records Error

Publishing more than one SPF record on a single domain is a catastrophic error. MTAs will not evaluate multiple records; instead, they will instantly throw a PermError.

If you run dig and see two lines starting with v=spf1, your email flow is broken:

$ dig broken.com TXT +short | grep "v=spf1"
"v=spf1 include:_spf.google.com ~all"
"v=spf1 include:spf.protection.outlook.com -all"

How to Fix It: Consolidate these into a single, cohesive TXT record that references both services:

"v=spf1 include:_spf.google.com include:spf.protection.outlook.com ~all"

2. Syntax Typos and Stray White Spaces

DNS parser engines are highly sensitive to formatting. Common mistakes include:

  • Colons instead of equal signs (e.g., v:spf1 instead of v=spf1).
  • Spaces where they do not belong (e.g., include: _spf.google.com with a space after the colon).
  • Spelling mistakes in mechanism names (e.g., ipv4: instead of ip4:).

Running dig +short will display these text values in raw form, allowing you to carefully read through the mechanisms to isolate typos.

3. Smart Quotes / Unicode Typographical Quotes

If you draft your DNS records in word processors like Microsoft Word, Google Docs, or Slack before copying them into your hosting provider's panel, standard straight ASCII quotes (") are often automatically replaced with styled curly quotes ( and ). These curly quotes break the standard text parsing on receiving mail systems.

If dig returns escape characters or non-standard quote shapes, go back to your domain registrar, delete the record, type it directly into a plain text editor, and re-publish it.

4. Overstepping the 255-Character TXT String Limit

Per RFC 1035, a single text string within a DNS TXT record can have a maximum length of 255 octets (255 characters). If your SPF record contains multiple long third-party inclusions, it may exceed this length, which can lead to parsing problems or truncated DNS responses.

To safely store an SPF record that is longer than 255 characters, you must split the record into multiple double-quoted strings contained inside a single TXT record. dig will represent this formatted division like this:

"v=spf1 include:_spf.google.com include:spf.protection.outlook.com include:mail.zendesk.com " "include:sendgrid.net include:marketing.hubspot.com ~all"

When a receiving mail server parses this record, it will concatenate the split strings with no spacing. Therefore, when you format this split record, ensure there is a space right before the closing double quote of the first split string (e.g., ...zendesk.com ").

Command Line Showdown: DIG vs. NSLookup vs. PowerShell

While system administrators rely on dig because of its clean stdout formatting and direct name querying capabilities, other command-line tools can also get the job done. Here is a look at how they stack up against each other:

Feature dig nslookup PowerShell (Resolve-DnsName)
Availability Native on Linux/macOS; installable on Windows Native on Windows/Linux/macOS Native on Windows 8+ & Windows Server
Direct DNS Querying Yes (via @nameserver) Yes (via server command) Yes (via -Server parameter)
Path Tracing Yes (via +trace) No No
Object Output No (Raw Text) No (Raw Text) Yes (structured .NET Objects)
Short Output Option Yes (via +short) No No
Ease of Scripting Excellent Poor (parsing headers is difficult) Excellent (native object pipelining)

Running SPF Lookups on Other CLIs

If you are on a legacy Windows system without access to dig, you can perform an SPF lookup using nslookup:

nslookup -type=TXT targetdomain.com

Or, if you are working within a modern Windows PowerShell terminal, use the native Active Directory / DNS module cmdlet:

Resolve-DnsName -Name targetdomain.com -Type TXT

Frequently Asked Questions (FAQ)

How do I clear my DNS cache to verify a new SPF record?

If you run dig targetdomain.com TXT and continue to see your old, outdated SPF record, your local operating system or network resolver has cached the old query. To solve this, you can:

  1. Query the authoritative DNS server directly using dig @ns1.yournameserver.com targetdomain.com TXT.
  2. Clear your local computer’s DNS cache. On macOS, run sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder. On Windows, run ipconfig /flushdns in Command Prompt.
  3. Query a public non-cached resolver like Cloudflare's debug service using dig @1.1.1.1 targetdomain.com TXT.

Does dig check SPF records for subdomains automatically?

No. SPF records are not inherited by subdomains automatically. If you send emails from an address like [email protected], you must publish a dedicated SPF TXT record for mail.company.com. To check it, query the subdomain explicitly:

dig mail.company.com TXT +short

Can I check DKIM and DMARC records using dig?

Yes, both DKIM and DMARC are published as DNS TXT records. However, they reside under specific selector and sub-domain pathways.

  • To check DMARC: Run dig _dmarc.yourdomain.com TXT.
  • To check DKIM: Run dig selectorname._domainkey.yourdomain.com TXT, replacing selectorname with the specific identifier provided by your email service (e.g., google or s1).

What does "no answers found" mean when querying a domain?

If the response header returns status: NOERROR but the ANSWER SECTION is completely blank, it means the target domain exists but does not have any TXT records published at its root level. If you see status: NXDOMAIN, the domain name itself is not active or is misspelled.

Conclusion

Checking your SPF record using the dig command provides clean, real-time diagnostic results without the cache lag or security compromises of online lookup pages. By mastering basic query syntax, utilizing powerful flags like +short and authoritative queries, and carefully auditing nested includes to stay under the 10-lookup limit, you can easily troubleshoot email authentication errors and protect your domain's sender reputation. Keep dig in your standard admin toolbox for fast, secure, and precise DNS management.

Related articles
DNS MX History: How to Look Up and Recover Past Mail Records
DNS MX History: How to Look Up and Recover Past Mail Records
Need to perform a DNS MX history lookup? Discover how to find past domain mail records, track down delivery issues, and reconstruct lost email paths.
May 21, 2026 · 17 min read
Read →
MXToolbox MX Check: The Ultimate Email Troubleshooting Guide
MXToolbox MX Check: The Ultimate Email Troubleshooting Guide
Learn how to use MXToolbox MX check, TXT lookup, and PTR checks to diagnose DNS errors, bypass spam filters, and guarantee 100% email deliverability.
May 21, 2026 · 16 min read
Read →
The Ultimate MX Check Up Guide: Solve Email Delivery Issues
The Ultimate MX Check Up Guide: Solve Email Delivery Issues
Run a complete MX check up to diagnose email delivery failures. Learn how to perform an online mx check and optimize your domain's DNS settings.
May 21, 2026 · 15 min read
Read →
Guide to Letter Clicker Counter: Digital Tools & Tactile Toys
Guide to Letter Clicker Counter: Digital Tools & Tactile Toys
Discover how a letter clicker counter works, from digital keyboard tally tools for productivity to custom mechanical fidget keycaps for stress relief.
May 21, 2026 · 14 min read
Read →
GIF for Discord Avatar: Easy Setup & Custom Design Guide
GIF for Discord Avatar: Easy Setup & Custom Design Guide
Want to set a cool GIF for Discord avatar? Learn the latest specs, step-by-step upload guides for desktop and mobile, and non-Nitro workarounds here.
May 21, 2026 · 12 min read
Read →
Basal Metabolic Intake: Calculate and Use Your BMR Safely
Basal Metabolic Intake: Calculate and Use Your BMR Safely
What is basal metabolic intake, and how does it drive weight loss? Learn how to calculate your BMR and design an optimized, safe daily calorie plan.
May 21, 2026 · 16 min read
Read →
iLovePDF Excel ke Word: How to Convert Excel to Word Online
iLovePDF Excel ke Word: How to Convert Excel to Word Online
Searching for ilovepdf excel ke word conversion? Learn the exact 2-step workaround and native methods to convert spreadsheets without losing formatting.
May 21, 2026 · 13 min read
Read →
How to Image Reduce MB to KB: Complete Compression Guide
How to Image Reduce MB to KB: Complete Compression Guide
Need to reduce image files from MB to KB? Learn how to compress your photos online, on Windows, Mac, iOS, or Android without losing quality.
May 21, 2026 · 17 min read
Read →
Kapwing Meme Editor: The Ultimate Guide to Viral Memes
Kapwing Meme Editor: The Ultimate Guide to Viral Memes
Master the Kapwing meme editor to create viral video, image, and GIF memes. Explore key features, step-by-step tutorials, AI tools, and smart alternatives.
May 21, 2026 · 14 min read
Read →
How to Convert OFX to Excel Online Safely (Step-by-Step)
How to Convert OFX to Excel Online Safely (Step-by-Step)
Convert bank OFX files to Excel Online safely. Learn how to transform OFX to XLSX using secure local tools, Python scripts, or Power Query.
May 21, 2026 · 13 min read
Read →
Related articles
Related articles