CRM · Compliance

Know exactly who said yes — and when, where, how

Opt-in Tracking captures per-channel consent across WhatsApp, Email, SMS and Web Push with source attribution, timestamp, and the literal text the contact saw. Auto-honor opt-outs at send time. Export the audit log for DLT, GDPR, DPDP and CCPA reviews. Never accidentally message someone who said stop.

  • Per-channel consent (WhatsApp, Email, SMS, Push)
  • Source attribution with original UI snapshot
  • Auto-enforce at send time across modules
  • Exportable audit log for DLT, GDPR, DPDP
The problem

A single mis-sent broadcast costs more than the campaign

Most teams treat opt-in as a checkbox in their signup form and never think about it again. They store "subscribed = true" somewhere, the broadcast tool reads it, and as long as nothing breaks, life is fine. Then a customer who explicitly typed STOP in WhatsApp last month gets a Diwali promotion, posts a screenshot on Twitter, and the brand spends a week apologising. Or worse — Meta flags the WhatsApp Business account for repeated unsolicited messaging and the account is suspended for 24 hours during peak season.

The industrial-strength version of this problem is the regulatory audit. India's DPDP and TRAI DLT regimes require provable consent per channel per purpose. Europe's GDPR requires the same. When the regulator asks "show me proof that contact X consented to marketing WhatsApp on date Y", a CSV with "subscribed=true" does not cut it. They want the form snapshot, the timestamp, the IP, the literal consent text. Most CRMs cannot produce this and the legal team starts a six-figure remediation project.

Opt-in Tracking in SabNode is consent infrastructure, not a checkbox. Every consent capture records source, timestamp, IP, the exact consent text shown, and the channel scope. Every send checks current status before dispatch. Every opt-out triggers a re-confirm flow if the contact later re-engages. The audit log is regulator-ready by design.

What it is

Opt-in Tracking, in depth.

A Contact has independent opt-in status for each channel — WhatsApp, Email, SMS, Web Push, Voice. Status is a four-state enum: subscribed (active, can be messaged for marketing), service-only (only transactional messages, common for WhatsApp 24-hour service window), opted-out (no messaging of any kind), unknown (no consent captured yet). The send pipeline checks current status before every outbound. A marketing template to an opted-out contact fails fast with a logged "consent block" event, never reaching the BSP.

Capture is multi-source. Web forms with a consent checkbox component record the IP, user agent, form ID, page URL, and the exact consent text shown. WhatsApp opt-in via interactive button (the customer clicks "Yes, subscribe me") records the message ID and timestamp. Imports support a consent-source column for backfilling historical permissions with attribution. API endpoints accept consent metadata on every write. Every capture path produces the same auditable artifact.

Updates are bidirectional. Outbound: a contact who replies STOP to a WhatsApp broadcast triggers an automatic opt-out across the channel, confirmation message, and DLQ block for any in-flight sends to that contact. Outbound email unsubscribe link does the same for email. Inbound: a contact who messages "subscribe" or clicks an explicit re-opt-in button gets status flipped back with a fresh attribution record. The preference center (a hosted page or embeddable widget) lets contacts manage their own consent across all channels with a single link, audited.

Compliance export is built in. The audit endpoint returns every consent state change for a contact, with full attribution, on demand. Bulk export for tenant-wide audits runs as a background job and produces a regulator-ready CSV or PDF with the timestamps, sources and consent text. For India, the DLT registration ID can be attached to each capture. For EU, lawful basis (consent, legitimate interest, contract) is selectable per capture. For California (CCPA), do-not-sell flags are first-class. The compliance team should never need to ask engineering for a query again.

Capabilities

Everything you get with Opt-in Tracking.

7 capabilities
01

Per-channel four-state consent

WhatsApp, Email, SMS, Web Push, Voice each have independent status: subscribed, service-only, opted-out, unknown. Marketing sends require subscribed. Transactional (OTP, order updates) honors service-only. Opted-out blocks every send including transactional unless explicitly overridden with audit.

02

Source attribution per capture

Every consent change captures source (web form ID + URL + IP, WhatsApp button ID, import job, manual edit, API call), timestamp, user agent, and the literal consent text the contact saw. Regulator-ready evidence by default, not as a bolt-on.

03

Auto-enforce at send time

Every outbound checks current consent before dispatch. Blocked sends log a structured "consent block" event with the reason. No more "we accidentally sent to an opted-out list" — the platform makes it impossible to bypass.

04

STOP and unsubscribe handling

Inbound STOP, UNSUBSCRIBE, OPT-OUT messages on WhatsApp trigger automatic opt-out, confirmation reply, and DLQ-block for in-flight sends. Email unsubscribe links do the same. Reply analysis configurable per language so Hindi and regional opt-out keywords work.

05

Re-engagement flow

When an opted-out contact later sends an inbound message, the platform routes to a configurable re-engagement flow — typically asking explicit re-subscribe before treating them as marketable. Prevents the "they messaged us so they must want our newsletter" misinterpretation.

06

Preference center

Hosted page (or embeddable widget) where contacts manage consent across all channels with one link. Includes purpose-level granularity ("marketing", "product updates", "billing reminders") when configured. Every change captures attribution like any other source.

07

Compliance export

On-demand audit export per contact or tenant-wide. CSV or PDF with attribution, timestamps, consent text and channel. India DLT registration ID, EU lawful basis, CCPA do-not-sell flags all first-class. Regulator-ready without engineering involvement.

Use cases

Built for the way teams actually work.

D2C
Case 01

D2C WhatsApp marketing compliance

Web form has an explicit "I agree to receive WhatsApp marketing from Brand X" checkbox with the consent text. Submission records IP, page URL, exact text. Customer who later replies STOP gets opted out automatically with confirmation. Tenant-wide audit export pulled monthly for the legal team's compliance review.

