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:
| Field | Description |
|---|---|
is_subscribed | true — the contact has opted in. |
opt_in_timestamp | The exact date and time consent was given. |
opt_in_source | Where the consent came from (e.g., a form ID, "CSV Import", or "Manual Consent"). |
opt_in_ip | The 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:
- Set
is_subscribed = true - Record the
opt_in_timestampas the current time - Set
opt_in_sourceto the form ID (or a customopt_in_sourcefield if provided in the form payload) - Record the submitter's IP as
opt_in_ip - Clear any prior
unsubscribed_attimestamp
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:
-
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.
-
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."
-
IP Capture — The admin's IP address is automatically captured and stored in the
opt_in_ipfield.
Once confirmed, Gordon CRM records:
opt_in_source="Admin Manual Entry: [selected legal basis]"opt_in_timestamp= current timeopt_in_ip= the admin's IP addressis_subscribed=trueunsubscribed_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_subscribedis set tofalse,unsubscribed_atis timestamped, and acontact_suppressionrecord with reasonunsubscribeis 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 Reason | Source | Description |
|---|---|---|
bounce | Automatic | The email address is invalid or unreachable. Captured via Resend webhook. |
complaint | Automatic | The recipient marked your email as spam. Permanent — cannot be cleared. |
unsubscribe | User action | The contact clicked an unsubscribe link. |
manual | Admin action | A workspace member manually suppressed this contact. |
Clearing Suppressions
bounce,unsubscribe, andmanualsuppressions can be cleared from the contact detail page.complaintsuppressions 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:
- Sets
is_subscribed = truewith fresh consent proof - Clears
unsubscribed_at - Removes
bounce,unsubscribe, andmanualsuppressions - Does NOT remove
complaintsuppressions — 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:
- ✅
is_subscribed = true - ✅
unsubscribed_at IS NULL - ✅ No active
contact_suppressionrecord exists for this contact
If any condition fails, the email is skipped and logged with status suppressed.