Contacts
Overview

Contacts

Contacts are the foundation of Gordon CRM. Every person you interact with — whether they fill out a form, register for an event, make a purchase, or are added by your team — is stored as a contact in your workspace.

[SCREENSHOT PLACEHOLDER: Contacts list page showing the contacts table with columns for name, email, source, tags, and subscription status]

Creating a Contact

Manually from the Dashboard

  1. Navigate to Contacts in the sidebar.
  2. Click the Create Contact button (or the "+" icon on mobile). On desktop, this opens the contact creation form; on mobile viewports, it slides up as a bottom form designed for easy touch access.
  3. Enter the contact's email address (required), first name, last name, phone, full address fields (street address lines, city, state, postal code, country), birthday (month and day), and select their marketing subscription state.
  4. Click Save New Contact (which features a dynamic disabled "Saving..." state on click).

Example: After a phone call with a potential client, create a contact manually so you can assign them tags, create follow-up tasks, and track the relationship.

From a Form Submission

When someone submits a form on your website, they are automatically added as a contact. If the contact already exists, their information is updated. See Forms for details on connecting forms to your CRM.

From a CSV Import

Upload a CSV file to create or update contacts in bulk. See CSV Import for the full import guide.

From Integrations

Contacts are also created automatically when:

The Contacts List

The Contacts page displays all contacts in your workspace in a searchable, sortable table. You can search by name or email, sort by headers, and build advanced multi-criteria filters.

Composable Filter Builder

The Contacts dashboard replaces simple dropdowns with an interactive Filter Builder allowing you to stack multiple filter criteria:

  • Adding Filters: Click the + Filter button to open the filter options. You can filter by:
    • Tags: Filter contacts by their tags. Selecting tags opens a multi-select menu supporting three operators:
      • Includes any (default): Matches contacts who have any of the selected tags.
      • Includes all: Matches contacts who have all of the selected tags.
      • Excludes: Filters out any contacts who have any of the selected tags.
    • Source: Filter contacts by how they entered the CRM. Renders a single-select radio list of all distinct sources currently present in your workspace database.
  • Active Filter Chips: Each active filter is displayed as a chip. Click the × on a chip to remove it instantly.
  • Click-to-Edit Filters: Click on any active filter chip to modify its operator or values inline. Single-select filters (like Source) apply instantly on change, while multi-select filters (like Tags) provide an Apply button. Unchecking all options removes the chip.
  • Inter-Chip Logic: When multiple filter chips are active (e.g. Tags + Source), they are combined using an implicit AND operator (contacts must satisfy all conditions).
  • ✕ Clear filters: Appears next to the search bar when any active filter is configured, allowing you to reset the list view in one click.
  • Mobile Adaptability: On mobile screens, filter chips automatically truncate with an ellipsis (max-w-[70vw]) to prevent horizontal page scrolling.

Each contact row displays the following information:

  • Name: The contact's full name.
  • Email: The primary email address.
  • Phone: The contact's phone number (cosmetically formatted).
  • Email Status: A colored badge indicating their subscription and deliverability status following a 6-tier hierarchy (Blocked, Bounced, Spam, Unsubscribed, Not Opted In, or Subscribed).
  • Tags: Up to three colored tags applied to the contact.
  • Source: How the contact entered the CRM (Manual, Form, Import, Eventbrite, or Stripe).
  • Added: The creation date of the contact.

Sorting

You can sort the contacts list using clickable column headers:

  • Name: Sorts alphabetically (A→Z / Z→A) using text-aware sort icons (A Z / Z A).
  • Source: Sorts alphabetically by creation source (A→Z / Z→A) using text-aware sort icons (A Z / Z A).
  • Added: Sorts by creation date using date-aware stacked-bar sort icons.

The sort state is preserved independently of the filter and search state (applying or clearing filters will not change the active sort column or order).

The Contact Detail Page

Clicking on a contact opens their Contact Detail page — a comprehensive view of everything related to that person. The page layout is organized to prioritize user intent and frequency of interaction:

  1. Metadata & Demographics: The top header shows primary contact info (email, phone, address, birthday) and high-level metadata (connected Companies, Deals, and Tags).
  2. Notes Timeline: Positioned as a full-width container directly below the demographics, providing immediate access to the contact's interaction history.
  3. Tasks & Appointments: Rendered in a side-by-side responsive grid row (Tasks on the left, Appointments on the right). If the Appointments module is disabled, the Tasks section auto-stretches to take full width.
  4. Communication & Campaigns: Grouped together in a responsive grid row (Emails on the left, enrolled Campaigns on the right).
  5. Commercial History: Grouped in a responsive grid row (Events on the left, transaction ledger history on the right).
  6. Agreements Table: Sent clickwrap agreements are positioned at the very bottom in a dedicated full-width table.

Mobile Scroll-Spy Navigation

