Data objects

Contacts

Specification Reviewed · not yet fact-checked

In short

What is a contact in Reply and how does it behave?

A contact is Reply's record for one person — profile fields, custom fields, an email validation status, and a pipeline stage. The app labels the section People; the API noun is Contact. Inside each sequence the contact carries statuses drawn from 14 values, and Opted Out is the only status retained outside sequences.

Contact vs Company. A Contact is a person; a Company is the organization the person belongs to. The Reply app labels these People and Accounts.

At a glance

AspectDetail
What it isThe record for one person — profile fields, custom fields, an email validation status, sequence statuses, and a stage. People in the app; Contact in the API
Belongs to / ContainsBelongs to one company at a time and an owner; member of any number of lists; processed by sequences
SurfacesUI (People → Contacts) · REST API · MCP
Key limitUp to 50 custom fields per account; contact storage 100,000 by default — see Limits
LifecycleStatuses (14 values, up to 4 at once) track processing inside a sequence; a separate stage tracks engagement across all outreach
Does notSend anything by itself, keep the Bounced status when moved to another sequence, or shed Opted Out — that status is retained even outside sequences
PlansWith Team Edition in public mode, only the sequence owner can change a contact's status

Definition

A contact is the record for one person. The app calls the section People — the People → Contacts page — and the API noun is Contact. The contact grid shows the standard profile fields — Name, Email, Provider, Account, Domain, Company Size, Stage, Industry, Owner, Title, Sequence, Status, Inbox, # Of Calls, Country, City, State, Phone, LinkedIn Recruiter, LI Sales Navigator, and Timezone — plus any custom fields you add.

Purpose

Contacts are what sequences process, what imports and prospect searches produce, what enrichment fills in, and what replies are matched against. The People page organizes them with quick filters (All, My, Opened, Replied, Bounced, Opted Out, To Call, Clicked), smart filters with saved views, lists, and bulk quick actions such as email validation, enrichment, and moving to sequences.

Relationships

RelationshipObject
Belongs toOne company at a time, plus an owner — the team member responsible for the contact
Member ofAny number of lists
Processed bySequences — statuses track processing per sequence; the contact card's Sequences tab lists current and past sequences
Enriched byProspect data services — enrichment, AI custom fields, and email validation

Creation

Contacts are created by manual entry (New Contact → Create manually on the People page — Email and First Name are the mandatory fields), CSV import, a Realtime B2B Data search, CRM integration sync, and the API. Edits happen in the contact card; to edit in bulk, re-import a CSV with the new values and the Update missing fields option checked. Duplicates are matched rather than re-created — see Contact deduplication.

Lifecycle and states

Status vs stage. Contact statuses represent the state of processing within a specific sequence, and Reply assigns them automatically based on the interaction. Contact stages represent the level of interaction and engagement across the entire outreach process and are set from the People page. See Statuses.

A contact that is part of a sequence carries statuses drawn from these 14 values:

StatusAssigned whenManual control
ActiveThe contact is added to an active sequence — steps can be sent and replies trackedYes — can be changed to Paused, Finished, Out of office, or Opted Out; to Bounced or Replied only after at least one email was received
PausedSet manually to temporarily halt sending and reply trackingYes — only for contacts that are in a sequence; revert to Active to resume
Missing DataA template variable has no value in the contact's profileRemoval is manual — fill in the variable or remove it from the template; no emails are sent while set
BouncedAn email is returned undeliveredCan also be set manually after at least one email was sent; fix the address, remove the status, and set Active to resend
Out of officeAn auto-reply with out-of-office key words is detectedYes — further steps stop until the status is removed or the reply is processed automatically
FinishedThe prospect replies, or all steps have been sentYes — back to Active only if steps remain or new steps were added; no sending or reply detection while set
ContactedThe contact received at least one email from the current sequenceNo
Opted OutThe prospect clicks the opt-out link, or an unsubscribe reply is sorted into the Do Not Contact inbox categoryYes — can be set and removed manually; any team member can set it
RepliedThe prospect responds by email (from the same address, or forwarded from a thread) or by SMSYes — the sequence stops by default; usually comes together with Finished
OpenedThe prospect opens an email, with opens tracking enabledNo
ClickedThe prospect clicks a tracked link, with links tracking enabledNo
Auto-repliedAn automatic reply is detectedNo — cannot be set or removed manually; comes along with Finished
To callThe contact is moved to a Call step in a sequenceYes — can also be set from the Contact sidebar
CalledAny call action — a completed Call task, a Cloud Calls call, or a logged callPermanent — removable only manually via the Contact sidebar

