DMARC for SaaS Senders: Salesforce Marketing Cloud, HubSpot, Marketo, Mailchimp, ActiveCampaign, Klaviyo, Constant Contact, Brevo, Pardot, Kit — Marketing Automation DMARC Alignment, RFC 8058 List-Unsubscribe-Post, Engagement-Based Reputation, Dedicated IP Warm-Up, and Subdomain Segmentation

The deployment guide for DMARC on marketing-automation SaaS platforms (Salesforce Marketing Cloud, HubSpot, Marketo, Mailchimp, ActiveCampaign, Klaviyo, Constant Contact, Brevo Marketing, Pardot, Kit): the Feb 2024 Gmail / Yahoo bulk-sender requirements anchor, per-platform DKIM selector conventions, RFC 8058 List-Unsubscribe-Post one-click unsubscribe (mandatory), engagement-based reputation thresholds (open / click / complaint / hard-bounce rate bands), 30-50 day dedicated-IP-pool warm-up cadence, list-hygiene as a DMARC prerequisite, and mandatory marketing-subdomain segmentation.

This deployment guide is provided in English. SaaS-sender / DMARC / DKIM operational vocabulary (Sender Authentication Package, Business Unit, portal ID, k1/k2 selector pair, Branding Domain, custom Return-Path, List-Unsubscribe-Post one-click, IP warm-up, dedicated IP pool, shared IP pool, engagement-based reputation, sunset policy, double opt-in, FBL feedback loop, JMRP, Google Postmaster Tools, Yahoo Postmaster) and the per-platform UI label / selector / hostname identifiers (Marketing Cloud, ExactTarget, HubSpot Marketing Hub, Adobe Marketo Engage, Mailchimp, dkim.mcsv.net, servers.mcsv.net, _spf.hubspotemail.net, mktomail.com, _spf.activecampaign.com, _spf.klaviyo.com, _spf.constantcontact.com, spf.sendinblue.com, _spf.pardot.com, em.salesforce.com, _spf.convertkit.com, _spf.kit.com) are vendor-canonical terms that do not translate. We keep the body in the source language so the configuration values remain copy-paste safe across locales.

TL;DR

  • SaaS senders are marketing-automation platforms - Salesforce Marketing Cloud (SFMC), HubSpot, Marketo, Mailchimp, ActiveCampaign, Klaviyo, Constant Contact, Brevo Marketing, Pardot, and Kit. The marketer builds bulk campaigns through a graphical UI; the platform sends to a contact list via the platform's IP infrastructure with your From: domain. DMARC alignment rides primarily on custom-domain DKIM, not SPF.
  • The Feb 2024 Google / Yahoo bulk-sender requirements are the universal anchor. Senders above 5000 messages per day to Gmail or Yahoo Mail must publish DMARC at p=quarantine or stricter, custom- domain DKIM aligned to the From: domain, RFC 8058 List-Unsubscribe-Post one-click unsubscribe, and maintain a complaint rate below 0.3 percent. Failure to meet all four conditions triggers throttling, deferrals, or bulk- foldering at scale.
  • List-Unsubscribe-Post (RFC 8058) is load-bearing. Every SaaS sender platform publishes the header pair by default for bulk campaigns, but the operator must verify it is enabled (some platforms hide the toggle behind a Compliance mode or Bulk sender mode setting). The header pair is List-Unsubscribe: <https://...>, <mailto:...> + List-Unsubscribe-Post: List-Unsubscribe =One-Click.
  • Engagement-based reputation is the DMARC-orthogonal lever. Receivers track open rate, click rate, reply rate, and complaint rate per sending subdomain. Sub-10 percent open rate or sub-1 percent click rate triggers throttling even when DMARC, SPF, and DKIM all pass. List hygiene (double opt-in, sunset policy, bounce scrubbing) is a DMARC prerequisite.
  • Subdomain segmentation is mandatory, not optional. Use marketing.example.com, news.example.com, hello.example.com, or em.example.com for SaaS-sent marketing campaigns. Independent DMARC policy via the np= / sp= tags lets the apex ramp p=reject while a marketing subdomain remains at p=none during platform onboarding.
  • Per-platform DKIM selector conventions vary widely. SFMC uses <bu-selector>._domainkey (Business Unit ID); HubSpot uses hs1-<portal-id>._domainkey + hs2-<portal-id>._domainkey; Marketo uses k1._domainkey + k2._domainkey; Mailchimp uses k1._domainkey + k2._domainkey; ActiveCampaign uses dk._domainkey; Klaviyo uses klaviyo._domainkey; Constant Contact uses k1._domainkey + k2._domainkey; Brevo Marketing uses mail._domainkey; Pardot uses <org-alias>._domainkey.
  • Dedicated IP pool warm-up takes 30 to 50 days. Send only to the most engaged contacts (last 90 days) during warm-up. The canonical ramp doubles every other day from ~50 messages on Day 1 to steady state. Klaviyo, Mailchimp, ActiveCampaign, Constant Contact automate warm-up; SFMC, HubSpot, Marketo require manual ramp scheduling.
  • The DMARC Analyzer dashboard surfaces every per-source-IP alignment outcome so the operator can see exactly which SaaS platform is aligning cleanly and which is not - critical for diagnosing platform-migration windows and multi-platform marketing estates.

1. What this guide covers

This guide is the deployment companion for DMARC on marketing-automation SaaS platforms. It documents the configuration steps, per-platform DKIM selector conventions, RFC 8058 List-Unsubscribe-Post one-click unsubscribe requirements, engagement-based reputation thresholds, dedicated-IP-pool warm-up cadence, and subdomain segmentation strategy that distinguish SaaS-sender DMARC alignment from transactional-email DMARC alignment (covered in the sibling guide DMARC for Transactional Email).

