DMARC record parser

Reads one DMARC record as text with the DMARC check's rules (RFC 9989): p, sp, np, psd, t, adkim, aspf, rua and ruf, historic and unknown tags. Nothing is looked up, so which record applies to a domain and external report destinations are not checked.

Updated 2026-10-27

Free, no account, nothing is stored

What this tool checks

The record is read with the rules of the DMARC check, following RFC 9989:

  • Version: the text must start with v=DMARC1, otherwise it is DMARC_SYNTAX_ERROR.
  • Policies: p, sp, np and psd, with DMARC_INVALID_POLICY for a value receivers do not know.
  • Tags: t, adkim, aspf, rua and ruf, historic tags such as pct, and tags DMARC does not define.

How to read the result

DMARC_POLICY_NONE and DMARC_TESTING_MODE mean the record only monitors. DMARC_NO_RUA means no aggregate reports are requested, so you will not see who sends mail as your domain.

Limitations

  • Nothing is looked up: inherited records, the organisational domain and external report destinations need the DMARC check.
  • A record split into several quoted strings must be joined first.

Use it from code

API reference for DMARC record parser

curl -i -X POST https://api.lookproof.dev/v1/mail/dmarc-parse \
  -H 'content-type: application/json' \
  -d '{"record": "v=DMARC1; p=quarantine; rua=mailto:[email protected]; adkim=s"}'

A request without payment is answered with 402 Payment Required and the exact price. See the API reference.

Limits

InputDMARC record
Deadline2 seconds
FreshnessComputed from the input; nothing is looked up
Price$0.002 per check

Findings this tool can report

DMARC (9)

Frequently asked questions

How is this different from the DMARC check?

The DMARC check finds the record that applies to a domain in DNS, including records inherited from a parent. The parser reads only the text you paste, so you can test a record before you publish it. The tags and findings are the same.

Which policy is shown?

The record's own p=, sp= and np=. Which of them applies to a given name depends on where the record is published, which the parser cannot know; a note says so.

Is the report address checked?

Only its syntax. When rua points to another domain, that domain must publish a record that accepts the reports (RFC 9989 external destination verification). That needs DNS, so the result notes it instead.