The DNS records
Replace cio##### with the subdomain Customer.io shows under Show Records, and copy the key value from there.
DKIM key
Type: TXT · Host: cio._domainkey.cio#####
k=rsa; p=<public key shown in Customer.io>
The 2048-bit key is longer than 255 characters. Keep one TXT record and split it into quoted strings if your host asks.
SPF on the account subdomain
Type: TXT · Host: cio#####
<SPF value shown in Customer.io>
DMARC (minimum)
Type: TXT · Host: _dmarc
v=DMARC1; p=none
On your root domain only. If you already have a DMARC policy, Customer.io shows your existing record instead.
Set it up and turn on signing
- Go to Settings > Workspace Settings > Email, add a sending domain and a from address, and click Show Records.
- Add the MX record (two hostnames) and the SPF TXT record on the
cio#####host, the DKIM TXT record oncio._domainkey.cio#####, and DMARC on_dmarcof the root domain. - Enter only the part before your domain (for example
cio._domainkey.cio12345) if your DNS host appends it, as GoDaddy does. - Click Verify domain. Customer.io checks only when you click, and verification can take up to 72 hours.
DMARC alignment
Customer.io signs the return path, SPF and DKIM with your account subdomain, a child of your From domain. Under DMARC's default relaxed alignment that parent-child match passes. Customer.io warns that setting adkim=s or aspf=s breaks it, so remove those tags or set them to r. It checks _dmarc on the sending domain first, then on the root.
Key length and rotation
The key is generated by Customer.io but stored in your zone, so a new key means replacing the TXT value at cio._domainkey. Customer.io's documentation gives the 2048-bit default but no rotation schedule. Keep the records in place after verification: Customer.io says removing them can cause bounces or spam filtering.
Common mistakes
- A key value cut off at 255 characters. Split it into strings under 255 characters, separated by a space, in the same record; in Terraform use
\"\"between the parts. - A
_dmarcrecord on the subdomain. Customer.io says not to add DMARC to any subdomain. - Hosts that reject underscores or need escaped semicolons. Ask your host, or write semicolons as
\;where required. - Deleting your own records while adding Customer.io's. That can stop mail to your mailboxes.
Check your Customer.io DKIM key
Enter your domain and the selector from your Customer.io account. Free, reads public DNS only.
Frequently asked questions
What is the Customer.io DKIM host name?
cio._domainkey.cio#####.yourdomain.com, where cio##### is your account-specific subdomain. The selector is cio, and the record is a TXT key, not a CNAME.
My DNS host says the Customer.io DKIM value is too long. What do I do?
The 2048-bit key exceeds the 255-character limit of one TXT string. Keep a single record and split the value into two or more quoted strings of under 255 characters, separated by a space, with no line breaks.
Why does Customer.io check DMARC on my root domain?
It looks for _dmarc on the sending domain first and falls back to the root domain's record, which covers subdomains. The minimum it accepts is v=DMARC1; p=none, published on the root.
Sources
- Customer.io Docs: Domain authentication
- RFC 6376: DomainKeys Identified Mail (DKIM) Signatures
- RFC 8301: Cryptographic Algorithm and Key Usage Update to DKIM
Checked against Customer.io's documentation on November 3, 2026. Providers change their setup screens; if yours differs, follow the values your admin console shows.
DKIM records for other providers
- Microsoft 365CNAME: selector1, selector2
- Google WorkspaceTXT: google
- Zoho MailTXT: you choose (e.g. zoho)
- GoDaddyCNAME: secureserver1, secureserver2
- FastmailCNAME: fm1, fm2, fm3
- Proton MailCNAME: protonmail, protonmail2, protonmail3
- iCloud MailCNAME: sig1
- HostingerCNAME: hostingermail-a, hostingermail-b, hostingermail-c
- Private EmailTXT: privateemail, default (bought before 2 June 2026)
- IONOSCNAME: s1-ionos, s2-ionos, s42582890
- Rackspace EmailTXT: shown in the Cloud Office Control Panel
- Amazon SESCNAME or TXT: <token1>, <token2>, <token3> (Easy DKIM), your own (BYODKIM)
- SendGridCNAME or TXT: s1, s2
- MailgunTXT or CNAME: assigned by Mailgun (e.g. pic, krs, smtp), pdk1, pdk2 (Automatic Sender Security)
- PostmarkTXT: <timestamp>pm (e.g. 20131031155228pm)
- MailjetTXT: mailjet
- SMTP2GOCNAME: shown in SMTP2GO for your domain
- SparkPostTXT: scph<number> (generated, e.g. scph0316), your own (API)
- Elastic EmailTXT: api
- ResendTXT: resend
- MailerSendCNAME: ms1, ms2
- MailchimpCNAME: k2 and a second CNAME (Marketing), mte1, mte2 (Transactional)
- BrevoTXT or CNAME: mail (TXT), 2 CNAMEs from your account
- HubSpotCNAME: hs1-<number>, hs2-<number>
- KlaviyoCNAME: km1, km2 (marketing), kt1, kt2 (transactional), ks1, ks2 (service)
- ActiveCampaignCNAME: acdkim1, acdkim2
- Constant ContactCNAME or TXT: ctct1, ctct2 (CNAME), generated per key (TXT)
- SquarespaceCNAME: squarespace
- Dynamics 365 Customer InsightsCNAME: CNAME1 and CNAME2 from the wizard (e.g. namkey1)
- MailerLiteCNAME: litesrv
- Campaign MonitorTXT: cm, your own (existing keys)
- KitCNAME: cka
- MarketoTXT: chosen by you in Marketo
- Account Engagement (Pardot)TXT: shown in Expected DNS Entries
- Zoho CampaignsTXT: numbered per account (e.g. 2232)
- SalesforceCNAME: you choose two (e.g. example-sf-a, example-sf-b)
- ZendeskCNAME: zendesk1, zendesk2
- Help ScoutCNAME: strong1, strong2
- IntercomCNAME: intercom
- OdooCNAME: odoo
Compare every provider's selectors in one table · SPF record for Customer.io
Related guides
How to find a domain's DKIM selector, and check its key
Find a DKIM selector from the s= tag in an email header, see the selectors Microsoft 365, Google Workspace and common senders use, then check the key.
8 min read SPF, DKIM & DMARCHow to rotate DKIM keys without breaking email
How often to rotate DKIM keys, which key length to use, how to name selectors, and how to rotate in Microsoft 365, Google Workspace and on your own server.
9 min read SPF, DKIM & DMARCDKIM "body hash did not verify" and other DKIM failures: causes and fixes
Fix DKIM failures: body hash did not verify, signature did not verify, no key for signature and short keys. Causes from mailing lists to broken TXT records.
9 min readLast updated