Skip to content
Back to Blog
Email SecurityFebruary 15, 2026·10 min read

DMARC Report Analyzer: How to Read and Act on Aggregate Reports

DMARC aggregate reports are XML files that show who sends email from your domain. Learn to read, analyze, and act on them.

Cybersecurity analysis representing DMARC reports

DMARC aggregate reports are XML files sent daily by receiving mail servers, detailing how your domain's email performed against SPF and DKIM checks. Understanding these reports is essential for identifying unauthorized senders, diagnosing authentication failures, and strengthening your email security posture. This guide walks through report structure, analysis workflows, and actionable response strategies.

Report Types: Aggregate vs Forensic

FeatureAggregate (rua)Forensic / Failure (ruf)
FormatXML (gzipped)AFRF message (RFC 6591)
FrequencyDaily (typically)Per-failure (real-time)
ContentStatistics: IP, count, SPF/DKIM/DMARC resultsFull message headers of failing emails
PrivacyNo PII—only IPs and countsMay include headers with recipient addresses
AdoptionUniversally supportedMany providers refuse to send forensic reports

ℹ️ Focus on aggregate reports for ongoing monitoring. Forensic reports are useful for debugging specific failures but are rarely sent by major mailbox providers due to privacy concerns.

Aggregate Report XML Structure

Each aggregate report follows the schema defined in RFC 7489 §7. Here is an annotated example:

<feedback>
  <!-- Report metadata: who generated it and the reporting period -->
  <report_metadata>
    <org_name>google.com</org_name>
    <email>noreply-dmarc-support@google.com</email>
    <report_id>17248456789012345678</report_id>
    <date_range>
      <begin>1712880000</begin>  <!-- Unix timestamp: start of period -->
      <end>1712966400</end>      <!-- Unix timestamp: end of period -->
    </date_range>
  </report_metadata>

  <!-- Your published DMARC policy as seen by the reporter -->
  <policy_published>
    <domain>example.com</domain>
    <adkim>r</adkim>   <!-- DKIM alignment: r=relaxed, s=strict -->
    <aspf>r</aspf>     <!-- SPF alignment: r=relaxed, s=strict -->
    <p>reject</p>      <!-- Policy: none, quarantine, reject -->
    <pct>100</pct>     <!-- Percentage of messages policy applies to -->
  </policy_published>

  <!-- One <record> per unique source-IP + result combination -->
  <record>
    <row>
      <source_ip>209.85.220.41</source_ip>
      <count>1524</count>
      <policy_evaluated>
        <disposition>none</disposition>   <!-- Action taken: none, quarantine, reject -->
        <dkim>pass</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <header_from>example.com</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>example.com</domain>
        <result>pass</result>
        <selector>google</selector>
      </dkim>
      <spf>
        <domain>example.com</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
</feedback>

Key Fields Explained

FieldLocationMeaning
source_iprowThe IP address that sent the email. Key for identifying the sending server.
countrowNumber of messages from this IP with the same result combination.
dispositionpolicy_evaluatedWhat the receiver did: none, quarantine, or reject.
dkim / spfpolicy_evaluatedDMARC-level pass/fail (includes alignment check).
auth_resultsrecordRaw SPF and DKIM authentication results before alignment evaluation.
header_fromidentifiersThe domain in the From: header—must align with SPF or DKIM domain.

Analysis Workflow

1. Decompress & Parse — Reports arrive as .gz or .zip attachments. Extract and parse the XML.

2. Separate Pass vs Fail — Group records by DMARC result. Focus on failures first.

3. Identify Source IPs — For each failing source IP, determine ownership via reverse DNS and WHOIS.

4. Classify Sources — Categorize as: legitimate (forgot to update SPF), forwarded mail, or unauthorized/spoofing.

5. Take Action — Update SPF/DKIM for legitimate sources; tighten DMARC policy for spoofing sources.

Identifying Legitimate vs Spoofing Sources

💡 A failing IP that belongs to a known service you use (e.g., SendGrid, Mailchimp, your CRM) is almost certainly a configuration issue, not spoofing. An unknown IP from an unrelated network is likely unauthorized use.

