Contacts

A contact is one person, and the Contacts section is where they live. This page covers three things that sit next to each other in the Engage workspace: the contact list, the record you get when you select someone, and the Contact Filters section that turns that list into saved views, clusters and groups.

Contacts, the profile, editing and contact groups are free on every plan. Two things are conditional and both are marked where they appear: per-person site history needs Starter, and how many contacts your plan lets you see is a quota with an unusually quiet failure mode.

What a contact is

One person, keyed by email address within your workspace. The email address is the natural key, which is why it is the one field you cannot edit — see the note at the end of this page. Everything else about the person can be changed, by you or by a later import.

The six sources

Every contact records how it first arrived, and that value is stamped once and never rewritten.

SourceShown in the Profile facet asWhat created itEver changes
Form submissionformSomebody submitted one of your published formsNo
CSV importuploadA row in a file you importedNo
Email address capturevalid_emailAn address confirmed through the email flowsNo
SalesforcesalesforceThe bespoke Salesforce integrationNo
Documentation sign-inmcpA reader signed in to your documentationNo
Added by handmanualSomebody used + in Engage, or the create_contact toolNo

The commonest by a distance is form — a contact is created the moment someone submits one of your forms, as Form submissions describes. A reader who signs in to your documentation through the MCP flow becomes a contact too, with source mcp: see Reader sign-in flow. A contact whose source reads salesforce came in through one inbound webhook rather than a configurable sync — CRM integration is specific about what is and is not connected. Bringing an existing list in is its own flow.

Because source is insert-only, re-importing a CSV row for someone who first arrived through a form leaves them stamped form. That is deliberate: the source answers “how did we meet”, not “when did we last touch this record”.

Reading the list

The list is fetched a page at a time — 50 rows per request, capped at 100 — and virtualized, so it scrolls continuously rather than paging, and stays smooth at tens of thousands of rows.

Each row shows an initials avatar, the person’s name (falling back to their email address when they have no name), their job title or email as a subtitle, and a readiness dot. Where a person has opted out, an Opted out marker takes the dot’s place — a deliberately louder signal, because the dot is about how ready they are and the marker is about whether you may contact them at all.

Rows are sorted by readiness, highest first. The group label reads By readiness · N with your workspace’s total; while a search is running it reads By readiness · n of N, so the total stays visible while you narrow.

The search box is server-backed and debounced, so it fires when you pause rather than on every keystroke. It matches name, email and title. When nothing matches it says “No contacts match your search.”

The Contacts section with a contact selected, showing the readiness-sorted list, an opted-out row, and the Signals facet

The same list answers two quite different questions, and it is worth knowing which one you are asking:

Type into the left-panel search box. It matches name, email and title, so a surname, a domain fragment or a job title all work. Selecting a row puts that person in the center card and their facets in the right rail, and the URL becomes a link you can send to a colleague.

This is the mode for answering “what do we know about this person before I reply to them”.

The contact record

Selecting a person opens their record. The first card is the profile, and every field on it edits in place — click a value, type, move on. Each field saves on its own; there is no edit mode and no Save button.

Editing needs contact:write, which starts at the Content Publisher role. Without it the same card renders as read-only text. Note that this is a stronger requirement than editing a form, which only needs Content Writer — see Roles and permissions.

FieldEditable hereSet by an import or a formNotes
EmailNoYes, on creationThe natural key; rendered with a (not editable) marker
First nameYesYes
Last nameYesYes
TitleYesYesDrives the inferred committee role
AccountYesYes, via the company column or fieldA picker over your accounts; clearing it detaches the contact
PhoneYesYes
LinkedIn URLYesYesRendered as a View profile link in the Profile facet
CountryYesYes
TimezoneYesYesAn IANA picker; an invalid value is discarded rather than stored
SourceNoSet once, on creationSee the table above
Email domainNoDerived from the email addressUsed to tell corporate addresses from consumer ones
Hard bounceNoSet by the mail systemRecorded when a send permanently fails

