Contacts & Fields

Track keeps first-class records for three entity types: contacts (people), companies (organizations), and deals (opportunities). Each gets a detail page, custom fields, and a linked activity timeline.

Contacts

A contact is a person. Default fields:

FieldTypeNotes
nametextRequired.
emailtextUnique per workspace.
phonetextFormatted E.164 on save.
titletextJob title.
company_idFK → companiesOptional link to employer.
owner_idFK → usersWho owns the relationship.
tagstext[]Free-form tags.
notestextFreeform internal note.

Companies

A company is an organization — a customer, vendor, partner, or prospect. Default fields:

FieldTypeNotes
nametextRequired.
domaintextCanonical domain (e.g., acme.com). Used for email dedup.
industrytext
sizetext1–10, 11–50, 51–200, etc.
parent_idFK → companiesParent company for subsidiaries.
owner_idFK → users

Deals

A deal is an opportunity moving through a pipeline. Default fields:

FieldTypeNotes
nametextRequired.
value_centsintDeal value in minor units.
currencytextISO 4217 code.
stage_idFK → board_stagesCurrent pipeline stage.
close_datedateExpected close.
probabilitynumeric0–100. Inherits from stage if unset.
primary_contact_idFK → contacts
company_idFK → companies
owner_idFK → users

Custom fields

Add fields from Settings → Custom Fields. Supported types:

  • Text (short, long)
  • Number (integer, decimal)
  • Date, DateTime
  • Boolean
  • Single-select (dropdown)
  • Multi-select
  • URL
  • Currency
  • Link (to another contact, company, or deal)

Custom fields appear automatically in:

  • Record detail forms
  • List view columns (toggleable)
  • Filters and saved views
  • CSV exports
  • Automation triggers and conditions

No schema migration is required — custom fields are stored in a structured jsonb column and validated at the application layer.

Linking records

Records link to each other through foreign keys (built-in) or through Link custom fields (user-defined).

  • Contact → Company is a built-in one-to-many relationship.
  • Company → Company (parent/child) supports one level of hierarchy; use custom fields for deeper nesting.
  • Deal → Contact(s) supports a primary contact plus any number of additional contacts via a join table.

Merging duplicates

If you end up with two records that should be one (usually after a CSV import), open either record → ... menu → Merge. Pick the canonical record. Track merges fields (preferring the canonical value where both exist), moves all linked records, and preserves the full activity timeline on the merged record.

A merge is logged to audit_log — you can see which user merged what and when.

Bulk operations

From list view, shift-click or range-select multiple rows. The bulk action bar supports:

  • Assign owner
  • Add or remove tags
  • Update a field value
  • Export selection to CSV
  • Delete (soft-delete — deleted records are recoverable for 30 days)