Contacts & Tags
Subscriptions & Consent

Subscriptions & Consent

Gordon CRM tracks email marketing consent at the contact level with a full proof-of-consent audit trail. This system ensures compliance with email marketing best practices and gives you clear visibility into who opted in, when, and how.

The Subscription Model

Every contact has a boolean is_subscribed field. Only contacts where is_subscribed = true are eligible to receive marketing emails (broadcasts and campaigns).

When a contact subscribes, Gordon CRM automatically records:

FieldDescription
is_subscribedtrue — the contact has opted in.
opt_in_timestampThe exact date and time consent was given.
opt_in_sourceWhere the consent came from (e.g., a form ID, "CSV Import", or "Manual Consent").
opt_in_ipThe IP address of the person who gave consent.

When a contact unsubscribes, the unsubscribed_at timestamp is set and is_subscribed is toggled to false.

How Contacts Subscribe

Via Form Submission

If your form includes an is_subscribed field set to true (or "on" for HTML checkboxes), Gordon CRM will:

  1. Set is_subscribed = true
  2. Record the opt_in_timestamp as the current time
  3. Set opt_in_source to the form ID (or a custom opt_in_source field if provided in the form payload)
  4. Record the submitter's IP as opt_in_ip
  5. Clear any prior unsubscribed_at timestamp

Via CSV Import

When you enable "Mark as Subscribed" during import:

  • New contacts are created with full consent proof (source = "CSV Import", ip = uploader's IP)
  • Existing contacts that are already subscribed keep their original consent proof (no overwrite)
  • Existing contacts that are not subscribed get new consent proof recorded

Via Dashboard (Manual Consent)

Re-subscribing an unsubscribed or non-subscribed contact from the dashboard is a guarded action. Gordon CRM does not allow a simple toggle — instead, a Manual Consent Modal is presented requiring:

  1. Legal Basis — The workspace member must select a reason from a dropdown:

    • Verbal Consent — The contact gave spoken permission (e.g., during a discovery call or meeting).
    • Written Consent — The contact provided written permission (e.g., a signed form or email confirmation).
    • Existing Relationship — A pre-existing business relationship justifies re-subscription.
  2. Attestation Checkbox — The workspace member must check a box confirming:

    "I confirm that I have obtained legal, verifiable consent to send marketing emails to this contact, and I assume liability for this attestation."

  3. IP Capture — The admin's IP address is automatically captured and stored in the opt_in_ip field.

Once confirmed, Gordon CRM records:

  • opt_in_source = "Admin Manual Entry: [selected legal basis]"
  • opt_in_timestamp = current time
  • opt_in_ip = the admin's IP address
  • is_subscribed = true
  • unsubscribed_at = cleared

Additionally, all non-complaint suppressions (bounce, unsubscribe, manual) are automatically cleared so the contact becomes fully emailable.

Note: The simple "Unsubscribe" action (toggling a subscribed contact off) does not require the modal — only re-subscribing an unsubscribed contact triggers this flow.

Unsubscribing

Gordon CRM provides a built-in unsubscribe mechanism:

  • Every marketing email includes an unsubscribe link pointing to /unsubscribe/[contactId].
  • When clicked, the contact's is_subscribed is set to false, unsubscribed_at is timestamped, and a contact_suppression record with reason unsubscribe is created.
  • Unsubscribed contacts are automatically excluded from all future broadcasts and campaigns.

Suppressions

Beyond voluntary unsubscribes, Gordon CRM maintains a suppression list that tracks delivery issues. A suppressed contact will not receive any emails, regardless of their is_subscribed status.

Suppression ReasonSourceDescription
bounceAutomaticThe email address is invalid or unreachable. Captured via Resend webhook.
complaintAutomaticThe recipient marked your email as spam. Permanent — cannot be cleared.
unsubscribeUser actionThe contact clicked an unsubscribe link.
manualAdmin actionA workspace member manually suppressed this contact.

Clearing Suppressions

  • bounce, unsubscribe, and manual suppressions can be cleared from the contact detail page.
  • complaint suppressions are permanent and cannot be removed. This protects your sender reputation.

Re-subscribing via Form

When a previously suppressed contact re-subscribes via a form submission, Gordon CRM automatically:

  1. Sets is_subscribed = true with fresh consent proof
  2. Clears unsubscribed_at
  3. Removes bounce, unsubscribe, and manual suppressions
  4. Does NOT remove complaint suppressions — spam complaints are always permanent

Email Eligibility Logic

A contact is eligible to receive a marketing email only when all of these conditions are met:

  1. is_subscribed = true
  2. unsubscribed_at IS NULL
  3. ✅ No active contact_suppression record exists for this contact

If any condition fails, the email is skipped and logged with status suppressed.