Contacts & Tags
The Contact Model

The Contact Model

Contacts are the foundational entity in Gordon CRM. Every interaction — form submission, event registration, Stripe purchase, or manual entry — ultimately creates or updates a Contact record within your workspace.

Contact Fields

Every contact belongs to a single workspace and is uniquely identified by their email address within that workspace. Here is the full field reference:

FieldTypeDescription
emailstringRequired. The contact's email address. Unique per workspace.
first_namestringFirst name.
last_namestringLast name.
phonestringPhone number.
sourceenumHow the contact was created: manual, form, import, eventbrite, or stripe.
address_line1stringStreet address line 1.
address_line2stringStreet address line 2.
citystringCity.
statestringState or province.
postal_codestringZIP or postal code.
countrystringCountry.
birth_monthintegerBirthday month (1–12). Must be paired with birth_day.
birth_dayintegerBirthday day (1–31). Must be paired with birth_month.
is_subscribedbooleanWhether the contact has opted in to receive marketing emails.
assigned_user_iduuidThe workspace member this contact is assigned to.

Consent & Opt-In Fields

These fields are automatically managed when a contact subscribes via a form or import. See the Subscriptions & Consent page for full details.

FieldTypeDescription
opt_in_timestamptimestampWhen consent was recorded.
opt_in_sourcestringWhere consent originated (e.g., a form ID or "CSV Import").
opt_in_ipstringThe IP address at the time of consent.
unsubscribed_attimestampWhen the contact unsubscribed (null if still subscribed).

Contact Sources

Contacts can enter your workspace through several channels:

SourceHow It Works
ManualCreated by a workspace member via the dashboard.
FormCaptured via a Gordon CRM headless form. New leads are processed immediately; existing contacts trigger a verification email.
ImportUploaded via CSV using the bulk import pipeline. See CSV Import.
EventbriteAuto-synced when an attendee registers for a connected Eventbrite event.
StripeAuto-created when a new customer makes a purchase through a connected Stripe account.

Workspace Isolation

Contacts are strictly isolated by workspace. Two different workspaces can each have a contact with jane@example.com — they are completely independent records with no data leakage between them.

This isolation is enforced at the database level using PostgreSQL Row-Level Security (RLS), meaning it cannot be bypassed by application bugs.

Related Entities

A single contact can be connected to many other records in Gordon CRM:

  • Tags — Categorize contacts with colored labels. See Tags.
  • Notes — Timestamped internal notes attached by team members (or automatically by form submissions).
  • Companies — Link contacts to B2B company records with a job title and work email (requires the Companies module).
  • Deals — Every deal in a pipeline must be linked to a contact (requires the Deals module).
  • Appointments — Schedule meetings or service appointments for a contact (requires the Appointments module).
  • Campaign Enrollments — Track which automated email sequences a contact is enrolled in.
  • Event Registrations — Track which events a contact has attended and their payment status.
  • Transactions — Stripe purchase history linked to this contact.
  • Email Sends — A complete log of every email sent to this contact (campaigns, broadcasts, and transactional).
  • Suppressions — Records of delivery issues (bounces, complaints) that prevent future sends. See Subscriptions & Consent.