Platforms covered (10):

  • Salesforce Marketing Cloud (SFMC, formerly ExactTarget) - enterprise marketing-automation suite with per-Business-Unit Sender Authentication Package (SAP).
  • HubSpot Marketing Hub - mid-market marketing automation with portal-scoped DKIM selectors.
  • Adobe Marketo Engage - enterprise B2B marketing automation with k1 / k2 rotating DKIM selectors.
  • Mailchimp (Intuit) - SMB-to-mid bulk-email platform with k1 / k2 CNAME-delegated DKIM at dkim.mcsv.net.
  • ActiveCampaign - marketing-automation + CRM with dk._domainkey single-selector DKIM.
  • Klaviyo - ecommerce-focused marketing platform with klaviyo._domainkey selector and bounce CNAME at em._domainkey.
  • Constant Contact (Endurance / Newfold Digital) - SMB email marketing with k1 / k2 rotating DKIM selectors.
  • Brevo (formerly Sendinblue, marketing side) - marketing-automation + transactional-API platform. This page covers the marketing side; transactional is in the sibling guide.
  • Salesforce Pardot (now Account Engagement) - B2B marketing automation within the Salesforce ecosystem; per-org-alias DKIM selector.
  • Kit (formerly ConvertKit) - creator-economy email-newsletter platform with per-account DKIM CNAMEs.

The universal pattern (sections 2-6) applies to every SaaS sender; the per-platform walkthroughs (section 7) document each platform's specific UI navigation, selector convention, and verification step.

2. Why SaaS senders need a different DMARC strategy

SaaS senders differ from transactional ESPs in five fundamental ways that drive DMARC strategy:

  1. Volume profile. Transactional ESPs send one message per recipient per application event (password reset, receipt, magic link). Volume scales with user actions; a typical SaaS application generates 10-100 transactional messages per active user per month. SaaS senders send one campaign per audience segment per scheduled or journey-triggered cadence. Volume scales with audience size; a 100,000-contact list with weekly campaigns generates 400,000 messages per month. The Feb 2024 Gmail / Yahoo bulk-sender requirements (5000 messages/day) rarely apply to transactional traffic but almost always apply to marketing traffic.
  2. Engagement-based reputation. Receivers track open rate, click rate, reply rate, and complaint rate per sending subdomain. Transactional mail enjoys high baseline engagement (recipients expect and action password resets, receipts, magic links). Marketing mail's engagement is inherently lower because recipients did not request each specific campaign. Receivers throttle senders with sub-10 percent open rate even when DMARC, SPF, and DKIM all pass. Marketing mail requires explicit list- hygiene discipline that transactional mail does not.
  3. List-Unsubscribe-Post (RFC 8058) is mandatory. The Feb 2024 Gmail / Yahoo bulk-sender requirements mandate one-click unsubscribe via the List-Unsubscribe-Post header pair for senders above 5000 messages per day. Transactional messages typically do not require unsubscribe (they are operational notifications); marketing messages always do. Every SaaS sender platform documented on this page publishes both headers by default, but the operator must verify activation.
  4. Dedicated IP pool warm-up. Marketing volume on a fresh dedicated IP requires a 30-50 day ramp from ~50 messages on Day 1 to the steady-state volume. Transactional volume rarely needs warm-up because triggered low-volume traffic patterns are accepted from new IPs more readily than bulk campaigns. The page covers the warm-up cadence in section 9.
  5. Subdomain segmentation is mandatory. Marketing reputation is fundamentally incompatible with corporate / transactional reputation because of the engagement / complaint rate gap. SaaS senders MUST be on a dedicated subdomain with independent DMARC policy via np= / sp= tags. The page covers segmentation strategy in section 6.

3. The Feb 2024 Gmail / Yahoo bulk-sender requirements

Effective Feb 1, 2024, Gmail and Yahoo Mail enforce a unified set of requirements for senders above 5000 messages per day to their users. The threshold counts across all subdomains at the organizational-domain level (per the Public Suffix List), so any non-trivial SaaS-sender program qualifies.

The four mandatory conditions:

Requirement Minimum Verification
SPF or DKIM authenticated Pass on at least one Aggregate report auth_results field
DMARC published p=none minimum at the organizational domain dig +short TXT _dmarc.example.com
DMARC alignment SPF or DKIM aligned with the From: header domain Aggregate report policy_evaluated field
RFC 8058 List-Unsubscribe-Post Both headers present + actioned within 2 business days Inspect raw message headers in Header Analyzer
Complaint rate Below 0.3 percent (target below 0.1 percent) Google Postmaster Tools for Gmail; Yahoo Postmaster for Yahoo Mail

Penalties for non-compliance scale with severity:

  • Missing one condition - rate limiting, deferred delivery, occasional bulk-foldering.
  • Missing two or more conditions - sustained bulk-foldering, increasing delivery latency, eventual hard rejection with SMTP 421/550 codes.
  • Complaint rate above 0.3 percent - throttled within hours; full recovery requires sustained list-hygiene improvement plus engagement-based segmentation over weeks.

Gmail's enforcement reference: Google Workspace Admin Help - Email sender guidelines. Yahoo's enforcement reference: Yahoo Postmaster. Microsoft applies similar but less strictly enforced requirements via SNDS and the Junk Mail Reporting Program.

