DMARC Report Analyzer
See who sends mail as your domain — and what fails — before you move to p=reject.
DMARC aggregate reports
DMARC results
Messages per day
By the day each report period starts (UTC).
Sending sources
| Source | Network | Messages | Passed | Failed | DKIM signatures | SPF |
|---|
Reporters and domains
| Reporter | Reports | Messages | Passed |
|---|
| Header from | Policy | Messages | Passed |
|---|
Report rows
| Source IP | Count | DMARC | Disposition | Header / envelope from | DKIM · SPF (raw) | Reporter |
|---|
Networks: IPtoASN (PDDL); country: IP Geolocation by DB-IP (CC BY 4.0) — both built into this page, so the addresses in your reports are not sent anywhere. Check your DMARC record. Check SPF. Check a DKIM key.
About the DMARC Report Analyzer
When your domain publishes a DMARC record with a rua= address, mailbox providers such as Google, Microsoft and Yahoo e-mail you aggregate reports: XML files, usually zipped or gzipped, that list every server that sent mail claiming to be from your domain, how many messages it sent, and whether they passed DKIM, SPF and DMARC. They are hard to read by eye.
Drop the files here — .xml, .xml.gz or .zip, up to 20 at a time — and they are read in your browser into a summary: the share of mail that passed DMARC, a day-by-day chart, every sending source with its network (AS number and name) and country, the DKIM signers and SPF domains it used, the reporters, and plain-language findings such as unknown senders and forwarding. Filter the rows and export them as CSV. Nothing is uploaded.
How to use it
- Save the report attachments from the e-mails sent to your
rua=address. Their names start with the reporter and your domain, such asgoogle.com!example.com!…. - Drop them on the page or choose them — up to 20 files at a time,
.xml,.xml.gzor.zip. Press Try a sample report to see an example first. - Read the pass rate and the findings, then the Sending sources table: every IP address that sent mail as your domain, with its network, messages, and how many passed or failed.
- Use Failing to list only the sources with failed messages. For each, decide: is it one of your services (fix its DKIM or SPF), a forwarder or mailing list (usually fine), or someone spoofing your domain?
- Filter the report rows by domain, reporter or result, and use Download rows CSV, Download sources CSV or Copy summary to keep the results.
Examples
4 rows from receiver.example for example.com (p=none)
183 messages · 87.4% passed DMARC · 23 failed: 203.0.113.66 (no valid signature: possible spoofing) and 198.51.100.25 (signed by lists.example.org: a mailing list)
dkim=pass (example.com), spf=fail (bounces.mailer.example)
DMARC passes: a newsletter service signs with your domain but sends bounces to its own domain, so SPF is not aligned. This is normal; DKIM alone is enough.
Common uses
- Finding every service that sends mail as your domain (newsletters, CRM, helpdesk, invoices) before tightening DMARC.
- Checking that the move from p=none to p=quarantine or p=reject will not block legitimate mail.
- Spotting spoofing: sources on unknown networks that fail both DKIM and SPF.
- Turning a month of reports into one CSV for a security review.
How DMARC passes or fails
DMARC passes when DKIM or SPF passes and the domain it checked is aligned with the domain in the visible From header. The report’s policy_evaluated section gives the receiver’s verdict for each: dkim and spf there mean “passed and aligned”, which is why a message can show spf=pass under auth_results and still spf=fail under policy_evaluated — SPF passed for another domain, such as a mailing service’s bounce domain. The analyzer counts a message as passing DMARC when the receiver marked DKIM or SPF as passing there.
The raw results under auth_results are shown as DKIM signatures and SPF: the domains that signed or were checked, with their results. A valid signature from a domain that is not yours, on mail that fails DMARC, is the typical mark of a forwarder or a mailing list.
The report format
Aggregate reports are defined in RFC 9990, which with RFC 9989 and RFC 9991 replaces the original DMARC specification, RFC 7489 (its Appendix C held the old XML schema, which many receivers still send). Each report has the reporter (report_metadata), the policy it found in your DMARC record (policy_published: p, sp, and in newer reports np, testing and discovery_method; older ones pct), and one record per sending IP and outcome with a message count. RFC 9990 adds the disposition pass (it passed DMARC under an enforcing policy, so nothing was done) and the override reason policy_test_mode; the reasons mailing_list, trusted_forwarder, local_policy and other were already in RFC 7489, whose forwarded and sampled_out RFC 9990 drops.
Before moving to p=reject
- Collect reports for at least a few weeks, so that services that send rarely (monthly invoices, annual renewals) show up.
- For every failing source that is yours, make it pass: let the service sign with DKIM using your domain (the most robust fix), or add it to SPF if its bounces use your domain.
- Expect some failures from forwarding and mailing lists; receivers often override the policy for them, and the reports say so in the reason.
- Move step by step: p=quarantine first, then p=reject, watching the reports after each change. The DMARC Record Checker checks the record you publish.
Limitations
- Up to 20 report files per analysis (a .zip may contain several reports); files up to 30 MB and reports up to 100 MB of XML.
- Only aggregate (rua) reports are read. Failure (forensic, ruf) reports are individual messages in a different format.
- The day chart groups messages by the day each report period starts (UTC); reporters choose their own periods.
- Networks and countries of the sending addresses come from snapshots built into this page (IPtoASN and DB-IP Lite) and can lag behind recent changes.
Privacy
Your reports are unpacked and read in your browser and never uploaded. To name the networks of the sending addresses the page downloads data files from MySmartCoPilot that cover large blocks of addresses; the addresses themselves are not sent anywhere.
Frequently asked questions
Where do I get DMARC reports?
Publish a DMARC record with a reporting address, for example v=DMARC1; p=none; rua=mailto:dmarc@example.com. Receivers that support reporting then e-mail you a report, usually once a day, as a .zip or .gz attachment. Save the attachments and drop them here.
Why does a message pass DMARC although SPF failed?
DMARC needs only one of DKIM or SPF to pass with an aligned domain. Many sending services keep their own bounce domain, so SPF is aligned with theirs, not yours; if they sign with DKIM for your domain, DMARC still passes.
What does it mean when a source fails both DKIM and SPF?
Either it is a service of yours that is not set up yet, or someone is sending mail that claims to be from your domain. Look at its network and the domains it used: a well-known mail provider or a service you pay for is usually yours; an unknown hosting network sending a few messages is often spoofing.
Are my reports uploaded?
No. The files are unpacked and analysed in your browser. Only the routing and country data files are downloaded from MySmartCoPilot, and they contain no information about your reports.
Why are some reports counted once although I loaded them twice?
Each report has an ID from its reporter. When the same reporter and ID appear twice — the same attachment saved twice, for example — the analyzer counts it once and says so.