Rules that apply across statuses:

  • Each contact can have up to 4 statuses at the same time.
  • With Team Edition in public mode, only the sequence owner can change the status of contacts not assigned to them; any team member can assign Opted Out.
  • Opted Out is the only status retained for a contact even when it is not in a sequence, and a contact with it cannot be moved to a different sequence.
  • Bounced is not retained when the prospect is shifted to a different sequence.

Separately from statuses, each contact carries one stage — a label such as Interested, Engaging, Not Interested, or Do Not Contact — describing engagement across the whole outreach process. Stages are assigned via Set stage on the People page.

Each contact's email address also carries a validation status — Valid, Risky, or Invalid; contacts with Invalid addresses do not receive sequence emails. See Prospect data for the validation service.

Configuration

  • Custom fields (Settings → Contacts): Text (up to 4000 characters), Number (numeric values only), and AI custom fields whose value is generated from a prompt after enrichment. Fields are shared with all team members. A field can be marked Use this field as a phone field so its value is treated as a phone number for calling. A Text field cannot be changed to Number once at least one contact has a value in it, and fields are deleted one by one, not in bulk.
  • Stages (Settings → Contacts → Contacts stages): you cannot create new stages, only edit the existing ones — name, label color, and description.
  • Tracking: the Opened and Clicked statuses depend on opens tracking and links tracking, toggled per sequence in Sequence → Settings → General Settings.
  • Replies handling: whether a reply finishes the contact or processing continues is set per sequence in Sequence → Settings → Replies handling.

Processing behavior

Reply assigns statuses automatically as interactions happen: replies and SMS responses set Replied, undelivered email sets Bounced, detected auto-replies set Auto-replied or Out of office, and opt-out clicks or unsubscribe replies set Opted Out. The AI that sorts unsubscribe replies into the Do Not Contact category understands English only — replies in other languages need their inbox category set manually.

When a contact is created or updated, Reply normalizes the LinkedIn profile URL to the canonical https://www.linkedin.com/in/username format. This applies to every ingestion source — CSV import, API import, enrichment, CRM integration sync (Salesforce, HubSpot, Pipedrive, Copper), and manual edits — and automatic LinkedIn steps save the resolved profile URL back to the contact. Normalization is best-effort: a URL that cannot be parsed, such as a company page, is stored as-is. Duplicate detection by LinkedIn URL is format-agnostic, so URL variants of the same profile do not create duplicates.

Side effects

  • Move to sequence automatically removes the selected contacts from their previous sequence, and the email is delivered immediately despite the Step setting.
  • A reply stops the sequence for the contact by default, unless Continue processing steps is selected in the sequence's replies-handling settings.
  • Every action is recorded in the contact card's Activity tab, from creation onward — including AI field enrichment events and manual AI field updates. The Sequences and Emails tabs keep the sequence history and all sent emails.

Limits

LimitValue
Custom fields per account50 (standard and AI combined)
Text custom field valueUp to 4000 characters
AI custom field valueUp to 1500 characters
Statuses per contactUp to 4
Stage name21 symbols maximum
Stage description512 symbols maximum
Contact storage100,000 by default — see Limits

Deletion behavior

The Delete quick action permanently removes the contact. To stop outreach without deleting, use the Opted Out status (retained even outside sequences and blocks moving the contact to another sequence) or Blacklist, which excludes the contact from further communication and is reversible with Unblacklist.

Edge cases

  • A contact can show Bounced and Opened together — the recipient provider's email checker may register an open on an invalid address, or the open may be your own view of the bounce-back message.
  • The Bounced status does not follow the contact into a different sequence.
  • Missing Data never clears itself — fix the variable value or remove the variable from the template, then remove the status manually.
  • Auto-replied cannot be set or removed manually and arrives together with Finished.
  • A LinkedIn company-page URL cannot be normalized and is stored exactly as entered.

FAQ

Can a contact be in two sequences at once?

Moving contacts with Move to sequence automatically removes them from the previous sequence. Team Edition lets the same prospect be pushed to several sequences of different team members. A contact with the Opted Out status cannot be moved to another sequence at all. See Contact enrollment.

What is the difference between a status and a stage?

Statuses describe processing within one sequence (Active, Replied, Bounced, and the other values above) and are mostly assigned automatically. The stage is a single manually set label — Interested, Engaging, Not Interested, Do Not Contact, and similar — describing the relationship across all outreach. See Statuses.

Why is a contact not receiving emails?

The Missing Data, Finished, Paused, and Opted Out statuses all stop sends, contacts with an Invalid email validation status are skipped to protect the bounce rate, and blacklisted contacts are excluded from further communication. See Why was an email not sent.

Why did creating a contact not add a new record?

Reply matches duplicates instead of re-creating them — including by LinkedIn URL, where matching is format-agnostic across URL variants of the same profile. See Contact deduplication and Manage duplicates.

Build with Reply