Reading DMARC Aggregate Reports: the XML
Aggregate reports show who is sending as your domain. How to read the XML, what each field means, and how to tell spoofing from a broken forwarder.
What aggregate reports are
When you publish a DMARC record with a rua= address, receiving mail servers — Google, Microsoft, Yahoo, and thousands of others — send you a daily XML summary of every message they saw claiming to be from your domain. Each report covers one reporting period from one receiver, and it answers three questions:
- Who is sending as you? (source IP and volume)
- Did they pass SPF and DKIM?
- Did those pass results align with your
From:domain?
Raw, the XML is unfriendly. But once you know the shape, it is the single most useful artifact in email authentication — it is how you find the systems you forgot about and the attackers you did not know about.
Anatomy of a report
Every report opens with metadata and the policy the receiver applied:
<report_metadata>
<org_name>google.com</org_name>
<date_range><begin>...</begin><end>...</end></date_range>
</report_metadata>
<policy_published>
<domain>yourdomain.com</domain>
<p>reject</p>
<sp>reject</sp>
<pct>100</pct>
</policy_published>
Then comes the part that matters — one <record> per sending source:
<record>
<row>
<source_ip>203.0.113.10</source_ip>
<count>42</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>pass</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>yourdomain.com</header_from>
</identifiers>
<auth_results>
<dkim><domain>yourdomain.com</domain><result>pass</result></dkim>
<spf><domain>yourdomain.com</domain><result>pass</result></spf>
</auth_results>
</record>
Read it like this: 42 messages came from 203.0.113.10, claiming to be from yourdomain.com, and they passed both DKIM and SPF with alignment. That is a healthy, legitimate source.
The fields that matter most
source_ip— who actually sent the mail. Reverse-look it up. Recognize it (your ESP, your mail server) or you do not.count— how many messages. A high count from an unknown IP is your first spoofing signal.policy_evaluated— the aligned pass/fail. This is the verdict DMARC acts on.auth_results— the raw SPF/DKIM result before alignment. The gap between this andpolicy_evaluatedis almost always an alignment problem.disposition— what the receiver did:none,quarantine, orreject.
Key distinction:
auth_resultscan say SPFpasswhilepolicy_evaluatedsays SPFfail. That means the mail authenticated against some domain — just not yours. Classic misalignment, and exactly what attackers exploit.
Reading the four common patterns
Pass / aligned. Both checks pass and align. Legitimate, authorized mail. Nothing to do.
Pass raw, fail aligned. SPF or DKIM passes but against the wrong domain. Usually a third-party platform signing with its own domain. Fix the alignment — do not ignore it.
Fail / forwarded. SPF fails but DKIM passes. Typically a mailing list or forwarder that rewrote the path. DKIM survives forwarding, which is why alignment on DKIM is what you lean on.
Fail / unknown source. Both fail, from an IP you do not recognize, often in volume. This is the one to investigate — it is spoofing until proven otherwise.
Spotting spoofing
The reports make impersonation visible. Look for:
- Unfamiliar source IPs sending in volume with both checks failing.
- Geographic anomalies — bursts from networks where you have no infrastructure.
- Failing mail that spikes around a phishing campaign against your brand or customers.
While you are at p=none, those messages still reached inboxes — the report is your evidence to justify moving to enforcement. Once you are at p=reject, the same records show the receiver rejecting the spoof. That is the system working: you can see the attack and see it being blocked.
From XML to insight
Nobody should read raw XML at scale — a handful of receivers a day across several domains is thousands of lines. The job is aggregation: group by source, resolve IPs to organizations, separate aligned-pass from everything else, and surface the unknowns. That is exactly what DDMARC does — turning the daily flood of reports into a readable view of who sends as you and what is failing.
If you are using these reports to drive toward enforcement, pair this with the rollout playbook. The reports tell you when it is safe to advance; the playbook tells you how.
Questions we get asked
A DMARC aggregate report is an XML file sent by receiving mail servers — such as Google, Microsoft, and Yahoo — summarizing every message they received that claimed to be from your domain during a reporting period. Each report shows the source IP, message count, and whether SPF and DKIM passed and aligned.
auth_results shows the raw SPF and DKIM outcome before alignment is checked. policy_evaluated shows the aligned result that DMARC actually acts on. A message can show SPF pass in auth_results but SPF fail in policy_evaluated — meaning it authenticated against a different domain, not yours. That gap is almost always an alignment problem.
Look for source IPs you do not recognize, especially those sending in volume with both SPF and DKIM failing in the policy_evaluated section. Geographic anomalies — bursts from networks where you have no infrastructure — are another signal. When you are at p=none these messages still reach inboxes; the report gives you the evidence to justify moving to enforcement.
Any mail server that receives email claiming to be from your domain will send aggregate reports if you have a rua= address in your DMARC record. Reports can come from small regional ISPs, corporate mail gateways, and international providers that your recipients use. This is expected — each report tells you about traffic that receiver saw from your domain.
Field notes, twice a month.
When a mailbox provider changes the rules, you hear it here with the record you need to change. No digest, no roundup, no product news.
DMARC field notes, twice a month, from PlatOps Security, LLC (Gaithersburg, MD). We use your address only to send it. Unsubscribe with one click in any issue. Privacy policy.