Search

Track ships with full-text search across every record and timeline entry. It's powered by Postgres tsvector columns on your Supabase — nothing leaves your database.

Press Cmd+K (macOS) or Ctrl+K (Windows/Linux) from anywhere in the app. The command palette opens.

Start typing. Results are grouped:

  • Contacts (name, email, phone, title, custom fields)
  • Companies (name, domain, industry, custom fields)
  • Deals (name, value, stage, custom fields)
  • Notes & emails (timeline entries, with a snippet)
  • Tasks (title + description)

Click a result — or use arrow keys + Enter — to jump to it.

Syntax

Search understands:

SyntaxMeaning
acmeMatch acme in any indexed field.
"acme corp"Exact phrase.
stage:wonDeals currently in a stage named "won".
owner:meRecords owned by the current user.
tag:enterpriseRecords tagged enterprise.
company:acmeRecords linked to a company matching acme.
type:dealRestrict to one record type.
created:>2026-01-01Records created after a date.
-closedExclude results matching closed.

Combine with spaces (all conditions must match):

type:deal stage:negotiation owner:me value:>50000

Saved searches

Run a search, then click Save in the palette. Saved searches appear in the left rail under Saved Searches and stay scoped to the user.

Performance notes

The search_index table is populated by triggers on every record type and timeline entry. Indexing is synchronous — a freshly created contact is searchable immediately.

For workspaces with >1M records, consider adding a GIN index on search_index.tsv (the schema ships it, but double-check after any custom migration):

create index if not exists search_index_tsv_idx
  on search_index using gin (tsv);

Fuzzy matching

Misspellings fall back to trigram similarity (pg_trgm). "Akme corp" still finds "Acme Corp". Fuzzy results rank below exact matches.

Workspace admins have an extra Admin search filter that crosses soft-deleted records. Useful for finding a contact a teammate deleted last week. Everyone else only sees live records.

Excluding fields

To keep a custom field out of the search index (e.g., sensitive data), set its Searchable toggle to off in Settings → Custom Fields. The next index rebuild drops it.