On mobile viewports, the Contact Detail page renders a sticky navigation tab bar at the top of the screen to allow quick jumps across sections:

  • Dynamic Tab Building: Only displays tabs for modules that are active in your workspace (e.g. Companies, Deals, Appointments).
  • Horizontal Scroll Indicators: The tab bar supports swipe/scroll scrolling with visual overflow indicators.
  • Auto Scroll Centering: Clicking a tab automatically scrolls the section into view and centers the active tab in the mobile viewport.
  • Instant Navigation: The tab bar is interactive immediately when the page loads, letting you navigate without any lag or delay.

Contact Information

The Contact Detail page header features a streamlined, de-carded layout designed to present information clearly:

  • Demographics Bar: Displays the contact's email, phone, address, and birthday side-by-side in a responsive horizontal bar.
  • Visual Anchors: Replaces legacy initials circles with a clean Users icon next to the contact's name.
  • Audit Trails: Displays the creation and last modification metadata (e.g. Creator Name, Editor Name, and dates) in a unified vertical list.
  • Actions: Click the Edit button (represented by a standard Pencil icon) to update any contact details.
  • Contact Source Edit: The original registration source is listed in the header metadata. Workspace owners and admins can click the edit Pencil icon next to the source label to open the Change Contact Source form to correct manual entry or ingestion mistakes.
    • Note: The edit form requires selecting a new source (with Stripe or Eventbrite options shown only if active workspace connections exist) and inputting a mandatory explanation (up to 250 characters). Updates are restricted to owners and admins and logged directly to the notes timeline as a system audit note.

Note: US phone numbers are automatically normalized and formatted as (XXX) XXX-XXXX for display in lists, preview screens, and detail cards. Raw stored values in database fields and forms are unaffected.

Contacts are uniquely identified by their email address within your workspace — no two contacts can share the same email. If you attempt to update a contact's email address to one that is already registered to another contact in the workspace, a warning message will let you know: "A contact with this email already exists in this workspace."

Feature Cards

The Contact Detail page includes the following cards. Some cards are module-gated and only appear when their module is enabled in Workspace Administration.

CardDescriptionModule-Gated?
CompaniesCompanies this contact is linked to, with job title and work emailYes — Companies
DealsActive and closed deals linked to this contactYes — Deals
TagsColored labels assigned to this contact. Click + Tag to assign existing tagsNo
AppointmentsScheduled appointments for this contactYes — Appointments
NotesA unified feed combining contact, task, and appointment notesNo
TasksTo-do items linked to this contactNo
CoursesActive courses this contact is enrolled in, showing progress. Click + Enroll (ghost button) to enroll the contact inlineYes — Courses
CampaignsEmail campaigns this contact has been enrolled in (active and past)No
FormsForm submissions received from this contact, showing submission types, submission date/time, and allowing you to view submission details and profile sync mismatchesNo
EventsEvents this contact has registered for. Click + Register to create manual registrations (excludes Eventbrite-synced or already registered events, showing start dates and (Past) indicators in dropdown)No
EmailsA complete log of every email sent to this contact (campaigns, broadcasts, transactional)No
TransactionsPurchase history from Stripe, event payments, and deal paymentsNo
AgreementsDigital agreements (waivers, intakes) sent for signingNo

Action Forms on Mobile: To maintain a touch-friendly mobile interface, action views on the Contact Detail page (such as Enroll in Course, Add Registration, and Send Agreement) render as standard forms on desktop viewports and slide up as bottom forms on mobile devices. The View Signed Agreement viewer remains a standard centered window on all devices to ensure document legibility.

Example: When a team member opens a contact's page before a follow-up call, they can see the contact's notes feed for context, check their deal status, review past emails, and see which events they've attended — all on one page.

Search & Filters on Detail Cards

To help you manage information for busy contacts, five timeline detail cards (Notes, Tasks, Appointments, Emails, and Transactions) support inline searching and status/type filtering:

  • Appointments Card: Search by title and filter by status (Upcoming, Past, or Any; defaults to Upcoming), rendering duration badges (e.g., (45m)) inline alongside meeting times.
  • Tasks Card: Search by task title and filter by status (Open, Completed, or Any; defaults to Open).
  • Notes Card: Search plain-text content and filter by note type (All, Contact, Task, or Appointment; defaults to All).
  • Emails Card: Search by subject/recipient and filter by status or sender type.
  • Transactions Card: Filter payments by category (Products, Events, or Deals).

Mobile Responsive Polish

To ensure ease of use on mobile screens, all five cards feature a mobile-optimized control layout:

  • Vertical Stacking: Controls stack vertically on mobile and search inputs stretch horizontally to full width (flex-col-reverse sm:flex-row).
  • Left-Aligned Pills: Filter pill groups are content-sized (w-fit) and left-aligned rather than expanding awkwardly across the screen.
  • Filters First: Actionable filter pills are positioned above search input boxes on small viewports so filtering options remain accessible.

