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
- Navigate to Contacts in the sidebar.
- 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.
- 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.
- 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:
- Someone registers for a connected Eventbrite event
- A new customer makes a purchase through a connected Stripe integration
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.
- Tags: Filter contacts by their tags. Selecting tags opens a multi-select menu supporting three operators:
- 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:
- Metadata & Demographics: The top header shows primary contact info (email, phone, address, birthday) and high-level metadata (connected Companies, Deals, and Tags).
- Notes Timeline: Positioned as a full-width container directly below the demographics, providing immediate access to the contact's interaction history.
- 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.
- Communication & Campaigns: Grouped together in a responsive grid row (Emails on the left, enrolled Campaigns on the right).
- Commercial History: Grouped in a responsive grid row (Events on the left, transaction ledger history on the right).
- 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.
| Card | Description | Module-Gated? |
|---|---|---|
| Companies | Companies this contact is linked to, with job title and work email | Yes — Companies |
| Deals | Active and closed deals linked to this contact | Yes — Deals |
| Tags | Colored labels assigned to this contact. Click + Tag to assign existing tags | No |
| Appointments | Scheduled appointments for this contact | Yes — Appointments |
| Notes | A unified feed combining contact, task, and appointment notes | No |
| Tasks | To-do items linked to this contact | No |
| Courses | Active courses this contact is enrolled in, showing progress. Click + Enroll (ghost button) to enroll the contact inline | Yes — Courses |
| Campaigns | Email campaigns this contact has been enrolled in (active and past) | No |
| Forms | Form submissions received from this contact, showing submission types, submission date/time, and allowing you to view submission details and profile sync mismatches | No |
| Events | Events 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 |
| Emails | A complete log of every email sent to this contact (campaigns, broadcasts, transactional) | No |
| Transactions | Purchase history from Stripe, event payments, and deal payments | No |
| Agreements | Digital agreements (waivers, intakes) sent for signing | No |
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
manualhard 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 > 0but less thanamount_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_refundedautomations. - 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:
| Source | How the Contact Was Created |
|---|---|
| Manual | Created by a workspace member from the dashboard |
| Form | Submitted a Gordon CRM form |
| Import | Uploaded via CSV Import |
| Eventbrite | Registered for a connected Eventbrite event |
| Stripe | Made a purchase through a connected Stripe integration |
Permissions
All workspace members can view, create, and edit contacts.
Related
- CSV Import — Bulk import contacts from a CSV file
- Tags — Organize contacts with colored labels
- Subscriptions & Consent — Email consent, suppressions, and eligibility
- Notes — Rich-text notes and the unified notes feed
- Technical Reference: Contacts — Data models, schemas, and architecture