What a DKIM record does
Your sending service signs each message with a private key and adds a DKIM-Signature header to it. Two tags in that header name the key: d= is the signing domain and s= is the selector. The receiver fetches the matching public key from a TXT record at <selector>._domainkey.<domain> and checks the signature against it (RFC 6376 section 3.6.1).
A domain can publish many DKIM keys, one per selector, so Google, Resend and a newsletter tool can each sign with a key of their own without touching the others. This DKIM record checker reads every selector on its own. Keys don't carry over to subdomains: if mail is signed as updates.yourdomain.com, that name needs its own key, and our guide to DKIM on a subdomain shows one published on a live domain.
How to read your DKIM checker results
Each domain gets one verdict pill:
- DKIM found (green): at least one selector holds a key receivers can use, and nothing else needs fixing.
- Found, with a warning (amber): a usable key is there, but a live key is still in testing mode (
t=y), or another selector is broken: a CNAME that points nowhere, an unreadable key, or two records at one name. - Revoked key only (amber): every key we found has an empty
p=. - DKIM broken (red): we found selectors, but none of them holds a usable key.
- No key at these selectors (amber): nothing at any selector we tried. This is amber, not red, because DNS has no way to list a domain's selectors, so a key under a name we didn't try stays out of sight.
- Couldn't check (grey): DNS didn't answer in time. Run it again in a minute.
- Doesn't exist in DNS (grey): the name has no records at all. Check the spelling.
Next to the pill, each selector we found gets a chip with its key badge, like google · RSA 2048, selector2 · RSA 1024 or fm1 · revoked. When a selector is a CNAME into a sender we recognize, the row names that sender. We only go by where the CNAME points, never by the selector name, since a name like default is used by many hosts.
Open a domain to see each selector's record name, the CNAME it follows, the raw record with a copy button, the parsed tags (p= shown as its length plus its first and last 8 characters) and every finding with its fix. If a zone answers any name under _domainkey with the same wildcard record, the checker says so and doesn't count those answers as keys.
How to find your DKIM selector
The selector is the label before ._domainkey in the record name. There are three ways to find yours:
- Open a message you sent from the domain and view its original (in Gmail: the three dots, then Show original). In the
DKIM-Signatureheader,s=is the selector andd=is the domain it signed for. - Open your sender's DNS settings page. The record name before
._domainkeyis the selector. - Leave the selector field empty, and the checker tries every selector in the table below.
| Sender | Selector | Record type |
|---|---|---|
| Google Workspace | google | TXT |
| Microsoft 365 | selector1, selector2 | CNAME |
| Zoho Mail | zoho (admins can pick another) | TXT |
| Resend | resend | TXT |
| Fastmail | fm1, fm2, fm3 | CNAME |
| SendGrid | s1, s2 | CNAME |
| Cloudflare | cf2024-1 (Email Routing), cf-bounce (Email Sending) | TXT |
| Porkbun | default | TXT |
| Namecheap Private Email | privateemail | TXT |
| Proton | protonmail, protonmail2, protonmail3 | CNAME |
| Mailchimp | k1, k2, k3 | CNAME |
Selectors checked on 31 October 2026. Each sender's name links to its own DKIM help page. Many cPanel hosts also use default, so a key there doesn't mean Porkbun.
Postmark, and Mailyond, which sends through it, use a dated selector ending in pm that changes when the key rotates, so no checker can guess it. Amazon SES uses three generated tokens. Paste yours, or the full host name, like 20260905115320pm._domainkey.updates.yourdomain.com, and the checker splits it into selector and domain.
Each sender keeps its own selector, which is why two senders on one domain don't clash.
DKIM key length and type
RFC 8301 section 3.2 sets the rules for RSA keys: signers must use at least 1024 bits and should use 2048, and receivers must not accept a signature made with a key under 1024 bits. The key badge follows it:
- RSA 2048 or longer: green.
- RSA 1024 to 2047: green, with a note. It meets the minimum, and it's the default key size in Microsoft 365's
New-DkimSigningConfig. - RSA under 1024: red. Receivers have to treat those signatures as invalid.
- Ed25519: green. A shorter key type (RFC 8463) that some senders publish next to an RSA key.
- revoked: the
p=tag is empty. - unreadable key:
p=doesn't decode to a key.
Our take: use 2048 where your sender lets you choose. Google Workspace and Zoho let you pick it when you generate the key, and Microsoft 365 switches on the next rotation (Rotate-DkimSigningConfig -KeySize 2048). If your sender only offers 1024, that's still valid.
A 2048-bit key is longer than one 255-character DNS string, so the record is stored as two or more strings that get joined on lookup. That's fine. What breaks keys is pasting: a value that lost its end, picked up a space or kept extra quotes is the usual cause of an unreadable key.
Common DKIM problems, and the fix
The checker looks for each of these:
- No key at the selector. The record was added under the wrong name. Panels that append your domain to every name, like Cloudflare, Porkbun, Namecheap and GoDaddy, turn
google._domainkey.yourdomain.comintogoogle._domainkey.yourdomain.com.yourdomain.com. Type onlygoogle._domainkeyin the name field. - A CNAME that points nowhere. The sender deleted or rotated the key, or the target has a typo. Copy the value again from the sender. In Cloudflare, keep DKIM CNAMEs on DNS only (grey cloud), as Microsoft's own guide says. Microsoft 365 and Proton keep one selector waiting for the next rotation, so the checker shows that one as inactive, not broken.
- Revoked key (empty
p=). Normal for a few days after a rotation, as long as another selector is live. - Unreadable key. The value was cut off, broken up with spaces, or pasted with extra quotes. Paste the whole value again as one string.
- Testing mode left on (
t=y). RFC 6376 tells receivers to treat mail signed in testing mode like unsigned mail. Removet=yonce mail passes. - Two records at one selector. RFC 6376 section 3.6.2.2 leaves the result undefined when one name holds several. Delete the old one.
- SHA-1 only (
h=sha1). Generate a new key. RFC 8301 section 3.1 no longer allows SHA-1 for DKIM. - Wrong version, key type or service.
v=, if it's there, has to beDKIM1and come first,k=has to bersaored25519, ands=, if it's there, has to includeemailor*.
DKIM across several domains
Every domain and subdomain you send as needs its own key. It's common for one domain to carry Google's key while another has nothing, because a new tool went live there and nobody added its record. Paste them all, and the grid shows the gaps.
A passing DKIM check isn't the whole story. For DMARC, the d= domain in the signature has to align with the From domain. Our DMARC checker, which reads the policy and alignment settings on the same domains, shows whether that alignment is relaxed or strict. SPF is the other way to pass DMARC, and the SPF checker, which counts every include against the limit of 10, covers that side.
FAQ
How do I check my DKIM record?
Paste your domain in the box at the top of this page and click Check DKIM records. Leave the selector empty and we try the selectors common senders use, or add yours if you know it. To run a DKIM lookup by hand you need the selector: dig TXT google._domainkey.yourdomain.com on macOS or Linux, or nslookup -type=txt google._domainkey.yourdomain.com on Windows, with your selector in place of google.
What is a DKIM selector?
The label before ._domainkey in the record name, like google in google._domainkey.yourdomain.com. It tells receivers which of your keys signed a message, so one domain can publish a key per sender. The selector travels in every signed message as the s= tag of the DKIM-Signature header.
How do I find my DKIM selector?
Open a message you sent from the domain and view its original source (in Gmail, Show original). In the DKIM-Signature header, s= is the selector and d= is the signing domain. Your sending service's DNS settings page shows it too: it's the part of the record name before ._domainkey.
Why does the checker find no DKIM record when I have one?
Most likely your selector isn't one we try. DNS can't list the selectors a domain publishes, so a checker can only test names it knows. Postmark and Mailyond use a dated selector ending in pm, and Amazon SES uses generated tokens. Paste your selector, or the full host name, and check again. If it's still missing, look for your domain added twice at the end of the record name.
What DKIM key length should I use?
2048 bits where your sender lets you choose. RFC 8301 requires at least 1024 and recommends 2048, and receivers must reject keys under 1024. Plenty of services still sign with 1024-bit keys, and those are valid. The checker shows the length of every key it finds.
What does an empty p= in a DKIM record mean?
The key has been revoked. RFC 6376 defines an empty p= that way, and receivers fail any signature made with it. Senders that rotate keys often leave a revoked record behind for a while, which is fine as long as another selector holds a live key.
Can a domain have more than one DKIM record?
Yes, one per selector, and most domains with several senders have several. What breaks is two TXT records at the same selector name: RFC 6376 leaves the result undefined, so delete the old one.
Is a DKIM record a TXT or a CNAME?
The key itself is always in a TXT record. Microsoft 365, Fastmail, SendGrid and others have you add a CNAME that points to a TXT record they host, so they can rotate the key without you touching DNS. The checker follows the CNAME and tells you when it points at nothing.
If DKIM passes, does DMARC pass?
Only if the signing domain (d=) matches your From domain, or is a subdomain of it under relaxed alignment. A message signed by your sender's own domain passes DKIM but doesn't count for your DMARC. Our DMARC checker shows the alignment setting on each domain.
Can I check DKIM on multiple domains at once?
Yes, up to 10 domains or subdomains per run. Every domain is checked against the same selectors, so you can see at a glance which ones have a key and which don't. No account needed.
Do you store the domains I check?
No. Each check runs live against public DNS (Cloudflare's resolver, with Google's as a fallback) and the result goes straight back to your browser. We don't save or log the domains or selectors, and our analytics only counts how many domains you checked, never which ones. If you share a link to your results, the domains sit after the # in the URL, which browsers don't send to our server.