Financial Services
Case 02

NBFC DLT-compliant lending nudges

Each WhatsApp template registered with TRAI DLT carries a registration ID. Capture path records the DLT ID alongside consent. Send pipeline blocks any send where the contact's consent does not match the DLT scope. Regulator audit pulls the export and verifies template-to-consent linkage instantly.

EdTech
Case 03

EdTech multi-purpose consent

Student opts in to "exam updates" and "course offers" as separate purposes. Marketing broadcasts target only consenting purposes. Student can later opt out of offers but keep exam updates via the preference center. Granular consent improves long-term subscription retention.

Healthcare
Case 04

Healthcare appointment vs marketing

Patient opt-out blocks marketing but preserves transactional appointment reminders via service-only status. Critical for clinics that want to respect "do not market to me" without missing safety-critical reminders. Audit log distinguishes the two so compliance can demonstrate the intentional design.

SaaS
Case 05

Cross-border GDPR for SaaS

EU contacts captured with lawful basis = consent for marketing, contract for transactional. Right-to-erasure requests honored via the contact-delete flow that purges PII but preserves anonymised consent log for proof of compliance. Audit export structured to the EDPB recommended format.

How it works

From signup to first send in minutes.

Opt-in Tracking is included on every SabNode workspace. No separate billing, no extra setup — flip it on from your workspace settings.

  1. 01

    Configure channels and purposes

    Enable channels (WhatsApp, Email, SMS, Push). Optionally define purposes (marketing, product, billing) for granular consent. Set the default state for newly-created contacts (unknown by default, never subscribed).

  2. 02

    Capture consent at every touchpoint

    Web form components, WhatsApp opt-in buttons, import flows, API endpoints — every source captures attribution automatically. Configure the consent text once and it propagates to all sources.

  3. 03

    Enforce on every send

    Send pipeline checks current status before dispatch. Blocks marketing to non-subscribed, blocks all to opted-out. Logged consent-block events surface in the audit feed and DLQ analytics.

  4. 04

    Handle opt-out gracefully

    STOP keyword detection per language flips status to opted-out, sends a confirmation, blocks in-flight sends. Re-engagement flow routes any future inbound through a re-confirm gate before treating the contact as marketable again.

  5. 05

    Export and audit

    Tenant-wide audit export on demand. Per-contact history queryable via UI and API. Regulator-ready CSV or PDF with all attribution. Compliance team self-serves without engineering tickets.

Plays well with

Works with the tools you already ship on.

Meta WhatsApp Cloud APIMailchimpGmailOutlookTwilioOneTrustTRAI DLTGoogle Forms
Frequently asked

Questions about Opt-in Tracking.

Can't find what you're looking for? Talk to our team.

What if I import contacts with consent from another platform?
The import CSV supports columns for consent state per channel, source attribution, original capture timestamp, and the consent text shown at the original capture. The import preserves these as the canonical audit record — no data loss when migrating from Klaviyo, Mailchimp, Interakt, or another CRM. We recommend backfilling the original consent text where available; if not, the import flags those contacts as "legacy consent" so the legal team can decide whether to re-confirm.
How is the WhatsApp 24-hour service window handled?
Inside the service window (a contact has messaged you in the last 24 hours), free-form messages are allowed regardless of marketing consent because the contact initiated the conversation. Outside the window, only approved templates can be sent, and only to contacts with subscribed or service-only status for the channel. The send pipeline encodes this logic so flows do not need to track the window state manually — try to send outside the window without a template and the node fails with a clear reason.
Can I override consent for a specific send?
Only with explicit admin RBAC permission and an audit reason. The override is logged with the user who triggered it, the reason text, and the affected contacts. This exists for legitimate exceptions — emergency safety notification, regulatory required notice — but is intentionally cumbersome so it cannot be used as a daily workaround. Most tenants disable override entirely; the workflow then routes legitimate exceptions through legal review.
How does the preference center work?
The preference center is a hosted page at `prefs.sabnode.com/{tenant}/{contact_token}` (or your custom subdomain). The token is a signed JWT embedded in outbound email and WhatsApp unsubscribe links. The contact lands on a page showing their current consent per channel and per purpose, with toggles to update. Changes are captured with full attribution (timestamp, IP, user agent, the page state). Embedded widget version is available for customers who want it inside their own logged-in UI.
What happens during contact merge for consent?
Consent state takes the more restrictive value across the two contacts being merged — if one is opted-out and the other is subscribed, the merged contact is opted-out. This prevents accidental opt-back-in through a merge. Both source histories are preserved in the merged contact's audit log so the compliance team can trace exactly when each state change happened, on which source contact, regardless of the merge.
Are double opt-in workflows supported?
Yes for email by default — a contact who opts in via a form gets a confirmation email and is marked subscribed only after they click the confirmation link. The audit log captures both the initial opt-in and the confirmation. For WhatsApp, the convention is single opt-in via explicit button click since the channel itself requires opt-in to start; if you want stronger evidence, you can configure a follow-up confirmation message that requires a "yes" reply before marking subscribed.
How long is the consent audit log retained?
Five years by default on standard plans, configurable up to ten years on enterprise. This covers most regulatory windows globally — India DPDP recommends three years post-deletion, EU GDPR varies by purpose, RBI requires up to seven for financial communications. After retention expires, the log is purged but a summary row remains (count of state changes, last known state) for backwards-compatibility with billing and metrics. The full export should be archived externally if longer retention is needed.
CRM · Compliance

Ship opt-in tracking into production this week.

No credit card. No sales call required. Spin up a workspace, plug in a number, and your team is live in under an hour.