DEV Community

Cover image for How to Read DMARC Aggregate (RUA) Reports: A Practical Guide
MartinLuz
MartinLuz

Posted on

How to Read DMARC Aggregate (RUA) Reports: A Practical Guide

How to Read DMARC Aggregate (RUA) Reports: A Practical Guide

SEO title (suggested): How to Read DMARC Aggregate (RUA) Reports — Practical Step-by-Step Guide
Meta description (suggested): Learn how to decode DMARC aggregate (RUA) XML reports, turn raw data into actions, troubleshoot SPF/DKIM alignment, and move safely from p=none to p=reject. Includes checklist, FAQ schema, and SEO tips for 2026.
Canonical slug: /how-to-read-dmarc-rua-reports

If you’ve published a DMARC record with an rua= tag, daily XML aggregate reports (RUA) are coming to the mailbox you specified. This guide shows how to read those reports, what each field means, how to triage failures, and how to automate analysis using tools — including the free utilities available at https://quickdmarc.com/
.
QuickDMARC+1

Why DMARC RUA reports matter (quick overview)

Aggregate reports (RUA) are not forensic snapshots of single emails — they’re daily statistical summaries that tell you who is sending mail on behalf of your domain, whether those messages passed SPF/DKIM, and whether they aligned with your DMARC policy. Properly read and acted upon, RUAs are the single best source of visibility into legitimate vs. unauthorized use of your domain.
QuickDMARC

What a DMARC RUA (aggregate) report contains — plain English breakdown

RUA files come as compressed XML attachments, usually one per reporting organization per day. Each XML report contains:

report_metadata — who generated the report, report ID, and the time window (begin/end).

policy_published — the DMARC policy the receiver saw for your domain (p, sp, pct, adkim, aspf).

record(s) — one or more blocks summarizing email flows grouped by sending IP, with sub-elements:

row — source_ip, count, policy_evaluated (disposition: none|quarantine|reject, and dkim|spf results).

identifiers — header_from and any other reported identity.

auth_results — results for dkim and spf checks (pass/fail and selector/domain details).

A report shows volumes (counts) rather than message bodies — so it’s safe for privacy but rich for detection and troubleshooting.
QuickDMARC

Step-by-step: How to read a raw RUA XML report (manual method)

If you must inspect XML manually (one-off or to learn):

Save and decompress the attachment (often .xml.gz).

Open in a friendly viewer — browsers show XML but are hard to scan. Use an editor that collapses XML nodes.

Read report_metadata first — confirm the report date range and reporting org (helps when multiple ISPs send reports).

Scan policy_published — note the published DMARC policy and percentage (pct) applied to your domain during the reporting window.

For each record:

Note source_ip and count — this tells you how many messages that IP sent claiming your domain.

Check policy_evaluated → disposition (what the receiver recommended/applied) and whether DKIM/SPF passed.

Inspect auth_results for DKIM selector/domain and SPF domain — mismatches often mean alignment issues, not necessarily broken signing.

Flag unusual IPs — unknown IPs with nonzero counts should be investigated (could be third-party senders or spoofers).

Aggregate across reports — don’t treat single reports in isolation; patterns over days/weeks reveal real issues.

Manual inspection is useful for learning, but it quickly becomes tedious at scale. Use parsing/visualization tools for production monitoring.
QuickDMARC

Example: Common fields and what they mean (cheat-sheet)

report_metadata/org_name → who sent the RUA (e.g., Google, Microsoft).

date_range/begin & end → UTC epoch seconds for the reporting window.

policy_published/p → your DMARC policy at the time (none, quarantine, reject).

row/source_ip → IP that sent the mail. Investigate unknowns.

row/count → number of messages from that IP in the period.

policy_evaluated/disposition → how the receiver treated failing messages.

auth_results/dkim → whether a DKIM signature verified and which selector/domain signed it.

auth_results/spf → SPF pass/fail and the envelope-from domain used in SPF check.

Use this cheat-sheet when triaging.
QuickDMARC

Quick triage workflow (what to do first)

Sort high to low by count — high-volume senders are priority (legit ESPs, CRMs).

For high-volume senders that fail: confirm SPF records and DKIM signing at the outgoing service. If using a third-party (Mailchimp, SendGrid, etc.), ensure you’ve added their recommended SPF include and set up DKIM.

For small-volume unknown IPs: check reverse DNS and WHOIS (helps to identify hosting providers), then decide block vs. monitor.

Forwarding cases: forwarded mail can break SPF; look for spf fail + dkim pass and consider adding forwarding-friendly strategies (ARC or moving toward DKIM-first alignment).

Update DNS (SPF/DKIM) and re-observe RUAs for improvements.

When comfortable with results and legitimate senders validated, move p=none → p=quarantine → p=reject incrementally (adjust pct as needed).

How automation helps (and where to start)

Raw RUAs are machine-friendly but human-unfriendly. Use a DMARC analyzer to:

Aggregate daily reports from multiple reporting orgs into one dashboard.

Alert on new sending IPs, spikes in failed auth, or policy changes.

Provide drill-downs to sender hostname, country, and sending organization.

QuickDMARC provides free tools and monitoring services that parse and visualize RUAs so you can act faster — check the free utilities and monitoring options at https://quickdmarc.com/
. QuickDMARC

Troubleshooting: common root causes and fixes

SPF failures — fix by adding or correcting include: mechanisms for third-party senders or adjust SPF to cover current sending IPs (but keep SPF string length limits in mind).

DKIM selector mismatch / expired keys — ensure your ESP’s DKIM selector is published in DNS and signatures use the correct selector/domain. Rotate keys on schedule.