4. RFC 8058 List-Unsubscribe-Post one-click unsubscribe

RFC 8058 defines the List-Unsubscribe-Post header that accompanies List-Unsubscribe (RFC 2369) to enable one-click unsubscribe. The canonical header pair:

List-Unsubscribe: <https://example.com/unsubscribe?token=abc123>, <mailto:unsubscribe@example.com?subject=unsubscribe>
List-Unsubscribe-Post: List-Unsubscribe=One-Click

How the one-click flow works:

  1. The receiver (Gmail, Yahoo, Microsoft) sees the List-Unsubscribe-Post header and surfaces a one-click Unsubscribe button in the inbox UI (Gmail shows it inline next to the sender name; Yahoo shows it in the message-options menu).
  2. When the recipient clicks the button, the receiver POSTs an empty body to the URL in the List-Unsubscribe header. The POST body is empty; the receiver does NOT navigate the user to the URL in a browser tab.
  3. The sender's unsubscribe endpoint receives the POST, validates the token (HMAC signature or per-recipient opaque ID), and removes the recipient from active sends.
  4. Per Gmail and Yahoo policy, the sender must action the unsubscribe within 2 business days. Continued sending after the deadline triggers a sustained complaint-rate spike and throttling.

Verification command (replace marketing@example.com with a recent bulk-campaign recipient address you control):

# Show the headers of the most recent marketing message
mu show -i marketing@example.com 1 | grep -i List-Unsubscribe

Both headers must appear. If only List-Unsubscribe appears without List-Unsubscribe-Post, the receiver falls back to a confirmation-page flow (not one-click) and the sender is not compliant with the Feb 2024 bulk-sender requirements.

5. Engagement-based reputation thresholds

Receivers track engagement metrics per sending subdomain (and per sending IP for dedicated-IP senders). The operational thresholds below summarise the Gmail Postmaster Tools and Yahoo Postmaster aggregated signals; the page presents them as bands rather than hard cutoffs because the thresholds are advisory and receiver-specific.

Metric Excellent Healthy Throttle risk Critical
Open rate >25 percent 15-25 percent 5-15 percent <5 percent
Click rate >5 percent 2-5 percent 0.5-2 percent <0.5 percent
Complaint rate (spam button) <0.05 percent 0.05-0.1 percent 0.1-0.3 percent >0.3 percent
Hard bounce rate <0.5 percent 0.5-2 percent 2-5 percent >5 percent
Soft bounce rate <1 percent 1-3 percent 3-7 percent >7 percent
Reply rate (B2B) >3 percent 1-3 percent 0.2-1 percent <0.2 percent

A marketing program in the throttle-risk band on any metric will see inbox-placement degradation even when DMARC, SPF, and DKIM all pass. The DMARC alignment surface is necessary but not sufficient for marketing inbox placement.

Open rate is the most-watched metric because of Apple Mail Privacy Protection (MPP) skew. MPP pre-fetches images for all recipients, which inflates open rate by ~30 percent on Apple Mail audiences. Receivers (Gmail, Yahoo) discount the MPP-inflated open rate when computing reputation, so the operator should rely on click rate and reply rate as the engagement signal of record.

6. Subdomain segmentation strategy

SaaS senders MUST publish under a dedicated subdomain. The recommended naming convention:

Subdomain pattern Use case Example
marketing.example.com General marketing campaigns, newsletters, promotional offers Mailchimp, ActiveCampaign, Constant Contact
news.example.com Newsletter-only content, low promotional density Kit, Substack-like creator platforms
em.example.com or email.example.com Generic marketing bus, multi-purpose HubSpot, Klaviyo
hello.example.com Welcome series, lifecycle messaging Onboarding-focused programs
mkto.example.com Marketo-specific subdomain (vendor convention) Marketo Engage
cloud.example.com SFMC-specific subdomain (vendor convention) Salesforce Marketing Cloud
pardotemail.example.com Pardot-specific subdomain (vendor convention) Salesforce Pardot / Account Engagement

The dedicated-subdomain pattern enables five operational benefits:

  1. Reputation isolation. Marketing traffic builds a distinct sender reputation. A degraded marketing subdomain does not compromise transactional delivery (password resets, receipts) or corporate mail.
  2. Independent DMARC policy. The organizational domain can ramp p=reject while marketing.example.com remains at p=none during platform onboarding. Use the np= tag at the organizational domain to set non-existent subdomain policy distinct from sp= (existing subdomain) policy.
  3. Operational clarity. The marketing team verifies alignment on their subdomain without coordinating with the security team owning the apex.
  4. Audit trail. Aggregate reports filtered by subdomain make it immediately clear which class of mail is failing alignment.
  5. Migration safety. Switching from Mailchimp to ActiveCampaign means re-authenticating only the marketing subdomain, not the entire estate.

DMARC record at the marketing subdomain (during platform onboarding):

# _dmarc.marketing.example.com
"v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com; ri=3600; fo=1"

DMARC record at the organizational domain (covers the apex and any subdomain without its own DMARC record):

# _dmarc.example.com
"v=DMARC1; p=reject; sp=reject; np=reject; rua=mailto:dmarc-reports@example.com; pct=100; adkim=r; aspf=r"

The subdomain-specific _dmarc.marketing.example.com record OVERRIDES the organizational sp= for that subdomain, so the marketing subdomain can remain at p=none while everything else stays at p=reject. Once the marketing subdomain is fully aligned, delete the subdomain-specific record and let the organizational sp=reject take over.

7. Per-platform DKIM setup walkthroughs

