Skip to content
All Articles
Email Authentication

DMARC Reports Explained: How to Read RUA Aggregate and RUF Forensic Reports

DMARC sends you XML reports about who's sending email from your domain. Learn what RUA and RUF reports contain, how to read them, and what to do with the data.

7 min read

What are DMARC reports?

When you publish a DMARC record with reporting tags, receiving mail servers send you reports about email they've received claiming to be from your domain. These reports tell you which servers are sending as your domain, whether they're passing SPF and DKIM, and whether they're aligned with your DMARC policy.

There are two report types: RUA (aggregate reports) and RUF (forensic/failure reports).

RUA: Aggregate reports

Aggregate reports (specified by the rua= tag) are XML files sent once per day by each receiving domain. They contain: - The reporting organization (e.g., Google, Microsoft) - Date range covered - Your DMARC policy at the time - Records of all email claiming your domain as sender, grouped by source IP - SPF and DKIM pass/fail counts for each source - DMARC policy action applied (none, quarantine, reject)

Example rua tag: rua=mailto:dmarc-reports@yourdomain.com

You'll typically receive RUA reports from Gmail, Outlook, Yahoo, and large ISPs. Volume can be high — use a DMARC report processor like dmarcian, Valimail, or EasyDMARC rather than parsing raw XML yourself.

RUF: Forensic reports

Forensic reports (ruf= tag) are sent immediately when an email fails DMARC. They contain a copy of the failing message (headers and sometimes body, depending on the sender's policy).

RUF reports help you diagnose specific failures but may contain sensitive email content. Not all providers send RUF reports — many have disabled them for privacy reasons. Gmail does not send forensic reports.

DMARC failure options (fo= tag): - fo=0 (default): Report only if both SPF and DKIM fail - fo=1: Report if either SPF or DKIM fails - fo=d: Report if DKIM fails - fo=s: Report if SPF fails

Reading an aggregate report

DMARC aggregate reports are compressed XML files. Key elements:

<record>: Each record represents a group of emails from a specific source IP. <source_ip>: The IP that sent the emails <count>: Number of messages from this IP <policy_evaluated>: Whether DMARC policy was applied (none/quarantine/reject) and what the result was (pass/fail) <spf>/<dkim>: Authentication results for each message type

Look for records with DMARC failures from unexpected IPs — these indicate either unauthorized senders using your domain or legitimate sending sources you haven't configured for authentication.

xml
<?xml version="1.0" encoding="UTF-8" ?>
<feedback>
  <report_metadata>
    <org_name>google.com</org_name>
    <email>noreply-dmarc-support@google.com</email>
    <report_id>12345678901234567890</report_id>
    <date_range>
      <begin>1709251200</begin>
      <end>1709337600</end>
    </date_range>
  </report_metadata>
  <policy_published>
    <domain>yourdomain.com</domain>
    <p>quarantine</p>
    <sp>quarantine</sp>
    <pct>100</pct>
  </policy_published>
  <record>
    <row>
      <source_ip>209.85.220.41</source_ip>
      <count>1842</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>
        <selector>google</selector>
      </dkim>
      <spf>
        <domain>yourdomain.com</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
</feedback>

Key DMARC aggregate report XML elements

XML ElementLocationWhat It ContainsWhat to Look For
<org_name>report_metadataThe organization sending the report (e.g., google.com)Major providers: Google, Microsoft, Yahoo, Fastmail
<source_ip>rowIP address that sent emails claiming your domainUnexpected IPs = unauthorized senders or misconfigured services
<count>rowNumber of messages from this source IP in the date rangeHigh count from unknown IP = investigate immediately
<disposition>policy_evaluatedAction taken: none, quarantine, or rejectShould match your DMARC policy p= value
<dkim>policy_evaluatedDKIM alignment result: pass or failFailures from your ESP = DKIM not configured in that service
<spf>policy_evaluatedSPF alignment result: pass or failFailures = sending IP not in your SPF record
<header_from>identifiersDomain in the visible From: headerShould always be your domain
<selector>auth_results/dkimDKIM selector used to sign the messageHelps identify which service signed the email

Using DMARC reports to reach p=reject

The path from p=none to p=reject: 1. Start at p=none with rua= configured 2. Review reports for 2-4 weeks to identify all legitimate senders 3. Ensure each legitimate sender has SPF and DKIM configured 4. Move to p=quarantine at pct=10, then pct=50, then pct=100 5. Monitor reports at each stage for unexpected failures 6. Move to p=reject once 100% quarantine shows no legitimate failures

Check your domain's email health

Run a free scan against 60 blacklists. Validate SPF, DKIM, DMARC, and MX records in seconds.