The status strip and what Leed says

Under the profile card: a Readiness meter, the Journey stage as four dots and a pill, Fit out of 100, Intent out of 100, and — when one was inferred — a Committee role pill. Until the first recompute these read as dashes.

The generated sentence below the strip names the person’s stage and then either the persona they matched with its confidence in words, or a prompt to run Recompute scores. All of it comes from one deterministic pass over your own data, described on Engage scores.

Persona match

A card showing the matched persona’s name, the committee role label, and a confidence meter labeled High, Likely or Low. When there is no match it says so in a sentence rather than showing an empty meter, which matters because “no match” and “match with zero confidence” mean very different things.

A persona is matched through the contact’s inferred committee role, and only through that — so a contact with no job title never matches a persona, however well the persona’s prose describes them. Personas covers how to set them up so they can match.

Site engagement

Above Starter, this block shows Sessions, Pages viewed, Form fills and Last active across the person’s whole history; then Content consumption, the six pages they read most, each with a bar and a view count plus a +N more pages tail; then their six most recent sessions with date, duration, page count and entry source. Entry source is the referring host of the session’s first page view, falling back to Email for a session that began from an email link and Direct otherwise.

A contact record on a Free workspace, with the Site engagement block replaced by an upgrade prompt
A Free-tier workspace: the profile stays fully readable and only the history is withheld.

The gate withholds data rather than erroring — nothing 402s, nothing fails — which is exactly why the panel says “upgrade” instead of “no activity yet”. It is one of the four gate behaviors described in When a feature is gated. Because the data was captured all along, upgrading reveals history retroactively rather than starting a clock. What Leed was recording before this person had a name is the subject of Lead profiles and visitor identity.

Emails

Every email this contact was sent, newest first, each with the batch name, when it was sent, and one status pill. The pill shows the furthest action taken, not a history — one row, one pill.

PillMeaningWins over
Opted outThey unsubscribed from this sendEverything
ClickedThey followed a tracked linkOpened, Bounced, Received
OpenedThe open pixel firedBounced, Received
BouncedThe message never landedReceived
ReceivedSent, with nothing recorded since—

Note the precedence: opting out outranks a click, and a click outranks an open, so a contact who clicked and then unsubscribed shows Opted out. This is per-recipient tracking written by the open and click trackers described in Tracked links and open tracking. An opted-out contact is suppressed on every subsequent send, not merely filtered out of a list — see Unsubscribes and opt-outs.

The facet rail

FacetWhat it holds
ProfileEmail, Title, Account, Phone, Country, Timezone, LinkedIn as a View profile link, and Source. Fields with no value are omitted rather than shown blank.
MatchThe matched persona, its committee role, the confidence as a percentage and a meter, and a fixed “Why this match” sentence.
SignalsThe readiness meter, then Readiness, Fit, Intent, Stage and the date the score was computed — or “Not scored yet.”
ActivityPage views and form submissions interleaved newest-first, capped at the 24 most recent items. Starter and up.
ActionsA red opted-out warning when it applies, then Draft direct outreach, which opens Chat with a prompt naming this person, their title, their account and their address.

Adding a contact by hand

The + button opens /engage/contacts/new — a real URL, so a create form is linkable and survives a reload. It asks for Email (required), First name, Last name and Title. The button stays disabled until the address looks like an address; the server validates it properly and derives the email domain.

The behavior when that address already exists is worth knowing, because it is the safe one: only the fields you actually filled in are applied, and the existing contact keeps its original source. Adding “someone we already have” by hand is a merge, never an overwrite, and it never re-stamps a form-fill contact as manual.

Contact Filters: saved views, clusters and groups

The Contact Filters section is the same people, arranged for choosing rather than for looking up. Its left panel is grouped into up to four blocks, each row showing a count:

ViewHow membership is decidedIncludes unscored contactsCap
All contactsEveryone you can seeYes—
Hot leadsReadiness of 70 or moreNo—
StalledReadiness of 45 or lessNo—
Cluster by personaOne row per persona with at least one matched contactNo—
Cluster by committee roleOne row per inferred role with at least one contactNo—
Contact groupThe group’s saved filters and upload batchesYes1,000 members

An unscored contact is in neither Hot nor Stalled — it has no readiness to band. Clusters appear only for personas and roles that actually have someone in them, so an empty workspace shows just the three saved views.

Selecting a view puts a contact table in the center card, with a four-stage funnel strip above it, its own search box, and a table/cards/compact view switch. When a contact group resolves to more than 1,000 members the table says so directly, and suggests refining the group with a filter rather than scrolling.

The Contact Filters section showing saved views, persona and role clusters, contact groups, and the contact table

Note that the Hot and Stalled bands (70 and 45) are not the same numbers as the readiness dot colors (75 and 50). A contact can carry a green dot and not appear in Hot. Both sets of thresholds are documented on Engage scores.

Building a contact group

A group is a name, a description, a set of filters and any number of selected upload batches. It stores the filters, not a frozen list, so anyone who matches later is included automatically — which is what makes a group usable as a standing audience.

Create one with + in the Contact Filters section. As you edit the filters, the right rail previews the members they currently match, so you can see the size of the audience before you save it.

FieldKindOperatorsIn the builder
emailString, one or more valuesContainsEmails
titleString, one or more valuesContainsTitles
company_nameString, one or more valuesContainsCompanies
competitive_productsString, one or more valuesContainsCompetitive Products
company_sizeNumber= > >= < <=Company Size
company_revenueNumber= > >= < <=Company Revenue
company_sic_codesString, one or more valuesContainsAPI only
company_industryString, one or more valuesContainsAPI only
current_customerBooleanIsAPI only
Upload batchesSelection—Uploads

The last three exist in the data model and are honored by the server, but the builder has no control for them — a group filtering on industry or on current-customer status has to be created through the API. Leaving every filter blank includes every contact, which is a legitimate way to make an “everyone” group.

A saved group is what a marketing email is addressed to; Contact groups and audiences picks the story up from there. Each CSV import also creates a group for you automatically, named after the import.

What your plan hides

Your plan caps how many contacts you can see, not how many you can capture:

PlanContacts you can see
Free250
Starter1,000
Growth10,000
EnterpriseUnlimited

Capture never stops. Forms keep working, imports keep running, readers keep signing in. What changes above the cap is which contacts are readable: the window keeps the oldest contacts — the set you held when you crossed the line — and locks the newest ones.

A locked contact is excluded from the list, from search, from every saved view and cluster, from paging and from export.

The meter itself, what it looks like as you approach the limit, and what happens when you cross it are on Usage and limits.

Contacts from an AI client

Four Operator MCP tools cover contacts: list_engage_contacts (paginated, searchable, readiness-sorted), get_engage_contact, create_contact and update_contact. They call the same routes as the screen, so they obey the same RBAC and the same visibility cap — including the 404 for a locked contact. create_contact is the same non-destructive merge described above. See MCP tools for contacts and accounts.

Why I cannot change an email address

The email address is the key Leed matches a person on. Every capture path — a form submission, a CSV row, a documentation sign-in, an email confirmation — resolves to “the contact in this workspace with this address, or a new one”. A contact’s sessions, page views, form fills, email history, opt-in records and score all hang off the row that address resolved to.

Editing the address would therefore mean one of two things: silently pointing the record at a different person’s key, or leaving the old address in every downstream capture path so the next form fill from that person creates a duplicate. Neither is a good outcome, so the field is read-only and marked (not editable) in the profile card.

If someone’s address has genuinely changed, add a contact with the new address — it will begin accumulating its own history from that point — and treat the old record as historical. There is no merge tool.

ESC