Only 12.0% of domains publish a DMARC policy asking for enforcement
24.3% publish a DMARC record at all, and 49.6% of those set a policy stronger than "do nothing". Publication rates are the figure usually quoted; this is the one that describes what a receiver is actually told to do.
Almost none of the variation in mail authentication is organizations deciding differently. It is whoever provisioned the domain deciding for them.
SPF is published 1.9× as often as DMARC
44.9% of resolving domains publish SPF against 24.3% publishing DMARC — most of the estate has taken the first step and not the second.
Go deeper
What the MX records themselves say
Formally declare they accept no mail
4,520,763 of 175.5M domains publishing MX
Source: Datazag · as of 2026-09-24
4,520,763 domains publish the RFC 7505 null MX — deliberate, correct, and confirmed against live DNS.
Publish an MX that cannot deliver
2,162,728 of 175.5M domains publishing MX
Source: Datazag · as of 2026-09-24
2,162,728 domains where every MX host is undeliverable. 80% are parked — one platform default, not organizations breaking their own mail.
Every mail figure, citable
Free to quote with attribution. Open the notes on a card before you do.
Domains publishing an SPF record
163,361,319 of 363.6M resolving domains
Source: Datazag · as of 2026-09-24
Domains publishing a DMARC record
88,217,792 of 363.6M resolving domains
Source: Datazag · as of 2026-09-24
Domains publishing MTA-STS
319,063 of 363.6M resolving domains
Source: Datazag · as of 2026-09-24
Domains publishing BIMI
209,157 of 363.6M resolving domains
Source: Datazag · as of 2026-09-24
Domains publishing an SPF record, excluding parked domains
140,864,837 of 331.4M resolving domains not detected as parked
Source: Datazag · as of 2026-09-24
Domains publishing a DMARC record, excluding parked domains
83,439,551 of 331.4M resolving domains not detected as parked
Source: Datazag · as of 2026-09-24
Parked domains publishing an SPF record
22,496,482 of 32.2M parked domains
Source: Datazag · as of 2026-09-24
Parked domains publishing a DMARC record
4,778,241 of 32.2M parked domains
Source: Datazag · as of 2026-09-24
Parked domains publishing DMARC that set p=none
4,222,664 of 4.8M parked domains publishing DMARC
Source: Datazag · as of 2026-09-24
Domains publishing an MX record
176,365,240 of 363.6M resolving domains
Source: Datazag · as of 2026-09-24
Domains publishing an MX record, excluding parked domains
163,543,445 of 331.4M resolving domains not detected as parked
Source: Datazag · as of 2026-09-24
Parked domains publishing an MX record
12,821,795 of 32.2M parked domains
Source: Datazag · as of 2026-09-24
Domains with an MX that can actually receive mail
169,523,515 of 363.6M resolving domains
Source: Datazag · as of 2026-09-24
Domains with a working MX, excluding parked domains
158,632,366 of 331.4M resolving domains not detected as parked
Source: Datazag · as of 2026-09-24
Parked domains with an MX that can actually receive mail
10,891,149 of 32.2M parked domains
Source: Datazag · as of 2026-09-24
DMARC records at enforcement (p=quarantine or p=reject)
43,781,239 of 88.2M domains publishing DMARC
Source: Datazag · as of 2026-09-24
DMARC records set to p=none
44,379,368 of 88.2M domains publishing DMARC
Source: Datazag · as of 2026-09-24
DMARC records with an invalid policy value
57,185 of 88.2M domains publishing DMARC
Source: Datazag · as of 2026-09-24
DMARC records that neither enforce nor report
35,809,473 of 88.2M domains publishing DMARC
Source: Datazag · as of 2026-09-24
MTA-STS domains with a policy mode on record
232,140 of 319,063 domains publishing MTA-STS
Source: Datazag · as of 2026-09-24
MTA-STS domains whose policy is set to enforce
152,958 of 319,063 domains publishing MTA-STS
Source: Datazag · as of 2026-09-24
Domains whose MX record cannot deliver mail
2,162,728 of 175.5M domains publishing MX
Source: Datazag · as of 2026-09-24
Domains that formally declare they accept no mail
4,520,763 of 175.5M domains publishing MX
Source: Datazag · as of 2026-09-24
Mail-operating domains with no named provider whose primary MX is under their own domain
26,293,212 of 32.7M mail-operating domains with no named provider
Source: Datazag · as of 2026-09-24
Mail-operating domains with no named provider whose primary MX is a third-party domain the catalog does not name
4,134,106 of 32.7M mail-operating domains with no named provider
Source: Datazag · as of 2026-09-24
Mail-operating domains with no named provider whose primary MX cannot take mail
2,241,128 of 32.7M mail-operating domains with no named provider
Source: Datazag · as of 2026-09-24
Third-party MX domains serving mail-operating domains with no named provider
438,151 of across Datazag corpus measurement over gold.dns_wide: primary MX resolved to its registrable domain through lake.ref.public_suffix and matched against lake.ref.provider_catalog
Source: Datazag · as of 2026-09-24
Mail-operating domains with no named provider served by the 1,000 largest uncataloged MX domains
680,912 of 32.7M mail-operating domains with no named provider
Source: Datazag · as of 2026-09-24
Domains on a third-party MX serving 100 or more of them
1,896,303 of 4.1M mail-operating domains with no named provider on a third-party MX
Source: Datazag · as of 2026-09-24
Domains on a third-party MX serving 10 to 99 of them
1,399,221 of 4.1M mail-operating domains with no named provider on a third-party MX
Source: Datazag · as of 2026-09-24
Domains on a third-party MX serving fewer than 10 of them
838,582 of 4.1M mail-operating domains with no named provider on a third-party MX
Source: Datazag · as of 2026-09-24
Domains served by the largest uncataloged third-party MX domain
5,058 of across Datazag corpus measurement over gold.dns_wide: primary MX resolved to its registrable domain through lake.ref.public_suffix and matched against lake.ref.provider_catalog
Source: Datazag · as of 2026-09-24
Query these statistics directly
Every figure on this page is served as Parquet. Same format as the corpus itself.
SELECT * FROM read_parquet('https://observatory.datazag.com/observatory_statistics.parquet');