Forms History & Profile Comparison

The Forms card displays a chronological list of all form submissions received from the contact.

Each entry in the card lists:

  • Form Name: A direct link to the form's dashboard details.
  • Submission Time: The exact date and time the form was submitted.
  • Update Mode Badge: Indicates how the CRM processed the submission. Selecting a badge opens an explanatory popover detailing its security rules and overwrite permissions:
    • Verified Update: The submitter verified their identity via an email link. This submission is permitted to overwrite existing profile details.
    • API Update: The submission was sent securely server-to-server using an API Key and instantly updated the profile details.

Submission Details and Mismatches

Click the Details button (eye icon) next to any form submission to open a parsed view of the submitted fields:

  • Profile Sync Comparison: The CRM compares the submitted values against the contact's current profile. It displays a green Match badge if they are identical, or a yellow Mismatch badge if the submitted data differs from the contact's current profile. Fields not present in the profile are marked as N/A.
  • Metadata Filtering: Internal submission keys (such as honeypots) are automatically hidden, and marketing subscription indicators are suppressed if false, giving you a clean view of the submitter's intended input.

Subscription & Email Delivery Blocking

The Contact Detail page prominently displays the contact's subscription and deliverability status, prefixed with an Email Status: label and a Mail icon, following a 6-tier status hierarchy:

  • 🔴 Blocked: Manually blocked email delivery. All outgoing communication (marketing and transactional) is halted.
  • 🟠 Bounced: Delivery failed. Hard bounced.
  • 🔴 Spam: Marked as spam by the recipient (complaint).
  • 🔘 Unsubscribed: Opted out of marketing.
  • 🔵 Not Opted In: Subscribed is false (default state for new contacts).
  • 🟢 Subscribed: Opted in to marketing.

From the profile page, administrators can select options from the dropdown menu, which explicitly reference the email context (e.g., "Clear Bounce Status", "Block Email Delivery"):

  • Subscribe a contact: Manually opt in a contact (requires manual consent attestation, which records the legal basis in an immutable audit note).
  • Unsubscribe a contact: Opt out of marketing.
  • Block / Unblock Email Delivery: Manually block email delivery for the contact (which inserts a manual hard suppression and writes an immutable audit note to the timeline) or unblock them (which deletes the suppression and logs an unblock note). The confirmation window explicitly refers to "Block Email Delivery" to avoid confusion with general CRM blacklisting.
  • Clear Suppressions: Clear non-complaint suppressions (such as bounces or unsubscribes) to restore eligibility. Complaint suppressions are permanent.

Transactions & Refund Management

The Transactions tab on the Contact Detail page provides a unified feed of the contact's financial history in your CRM (Stripe product purchases, event registrations, and deal payments). From the Transactions feed, you can review payment details, check statuses, and manage refunds:

  • Transaction Details: Clicking the options menu (three dots) next to a transaction row opens a detailed view showing the Product, Purchase Date, Amount Paid, Status, Amount Refunded, and Stripe Payment Intent ID.
  • Computed Status Badges: Transactions display visual statuses based on their current ledger state:
    • Succeeded (emerald badge): Fully paid, with no refunds.
    • Partial Refund (amber badge): Part of the transaction value has been refunded (amount_refunded > 0 but less than amount_paid).
    • Refunded (red badge): The entire transaction has been refunded.
  • Multi-Product Checkout Grouping: If the contact purchased multiple products in a single checkout session, the CRM automatically groups them under a single checkout detail view (indicated by a shopping cart icon and product count). You can switch between products using the side tab menu to view or refund each item independently.
  • Record Manual Refund: Expand the "Record Manual Refund" form inside the details view to record a full or partial refund.
    • Cents-Based Ledger Validation: Reconciles the refund using cents-based math to prevent floating-point errors. The input enforces validation limits to prevent over-refunding.
    • Automation Control: When recording a full refund, you can toggle the "Run automation rules for this refund" option to run associated product_refunded automations.
    • Revert Actions: If a refund needs to be adjusted or cleared, you can click Clear Refund Record (for partial refunds) or Revert to Succeeded (for full refunds) to reset the transaction's ledger state back to succeeded.
  • Filter Tabs: You can filter the transactions feed by category (Products, Events, Deals). The Deals filter tab is conditionally hidden if the Deals module is disabled in your workspace.

Contact Source

Every contact is labeled with how they entered your workspace:

SourceHow the Contact Was Created
ManualCreated by a workspace member from the dashboard
FormSubmitted a Gordon CRM form
ImportUploaded via CSV Import
EventbriteRegistered for a connected Eventbrite event
StripeMade a purchase through a connected Stripe integration

Permissions

All workspace members can view, create, and edit contacts.

Related