MD Reader Open in MD Reader

Product Spec — Country-Aware Marketing Consent & Preferences

Owner: (TBD) · Status: Draft for review · Date: 2026-07-29

This is a product/eng spec, not legal advice. The country rules in §4 need privacy counsel sign-off before they drive real sends.


1. Why we're doing this

We sent a marketing email to a user who never agreed to receive marketing — because today we don't ask for marketing consent at all. There was no consent to show, and nothing stops a marketing email from going out to someone who never opted in.

The rules for marketing email also change by country, and we're moving toward country-specific products. So we need one system that:

  1. Asks for marketing consent at sign-up (today we don't).
  2. Keeps a clear record of what each user agreed to, and when.
  3. Checks that record before every marketing send, and follows the right country's rules.

Get those three right and this kind of problem doesn't happen again.

2. Goals / Non-goals

Goals

Core idea: build one consent system where the country is just a setting. Don't build a separate version per country — that's how one country quietly ends up missing a safeguard.


3. How it fits together

Sign-up / Preferences screen ─┐
                              ├─► Consent events (fields in §5, history kept)
Country lookup ───────────────┘            │
                                           ▼
                          Set Customer.io subscription = Yes / No
                                           │
                                           ▼
              Customer.io sends marketing only when subscription = Yes

Data-request tool ──► Consent events + vendor list + retention settings

4. Country rules (the country-aware part)

4.1 Rules by country (counsel to confirm each row)

Country / region Ask at sign-up? How marketing is allowed Confirmation email needed? Consent expires? Notes
Germany Yes Strictest — treat a confirmation-email opt-in as the default Yes (default) No Highest-risk market; go strict
Rest of EU + UK Yes Opt-in, with an easy way to say no at sign-up and in every email Recommended No
Canada Yes (clear opt-in) Clear opt-in required Recommended Yes — implied consent expires Very strict; system must track expiry
United States (federal) Optional Can email until they opt out; honor unsubscribes quickly No No Federal email rule (CAN-SPAM). State rules layer on top — see below
US states (California, and others) Varies State privacy laws add data-subject rights and limits on "sharing"/targeted ads and sensitive data No No Resolve to state, not just "US"; California is the strictest baseline
Brazil Yes Consent-based No No Template for adding more countries

4.2 Which country's (or state's) rules apply

4.3 Rules can change


5. What we need to capture

We already have an events system, so this isn't a new store to build — it's making sure each consent action fires an event that captures the fields below. Every consent change (agreed, withdrew, confirmed) is its own event, so the full history is preserved and we can always reconstruct "what did this user agree to?"

Each consent event needs to capture:


6. Enforcing it (via Customer.io)

We already send marketing through Customer.io (CIO), and CIO won't send to anyone whose subscription is off. So we don't build a separate gate — we enforce consent by keeping the user's CIO marketing subscription in sync with their consent:

That default is the key change: today, users with no consent aren't marked "No," so they can still be emailed. Under this spec, no consent means the CIO subscription is No — which is exactly what would have stopped the bad email.

Our job is to keep that flag correct (set it from the consent events in §5) and let CIO do the blocking. For countries where consent expires (§4), an expired consent flips the subscription back to No.


7. Asking the user (sign-up UX)

Today we don't ask at all, so the biggest new experience is a clear marketing choice at sign-up. Ground rules:

Two patterns, chosen by country (§4):

Pattern Where What the user sees Default
Explicit opt-in Germany, EU/UK, Canada An unticked checkbox: "☐ Send me tips, offers and product news by email. Unsubscribe anytime." Unticked = No
+ Confirmation email Germany (and other strict markets) Same checkbox, then a "confirm your email" step Stays No until they confirm
Notice + opt-out United States (option A) A short line: "We'll occasionally email you about new features and offers — unsubscribe anytime," with a visible way to decline Yes, but easy to opt out
No ask (default subscribe) Opt-out markets only — e.g. US (option B); decide later Nothing at sign-up; the only way out is the unsubscribe link in emails / preferences screen Yes

On "show a message vs. explicitly ask": in the opt-in markets we should explicitly ask (the unticked box), because a passive notice doesn't count as agreement there. In pure opt-out markets like the US we have a choice — show a notice (option A) or ask nothing and rely on unsubscribe (option B, the least protective, closest to today's behavior). Which markets sit in the "no ask" row is a decision we can make later, per country; it must never include an opt-in market.

Also: every marketing email keeps an easy unsubscribe, and the preferences screen (below) lets users change their mind anytime.


8. Supporting pieces


9. Rollout in phases

Phase 1 — stop it happening again

  1. Ask for marketing consent at sign-up (a separate, unticked box — not bundled with Terms).
  2. Fire a consent event capturing the fields in §5 on every consent change.
  3. Sync consent to the Customer.io subscription flag; default to No for anyone without a clear yes (§6).

Phase 2 — country rules
5. Country rules engine (§4), starting with Germany / EU / UK.
6. Country detection + messy-case handling.
7. Confirmation-email opt-in flow for the strict countries.
8. Versioned wording + ability to re-ask for consent.

Phase 3 — polish & operations
9. Preferences screen + one-click unsubscribe.
10. Marketing-vs-transactional tagging across all emails.
11. Vendor list + retention settings.
12. Data-request tool + simple dashboards (consent rate by country, unsubscribe speed).


10. How we'll know it's working

11. Open questions