Skip to content
← Blog Deliverability

How to read a DMARC report (no XML degree required)

Gmail, Microsoft and Yahoo send you gzipped XML about every email claiming to be your domain. Here are the four fields that matter and how to spot a spoofer.

Add one tag to your DMARC record — rua=mailto:dmarc@yourdomain.com — and something remarkable happens: Google, Microsoft, Yahoo and hundreds of other receivers start sending you a daily accounting of every email that claimed to be your domain. Who sent it, from which IP, and whether it passed authentication.

It’s the only free, global surveillance feed you’ll ever be offered about your own brand. Then you open one, and it’s a gzipped XML file named something like google.com!yourdomain.com!1717286400!1717372800.xml.gz, and most people close it forever.

Don’t. Here’s how to actually read the thing.

What arrives, and when

Each big receiver sends roughly one aggregate report per day covering the previous 24 hours. No report from a provider usually just means no mail claiming to be you hit their servers that day. The reports go to whatever address your rua tag names — if you haven’t set one, do that first with the DMARC Record Generator; reports are the entire value of the p=none phase.

(There’s a second tag, ruf=, for per-message forensic reports. Most receivers stopped sending those for privacy reasons. Don’t wait up.)

The four fields that matter

Strip away the XML ceremony and every report is a table. Each row says:

  1. source_ip — the server that sent mail as your domain.
  2. count — how many messages from that IP in the window.
  3. SPF and DKIM results — pass or fail, with alignment: did the passing domain actually match your From domain?
  4. disposition — what the receiver did about it (none, quarantine, reject).

That’s it. Every DMARC product you’ll ever see is a prettier rendering of those four columns. For one-off reading, drop the .xml or .gz file into our free DMARC Report Viewer — it runs in your browser, nothing gets uploaded, and you get the table instead of the angle brackets.

How to interpret what you see

Rows that pass both SPF and DKIM, high counts — your real infrastructure: Workspace, your campaign tool, your transactional sender. Boring is good.

Rows that pass one and fail the other — usually fine (DMARC needs one aligned pass), but worth understanding. SPF failing on otherwise legitimate mail is classically forwarding — the forwarder’s IP isn’t in your SPF, while DKIM survives the trip.

Rows from IPs you recognize that fail both — the expensive ones. This is your own tool sending unaligned mail: typically a provider signing with its own domain instead of yours. Fix is custom-domain DKIM (here’s how that works).

Rows from IPs you’ve never seen, failing everything — spoofers trying your domain on for size. At p=none they’re being delivered; this is the data that justifies climbing to quarantine and reject. To identify a mystery IP, check its reverse DNS and owner — our DNS Lookup does both.

A note on volume: a handful of failing messages from random IPs is background radiation — every domain on the internet gets impersonated a little. What you’re looking for is patterns: a consistent source, real volume, or your own providers failing.

The 20-minute weekly routine

  1. Open the week’s reports in the viewer.
  2. New source IPs? Identify each one: yours, or noise, or threat.
  3. Any legitimate source below ~98% pass? Fix its SPF include or DKIM.
  4. Note the spoof volume. When your real sources all pass and you’ve watched a full cycle of rare senders, tighten the policy a rung.

That routine is genuinely enough for a small domain. It also gets old around week six — parsing XML attachments is a job for software, which is exactly what Norbelys DMARC monitoring is: every report ingested automatically, sources named, failures flagged when they start, not when you remember to look.

Either way: turn the reports on today. The feed only tells you about the days after you ask.