Each subsection documents the literal UI navigation path, the selector convention, the CNAME / TXT records to publish, and the verification step.

7.1 Salesforce Marketing Cloud (SFMC, formerly ExactTarget)

UI path: Marketing Cloud Setup > Email Studio > Setup > Sender Authentication Package (SAP).

Authentication artefact: the SAP bundles three components - per-Business-Unit DKIM keys, a custom Reply-To domain, and a custom Return-Path / bounce domain. The SAP must be configured per Business Unit; if your tenant has multiple Business Units sending mail, each one needs its own SAP.

Steps:

  1. Open Setup > Email Studio > Setup > Sender Authentication Package, click Configure for the Business Unit, enter your sending domain (e.g. cloud.example.com), submit.
  2. Salesforce provisions the SAP within ~24 hours and emails the DNS records to publish.
  3. Publish the records: CNAME at <bu-selector>._domainkey.cloud.example.com pointing to the SFMC DKIM hostname, SPF include (v=spf1 include:cust-spf.exacttarget.com ~all) at the sending subdomain apex, CNAME for the custom Return-Path (e.g. bounces.cloud.example.com CNAME bounce.exacttarget.com).
  4. Salesforce verifies the records and activates the SAP.
  5. Publish DMARC at _dmarc.cloud.example.com: v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com.

7.2 HubSpot Marketing Hub

UI path: Settings (gear icon) > Website > Domains and URLs > Connect a domain > Email sending domain.

Selector convention: hs1-<portal-id>._domainkey + hs2-<portal-id>._domainkey (portal ID is your HubSpot account ID, typically a 6-8 digit number).

Records to publish: two CNAMEs at the selectors above pointing to HubSpot's DKIM key infrastructure, plus SPF include (v=spf1 include:_spf.hubspotemail.net ~all) and an optional MX record for bounce handling.

Verification: return to HubSpot after publishing, click Verify. HubSpot resolves the CNAMEs typically within minutes and marks the domain Connected.

List-Unsubscribe-Post: enabled by default for all bulk sends; verify in the campaign Send Settings panel.

7.3 Adobe Marketo Engage

UI path: Admin (top nav) > Email > SPF / DKIM.