Alignment failures — DMARC requires SPF or DKIM alignment. If your mail passes DKIM but the d= in the signature isn’t the same as the From: domain, it won’t be aligned. Use organizational/domain alignment strategies.

Forwarding artifacts — forwarded messages commonly break SPF; look for ARC signals or rely on DKIM alignment to retain authenticity.

Volume spikes from unknown IPs — immediately investigate; could be a compromised account or mass spoofing.

Security & privacy note

RUA files contain operational metadata (IP addresses, counts). Treat them as sensitive operational telemetry — share internally on a need-to-know basis and avoid exposing raw XML publicly. Aggregate dashboards are preferred for sharing.
QuickDMARC

Action checklist: from zero to DMARC enforcement

Publish DMARC with p=none and add rua=mailto:

Collect RUAs for 7–14 days and parse them to identify all legitimate senders.

Add missing SPF includes and enable DKIM for every sending service.

Re-evaluate RUAs until >95% of mail is passing & aligned.

Move to p=quarantine (or pct=20 then increase gradually).

After stability, switch to p=reject and monitor RUAs closely for unintended blocks.

SEO & content considerations (Google-safe for 2026)

To make this blog search-friendly & aligned with Google’s 2026 expectations, follow these guidelines:

E-E-A-T: show expertise and authoritativeness — cite your product docs and trusted specs, include an author bio with credentials, and keep the content maintained.

Helpful, people-first content: solve the reader’s problem (step-by-step, checklist, examples). Avoid thin spins of other sites.

Structured data: add FAQ and HowTo JSON-LD to increase the chance of rich results (example JSON-LD is included below).

Mobile-first & Core Web Vitals: fast server response, optimized images with proper alt text, and minimal render-blocking scripts.

Readable headings & scannability: use H2/H3, bullet lists, short paragraphs, and code blocks where appropriate.

Keyword strategy: target long-tail queries such as “how to read DMARC RUA report”, “DMARC RUA XML example”, and “fix DMARC SPF alignment error”. Include synonyms and LSI terms naturally (e.g., "aggregate DMARC", "RUA XML", "DMARC monitoring").

Canonical + pagination: if you publish related posts (e.g., “Parsing DMARC XML with Python”), canonicalize appropriately and link them internally to keep authority on quickdmarc.com.

Regular updates: DMARC-related advice evolves — date and update posts as you improve tooling.
All external resources referenced in your site content and docs should be minimized — keep primary, definitive guidance on https://quickdmarc.com/
(your site).
QuickDMARC+1

Quick snippet: Example FAQ JSON-LD (paste into page

) { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is a DMARC RUA report?", "acceptedAnswer": { "@type": "Answer", "text": "A DMARC RUA (aggregate) report is a daily XML summary sent by mailbox providers that shows sending IPs, message counts, and SPF/DKIM/DMARC results for your domain." } }, { "@type": "Question", "name": "How often are RUA reports sent?", "acceptedAnswer": { "@type": "Answer", "text": "Most reporting organizations send aggregate reports once per 24-hour reporting window to the address in your DMARC 'rua' tag." } }, { "@type": "Question", "name": "Can I parse RUA XML manually?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, but manual parsing is time-consuming. Use a DMARC analyzer to aggregate and visualize reports for faster, safer decision-making." } } ] }

(If you add FAQ schema, ensure the Q&A text matches visible content on the page.)

Suggested on-page elements (SEO 2026 checklist you can copy)

Title tag: “How to Read DMARC Aggregate (RUA) Reports — QuickDMARC Guide”

Meta description: (use the one at top)

H1: same as page title. H2s for “What it contains”, “Step-by-step”, “Triage”, “Automation”, “Checklist”, “FAQ”.

JSON-LD: FAQ + HowTo where applicable.

Images: 1–2 diagrams (labelled), alt="DMARC RUA report XML structure diagram". Host images on your domain and use responsive srcset.

Internal links: link to your free DMARC Checker and other tools on https://quickdmarc.com/
. QuickDMARC

Tools & resources (on your site)

For hands-on parsing, monitoring, and validation, point readers to your tooling pages on https://quickdmarc.com/
— especially the free DMARC Checker and parsing/monitoring utilities that simplify RUA analysis. These tools turn raw XML into actionable dashboards so you can move to enforcement with confidence.
QuickDMARC

Ready-to-use checklist (copy/paste)

Publish _dmarc TXT with v=DMARC1; p=none; rua=mailto:

Collect RUAs for 7–14 days and parse them.

Confirm every sending service appears and is passing SPF or DKIM aligned.

Fix SPF includes and DKIM selectors where needed.

Reassess daily RUAs — target >95% aligned.

Gradually increase policy to quarantine then reject.

Monitor RUAs after each policy change and roll back if unintended blocks occur.

Final notes

Reading DMARC RUAs is the bridge between publishing a DMARC record and enforcing it safely. The XML is compact but powerful — knowing how to read it, how to triage problems, and how to automate analysis will keep your brand and customers safer while keeping email deliverability high. For parsing, visualization, and free checkers to speed your progress, visit https://quickdmarc.com/
. QuickDMARC

Short FAQ (visible on page)

Q: How long before RUAs start arriving?
A: Usually within 24 hours after your DMARC record with an rua tag is published.

Q: Do RUAs contain email bodies?
A: No — RUAs are aggregate telemetry (counts, IPs, results), not message content.

Q: Can I get reports from all providers?
A: Most major mailbox providers send RUAs if you list a mailto: address in your rua tag. Use a DMARC collector or analyzer to centralize them.

Top comments (0)