Indicators of a legitimate source with a configuration problem:

  • IP belongs to a service you use (check the provider's published IP ranges).
  • DKIM passes but SPF fails (common when third-party sends on your behalf without SPF include).
  • Consistent, moderate volume matching expected sending patterns.

Indicators of spoofing/phishing:

  • IP belongs to an unknown hosting provider or residential ISP.
  • Both SPF and DKIM fail with no alignment.
  • Irregular volume spikes, especially from geographic regions you don't operate in.

IP Investigation

For each suspicious source IP, perform:

  1. Reverse DNSdig -x 209.85.220.41 to get the PTR record.
  2. WHOIS — Identify the network owner (ISP, cloud provider, or hosting company).
  3. Reputation Check — Query blocklists (Spamhaus, Barracuda) and reputation services.
  4. Geo-location — Map the IP to a country to cross-reference against your expected sending regions.

Escalation Criteria

Escalate to your security team or email administrator when:

  • A single source IP sends > 1,000 messages with both SPF and DKIM failing.
  • Spoofing volume exceeds 10% of your total legitimate email volume.
  • The spoofing source IP is on a known bulletproof hosting network.
  • You detect spoofing patterns targeting your customers or partners.

Automated Processing

For domains receiving more than a handful of reports daily, manual parsing is impractical. Automate with:

  • A dedicated rua mailbox with auto-extraction and XML parsing scripts.
  • Third-party DMARC analytics platforms (Valimail, dmarcian, Postmark) that aggregate and visualize data.
  • Open-source tools like parsedmarc that ingest reports into Elasticsearch for dashboarding.

Common Report Patterns

PatternLikely CauseAction
High volume, SPF pass, DKIM passNormal legitimate trafficNo action needed
SPF fail, DKIM pass, from known providerMissing SPF include: for the providerAdd the provider to your SPF record
SPF pass, DKIM fail, from your own IPDKIM signing not enabled or key mismatchVerify DKIM configuration and selector
SPF fail, DKIM fail, from unknown IPSpoofing or phishing attemptEnsure DMARC policy is p=reject; investigate IP
Small volume, SPF fail, from residential IPAuto-forwarding by a recipientUsually benign; monitor but no action needed

Best Practices

  • Set up a dedicated mailbox or group alias for rua reports—don't send them to a personal inbox.
  • Review reports weekly during DMARC rollout; monthly once policy is at p=reject.
  • Correlate DMARC data with your email marketing and transactional email dashboards.
  • Move to p=reject only after confirming all legitimate sources pass authentication.
  • Keep historical reports for trend analysis—spoofing campaigns often recur.

Common Mistakes

MistakeImpactFix
Ignoring aggregate reportsSpoofing goes undetected; legitimate mail silently failsProcess reports weekly minimum
Setting p=reject without analyzing reportsLegitimate email from third-party senders gets rejectedStart with p=none, analyze, then escalate
Using a personal email for ruaInbox overwhelmed; reports ignoredUse a dedicated functional mailbox
Not investigating failing IPsMisconfigured senders remain brokenLook up every failing IP and categorize
Confusing raw auth_results with DMARC evaluationMisdiagnosing pass/fail statusDMARC pass requires alignment; raw SPF/DKIM pass alone is insufficient

Tools

DMARC Report Analyzer — Upload and parse aggregate XML reports with visual summaries.

DMARC Checker — Verify your published DMARC record syntax and policy.

IP Address Lookup — Investigate source IPs from reports: WHOIS, geolocation, and reputation.

References

🚀 Free ToolZilla tools used in this article

All client-side, no signup, no upload — open them in a new tab while you read:


🎯 DMARC aggregate reports are your email security radar. Parse them regularly, investigate every failing source IP, fix legitimate misconfigurations, and only escalate to p=reject when you're confident all authorized senders pass authentication.

Continue Reading

Related Articles

Free & Private

Explore Our Free Tools

40+ browser-based utilities — fast, private, and always free. No sign-up required.

Browse All Tools