Selector convention: k1._domainkey + k2._domainkey (rotating pair, same convention as Mailchimp and Constant Contact - do NOT confuse Marketo's k1/k2 CNAMEs with those vendors).

Records to publish: two CNAMEs pointing to Marketo-supplied DKIM hostnames (typically <random>.dkim.mktomail.com), SPF include (v=spf1 include:mktomail.com ~all), custom Branding Domain CNAME for SPF alignment (e.g. mkto.example.com CNAME mkto-lon01.com).

List-Unsubscribe-Post: Marketo handles it automatically when the operator enables Unsubscribe in the email template; verify in Email Editor 2.0 > Email Settings > Compliance.

7.4 Mailchimp (Intuit)

UI path: Account avatar dropdown > Domains > Authenticate (next to your sending domain).

Selector convention: k1._domainkey CNAME dkim.mcsv.net + k2._domainkey CNAME dkim2.mcsv.net (rotating pair).

SPF include: v=spf1 include:servers.mcsv.net ~all.

Verification: Mailchimp resolves the CNAMEs and marks the domain Authenticated with a green checkmark when DKIM + SPF both resolve.

List-Unsubscribe-Post: automatic for all campaigns; cannot be disabled (correct compliance default for bulk marketing).

7.5 ActiveCampaign

UI path: Settings > Advanced > Mail Sender (Domain Authentication tab).

Selector convention: dk._domainkey (single selector, not a rotating pair).

Records to publish: CNAME at dk._domainkey.<your-domain> pointing to ActiveCampaign's DKIM key hostname, SPF include (v=spf1 include:_spf.activecampaign.com ~all), optional bounce CNAME for SPF alignment.

Verification: ActiveCampaign resolves the CNAME and marks the domain Authenticated; the UI shows the resolution status in real time.

7.6 Klaviyo

UI path: Account > Settings > Domains and Hosting (or Email > Branded Domain in newer UI).

Selector convention: klaviyo._domainkey (single selector) plus a bounce CNAME at em._domainkey.<your-domain>.

Records to publish: CNAME at klaviyo._domainkey.<your-domain> pointing to Klaviyo's DKIM infrastructure, plus the bounce CNAME at em._domainkey, SPF include (v=spf1 include:_spf.klaviyo.com ~all).

Verification: Klaviyo's UI shows a real-time Verified / Not Verified status next to each record.

List-Unsubscribe-Post: auto-enabled for all sends; Klaviyo also handles two-click compliance for SMS-style consent revocation.

7.7 Constant Contact

UI path: My Profile (account name dropdown) > Domain Settings > Authenticate a Domain.

Selector convention: k1._domainkey + k2._domainkey (rotating pair, same naming as Mailchimp but different CNAME targets pointing to Constant Contact's DKIM infrastructure).

SPF include: v=spf1 include:_spf.constantcontact.com ~all.

Verification: Constant Contact resolves the CNAMEs and marks the domain Authenticated.

7.8 Brevo (formerly Sendinblue, marketing side)

UI path: Senders & IPs > Domains > Add a domain (Authenticate).

Selector convention: mail._domainkey (single selector).

Records to publish: CNAME at mail._domainkey.<your-domain> pointing to Brevo's DKIM key infrastructure, plus a Brevo-supplied bounce CNAME for SPF alignment, SPF include (v=spf1 include:spf.sendinblue.com ~all). The Brevo transactional side uses a separate selector chain - see the DMARC for Transactional Email sibling guide for the transactional-specific records.

7.9 Salesforce Pardot (Account Engagement)

UI path: Pardot Admin > Domain Management > Email Sending Domains.

Selector convention: <org-alias>._domainkey where org-alias is your Pardot org identifier; some older accounts use pardot._domainkey.

Records to publish: CNAME at <org-alias>._domainkey.<your-domain> pointing to Pardot's DKIM key infrastructure, SPF include (v=spf1 include:_spf.pardot.com ~all or include:em.salesforce.com for newer Account Engagement orgs), tracker domain CNAME (separate from the email DKIM and required for click tracking).

Pardot's per-org-alias selector is the most surprising convention in the SaaS-sender ecosystem because the selector value rotates with the Salesforce org rename, so a Salesforce org rename forces a Pardot DNS re-authentication.

7.10 Kit (formerly ConvertKit)

UI path: Account Settings > Email > Custom domain.

Selector convention: per-account DKIM CNAMEs generated when the operator adds the sending domain; selectors typically of the form <random>._domainkey with no fixed naming convention.

Records to publish: CNAMEs as Kit's UI displays them, SPF include (v=spf1 include:_spf.convertkit.com ~all or include:_spf.kit.com for newer Kit-branded accounts).

Verification: Kit's UI shows a real-time Verified status next to each record.

8. List hygiene as a DMARC prerequisite

A 0.3 percent complaint rate or a 5 percent hard-bounce rate triggers Gmail / Yahoo throttling regardless of DMARC alignment. List hygiene is therefore a DMARC prerequisite, not an optional deliverability tactic. The five practices that prevent the throttle:

  1. Double opt-in. Confirm every new subscriber by sending an opt-in email and requiring a click before adding them to the active list. Double opt-in cuts hard-bounce rate from 5-15 percent (typical for single opt-in) to under 1 percent because typo-laden addresses do not survive the confirmation click. Mailchimp, ActiveCampaign, Klaviyo, and Constant Contact all support double opt-in as a per-list setting.
  2. Sunset policy. Stop sending to recipients who have not engaged (opened or clicked) within a 90-180 day window. Receivers track engagement per recipient; continuing to send to dormant addresses degrades the sender's per-domain reputation. The sunset window depends on the campaign cadence: 90 days for weekly senders, 180 days for monthly senders.
  3. Bounce scrubbing. Remove hard-bounced addresses immediately (every SaaS platform does this automatically). Address soft bounces after 3-5 consecutive bounces. Hard-bounce rate above 5 percent on any single campaign triggers throttling that persists for days.
  4. Complaint handling via FBL feedback loops. Every major receiver (Gmail via FBL participation, Yahoo via the Complaint Feedback Loop, Microsoft via JMRP) sends complaint reports when recipients click the Spam button. Process those reports automatically to remove complaints from active sends within 24 hours. Mailchimp, SFMC, HubSpot, and Marketo handle FBL ingestion automatically.
  5. List ownership transparency. Never purchase, rent, or scrape lists. Every SaaS sender platform's terms of service prohibit purchased lists; violations result in account suspension. Purchased lists also have characteristic complaint rates above 2 percent that trigger immediate throttling.

9. Dedicated IP pool warm-up cadence

Marketing volume on a fresh dedicated IP requires a 30 to 50 day ramp from ~50 messages on Day 1 to the steady-state volume. The canonical exponential ramp:

Day Messages / day Audience tier
150 Highest-engagement contacts only (last 30 days)
2100 Highest-engagement
3500 Last 30 days
41000 Last 30 days
55000 Last 60 days
610000 Last 60 days
720000 Last 60 days
1050000 Last 90 days
15100000 Last 90 days + new opt-ins
20250000 Last 90 days + new opt-ins
30500000 Last 180 days (sunset window applied)
451000000+ Steady state - full active list

Send only to the most engaged contacts during warm-up - this maximises open rate and click rate while volume is small, so the receiver sees a high-quality sender signal. If you skip warm-up, expect throttling, deferrals, and bulk-foldering for 60-90 days until the IP recovers.

Platform automation support:

  • Klaviyo - Smart Send Time + IP Warm-Up Pool (automatic).
  • Mailchimp - Send Time Optimization (does not automate warm-up directly but limits Day 1 audience size).
  • ActiveCampaign - Predictive Sending + Engaged Audience Filters.
  • Constant Contact - basic engagement segmentation.
  • SFMC, HubSpot, Marketo - require manual ramp scheduling via the Journey Builder, Workflow, or Smart Campaign respectively.
  • Brevo Marketing, Pardot, Kit - manual ramp scheduling.

10. Multi-platform marketing estates

Enterprises commonly run two or three SaaS senders concurrently - SFMC or Marketo for the enterprise marketing program, Mailchimp or ActiveCampaign for an SMB-style segmented program, Klaviyo for ecommerce. Each platform needs its own custom-domain DKIM CNAMEs published in your DNS, all under distinct selectors.

Publishing all sets of CNAMEs simultaneously is fine - each platform signs messages with its own selector, and DMARC requires only ONE valid DKIM signature aligned with the From: header domain to pass. The receiver looks up only the selector named in the DKIM-Signature header s= field of each message, so unrelated selectors do not interfere.

For SPF: include all platforms in a single SPF record at the apex, but watch the 10-DNS-lookup limit (RFC 7208 section 4.6.4) - Mailchimp + Marketo + Klaviyo + your own MTA already consumes 4-6 lookups before counting redirects. Use a dedicated subdomain per platform (marketing.example.com on Mailchimp, mkto.example.com on Marketo, shop.example.com on Klaviyo) to keep each SPF record under the limit and isolate reputation.

11. Rollout cadence

The recommended 6-stage rollout for a new SaaS sender on a new dedicated subdomain:

  1. Stage 1 (Day 1-3) - Publish DNS: SPF include, DKIM CNAMEs, custom Return-Path / bounce CNAME, optional MX records. Verify with dig from a different network than your local resolver.
  2. Stage 2 (Day 3-7) - Verify in the platform UI: the platform marks the domain Authenticated. List-Unsubscribe-Post enabled in compliance settings.
  3. Stage 3 (Day 7-14) - p=none at the marketing subdomain: publish DMARC at _dmarc.marketing.example.com with p=none; rua=mailto:dmarc-reports@example.com. Begin warm-up sends (~50 messages on Day 1 of warm-up to highest-engagement contacts).
  4. Stage 4 (Day 14-30) - IP warm-up ramp: follow the exponential ramp from section 9. Monitor aggregate reports for unaligned messages (other SaaS senders accidentally using the marketing subdomain, forwarded mail breaking alignment). Aggregate-report alignment should be >95 percent by Day 30.
  5. Stage 5 (Day 30-60) - p=quarantine: advance the marketing subdomain to p=quarantine; pct=10, then ramp pct to 25 / 50 / 75 / 100 over 2-3 weeks. Watch the Google Postmaster Tools spam-rate metric daily.
  6. Stage 6 (Day 60+) - p=reject: advance the marketing subdomain to p=reject. At this point the organizational domain's sp=reject can take over (delete the subdomain-specific DMARC record) IF and only if the marketing subdomain is in steady-state alignment >99 percent. Otherwise keep the subdomain-specific record at p=reject for explicit policy visibility.

12. Common SaaS-sender DMARC mistakes

  1. Sending marketing from the apex domain. Marketing reputation collapses into corporate / transactional reputation; every complaint against a marketing campaign drags down password-reset deliverability. Always use a dedicated subdomain.
  2. Skipping IP warm-up. A sudden ramp from zero to 100,000 messages per day on a fresh dedicated IP triggers receiver throttling for 60-90 days. Follow the section 9 ramp.
  3. Missing List-Unsubscribe-Post. The Feb 2024 Gmail / Yahoo bulk-sender requirements mandate the header pair. Missing it triggers throttling regardless of DMARC alignment.
  4. Single opt-in. Hard-bounce rates of 5-15 percent on fresh single-opt-in lists trigger immediate throttling. Always use double opt-in.
  5. Purchased / rented / scraped lists. Every SaaS platform's terms of service prohibit them; complaint rates above 2 percent will get the account suspended.
  6. Ignoring the sunset policy. Sending to dormant contacts (180+ days no engagement) degrades per-recipient reputation and inflates complaint rates.
  7. Mixing platforms on one subdomain. Sending Mailchimp campaigns from marketing.example.com while also sending Marketo campaigns from the same subdomain co-mingles reputation across platforms. Use a different subdomain per platform.
  8. Forgetting to authenticate before sending. A campaign sent before the platform marks the domain Authenticated signs with the platform's default sender-handled domain (e.g. mail.mailchimp.com), which unaligns with your From: header. Wait for Authenticated status.
  9. Hard-coding the wrong SPF include. Each platform has a specific include directive (servers.mcsv.net, _spf.hubspotemail.net, mktomail.com, etc.). Using the wrong include silently sends SPF to permerror after the 10-lookup limit.
  10. Ignoring Google Postmaster Tools. Postmaster Tools surfaces the IP reputation, domain reputation, spam rate, and delivery errors that aggregate reports do not. Configure Postmaster Tools at the same time as the platform DKIM authentication and monitor the dashboard weekly.

13. Troubleshooting

The platform shows "Domain not authenticated" even though I published the CNAMEs.
DNS propagation. Wait 5-30 minutes, then click Verify again. Use dig +short cname <selector>._domainkey.<your-domain> @8.8.8.8 to check resolution from a public resolver instead of your local recursive resolver - some recursive resolvers cache NXDOMAIN longer than the TTL.
Aggregate reports show messages failing DKIM alignment even though I authenticated the platform.
The DKIM signature's d= domain does not match the From: header (DMARC alignment). Inspect a sample message in Header Analyzer and check the DKIM-Signature header's d= field. If it points to the platform's default signing domain (e.g. mail.mailchimp.com) the platform is not using your custom domain - re-verify in the platform UI that the domain is marked Authenticated.
I cannot find the List-Unsubscribe headers in raw message source.
Some platforms suppress List-Unsubscribe-Post for transactional-style messages (single-recipient automated sends) even within marketing platforms. For bulk campaigns the header pair should always be present. Verify in the campaign's Compliance / Footer settings that the unsubscribe link is enabled and the campaign type is Marketing (not Transactional).
Aggregate reports show alignment passing but Gmail Postmaster Tools shows my domain reputation as Low.
Engagement-based reputation. Refer to section 5: open rate, click rate, and complaint rate are the levers. Run a re-engagement campaign to the dormant portion of the list, then sunset the non-engagers. Domain reputation typically recovers in 2-4 weeks after sustained engagement improvement.
One campaign showed a sudden complaint-rate spike to 0.5 percent and now all subsequent campaigns are bulk-foldered.
You triggered throttle mode. Three actions: (1) pause the marketing program for 48 hours; (2) audit the offending campaign content for subject-line clickbait, misleading sender names, or non-consensual list segments; (3) resume with a half-rate warm-up (Day 1 = 50 percent of normal steady-state) for the next 7-10 days. Recovery typically takes 2-4 weeks of sustained low complaint rates.
I switched from Mailchimp to ActiveCampaign and now alignment is broken.
You forgot to delete Mailchimp's CNAMEs and publish ActiveCampaign's. Old DKIM CNAMEs do not interfere (each DKIM-Signature resolves only its own selector), but if the old SPF include still points at servers.mcsv.net and the new ActiveCampaign include is missing, every ActiveCampaign message fails SPF and (if DKIM isn't aligned either) fails DMARC. Update the SPF record to remove Mailchimp and add include:_spf.activecampaign.com.
Pardot stopped sending after my Salesforce admin renamed the org.
Pardot's per-org-alias DKIM selector rotates with the org rename. Re-authenticate the domain in Pardot Admin > Domain Management > Email Sending Domains; the new selector will be different. Publish the new CNAME and remove the old one.
My SFMC Business Unit shows "SAP not configured" even though I configured the SAP for the parent Business Unit.
SAP is per Business Unit, not inherited. Each Business Unit needs its own SAP configured separately. Open Setup > Email Studio > Setup > Sender Authentication Package and click Configure for the child Business Unit.

14. Frequently asked questions

How do I set up DMARC for Salesforce Marketing Cloud?
Six steps. (1) In Marketing Cloud, open Setup > Email Studio > Setup > Sender Authentication Package (SAP). The SAP is the bundled domain authentication artefact: custom Reply-To, custom Return-Path, and per-Business-Unit DKIM keys. (2) Click Configure for the Business Unit you send from, enter your sending domain (recommended: a dedicated subdomain like cloud.example.com or email.example.com), and submit. Salesforce will provision the SAP within ~24 hours and email you the DNS records to publish. (3) Publish the records: a CNAME at <bu-selector>._domainkey.<your-domain> pointing to the SFMC DKIM hostname, an SPF include (v=spf1 include:cust-spf.exacttarget.com ~all) at the sending domain apex, and a CNAME for the custom Return-Path (e.g. bounces.<your-domain> CNAME bounce.exacttarget.com) for SPF alignment. (4) Salesforce verifies the records and activates the SAP. (5) Publish DMARC at _dmarc.<your-domain> with v=DMARC1; p=none; rua=mailto:dmarc-reports@<your-domain>. (6) After 2-6 weeks of clean reports advance to p=quarantine then p=reject. The SAP must be configured per Business Unit; if your tenant has multiple Business Units sending mail, each one needs its own SAP.
How do I set up DMARC for HubSpot?
Five steps. (1) Sign in to HubSpot, click the Settings gear, then Website > Domains and URLs > Connect a domain > Email sending domain. Enter your sending domain (recommended: a dedicated subdomain like marketing.example.com or hello.example.com) and click Next. (2) HubSpot displays the DNS records required: two CNAMEs of the form hs1-<portal-id>._domainkey.<your-domain> and hs2-<portal-id>._domainkey.<your-domain> pointing to HubSpots DKIM key infrastructure, plus an SPF include (v=spf1 include:_spf.hubspotemail.net ~all) and an optional MX record for bounce handling. (3) Publish the records at your DNS provider, then return to HubSpot and click Verify. HubSpot resolves the CNAMEs typically within minutes and marks the domain Connected. (4) Publish DMARC at _dmarc.<your-domain> with v=DMARC1; p=none; rua=mailto:dmarc-reports@<your-domain>. (5) Advance to p=quarantine then p=reject after clean reports. HubSpots one-click List-Unsubscribe-Post header is enabled by default for all bulk sends; verify in the campaign Send Settings panel.
How do I set up DMARC for Marketo?
Six steps. (1) Sign in to Marketo (Adobe Marketo Engage), click Admin in the top nav, then Email > SPF / DKIM. (2) Marketo generates a pair of DKIM keys with selectors k1 and k2 - publish two CNAMEs at k1._domainkey.<your-domain> and k2._domainkey.<your-domain> pointing to the Marketo-supplied DKIM hostnames (typically of the form <random>.dkim.mktomail.com). (3) Publish an SPF include at your sending subdomain: v=spf1 include:mktomail.com ~all (the dedicated subdomain pattern is mandatory for Marketo at any meaningful volume). (4) Configure the custom Reply-To domain in Admin > Email > Branding Domain - this enables SPF alignment by sending bounces through a CNAME-delegated subdomain you control (e.g. mkto.example.com). (5) Publish DMARC at _dmarc.<your-domain> with v=DMARC1; p=none; rua=mailto:dmarc-reports@<your-domain>. (6) Marketo handles List-Unsubscribe-Post automatically when the operator enables Unsubscribe in the email template; verify in Email Editor 2.0 > Email Settings > Compliance. Advance to enforcement after clean reports.
How do I authenticate my Mailchimp domain for DMARC?
Five steps. (1) Sign in to Mailchimp (Intuit), open Domains under the account avatar dropdown, click Authenticate next to your sending domain. (2) Mailchimp displays two CNAMEs: k1._domainkey.<your-domain> pointing to dkim.mcsv.net and k2._domainkey.<your-domain> pointing to dkim2.mcsv.net (the rotating pair). Publish both at your DNS provider exactly as shown - the targets are Mailchimp-fixed, the names use your domain. (3) Also publish an SPF include at the sending domain: v=spf1 include:servers.mcsv.net ~all. (4) Return to Mailchimp and click Verify Domain - it resolves the CNAMEs and confirms authentication. The Mailchimp UI marks the domain Authenticated and shows the green checkmark when DKIM + SPF both resolve. (5) Publish DMARC at _dmarc.<your-domain> with v=DMARC1; p=none; rua=mailto:dmarc-reports@<your-domain>, then advance to enforcement after clean reports. Mailchimps one-click List-Unsubscribe-Post is automatic for all campaigns; the operator cannot disable it, which is the correct compliance default for bulk marketing.
Why does my marketing email get throttled even when DMARC passes?
Three reasons, all upstream of DMARC. (1) Engagement is too low. Receivers (Gmail, Yahoo, Microsoft) track open rate, click rate, reply rate, and complaint rate per sending subdomain - they throttle senders with sub-10 percent open rate or sub-1 percent click rate even when DMARC, SPF, and DKIM all pass. The fix is list hygiene: send only to engaged contacts, sunset cold contacts after 90-180 days of no engagement, segment by engagement tier. (2) Complaint rate above 0.3 percent. Gmail and Yahoo throttle aggressively above this threshold; the fix is double opt-in, prominent unsubscribe, content relevance. (3) Hard bounce rate above 5 percent. Receivers interpret high hard bounces as a sign of list scraping or list rental; the fix is single opt-in confirmation, regular bounce scrubbing, sunset policy. DMARC alignment is necessary but not sufficient for marketing inbox placement; the page covers all three engagement levers with specific operational thresholds.
Should I use a dedicated subdomain for marketing email?
Yes - the dedicated-subdomain pattern (e.g. marketing.example.com, news.example.com, hello.example.com, em.example.com) is non-optional for SaaS senders at any meaningful volume. Five benefits. (1) Reputation isolation: marketing traffic (lower engagement, higher complaint rate than transactional) builds a distinct sender reputation. A degraded marketing subdomain does not compromise transactional delivery (password resets, receipts) or corporate mail (Workspace, M365). (2) Independent DMARC policy via the np= / sp= tags: the organizational domain can ramp p=reject while marketing.example.com remains at p=none during SaaS onboarding or migration between platforms. (3) Operational clarity: the marketing team can verify alignment on their subdomain without coordinating with the security team owning the apex. (4) Audit trail: aggregate reports filtered by subdomain make it clear which class of mail is failing alignment. (5) Migration safety: switching from Mailchimp to ActiveCampaign means re-authenticating only marketing.example.com, not the entire estate. The dedicated-subdomain pattern is documented in section 6 of this guide.
What is List-Unsubscribe-Post and is it required for marketing email?
Yes - RFC 8058 List-Unsubscribe-Post (one-click unsubscribe) is mandatory for senders above 5000 messages per day to Gmail or Yahoo Mail since Feb 2024. The header pair is List-Unsubscribe: <https://example.com/unsubscribe?token=abc123>, <mailto:unsubscribe@example.com?subject=unsubscribe> + List-Unsubscribe-Post: List-Unsubscribe=One-Click. When the receiver renders the inbox-level Unsubscribe button (Gmails one-click prompt), the receiver POSTs an empty body to the URL in the List-Unsubscribe header to action the unsubscribe without a confirmation page. The sender must process the POST and remove the recipient from active sends within 2 business days per Gmail and Yahoo policy. Every SaaS sender platform documented on this page publishes both headers by default for bulk campaigns, but the operator must verify they are enabled (some platforms hide the toggle behind a Compliance mode or Bulk sender mode setting). The 5000-messages-per-day threshold counts across all subdomains at the organizational level, so any non-trivial marketing program qualifies.
How long does dedicated IP warm-up take for marketing email?
Plan for 30 to 50 days from a cold IP to the full steady-state volume. The canonical ramp is exponential: Day 1 50 messages, Day 2 100, Day 3 500, Day 4 1000, Day 5 5000, Day 6 10000, Day 7 20000, then doubling roughly every other day until you reach steady state. Receivers (Gmail, Yahoo, Microsoft) interpret a sudden ramp from zero to 100,000 messages per day as the spam pattern; the warm-up gradient lets the receiver build a sender reputation incrementally. Send only to the most engaged contacts during warm-up (last-90-days engagement, not the full list) - this maximises open rate and click rate while volume is small, so the receiver sees a high-quality sender signal. If you skip warm-up, expect throttling, deferrals, and bulk-foldering for 60-90 days until the IP recovers. Klaviyo, Mailchimp, ActiveCampaign, and Constant Contact include warm-up automation features (Gradual Send, Warm-Up Pool); SFMC, HubSpot, Marketo require manual ramp scheduling.

16. Start auditing your SaaS-sender DMARC alignment now

DMARC Analyzer ingests aggregate (rua) reports via includes/DmarcParser.php and surfaces every per-source-IP alignment outcome on the dashboard (index.php). The per-source-IP drilldown (source_ip_detail.php) shows which SaaS senders are aligning cleanly and which are not; the per-reporter drilldown (reporter_detail.php) shows which receivers (Google, Microsoft, Yahoo) are receiving your authenticated marketing mail. The header_analyzer.php tool (built on includes/EmailHeaderParser.php) diagnoses single-message alignment plus List-Unsubscribe presence when a user reports a missing campaign. The domain_checker.php tool (built on includes/DnsChecker.php) live-resolves every CNAME chain so you can confirm a new SaaS sender's DKIM setup before sending the first campaign. Forensic (ruf) failure samples land via upload.php through includes/ForensicReportParser.php for spoofing investigation.

Check my domain configuration Sign up — Free plan