# How Reply Works — full site
> Canonical product documentation explaining what Reply can do, how Reply behaves, and what you can build with it — for humans and AI agents.
Size: 831 KB, ≈213k tokens. 107 pages, separated by "---" with an HTML comment carrying each page's canonical URL.
Generated from sites/how/content by sites/how/tools/render.mjs.
Canonical reference: https://docs.reply.io. Agent-facing surfaces: https://agents.reply.io.
---
# Introduction
> Understand Reply's capabilities, workflows, product specifications, and rules — and build prospecting, outbound, inbox, and AI SDR systems on top of it.
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
**This site explains what Reply can do and exactly how the product behaves.** Reply is a
sales engagement platform: sequences that combine email, LinkedIn, call, SMS, WhatsApp,
task, and Zapier steps; the Reply Data B2B database for finding prospects; a consolidated
inbox with AI-assigned reply categories; MailToaster email warm-up; native CRM
integrations (Salesforce, HubSpot, Pipedrive, Copper); the Findy Chrome extension; and
Jason AI — an AI SDR that builds and runs campaigns. This documentation is written so a
person *or an AI agent* can decide whether Reply fits a task, understand the rules it
will follow, and jump straight to implementation.
> **Status labels.** Every page carries a status. **Reviewed** pages are grounded in
> Reply's product documentation; pages still labeled **Placeholder** are structural
> scaffolding — treat their detailed claims as unverified until the label is removed.
## Follow the journey
- [What can you build?](/start/what-can-you-build) — AI SDRs, prospecting agents, outbound systems
- [Build an AI SDR](/workflows/build-an-ai-sdr) — the flagship workflow, end to end
- [Capabilities](/capabilities) — can Reply do the task you need?
- [When to use Reply](/start/when-to-use-reply) — and when not to
## Go deeper
- [Learn](/learn) — mechanism explainers: deliverability, warm-up, sequence design
- [Specifications](/specifications) — what each product object is
- [Behavior](/behavior) — the deterministic logic Reply applies
- [Playbooks](/playbooks) — situation recipes for common outbound scenarios
- [How-to](/how-to) — configure it in the product
- [Troubleshooting](/troubleshooting) — why did it not work?
- [Reference](/reference) — exact statuses, limits, calculations
- [Agent index](/start/agent-index) — the compact map for machines
## How this site is organized
| Section | Question it answers |
| --- | --- |
| [Start](/start) | What is Reply, and is it relevant to my task? |
| [Learn](/learn) | How does the underlying mechanism work? |
| [Capabilities](/capabilities) | Can Reply do this? |
| [Workflows](/workflows) | How does the complete outcome work? |
| [Playbooks](/playbooks) | What should I do in my situation? |
| [Specifications](/specifications) | What is this product object? |
| [Behavior](/behavior) | What deterministic logic applies? |
| [How-to](/how-to) | How do I configure it? |
| [Troubleshooting](/troubleshooting) | Why did it fail? |
| [Reference](/reference) | What are the exact values? |
## Reading this site as a machine
```bash
curl https://how.reply.io/llms.txt # curated index
curl https://how.reply.io/index.json # site map by section
curl https://how.reply.io/start/agent-index.md # the agent-oriented summary
# append .md to any page URL for its markdown twin
```
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io) — the single source of truth for reference detail
- Agent surfaces: [agents.reply.io](https://agents.reply.io) — MCP, CLI, and skills
---
# Start here
> The orientation section — what Reply is, what you can build with it, when to use it, how it works, and the compact index built for AI agents.
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Six short pages take you from "what is this?" to "I know exactly where to go next."
- [What is Reply?](/start/what-is-reply) — the platform in concrete terms
- [What can you build?](/start/what-can-you-build) — systems Reply can power
- [When to use Reply](/start/when-to-use-reply) — the honest fit test
- [How Reply works](/start/how-reply-works) — the system-level flow
- [Product map](/start/product-map) — every module and object in one view
- [Agent index](/start/agent-index) — the compact, machine-first summary
## The intended journey
```text
Discovery → What can you build? · What is Reply?
Selection → When to use Reply · Capabilities
Understanding → Learn · Workflows · Playbooks · Specifications · Behavior
Implementation → docs.reply.io (API) · agents.reply.io (MCP, CLI, skills)
```
## Related
- [Capabilities](/capabilities) — the selection layer
- [Workflows](/workflows) — the outcome layer
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io) · Agent surfaces: [agents.reply.io](https://agents.reply.io)
---
# What is Reply?
> Reply is a sales engagement platform — prospect data, contact management, multichannel outreach execution, reply handling, deliverability, analytics, and an AI SDR.
**Reply is a sales engagement platform: Reply Data prospect search, contact and account management in the People section, multichannel sequences with email, LinkedIn, call, SMS, WhatsApp, task, Zapier, and condition steps, MailToaster warm-up, a consolidated inbox with AI-assigned categories, eight Reports dashboards, meeting booking, CRM integrations, the Findy Chrome extension, and Jason AI SDR.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Reply is infrastructure for outbound sales. In concrete modules:
| Module | What Reply provides |
| --- | --- |
| Prospect data | Reply Data (Realtime B2B Data): live contact information from LinkedIn based on your filters — including Sales Navigator URL import, keywords, and exclusion filters — saved to lists and sequences on Reply credits. See [Prospect search](/capabilities/prospect-search) and [enrichment](/capabilities/data-enrichment) |
| Contacts and accounts | The People section: [contacts](/specifications/contacts) with [lists](/specifications/lists), custom fields, import/export, and advanced filters; accounts group contacts by [company](/specifications/companies) with stages such as New, Qualified, Meeting Booked, and Closed-Won. [Deduplication](/behavior/contact-deduplication) runs on the contact identifier chosen at import |
| Sequences | [Sequences](/specifications/sequences) combine Email (automatic and manual), Call, SMS (automatic and manual), WhatsApp, LinkedIn (automatic and manual), Zapier, Task, and Condition [steps](/specifications/sequence-steps) with A/B variants, variable-based personalization, and [schedules](/specifications/schedules) — built from a template, from scratch, from an AI prompt, or by Jason AI SDR |
| Email accounts and warm-up | Connect Gmail, Outlook/Office 365, Exchange, or any IMAP/SMTP provider — the sending domain must be corporate, not generic. MailToaster warms up mailboxes with one warm-up seat per connected mailbox. See [Email accounts](/specifications/email-accounts) and [Deliverability](/capabilities/deliverability) |
| Inbox | The consolidated [inbox](/specifications/inbox) gathers threads from all sequences and team members; an AI algorithm assigns categories such as Interested, Not interested, Not now, and Do not contact, custom categories can be added, and Jason AI can prepare draft replies. See [Reply management](/capabilities/reply-management) |
| Calls and SMS | Cloud Calls places, records, and logs calls (with resolutions) directly in the platform from rented numbers; SMS steps run automatically or manually with a dedicated SMS Inbox for responses |
| Tasks | The Tasks page manages To Do, Call, LinkedIn, Manual Email, Manual SMS, WhatsApp, and Meeting tasks for you and your team, executed with the Chrome extension |
| Meetings | Booking links with availability windows, buffer times, and scheduling horizons; calendars connect through Google Calendar, Calendly, and Zoom |
| Analytics | Per-sequence Stats plus the Reports dashboards: Emails, LinkedIn, Calls, Tasks, Team Performance, Channel Efficiency, Agency, and Trends. See [Campaign analytics](/capabilities/campaign-analytics) |
| Integrations | Native Salesforce, HubSpot, Pipedrive, and Copper CRM integrations; Zapier for hundreds of other apps; a REST API; and an MCP server that connects AI models and automation platforms such as Claude, ChatGPT, n8n, and Make.com |
| AI SDR | [Jason AI](/capabilities/ai-sdr): defines your ideal customer profile from your website, finds contacts in real time from LinkedIn data, builds multichannel sequences, personalizes messages, adds contacts daily on Autopilot, verifies email addresses before sending, and handles replies as drafts for review or automatic sends |
| Chrome extension | Findy finds contacts on LinkedIn, reveals their details, moves them into Reply lists and sequences, manages tasks, and places Cloud Calls |
| Organization | Workspaces for teams or clients, invited users, and roles at organization, team-wide, and workspace level. See [Permissions](/reference/permissions) |
## What Reply is not
- Not a CRM — Reply organizes contacts, accounts, and stages for outreach; keep pipeline and deals in your CRM and [sync it with Reply](/workflows/sync-reply-with-a-crm)
- Not a transactional email service — Reply sends outreach conversations, not receipts
- Not a data-only vendor — the database exists to feed execution, though you can save Reply Data contacts to lists without sequencing them
## The four Reply properties
| Property | Question it answers |
| --- | --- |
| [reply.io](https://reply.io) | Why should a company use Reply? |
| **how.reply.io** (this site) | What can Reply do, and exactly how does it behave? |
| [docs.reply.io](https://docs.reply.io) | How does a developer call the API? |
| [agents.reply.io](https://agents.reply.io) | How does an AI agent connect and operate Reply? |
## Related
- [What can you build?](/start/what-can-you-build)
- [How Reply works](/start/how-reply-works)
- [When to use Reply](/start/when-to-use-reply)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io) · MCP, CLI, skills: [agents.reply.io](https://agents.reply.io)
---
# What can you build?
> Systems Reply can power — an AI SDR, a prospecting agent, an outbound campaign generator, a sales inbox assistant, CRM outreach extensions, and internal outbound tools.
**Reply exposes its whole loop — find, enrich, write, send, detect, respond, report — as a platform, so you can build an AI SDR, a prospecting agent, an outbound campaign generator, a sales inbox assistant, a CRM outreach extension, a campaign optimization agent, or an internal outbound system behind your own UI.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Reply exposes its whole loop — find, enrich, write, send, detect, respond, report — as a
platform. These are the systems people and agents build on it:
| System | What Reply covers | You add | Start at |
| --- | --- | --- | --- |
| **AI SDR** | Jason AI defines the ICP from your website, finds contacts in real time from LinkedIn data, builds multichannel sequences, personalizes messages, adds contacts daily on Autopilot, and answers replies as drafts for review or automatic sends | Qualification bar, routing, approval policy | [Build an AI SDR](/workflows/build-an-ai-sdr) |
| **Prospecting agent** | Realtime B2B Data search with Sales Navigator URL import, keyword and exclusion filters, optional phone-number finding, and dedup against contacts already saved | The ICP logic and scoring | [Find prospects from an ICP](/workflows/find-prospects-from-an-icp) |
| **Outbound campaign generator** | Sequence creation from templates, from scratch, or from an AI prompt; A/B variants; launch controls; per-step statistics | Campaign strategy, content approval | [Launch an outbound campaign](/workflows/launch-an-outbound-campaign) |
| **Sales inbox assistant** | A consolidated inbox with AI-assigned interest categories (Interested, Not interested, Not now, Do not contact) and Jason AI draft replies | Routing rules, tone decisions | [Process positive replies](/workflows/process-positive-replies) |
| **CRM outreach extension** | Native Salesforce, HubSpot, Pipedrive, and Copper integrations, plus Zapier | Field ownership, trigger logic | [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm) |
| **Campaign optimization agent** | Sequence Stats and the Reports dashboards on shared metric definitions, down to step and A/B variant | The decision policy | [Analyze campaign performance](/workflows/analyze-campaign-performance) |
| **Internal outbound system** | The same objects operated over the REST API and the MCP server, behind your own UI | The UI and orchestration | [Agent index](/start/agent-index) |
## Why one platform instead of five vendors
An agent assembling search + enrichment + sending + inbox + analytics from separate
vendors inherits five auth systems and five failure surfaces. On Reply the objects chain:
a Live Data search saves contacts to a list or straight into a sequence, a reply to a
sequence email [stops the contact's automation](/behavior/reply-detection) and lands in
the consolidated inbox, and every number reconciles in one reporting layer — one account,
one API.
## Related
- [Capabilities](/capabilities) — the per-task answer to "can Reply do this?"
- [When to use Reply](/start/when-to-use-reply) — the honest boundaries
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction)
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · CLI: [agents.reply.io/cli](https://agents.reply.io/cli) · Skills: [agents.reply.io/skills](https://agents.reply.io/skills)
---
# When to use Reply
> The honest fit test — use Reply when you need prospect data plus outreach execution with state management; look elsewhere for transactional email or CRM-grade pipeline.
**Use Reply when you need prospect search and outreach execution in one platform, coordinated email and LinkedIn sequences, contact and inbox state management, or an AI SDR operated over API and MCP. Know the boundaries first: corporate sending domains only, 400 emails per day per mailbox, 100 LinkedIn actions per day, and 15,000 API requests per month.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Use Reply when
- The application needs **prospect search and outreach execution in one platform** — a Live Data search can save contacts straight into a sequence.
- You need **email and LinkedIn workflows coordinated**, with a reply to a sequence email [stopping the contact's automation](/behavior/reply-detection) by default.
- You need **contact, sequence, and inbox state management** — [enrollment](/behavior/contact-enrollment), [statuses](/reference/statuses), stages, stopping rules — not just message delivery.
- You do not want to build **mailbox scheduling, rotation, warm-up, reply detection, and campaign statistics** from scratch.
- An **AI agent operates the system**: the platform is exposed over [API, MCP, CLI, and skills](https://agents.reply.io), and the MCP server connects to models and platforms such as Claude, ChatGPT, n8n, and Make.com.
## Reply is especially suitable when
- An [AI SDR](/workflows/build-an-ai-sdr) is the goal — Jason AI defines the ICP from your website, finds contacts in real time, builds the sequence, personalizes messages, and handles replies as drafts for review or automatic sends. Jason AI SDR sequences require an AI SDR plan.
- Outbound must start fast — sequences can be generated from a template, an AI prompt, or Jason AI rather than built step by step.
## Boundaries to know before committing
| Boundary | Value |
| --- | --- |
| Sending domain | Must be corporate — generic domains (personal free-mail addresses) are not suitable for connected email accounts |
| Emails per day per email account | 400 on paid plans, 200 on trial — see [Limits](/reference/limits) |
| LinkedIn automation | Maximum 100 actions per day per action type |
| API | 15,000 requests per month, 10 seconds minimum between calls |
| Trial | 14 days: 2 mailboxes, 300 active contacts, 50 Reply credits |
| Contact storage | 100,000 by default; support can raise it |
| CSV import | CSV UTF-8 only, up to 10,000 rows per file, First Name required |
| SMS | A single SMS is limited to 160 characters; longer texts send as multiple messages |
| Cloud Calls | Must be enabled and funded (minimum $10 wallet balance) before calling |
## Reply may not be suitable when
| Need | Better fit |
| --- | --- |
| Transactional email (receipts, notifications) | A transactional provider — Reply sends outreach conversations |
| CRM-grade pipeline (deals, forecasting) | Keep the CRM; [sync it with Reply](/workflows/sync-reply-with-a-crm) — Salesforce, HubSpot, Pipedrive, and Copper connect natively |
| Pure data purchase with zero outreach | Possible with Reply Data, but you'd use a fraction of the platform |
| Niche audiences absent from B2B databases | Bring your own records via [import](/how-to/import-contacts); Reply still executes |
## What Reply provides vs. what you build
| Reply provides | You still build |
| --- | --- |
| Prospect search, enrichment, email verification | Your ICP definition and scoring |
| Sequence execution across channels | Positioning and copy strategy (or approve Jason AI's) |
| Reply detection, AI-assigned categories, draft replies | The qualification bar and routing map |
| Deliverability protection and warm-up | DNS fixes at your registrar; content quality |
| Statistics on shared definitions | Decision policy and revenue attribution |
| API / MCP / CLI / skills surfaces | Your application UI and orchestration |
## Supported channels and interfaces
Channels: email, LinkedIn, calls, SMS, WhatsApp, and manual tasks, plus Zapier and
Condition steps inside sequences — see
[Multichannel outreach](/capabilities/multichannel-outreach). Interfaces: product UI, REST
API, MCP, CLI, agent skills — status per surface on [agents.reply.io](https://agents.reply.io/apis).
## Related
- [Capabilities](/capabilities) — per-task fit
- [What can you build?](/start/what-can-you-build)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io) · Agent surfaces: [agents.reply.io](https://agents.reply.io)
---
# How Reply works
> The system-level flow — prospect data becomes contacts and lists, sequences execute through accounts on schedules, replies land in the inbox, analytics closes the loop.
**Prospect data from Reply Data search, CSV imports, Findy, or CRM integrations becomes deduplicated contacts and lists; sequences combine email, LinkedIn, call, SMS, WhatsApp, task, Zapier, and condition steps; execution runs through connected mailboxes inside schedules and limits; replies land in the consolidated inbox with AI-assigned categories; Stats and Reports close the loop. Jason AI drives the same machine.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## The flow
```text
Prospect data Reply Data live search · CSV import · Findy extension
│ CRM integrations · manual entry
▼
Contacts and lists deduplicated by the import identifier · accounts (companies)
│ stages · custom fields · lists
▼
Sequences email / LinkedIn / call / SMS / WhatsApp / task / Zapier /
│ condition steps · A/B variants · variables
│ (built from template, scratch, AI prompt, or Jason AI SDR)
▼
Execution connected email + LinkedIn accounts · schedules · daily limits
│ MailToaster warm-up · plain-text default · tracking toggles
▼
Replies and inbox reply detection · stopping · AI-assigned categories · AI drafts
│
▼
Analytics sequence Stats · Reports dashboards (Emails, LinkedIn, Calls,
│ Tasks, Team Performance, Channel Efficiency, Agency, Trends)
└──────────────► iterate: fix the ICP, the copy, or the timing
```
## Each stage in one sentence
1. **Prospect data** — [Live Data search](/capabilities/prospect-search) finds contacts from LinkedIn data by your filters, [enrichment](/capabilities/data-enrichment) and email verification fill gaps, and [CSV imports](/how-to/import-contacts) (UTF-8, up to 10,000 rows per file) bring your own records.
2. **Contacts and lists** — every import row [deduplicates](/behavior/contact-deduplication) on the contact identifier you choose (Email, Last Name, or Phone) into one base, segmented by [lists](/specifications/lists) and grouped into [accounts](/specifications/companies).
3. **Sequences** — [steps](/specifications/sequence-steps) define what happens across channels, with A/B variants and per-step delays; [enrollment](/behavior/contact-enrollment) decides who it happens to.
4. **Execution** — [sequence execution](/behavior/sequence-execution) walks contacts through steps inside [schedules](/behavior/sending-schedules) and [limits](/reference/limits) (400 emails per account per day on paid plans), selecting accounts per the [mailbox rule](/behavior/mailbox-selection).
5. **Replies** — [detection](/behavior/reply-detection) stops the contact and routes the [conversation](/specifications/conversations) to the consolidated inbox, where [reply management](/capabilities/reply-management) applies AI-assigned categories and Jason AI can draft answers.
6. **Analytics** — the sequence Stats tab counts key metrics per prospect (a contact counts once across steps), and the Reports dashboards break performance down by channel and team on [shared definitions](/reference/calculations).
## Where the AI SDR sits
[Jason AI](/capabilities/ai-sdr) is not a separate pipeline — it drives this same machine:
it defines the ICP from your website, finds contacts in real time, generates the
multichannel sequence, personalizes each message, adds new contacts daily on Autopilot,
and handles replies as drafts for review or automatic sends — with approval wherever you
keep humans in the loop.
## Related
- [Product map](/start/product-map) — the same system as a module inventory
- [Build an AI SDR](/workflows/build-an-ai-sdr) — this flow as a build guide
- [Entity relationships](/reference/entity-relationships)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io) · Agent surfaces: [agents.reply.io](https://agents.reply.io)
---
# Product map
> Every Reply module in one view — data, outreach, execution, conversation, AI, intelligence, and platform layers, each linked to where it is documented on this site.
**Reply has about fifteen user-facing modules: Reply Data search, Contacts and Lists, Accounts, Sequences, Email accounts with MailToaster warm-up, Inbox, SMS Inbox, Cloud Calls, Tasks, Meetings, Reports, Jason AI SDR, Integrations with API and MCP, the Findy Chrome extension, and Organization workspaces with roles and permissions — each mapped here to its documentation.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Map
```text
┌─ DATA ──────────────────────────────────────────────────┐
│ Reply Data (Realtime B2B Data search) · Enrichment · │
│ Email verification · Contacts · Lists · Accounts · │
│ Custom fields · Stages │
├─ OUTREACH ──────────────────────────────────────────────┤
│ Sequences · Steps (email / LinkedIn / call / SMS / │
│ WhatsApp / Zapier / task / condition) · A/B variants · │
│ Templates and variables · Schedules │
├─ EXECUTION ─────────────────────────────────────────────┤
│ Email accounts (Gmail · Outlook/Office 365 · Exchange · │
│ IMAP/SMTP) · Sending limits · MailToaster warm-up │
├─ CONVERSATION ──────────────────────────────────────────┤
│ Inbox (AI categories · AI drafts) · SMS Inbox · │
│ Cloud Calls · Tasks · Meetings and calendars │
├─ AI (JASON) ────────────────────────────────────────────┤
│ ICP · Real-time contact sourcing · Sequence generation · │
│ Personalization · Autopilot · Reply handling · │
│ AI Learnings │
├─ INTELLIGENCE ──────────────────────────────────────────┤
│ Sequence Stats · Reports: Emails · LinkedIn · Calls · │
│ Tasks · Team Performance · Channel Efficiency · Agency · │
│ Trends │
├─ PLATFORM ──────────────────────────────────────────────┤
│ Organization (workspaces · users · roles & permissions) │
│ Integrations (Salesforce · HubSpot · Pipedrive · Copper │
│ · Zapier) · REST API · MCP server · Findy extension │
└──────────────────────────────────────────────────────────┘
```
## Module index
| Module | What it does | Documented at |
| --- | --- | --- |
| Reply Data (Realtime B2B Data) | Live contact information from LinkedIn by your filters — Sales Navigator URL import, keywords, exclusions, optional phone-number finding — saved to lists and sequences on Reply credits | [Prospect search](/capabilities/prospect-search) · [Prospect data](/specifications/prospect-data) |
| Contacts and lists | Individual records with custom fields, import/export, advanced filters, and list segmentation; deduplicated on the import identifier | [Contacts](/specifications/contacts) · [Lists](/specifications/lists) · [Contact management](/capabilities/contact-management) |
| Accounts | Group contacts by company (one contact belongs to one account) with stages such as New, Qualified, Meeting Booked, Closed-Won | [Companies](/specifications/companies) |
| Enrichment and verification | Fill missing contact data and verify email addresses before sending | [Data enrichment](/capabilities/data-enrichment) |
| Sequences | Multichannel step chains — Email, Call, SMS, WhatsApp, LinkedIn, Zapier, Task, Condition — with A/B variants, Action and Merge controls, and per-step delays | [Sequences](/specifications/sequences) · [Sequence steps](/specifications/sequence-steps) · [Sequence execution](/behavior/sequence-execution) |
| Templates and variables | Personalization placeholders (contact, team, custom, and advanced conditional variables) in email, LinkedIn, SMS, WhatsApp, and call steps | [Sequence design](/learn/sequence-design) |
| Schedules | Sending windows that control when steps execute | [Schedules](/specifications/schedules) · [Sending schedules](/behavior/sending-schedules) |
| Email accounts and warm-up | Gmail, Outlook/Office 365, Exchange, and IMAP/SMTP connections on corporate domains; MailToaster warm-up with a seat per connected mailbox | [Email accounts](/specifications/email-accounts) · [Email warm-up](/learn/email-warm-up) · [Deliverability](/capabilities/deliverability) |
| Inbox | Consolidated threads from all sequences and team members, AI-assigned interest categories plus custom categories, AI draft replies | [Inbox](/specifications/inbox) · [Conversations](/specifications/conversations) · [Reply management](/capabilities/reply-management) |
| Cloud Calls | In-platform calling from rented numbers with recording, notes, and call resolutions | [Multichannel outreach](/capabilities/multichannel-outreach) |
| SMS | Automatic and manual SMS steps with a dedicated SMS Inbox (160 characters per single message) | [Multichannel outreach](/capabilities/multichannel-outreach) |
| Tasks | To Do, Call, LinkedIn, Manual Email, Manual SMS, WhatsApp, and Meeting tasks with filters and bulk actions, executed via the Chrome extension | [Multichannel outreach](/capabilities/multichannel-outreach) |
| Meetings | Booking links with availability windows, buffers, and scheduling horizons; Google Calendar, Calendly, and Zoom connections | [Book meetings from inbound signals](/playbooks/book-meetings-from-inbound-signals) |
| Reports | Sequence Stats plus the Emails, LinkedIn, Calls, Tasks, Team Performance, Channel Efficiency, Agency, and Trends dashboards | [Campaign analytics](/capabilities/campaign-analytics) · [Calculations](/reference/calculations) |
| Jason AI SDR | ICP definition, real-time contact sourcing, sequence generation, personalization, Autopilot, reply handling, and AI Learnings — configured through offers, playbooks, and knowledge bases | [AI SDR](/capabilities/ai-sdr) · [Offers](/specifications/offers) · [Playbooks](/specifications/playbooks) · [Knowledge bases](/specifications/knowledge-bases) |
| Integrations | Native Salesforce, HubSpot, Pipedrive, and Copper; Zapier for hundreds of apps; REST API; MCP server for AI models | [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm) · [docs.reply.io](https://docs.reply.io) · [agents.reply.io](https://agents.reply.io) |
| Findy Chrome extension | Finds contacts on LinkedIn, reveals details, moves them to Reply lists and sequences, manages tasks, places calls, and syncs from Salesforce and HubSpot | [LinkedIn outreach](/capabilities/linkedin-outreach) |
| Organization | Workspaces (client groups), users, and roles at organization, team-wide, and workspace level | [Permissions](/reference/permissions) |
## Related
- [How Reply works](/start/how-reply-works) — the same system as a flow
- [Entity relationships](/reference/entity-relationships) — object-level detail
- [Limits](/reference/limits) — the exact numeric boundaries per module
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) · Machine spec: [bundled.yaml](https://docs.reply.io/api-reference/bundled.yaml)
---
# Agent index
> The compact map of Reply for AI agents — what the platform is, core capabilities and workflows, key rules, interface entry points, and every machine-readable file.
**This index maps Reply for agents: a capability table answering can-Reply-do-it, core workflows and objects, behavior rules that surprise the unread, interfaces — REST API on docs.reply.io and the MCP server at mcp.reply.io — plus machine entry points: llms.txt, llms-full.txt, index.json, capabilities.json, search-index.json, sitemap.xml, and a markdown twin for every page.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
**Reply is a sales engagement platform**: the Reply Data B2B database with live search and
enrichment, deduplicated contact management, multichannel sequences (email, LinkedIn,
calls, SMS, WhatsApp, tasks, Zapier and condition steps), a consolidated inbox with
AI-assigned reply categories, deliverability protection with MailToaster warm-up,
analytics, and an AI SDR (Jason AI) that runs the loop with drafts-for-review or automatic
sends. This page is the compact index; every claim links to its page.
## Can Reply do the task?
| Task | Page |
| --- | --- |
| Find prospects by ICP | [Prospect search](/capabilities/prospect-search) |
| Manage contacts without duplicates | [Contact management](/capabilities/contact-management) |
| Fill missing emails/phones | [Data enrichment](/capabilities/data-enrichment) |
| Send automated email sequences | [Email outreach](/capabilities/email-outreach) |
| Automate LinkedIn touches | [LinkedIn outreach](/capabilities/linkedin-outreach) |
| Coordinate channels in one flow | [Multichannel outreach](/capabilities/multichannel-outreach) |
| Detect and answer replies | [Reply management](/capabilities/reply-management) |
| Report performance | [Campaign analytics](/capabilities/campaign-analytics) |
| Protect sender reputation | [Deliverability](/capabilities/deliverability) |
| Run the whole loop with AI | [AI SDR](/capabilities/ai-sdr) |
## Sections of this site
[Start](/start) · [Learn](/learn) · [Capabilities](/capabilities) ·
[Workflows](/workflows) · [Playbooks](/playbooks) ·
[Specifications](/specifications) · [Behavior](/behavior) · [How-to](/how-to) ·
[Troubleshooting](/troubleshooting) · [Reference](/reference)
Page statuses: **placeholder** (structural scaffolding, claims unverified) →
**reviewed** (grounded in Reply's product documentation) → **verified** (checked against
the live product).
## Core workflows
[Build an AI SDR](/workflows/build-an-ai-sdr) ·
[Find prospects from an ICP](/workflows/find-prospects-from-an-icp) ·
[Launch an outbound campaign](/workflows/launch-an-outbound-campaign) ·
[Process positive replies](/workflows/process-positive-replies) ·
[Sync Reply with a CRM](/workflows/sync-reply-with-a-crm)
## Core objects
[Contacts](/specifications/contacts) · [Sequences](/specifications/sequences) (the
product also calls them campaigns) · [Email accounts](/specifications/email-accounts) ·
[Schedules](/specifications/schedules) · [Inbox](/specifications/inbox) · Jason AI:
[Offers](/specifications/offers), [Playbooks](/specifications/playbooks),
[Knowledge bases](/specifications/knowledge-bases)
## Behavior that will surprise you if unread
- A reply to a sequence email sets `Replied` and `Finished` and stops the contact's automation, unless Continue processing steps is enabled — [Reply detection](/behavior/reply-detection) · [Sequence stopping](/behavior/sequence-stopping)
- The contact identifier chosen at import (Email, Last Name, or Phone) is the dedup key — matching rows update or skip, never double — [Contact deduplication](/behavior/contact-deduplication)
- The email account's own daily limit always beats a higher sequence setting — [Mailbox selection](/behavior/mailbox-selection) · [Limits](/reference/limits)
- Follow-ups send from the same email account as the first email; schedules run on UTC and do not adjust for Daylight Saving Time — [When Reply sends](/behavior/sending-schedules)
- Out-of-office replies pause the contact rather than finishing them; automatic handling resumes sending after the number of days you set — [Reply detection](/behavior/reply-detection)
## Interfaces
| Surface | Where | Notes |
| --- | --- | --- |
| REST API | [docs.reply.io](https://docs.reply.io/api-reference/introduction) | Source of truth for the API surface; 15,000 requests per month, 10 seconds between calls |
| MCP server | `mcp.reply.io` — guide: [agents.reply.io/mcp](https://agents.reply.io/mcp) | URL and API key from the Integrations tab in Reply; auth via `Authorization: Bearer` with scoped personal API keys, or OAuth (full access); connects from Claude, ChatGPT, n8n, Make.com, and Claude Code |
| CLI | npm `reply-cli` — [agents.reply.io/cli](https://agents.reply.io/cli) | Command-line operation of the same objects |
| Agent skills | [agents.reply.io/skills](https://agents.reply.io/skills) | Packaged workflows for agent runtimes |
| OpenAPI spec | [bundled.yaml](https://docs.reply.io/api-reference/bundled.yaml) | Machine-readable API contract |
## Machine entry points on this site
```bash
curl https://how.reply.io/llms.txt # curated page index
curl https://how.reply.io/llms-full.txt # whole site, one file
curl https://how.reply.io/index.json # site map by section, typed
curl https://how.reply.io/capabilities.json # flat can-do/cannot-do capability matrix
curl https://how.reply.io/search-index.json # titles + descriptions + headings
curl https://how.reply.io/sitemap.xml # every canonical URL
# append .md to any page URL for its markdown twin
```
Also useful: [/reference/a-z](/reference/a-z) — the alphabetical index of every term and page.
## Known limitations
- Pages labeled **Placeholder** are structural scaffolding — do not cite their detailed claims yet.
- Reply is not a CRM and not a transactional email service — [When to use Reply](/start/when-to-use-reply).
- Interface coverage differs per surface — check [agents.reply.io](https://agents.reply.io) before choosing one.
## Related
- [Product map](/start/product-map) · [How Reply works](/start/how-reply-works)
- [Terminology](/reference/terminology) · [Statuses](/reference/statuses)
---
# Learn
> How outbound actually works — deliverability, sender reputation, sequencing, and AI SDRs explained as mechanisms, independent of any product.
**This section explains the machinery underneath outbound — how mailbox providers score senders, why warm-up exists, what SPF, DKIM, and DMARC actually verify, how sequence cadence affects results, and what an AI SDR really automates. Every page is written to be true even without Reply, then links to how Reply implements it.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
These pages explain **mechanisms, not features**. Each one answers a "how does X actually
work" question in product-neutral terms first, and only then links to the Reply
implementation. If you want product behavior directly, go to
[Capabilities](/capabilities) or [Behavior](/behavior).
## Deliverability mechanics
- [Email deliverability](/learn/email-deliverability) — What decides whether a message lands in the inbox, spam, or nowhere
- [Sender reputation](/learn/sender-reputation) — The score mailbox providers keep on every sending identity
- [Email warm-up](/learn/email-warm-up) — Why new mailboxes must earn volume gradually
- [SPF, DKIM, DMARC](/learn/spf-dkim-dmarc) — What the three authentication records actually verify
## Outreach and AI
- [Sequence design](/learn/sequence-design) — Cadence theory: steps, spacing, and channels that get answers
- [Multichannel strategy](/learn/multichannel-strategy) — Why channels compound instead of just adding up
- [The AI SDR model](/learn/ai-sdr-model) — Autonomy levels, what AI actually automates, and honest limits
- [Reply classification](/learn/reply-classification) — How incoming replies are sorted into intents, and why it is hard
## How these pages are written
Every explainer follows the same shape: what the mechanism is, why it works that way, how
it behaves in practice, common misconceptions, how Reply implements it, and where the
mechanism itself breaks down. The product enters only in the second half — the first half
stays true even if you never use Reply.
## Related
- [Capabilities](/capabilities) — can Reply do X?
- [Behavior](/behavior) — the deterministic product logic
- [Playbooks](/playbooks) — applied recipes for specific situations
---
# Email deliverability
> The mechanism that decides whether an email lands in the inbox, the spam folder, or nowhere — filtering signals, placement, and what senders control.
**Mailbox providers score every incoming message on sender reputation, authentication, content, and recipient engagement, then route it to the inbox, the spam folder, or rejection. Delivery and inbox placement are different things — a message can be accepted and still never be seen. Senders control authentication, volume, list quality, and engagement.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## What it is
Deliverability is the probability that a sent email reaches the recipient's inbox rather
than the spam folder or silent rejection. It is decided per message, per recipient, by the
receiving mailbox provider — not by the sender's tooling.
## Why it works this way
Mailbox providers optimize for their users, not for senders. Every incoming message is
scored on layered signals:
1. **Connection and infrastructure** — the sending IP's history, reverse DNS, TLS.
2. **Authentication** — does the message pass [SPF, DKIM, and DMARC](/learn/spf-dkim-dmarc) for the claimed domain?
3. **Sender reputation** — the provider's running score for the domain and mailbox, built from past behavior. See [Sender reputation](/learn/sender-reputation).
4. **Content** — links, attachments, HTML weight, spam-pattern phrases.
5. **Recipient engagement** — do this provider's users open, reply to, and keep messages from this sender, or delete and report them?
The scores combine into a routing decision: accept to inbox, accept to spam, defer, or
reject. Providers deliberately keep the exact weights secret and shift them over time.
## How it behaves in practice
- **Delivery rate ≠ inbox placement.** "Delivered" only means the receiving server accepted the message. Placement — inbox vs spam — is invisible in standard delivery metrics and must be measured with seed tests or engagement proxies.
- **Reputation is per domain, per mailbox, and per IP** — damage to one sending mailbox can spread to its domain.
- **Engagement compounds.** Replies are the strongest positive signal a cold sender can earn; spam reports are the strongest negative one.
- **Volume spikes read as abuse.** A mailbox that jumps from 20 to 500 daily sends looks like a compromised account. This is why [warm-up](/learn/email-warm-up) exists.
- Thresholds appear at provider policy level: bulk-sender rules (such as Gmail and Yahoo's 2024 requirements) mandate authentication, one-click unsubscribe, and spam-rate ceilings around 0.3%.
## Common misconceptions
| Belief | Reality |
| --- | --- |
| "Delivered means it was seen" | Delivered means accepted; it can still land in spam |
| "Spam words are the main filter" | Content matters less than reputation and engagement |
| "One good IP fixes everything" | Domain reputation follows you across IPs |
| "Deliverability is set once" | It is a running score that decays and recovers with behavior |
## How Reply implements this
Reply's [deliverability capability](/capabilities/deliverability) manages the
sender-controlled parts:
- **Volume caps.** One email account sends at most 400 emails per day on paid plans (200 on trial), inside [schedules](/specifications/schedules) and the [sending-schedule rules](/behavior/sending-schedules).
- **Ramp-up by default.** Ramp-up mode is active for every newly added email account; the default curve starts at 10 emails per day and adds 3 daily until it reaches 100.
- **Human-like pacing.** A configurable delay spaces out individual sends; the default account safety setting sends each email with a random delay of 300-450 seconds.
- **Warm-up via MailToaster.** Peer-network warm-up runs through MailToaster, included with paid subscriptions. See [email warm-up](/learn/email-warm-up).
- **Monitoring.** A Domain Setup health checker validates the domain's DNS records, and the Spam Monitor tab reads your domain's Gmail spam rate from Google Postmaster Tools — the number to hold below the 0.3% ceiling. Reply's recommended deliverability check via the Mail Tester service is scored from 0 (bad) to 10 (excellent), and Reply recommends custom tracking domains over the default shared ones.
- **Automatic stops.** Email steps pause for the rest of the day when a sequence's bounce rate crosses 8% (calculated per 24 hours, once at least 200 emails have been sent) — see [bounce handling](/behavior/bounce-handling) — and replies halt follow-ups per the sequence's reply-handling setting.
[Mailbox selection](/behavior/mailbox-selection) documents how sends are distributed
across accounts.
## Where this breaks down
No sender-side tool can override a receiving provider's decision. If a domain's
reputation is burned, the only fixes are time, reduced volume, and better targeting — or a
new domain warmed from zero. Placement testing is also inherently sampled: seed inboxes
approximate, but do not equal, your real recipients.
## Related
- [Sender reputation](/learn/sender-reputation)
- [Email warm-up](/learn/email-warm-up)
- [Deliverability in Reply](/capabilities/deliverability)
- [Why an email was not sent](/troubleshooting/email-was-not-sent)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email account settings and limits
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — mailbox health and warm-up operations
---
# Sender reputation
> The running score mailbox providers keep on every sending domain, mailbox, and IP — what feeds it, how fast it moves, and how it is repaired.
**Every mailbox provider keeps a private, continuously updated score for each sending domain, mailbox, and IP address. Engagement raises it; spam reports, bounces, and volume spikes lower it. The score decides inbox placement before content is even read. Reputation builds slowly, collapses quickly, and recovers only through weeks of consistent good behavior.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## What it is
Sender reputation is the score a receiving provider assigns to the identities behind a
message: the sending **domain**, the individual **mailbox**, and the **IP address**. There
is no single public number — Gmail, Outlook, and Yahoo each keep their own, and each sees
only the traffic you send to them.
## Why it works this way
Providers need a cheap early signal before doing expensive content analysis. Identity
history is that signal. The main inputs:
| Input | Direction | Weight |
| --- | --- | --- |
| Replies and forwards | Up | Strongest positive |
| Opens and "not spam" rescues | Up | Moderate |
| Spam reports | Down | Strongest negative |
| Hard bounces | Down | Strong — signals a bought or stale list |
| Volume consistency | Up | Steady patterns read as legitimate |
| Volume spikes | Down | Read as compromise or abuse |
| Authentication failures | Down | See [SPF, DKIM, DMARC](/learn/spf-dkim-dmarc) |
| Spam-trap hits | Down | Severe — proves the list was not opt-in |
## How it behaves in practice
- **Asymmetric speed.** Weeks to build, days to destroy. A single mass send to a bad list can undo a quarter of careful sending.
- **Scoped but leaky.** Mailbox reputation sits under domain reputation; burning one mailbox stains the domain, which is why cold outreach uses separate sending domains.
- **Per-provider.** A domain can be clean at Gmail and burned at Outlook, because each provider scores only what it observes.
- **Postmaster tools show a shadow of it.** Google Postmaster Tools reports domain reputation in coarse bands (High/Medium/Low/Bad) — directional, not real-time.
## Common misconceptions
| Belief | Reality |
| --- | --- |
| "New domain = clean slate forever" | A new domain has *no* reputation, which is itself suspicious until warmed |
| "Reputation belongs to the tool" | It belongs to your domain, mailboxes, and IPs — it follows you between tools |
| "Low volume means safe" | Low volume to bad lists still hits spam traps and reports |
| "One spam report is fatal" | Providers work in rates, not single events — the bulk-sender ceiling is around a 0.3% spam rate |
## How Reply implements this
Reply protects reputation with per-mailbox [daily limits](/how-to/configure-sending-limits)
(at most 400 emails per day per account on paid plans, 200 on trial), randomized delays
between individual sends, [schedule windows](/behavior/sending-schedules), and ramp-up
mode — active by default for every newly added email account — which grows daily volume
gradually instead of spiking it. Warm-up runs through MailToaster
([deliverability capability](/capabilities/deliverability)). Automatic
[bounce handling](/behavior/bounce-handling) pauses a sequence's email steps for the day
when its bounce rate crosses 8% — the sequence toggle warns at 4% — and
[reply detection](/behavior/reply-detection) stops follow-ups once a reply is detected,
converting the strongest positive signal into an automatic stop rule. The Spam Monitor
tab reads your domain's Gmail spam-report rate from Google Postmaster Tools directly
inside Reply.
## Where this breaks down
Reputation repair has no shortcut: once a provider distrusts a domain, only reduced
volume, high engagement, and time move the score. Monitoring is also partial — providers
expose coarse dashboards at best, so real reputation is always inferred, never read.
## Related
- [Email deliverability](/learn/email-deliverability)
- [Email warm-up](/learn/email-warm-up)
- [Deliverability in Reply](/capabilities/deliverability)
- [Mailbox selection rules](/behavior/mailbox-selection)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email account health fields
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — warm-up status operations
---
# Email warm-up
> The gradual ramp that teaches mailbox providers to trust a new sender — ramp curves, engagement simulation, and the maintenance floor that follows.
**Warm-up gradually increases sending volume on a new mailbox or domain so providers learn to trust it. Typical ramps start at 5-10 emails per day and grow 10-20% daily over 3-8 weeks. Warm-up tools also simulate engagement between peer inboxes. A maintenance floor keeps the reputation alive after ramp-up.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## What it is
Warm-up is the controlled ramp of sending activity on a new mailbox or domain, designed
to build [sender reputation](/learn/sender-reputation) before real outreach begins. It
has two parts: a gradual volume increase, and simulated engagement — warm-up tools
exchange messages across a network of peer inboxes that open, reply, and rescue mail
from spam.
## Why it works this way
Providers have no history for a new identity, so they assume the worst. A fresh mailbox
that immediately sends hundreds of emails looks exactly like a compromised account —
sudden volume is the primary signature of abuse. Providers therefore throttle or
spam-folder unknown senders until weeks of consistent, engaged-with sending prove the
identity is legitimate. Warm-up manufactures that history deliberately.
## How it behaves in practice
- **Typical ramp curve.** Start around 5-10 emails per day, increase roughly 10-20% per day, and reach target volume in about 3-8 weeks depending on goal and domain age.
- **Engagement is simulated first.** Peer-network replies and spam rescues supply positive signals before real prospects exist to provide them.
- **"Done" is a state, not a date.** Warm-up is finished when volume is at target, placement is stable, and engagement holds — not after a fixed number of days.
- **Keep a maintenance floor.** A mailbox that stops warm-up entirely cools down; most programs keep a low background level running alongside real sending.
- **Domain and mailbox warm separately.** A warmed domain shortens, but does not remove, the ramp for a new mailbox on it.
## Common misconceptions
| Belief | Reality |
| --- | --- |
| "Warm-up is a one-time setup" | Reputation decays; paused or seasonal mailboxes cool and need re-warming |
| "Warm-up tools guarantee inbox placement" | They build history; list quality, targeting, and content still decide placement |
| "A good domain lets you skip warm-up" | Reputation is also scoped per mailbox — a new mailbox still starts near zero |
| "A faster ramp gets results sooner" | Volume spikes read as compromise and can reset the trust already built |
## How Reply implements this
Reply splits the ramp into two features as part of its
[deliverability capability](/capabilities/deliverability). **Warm-up** runs through
MailToaster — included with paid subscriptions, with one warm-up seat per mailbox
connected in Reply — which builds reputation by simulating natural email exchanges
across a peer network. You pick a warm-up profile (**New email account**,
**Reputation protect**, or a custom one) and set a daily goal with a daily increment.
**Ramp-up** runs inside Reply and is active by default for every newly added email
account: the default curve starts at 10 emails per day and adds 3 daily until it
reaches 100. Reply's recommended order is warm up first, then ramp up real sending —
and keep warm-up enabled for as long as you send cold email, which is the maintenance
floor described above. Per-mailbox [sending limits](/how-to/configure-sending-limits)
hold real outreach inside the ramp after you
[connect a mailbox](/how-to/connect-a-mailbox).
## Where this breaks down
Warm-up builds trust; it cannot repair a burned domain on any useful timescale. Simulated
engagement is also not real engagement — providers reportedly discount traffic they can
identify as warm-up networks. Once real sending starts, placement depends on your list
and content, and no ramp compensates for either.
## Related
- [Email deliverability](/learn/email-deliverability)
- [Sender reputation](/learn/sender-reputation)
- [SPF, DKIM, DMARC](/learn/spf-dkim-dmarc)
- [Deliverability in Reply](/capabilities/deliverability)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email account setup and limits
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — warm-up connect and status operations
---
# SPF, DKIM, DMARC
> What each email authentication record verifies, how DMARC alignment ties them to the From domain, and the failure modes that break them.
**SPF lists the servers allowed to send for a domain, DKIM cryptographically signs each message's headers and body, and DMARC checks that one of them aligns with the visible From domain, then tells receivers what to do on failure. All three are required by Gmail and Yahoo's bulk-sender rules.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## What it is
Three DNS records that let a receiving server verify who sent a message:
- **SPF** publishes which servers may send mail for the *envelope sender* domain (the Return-Path). The receiver checks the connecting IP against that list.
- **DKIM** adds a cryptographic signature over selected headers and the body. The receiver verifies it with a public key published in the sender's DNS.
- **DMARC** ties both to the *visible* From address: it requires SPF or DKIM to pass **and align** with the From domain, sets a policy for failures, and requests reports.
## Why it works this way
SMTP itself verifies nothing — anyone can put any address in the From header. SPF and
DKIM each authenticate a domain, but not necessarily the one the recipient sees. DMARC
closes that gap with alignment: the authenticated domain must match the From domain.
That is what makes spoofing detectable rather than merely discouraged.
## How it behaves in practice
- **Alignment is the whole point.** SPF can pass for `bounce.example.net` while the From says `example.com` — DMARC fails that message.
- **Policy escalates.** `p=none` only monitors, `p=quarantine` sends failures to spam, `p=reject` refuses them outright.
- **All three are now mandatory at scale.** Gmail and Yahoo's 2024 bulk-sender rules require SPF, DKIM, and DMARC for senders above roughly 5,000 messages per day.
- **SPF has a 10-DNS-lookup limit.** Each `include:` costs lookups; stacking sending tools silently breaks SPF past ten.
- **Forwarding breaks SPF but usually not DKIM.** A forwarder sends from a new IP, failing SPF; the DKIM signature travels inside the message and survives unless content is modified.
## Common misconceptions
| Belief | Reality |
| --- | --- |
| "SPF verifies the From address" | It verifies the envelope sender; only DMARC alignment connects it to the visible From |
| "DKIM encrypts the message" | It signs the message — proving origin and integrity, hiding nothing |
| "p=none does nothing, so skip DMARC" | `p=none` still unlocks reporting and satisfies bulk-sender requirements |
| "Authentication is a one-time setup" | Every new sending tool must be added; SPF lookup counts creep toward the limit |
## How Reply implements this
Reply's Domain Setup page runs a health checker over the sending domain's DNS — SPF,
DKIM, and DMARC, plus the MX, A, and rDNS records — explains any issue it finds, and
rechecks weekly, as part of the
[deliverability capability](/capabilities/deliverability). One detail matters for the
SPF lookup budget: Reply is not a mail server, so you do not add Reply.io to your
authentication records — you authenticate your mail provider (Google Workspace,
Microsoft 365, and so on), and a domain must carry only one SPF record. The records
themselves live in your DNS — Reply verifies them, it cannot create them for you.
Setup starts when you [connect a mailbox](/how-to/connect-a-mailbox).
## Where this breaks down
Authentication proves identity, not quality — spam that passes all three checks is still
spam, and [reputation](/learn/sender-reputation) decides placement from there. Mailing
lists that rewrite content break DKIM. And DMARC aggregate reports arrive as XML built
for tooling, not for reading — most senders never look at them.
## Related
- [Email deliverability](/learn/email-deliverability)
- [Sender reputation](/learn/sender-reputation)
- [Email warm-up](/learn/email-warm-up)
- [Connect a mailbox](/how-to/connect-a-mailbox)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email account connection and validation
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — email account setup operations
---
# Sequence design
> Cadence mechanics for outbound — touch counts, spacing, diminishing returns, and why a sequence that reacts to replies beats a fixed drip campaign.
**Effective sequences use multiple touches — most replies typically arrive after steps two to four — spaced two to four business days apart. Returns diminish after around five to eight touches. Each step trades personalization against volume, A/B variants isolate what works, and every reply stops the sequence immediately.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## What it is
A sequence is an ordered series of outreach touches — emails, and often
[other channels](/learn/multichannel-strategy) — with defined timing between steps and
rules for when to stop. The term matters: a sequence is not a drip campaign, because a
sequence reacts to replies and stops, while a drip campaign sends on a fixed calendar
regardless of response.
## Why it works this way
A single email competes with a full inbox on one arbitrary day. Attention is
intermittent, so repeated, spaced touches multiply the chance of landing in a moment
when the prospect can respond. Reported patterns are consistent: most replies typically
arrive after steps two to four, not from the first email. Each touch also builds
recognition — the third mention of your name reads differently from the first.
## How it behaves in practice
- **Spacing.** Two to four business days between steps is the common working range — close enough to be remembered, far enough not to crowd.
- **Diminishing returns.** Reply probability per step falls; after around five to eight touches, added steps mostly add unsubscribes and spam reports.
- **Personalization vs volume.** Deep personalization raises per-message reply rates but caps throughput; the practical pattern is layered — personalize early steps, template later ones.
- **A/B variants.** Testing one variable per step (subject, opener, ask) isolates what moves replies; testing everything at once isolates nothing.
- **Stop rules define the sequence.** Reply, bounce, unsubscribe, and meeting booked each end outreach immediately — continuing past a reply is the fastest way to burn trust.
## Common misconceptions
| Belief | Reality |
| --- | --- |
| "One great email beats a sequence" | Most replies typically arrive at steps two to four — the follow-ups do the work |
| "A sequence is just a drip campaign" | A drip sends on a calendar regardless; a sequence stops the moment the prospect responds |
| "More follow-ups always help" | Returns diminish after around five to eight touches; past that you mostly buy spam reports |
| "Personalize every word of every step" | First-touch personalization carries most of the weight; later steps can be templated |
## How Reply implements this
Sequences are Reply's core object: [sequences](/specifications/sequences) hold ordered
[steps](/specifications/sequence-steps) with delays and variants, and the
[execution engine](/behavior/sequence-execution) advances each contact until a stop
condition fires. The cadence controls map directly onto the mechanism:
- **Step delays** are set per step in days, hours, and minutes; weekends count, and one day equals 24 hours. New steps are pre-filled with a position-based default — 0 days for step 1, then 2, 4, 7, and 9 days, and 11 days from position 6 onward.
- **A/B variants** attach to a step; contacts are assigned to variants at random, and per-variant results have their own toggle in the sequence statistics.
- **Conditions** split the flow into Yes and No branches — on email opened, LinkedIn connection accepted, and similar checks — monitored for a duration you set.
- **Send spacing** is a per-sequence delay between individual emails; Reply recommends at least 120-180 seconds.
- **Throttling** (Max new daily contacts) caps how many contacts start the sequence each day, spreading first-step volume so follow-ups fit inside daily limits.
The build path is documented in [create a sequence](/how-to/create-a-sequence).
## Where this breaks down
Cadence tunes probability; it cannot rescue a weak offer or the wrong audience. The
reported figures are aggregates — your market's tolerance for touch count and spacing is
found by testing, not by copying benchmarks. And past the point of diminishing returns,
persistence stops reading as diligence and starts reading as spam.
## Related
- [Multichannel strategy](/learn/multichannel-strategy)
- [Email deliverability](/learn/email-deliverability)
- [Sequence specification](/specifications/sequences)
- [Sequence execution rules](/behavior/sequence-execution)
- [Sequence stopping rules](/behavior/sequence-stopping)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence and step operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — sequence creation and step variants
---
# Multichannel strategy
> Why layered channels outperform any single one — attention recapture, identity signals, and the orchestration rules that keep touches from colliding.
**Channels compound because each covers a different weakness — email scales, LinkedIn adds a face and shared context, calls add urgency. Switching channels recaptures attention a prospect stopped giving the previous one. Orchestration rules prevent overlap — the same ask never lands on two channels in one day.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## What it is
Multichannel strategy runs one conversation across several channels — typically email,
LinkedIn, and phone — inside a single [sequence](/learn/sequence-design). Each channel
keeps its own strengths: email reaches anyone at scale, LinkedIn attaches a face, a
title, and mutual context to your name, and a call adds an immediacy nothing
asynchronous matches.
## Why it works this way
Channels compound because their weaknesses do not overlap. Email is easy to ignore in
bulk; a profile view or connection request is personal and hard to batch-delete; a call
interrupts. Switching channels also recaptures attention: a prospect who has tuned out
your emails still notices a new channel, and the earlier email touches make your name
familiar when they do. Recognition earned on one channel transfers to the next.
## How it behaves in practice
- **A typical pattern.** Email → LinkedIn profile view → connection request → email follow-up → call. Soft touches build familiarity before the direct ask.
- **Orchestration rules prevent collisions.** The same ask on two channels in one day reads as pressure, not persistence — spacing applies across channels, not per channel.
- **LinkedIn carries platform limits.** Connection requests and messages are rate-capped, so LinkedIn touches are spent on the highest-value moments.
- **Channels report differently.** Email gives delivery and reply signals, LinkedIn shows acceptance, calls give live resolution — reading them together is the point.
## Common misconceptions
| Belief | Reality |
| --- | --- |
| "More channels means more volume" | It means the same conversation on more surfaces — volume rules still apply per channel |
| "Repeat the message everywhere" | Repetition across channels on the same day reads as pressure; each touch should add something |
| "LinkedIn replaces email" | LinkedIn is rate-capped and identity-bound; email still carries the scale |
| "Calls are obsolete" | A call converts warmed attention into a decision faster than any written channel |
## How Reply implements this
Reply's [multichannel capability](/capabilities/multichannel-outreach) puts every
channel into one sequence: email, [LinkedIn](/capabilities/linkedin-outreach) — both
automated steps (connection requests, messages, InMails, profile views, post likes)
and manual tasks — Cloud Calls made directly from the platform, SMS, WhatsApp as
semi-automated tasks, and a Zapier step that triggers an action in an outside app.
LinkedIn automated steps run inside per-account safety limits: default dynamic ranges
of 25-35 actions per day for most action types, 35-50 for messages, and a maximum of
100 per action. Reply handling applies at the sequence level, so a detected reply
(email or LinkedIn) stops the remaining steps on every channel unless the sequence is
set to continue. A Channel Efficiency dashboard compares touches, replies, and booked
meetings across automatic and manual email, calls, LinkedIn, SMS, and WhatsApp — the
cross-channel reading described above. The end-to-end setup is documented in
[run multichannel outreach](/workflows/run-multichannel-outreach).
## Where this breaks down
Compounding requires presence: prospects who are not active on LinkedIn or never answer
unknown numbers collapse the strategy back to email. Orchestration overhead is real —
misconfigured timing produces the same-day collisions it exists to prevent. And each
channel has its own compliance rules; adding channels multiplies obligations as well as
reach.
## Related
- [Sequence design](/learn/sequence-design)
- [Email deliverability](/learn/email-deliverability)
- [Multichannel outreach in Reply](/capabilities/multichannel-outreach)
- [LinkedIn outreach in Reply](/capabilities/linkedin-outreach)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence and channel step operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — LinkedIn account and sequence operations
---
# The AI SDR model
> What an AI SDR automates and what it cannot — autonomy levels from drafts-for-approval to supervised autonomy, and the limits that keep humans in the loop.
**An AI SDR automates the mechanical span of outbound — list building, research, drafting, sending, reply triage, and meeting booking — while strategy, offer, and edge-case judgment stay human. Autonomy is graduated — drafts for approval first, then supervised sending, then autonomous operation that escalates anything uncertain.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## What it is
An AI SDR is software that runs the outbound loop a human SDR runs: build a prospect
list, research each person, draft a personalized message, send it on a schedule, triage
what comes back, and book the meeting. What it does not supply is the strategy
underneath — who to target, what to offer, whether the product fits the market, and what
to do when a reply falls outside every pattern it knows.
## Why it works this way
Most of an SDR's day is pattern work: find people who match a profile, gather the same
few facts, adapt a template, log what happened. Language models make each of those steps
automatable — but they are probabilistic, and occasionally confident and wrong. So
autonomy is granted in levels, each one widening what the system may do alone:
- **L1 — drafts for approval.** The system prepares everything; a human approves each message before it sends.
- **L2 — sends with a review queue.** Routine messages go out automatically; flagged ones wait for review.
- **L3 — autonomous with escalation.** The system runs end to end and escalates only edge cases — unusual replies, sensitive accounts, low-confidence drafts.
## How it behaves in practice
- **Approval gates exist because of hallucination risk.** A fabricated detail in a "personalized" opener is worse than no personalization — review catches what confidence scores miss.
- **The quality floor is the data.** Research and drafting inherit the accuracy of the underlying data; enrichment errors become personalization errors, at volume.
- **Autonomy is earned per playbook.** Teams typically start at L1, watch precision for a few weeks, and widen autonomy where the system proves reliable.
- **Escalation keeps humans on exceptions.** The human role shifts from writing every message to judging the cases the system cannot.
## Common misconceptions
| Belief | Reality |
| --- | --- |
| "An AI SDR replaces sales strategy" | It executes strategy; targeting, offer, and positioning remain human inputs |
| "Full autonomy is the goal" | Matching autonomy to proven reliability is — some steps stay gated on purpose |
| "AI personalization is always accurate" | Generated details can be wrong; that is why approval gates exist |
| "Good AI fixes bad data" | Output quality has a floor set by list and enrichment quality |
## How Reply implements this
Jason AI is Reply's implementation of the model
([AI SDR capability](/capabilities/ai-sdr)): it works from an
[offer](/specifications/offers) you define, uses
[playbooks](/specifications/playbooks), and grounds drafts in a
[knowledge base](/specifications/knowledge-bases). Autonomy maps onto two separate
controls:
- **Sending autonomy.** In **Approval mode**, every generated message lands in a Pending approvals queue and nothing sends until you approve it — you can edit it, regenerate it with a short prompt, or delete it, which removes the prospect from the sequence. In **Automatic mode**, Jason generates and sends without waiting for approval.
- **Sourcing autonomy.** **Autopilot mode** keeps the sequence fed by adding new contacts every day based on the filters you set. Source limits bound it: the Sales Navigator source caps at 500 contacts per day, with defaults of 10 per day and 3 contacts per company, and signal-based sources filter candidates by ICP fit — 60% by default.
Scoring is relative to the sequence, not absolute per contact: the ICP score is
computed against that sequence's offer, so the same contact can score differently in
two sequences promoting different products. A LinkedIn Activity score (Frequent,
Consistent, or Occasional) guides which channel to lead with. The full setup path is
[build an AI SDR](/workflows/build-an-ai-sdr).
## Where this breaks down
An AI SDR amplifies the strategy it is given — a weak offer sent at volume fails at
volume. Edge cases never disappear entirely, so an escalation path is permanent, not a
transition phase. And trust is asymmetric: one hallucinated claim to a key account can
cost more than the automation saved all quarter.
## Related
- [Reply classification](/learn/reply-classification)
- [Sequence design](/learn/sequence-design)
- [AI SDR in Reply](/capabilities/ai-sdr)
- [Build an AI SDR](/workflows/build-an-ai-sdr)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — offers, playbooks, and knowledge bases
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — Jason AI setup and approval operations
---
# Reply classification
> How incoming replies get sorted into intents, why natural language resists clean sorting, and what one misclassification costs an outreach system.
**Incoming replies are sorted into intents — interested, not interested, ask later, referral, out-of-office, unsubscribe, and bounce-as-reply — so automation can act on each differently. Classification is hard because language is ambiguous — sarcasm, multi-intent replies, and forwarded threads all mislead. Misreads are costly, so systems trade precision against recall deliberately.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## What it is
Reply classification reads each incoming response to outreach and assigns it an intent.
The working taxonomy is stable across the industry:
- **Interested** — wants to talk; route to a human fast.
- **Not interested** — a clear no; stop outreach and record the outcome.
- **Ask later** — a timing objection; pause and resurface at the named time.
- **Referral** — points to a colleague; a new contact, not a dead end.
- **Out-of-office** — automatic; outreach should continue after the return date.
- **Unsubscribe** — a legal signal, not a preference; suppress everywhere, permanently.
- **Bounce-as-reply** — a delivery failure arriving as a reply; mark the address invalid.
## Why it works this way
Each intent demands a different action, and several are opposites: an out-of-office
should not stop outreach, an unsubscribe must. A single "replied" flag cannot drive
automation safely, so classification sits between the inbox and every downstream rule —
stopping, pausing, routing, suppressing.
## How it behaves in practice
- **Language misleads.** "Great, just what I needed — another cold email" is positive words carrying negative intent.
- **Replies mix intents.** "Not the right person, try Ana — and take me off your list" is a referral and an unsubscribe in one message.
- **Forwarded threads confuse attribution.** The reply may come from someone you never contacted, quoting the person you did.
- **Automatic replies mimic humans.** Out-of-office messages with personal tone and personal replies with template structure cross in both directions.
- **Precision and recall trade off.** Tightening "interested" precision drops warm-but-vague replies; loosening it floods humans with false positives.
## Common misconceptions
| Belief | Reality |
| --- | --- |
| "Any reply means stop the sequence" | An out-of-office should not stop outreach; only genuine responses should |
| "All misreads cost the same" | Continuing past an unsubscribe risks compliance; stopping on an out-of-office loses one prospect |
| "Keyword rules are enough" | Sarcasm, mixed intents, and forwarded threads defeat keyword matching |
| "High accuracy means safe automation" | Aggregate accuracy hides which intents fail — one rare class can carry most of the cost |
## How Reply implements this
Reply's [reply management capability](/capabilities/reply-management) sorts replies
into inbox categories automatically: an AI analyzes each reply and assigns one of
**Interested**, **Not interested**, **Do not contact**, **Not now**, or **Forwarded** —
plus any custom categories you create. Only one category is allowed per thread; the
single exception is **Meeting intent**, a subcategory that can sit alongside a category
(Interested + Meeting intent). Categorization covers email, LinkedIn, and LinkedIn
voice-message replies, and categories can drive triggers — move to another sequence,
pause, and similar actions. Two operational details matter:
[reply detection](/behavior/reply-detection) usually takes up to 3-4 hours to sync a
response, and the categorization AI understands English only, so replies in other
languages need a manual category. Out-of-office replies are handled automatically by
default — the contact is paused with an Out-of-office status and resumed after a set
number of days, because the system cannot read the return date from the email.
Conversations are stored per contact
([conversations specification](/specifications/conversations)), and the human handoff
is covered in [process positive replies](/workflows/process-positive-replies).
## Where this breaks down
No classifier reads minds — ambiguous replies exist that two humans would label
differently, and any automated system inherits that ceiling. The costly failures cluster
in the rare classes: unsubscribes and legal requests are a sliver of volume but carry
most of the risk, which is exactly where sampled human review belongs.
## Related
- [The AI SDR model](/learn/ai-sdr-model)
- [Sequence design](/learn/sequence-design)
- [Reply management in Reply](/capabilities/reply-management)
- [Reply detection rules](/behavior/reply-detection)
- [Why a reply was not detected](/troubleshooting/reply-was-not-detected)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — inbox and conversation operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — inbox categories and reply handling
---
# Capabilities
> Can Reply do the task you need? Each capability page states what Reply can and cannot do, required inputs, outputs, limits, and when to choose something else.
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
A capability page answers the selection question — *can Reply perform this task?* — before
you read any implementation detail. Every page states what Reply can and cannot do, the
inputs it needs, the limits that apply, what you still build yourself, and links straight
to the workflow, specifications, and API/MCP/CLI surfaces that implement it.
## Data and prospecting
- [Prospect search](/capabilities/prospect-search) — find people and companies by ICP criteria in Reply Data
- [Contact management](/capabilities/contact-management) — contacts, companies, lists, stages, deduplication
- [Data enrichment](/capabilities/data-enrichment) — fill emails, phones, and profile fields
## Outreach channels
- [Email outreach](/capabilities/email-outreach) — sequences, variants, tracking, limits, scheduling
- [LinkedIn outreach](/capabilities/linkedin-outreach) — visits, connections, messages, InMail
- [Multichannel outreach](/capabilities/multichannel-outreach) — email, LinkedIn, calls, SMS, WhatsApp in one flow
## Replies, analytics, AI
- [Reply management](/capabilities/reply-management) — detection, classification, AI-drafted responses
- [Campaign analytics](/capabilities/campaign-analytics) — per-sequence, per-channel, per-team reporting
- [Deliverability](/capabilities/deliverability) — warmup, domain health, safety limits
- [AI SDR](/capabilities/ai-sdr) — Jason AI generates, launches, and runs outreach end to end
## Planned
Calls, SMS, and WhatsApp are covered inside
[Multichannel outreach](/capabilities/multichannel-outreach), and the shared inbox inside
[Reply management](/capabilities/reply-management), until they get dedicated pages.
| Page | Status |
| --- | --- |
| Company search | Not written |
| Calls · SMS (dedicated pages) | Not written |
| Shared inbox | Not written |
| Meetings | Not written |
| CRM integration | Not written |
## Related
- [Workflows](/workflows) — complete outcomes built from these capabilities
- [When to use Reply](/start/when-to-use-reply) — the honest fit assessment
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction)
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · CLI: [agents.reply.io/cli](https://agents.reply.io/cli) · Skills: [agents.reply.io/skills](https://agents.reply.io/skills)
---
# Prospect search
> Reply's Live Data search finds LinkedIn-sourced contacts by ICP filters or a pasted Sales Navigator URL, reveals emails and phone numbers for credits, and saves results to lists or sequences.
**Yes. Reply's Live Data search finds contacts from LinkedIn using filters for title, department, industry, location, keywords, and company lists, or by pasting a Sales Navigator search URL. Saving contacts uses Reply credits, skips people already in your account, and lands results in a list, a sequence, or both while the search runs.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Searches live LinkedIn-based B2B data by ICP filters, reveals emails and phone numbers, and saves results to lists or sequences |
| **Required objects** | Reply credits; optionally a destination list and/or sequence |
| **Surfaces** | UI (Data page) · REST API (coming soon) · MCP (partial — contact search live) |
| **Key limit** | Saving consumes Reply credits: 1 per contact without email, 2 with email, 3 per phone number |
| **Stops on** | A search finishes as *Finished* or *No new contacts*; you can pause it at any time from Search History |
| **Does not** | Guarantee coverage of a specific person or company; convert every Sales Navigator filter; save contacts without credits; invent an ICP for you |
| **Plans** | All plans — every new user receives 50 Reply credits; Email Volume and Multichannel plans include 50 credits per month |
## Summary
Reply's Live Data search (Realtime B2B Data) finds contact information live from LinkedIn
based on the filters you set. You see a preview of 5–7 matching contacts before spending
anything, then launch the search and choose where results land: a
[list](/specifications/lists), a [sequence](/specifications/sequences), both, or directly
into your account. A separate LinkedIn search import (Beta) extracts contacts from your own
Sales Navigator searches and saved lists, and the Marketplace page lists data partners for
sources Reply Data does not cover.
## Problems it solves
- Sourcing new contacts without buying, exporting, and importing external CSV lists
- Turning an existing Sales Navigator search into outreach-ready contact records
- Keeping a sequence supplied with fresh contacts as a search finds them
## What Reply can do
- Search live LinkedIn-based B2B data by job title, department, industry, location, keywords, and company criteria, with exclusion options for account lists, industries, locations, keywords, job titles, and departments
- Convert a pasted LinkedIn Sales Navigator search URL into matching Reply filters — unsupported filters are skipped with a notice while the rest still apply
- Restrict a search to specific companies by selecting an uploaded account list of company domains
- Preview 5–7 matching contacts before launching, so no credits are spent on the wrong filter set
- Reveal emails, find phone numbers, or add LinkedIn-only contacts without email addresses, at 1–3 credits per contact depending on the data revealed
- Save results to a list, a sequence, both, or straight to the account, and track every search on the Search History tab with the status Running, Finished, No new contacts, or Paused
- Skip contacts already saved to your account, so a search does not create duplicates by default
- Run in Contacts-only mode to widen the pool when contacts do not need to be linked to a company
- Filter companies by whether they are currently recruiting on LinkedIn (Hiring on Social Media)
- Import up to 2,000 contacts per day per LinkedIn account from your own Sales Navigator searches or saved lists (Beta)
## What Reply cannot do
- Guarantee coverage of a specific person or company — a search can end with No new contacts
- Save contacts without Reply credits — every saved contact consumes 1–3 credits depending on the data revealed
- Convert every Sales Navigator filter — Changed Jobs, Posted on LinkedIn, Shared Experiences, and saved searches are skipped during URL conversion
- Run the LinkedIn search import (Beta) from a basic LinkedIn plan — it requires a connected Sales Navigator account
- Define your ICP for you — filters execute a definition; they do not invent one
- Guarantee a phone number for every contact — with phone finding on, contacts are still added when no valid number is found
## Required inputs
An ICP expressed as filters or a Sales Navigator search URL; a Reply credit balance; and
optionally a destination — a [list](/specifications/lists), a sequence, or both. Leaving
both empty saves contacts directly to your account.
## Produced outputs
Contact records in your account — with email, phone number, or LinkedIn profile link
depending on the options chosen — placed on the selected list and/or added to the selected
sequence, plus a Search History entry recording the date, destination, status, credits
used, contacts found, and owner.
## Use Reply when
- You want prospect sourcing and outreach execution in one platform, with found contacts flowing straight into [sequences](/specifications/sequences)
- You already run Sales Navigator searches and want the results in Reply without a CSV export
- You want deduplication against your existing contact base handled for you
## Do not use Reply when
- You need a niche data source Reply Data does not cover — bring those records in via [import](/how-to/import-contacts) or a Marketplace data partner, and still use Reply for execution
## What you still need to build
- The ICP definition itself — and any scoring or qualification logic on top of raw matches
```yaml
capability: prospect_search
supported: true
interfaces:
product_ui: live
api: coming-soon
mcp: partial
cli: not-verified
required_objects:
- credits
side_effects:
- creates_contacts
- consumes_credits
human_approval_recommended: false
```
## Limits
- 1 credit per contact with a LinkedIn profile but no email, 2 credits per contact with email, 3 credits per phone number found
- Every new user receives 50 Reply credits; Email Volume and Multichannel plans include 50 credits per month — more are available as an add-on; see [Limits](/reference/limits)
- LinkedIn search import (Beta): up to 2,000 contacts per day per LinkedIn account, Sales Navigator required
- Pausing a running search may still add the last batch of 10–20 contacts before it stops
- API rate limits apply to programmatic access — see docs.reply.io
## FAQ
### Are found prospects deduplicated against my existing contacts?
Yes. By default, contacts already saved to your account are not duplicated by a Live Data
search — the same one-record-per-email rule as every create path; see
[Contact deduplication](/behavior/contact-deduplication). The LinkedIn search import (Beta)
additionally lets you skip or add contacts that are already in other sequences.
### Can a search feed a running sequence?
Yes. Choose a sequence as the destination when launching the search and contacts are added
to it as they are saved — results arrive in batches while the search status is Running. The
full flow is described in [Find prospects from an ICP](/workflows/find-prospects-from-an-icp).
### What do the search statuses mean?
Running — the search is still finding and saving contacts. Finished — the search completed.
No new contacts — the database has no more matches for these filters beyond what you
already have. Paused — you stopped it, for example to adjust filters and save credits, and
can resume or delete it later.
### Can I reuse a previous search?
Yes. From the Search History tab, *Use this search again* applies the same filters to find
a new batch of contacts, and *View contacts* shows what an earlier search saved.
## Related
- [Find prospects from an ICP](/workflows/find-prospects-from-an-icp) — the full workflow
- [Build a prospect list](/workflows/build-a-prospect-list)
- [Prospect data](/specifications/prospect-data) — the underlying objects
- [Contact deduplication](/behavior/contact-deduplication)
- [Data enrichment](/capabilities/data-enrichment)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — live-data endpoints (check operation status)
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · Status ledger: [agents.reply.io/apis](https://agents.reply.io/apis)
---
# Contact management
> Reply stores contacts and company accounts with custom fields, stages, lists, smart filters, blacklists, and CSV import and export — one shared base that every sequence works from.
**Yes. Reply keeps one contact base with company accounts, editable stages, up to 50 custom fields including AI-generated ones, and lists a contact can join several of. Smart filters segment by engagement, data gaps, or custom fields; blacklisting stops all sending to a contact or domain; CSV export covers basic or all fields.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Stores and organizes contacts and company accounts — fields, stages, lists, filters, blacklists, bulk actions, CSV import and export |
| **Required objects** | A contact record; lists, accounts, and custom fields are optional structure on top |
| **Surfaces** | UI (People section) · REST API · MCP · CLI |
| **Key limit** | 50 custom fields per account (standard and AI combined); contact storage defaults to 100,000 |
| **Stops on** | Blacklisting — a blacklisted contact receives no sequence emails even when enrolled |
| **Does not** | Let one contact belong to two company accounts; let you create new stages (only edit the existing ones); provide CRM objects such as deals or forecasting |
| **Plans** | All plans; the whole base is shared with team members on Team Edition |
## Summary
The People section is Reply's contact hub: a grid of every [contact](/specifications/contacts)
added by you or your team, a [Companies](/specifications/companies) page (called Accounts
in the app) that groups contacts by organization, and a Marketplace of data partners. On
top of the base you get custom fields, editable stages, [lists](/specifications/lists),
quick and smart filters, bulk actions, blacklisting, and CSV export — the structure every
[sequence](/specifications/sequences) enrolls from.
## Problems it solves
- One shared contact base instead of per-rep spreadsheets
- Segmenting contacts for outreach — by list, stage, engagement, data gaps, or any custom field
- Keeping people you must not contact reliably excluded from every sequence
- Seeing the full history with a person — activity, past sequences, sent emails — in one card
## What Reply can do
- Store contacts in a customizable grid with standard fields (name, email, company, title, location, phone, LinkedIn, timezone, owner, sequence, status) plus your own columns
- Support up to 50 custom fields per account — Text (up to 4,000 characters), Number, and AI custom fields that generate a value from a prompt using contact data
- Group contacts into company accounts with firmographic detail, account lists, account stages, and bulk actions (move to list, change owner, set stage, duplicate, export, delete)
- Organize contacts into lists — the same contact can sit in several lists, and contacts can be split across 2, 3, or 4 lists for testing
- Label contacts with editable stages such as Interested, Engaging, Not Interested, or Do Not Contact, separate from the statuses Reply assigns automatically
- Filter with one-click quick filters (All, My, Opened, Replied, Bounced, Opted Out, To Call, Clicked) and a smart-filter wizard covering sequences, dates, engagement counts, missing fields, location, creation source, validation status, inbox category, custom fields, and more — saved filters stay reusable from a drop-down
- Run bulk quick actions from the grid: validate emails, enrich, move to sequence or list, change status, set stage, change owner, log a meeting, blacklist, delete
- Blacklist individual contacts or whole domains — manually, from a selected contact, or via CSV upload — so they receive no emails even when enrolled in a sequence
- Export contacts to CSV with Basic Fields or All Fields (including engagement counts, stage, validation status, and custom fields), and export accounts to CSV
- Show each contact's full story on the contact card: activity log, current and past sequences, sent email threads you can reply from, and up to 4 statuses
- Recognize LinkedIn URL variants of the same profile as one person, so URL formatting differences do not create duplicates
## What Reply cannot do
- Put one contact into more than one company account at a time
- Create new contact stages — the built-in stages can be renamed, recolored, and redescribed, but not added to
- Exceed 50 custom fields without contacting support, or store text in a Number field
- Change a custom field from Text to Number once any contact has a value in it
- Blacklist-import more than 10,000 domain rows per CSV file
- Delete custom fields in bulk — they are removed one at a time
- Provide CRM objects such as deals, quotes, or forecasting
## Required inputs
Contact records — created manually, [imported from CSV](/how-to/import-contacts), found by
[prospect search](/capabilities/prospect-search), or synced from a CRM. Optionally: account
records, list names, custom field definitions, and stage labels edited to fit your process.
## Produced outputs
An organized, filterable contact base: contacts with fields, stages, statuses, list
memberships, and account links; saved smart filters; blacklist entries; CSV exports of
contacts (Basic or All fields) and accounts.
## Use Reply when
- You want the contact base and the outreach execution in one system, so segments flow straight into [sequences](/specifications/sequences)
- Your team shares one base and needs ownership, stages, and lists to divide the work
- You need do-not-contact rules enforced at send time, not just noted in a field
## Do not use Reply when
- You need a system of record for the full customer lifecycle with deal pipelines and custom objects — use a CRM as the master and [sync Reply with it](/workflows/sync-reply-with-a-crm)
- You need more than one company association per person — model that in your CRM, not in Reply
## What you still need to build
- Your segmentation model — which lists, stages, and custom fields mean what in your process
- Any sync logic with an external CRM beyond the built-in integrations
```yaml
capability: contact_management
supported: true
interfaces:
product_ui: live
api: live
mcp: live
cli: live
required_objects:
- contact
side_effects:
- creates_contacts
- updates_contacts
- updates_lists
human_approval_recommended: false
```
## Limits
- 50 custom fields per account, standard and AI combined — contact support if you need more
- Text custom fields hold up to 4,000 characters; AI custom field values up to 1,500 characters
- Stage names are limited to 21 characters, stage descriptions to 512
- Blacklist CSV upload: one column, no header, plain domains (domain.com), up to 10,000 rows
- Contact storage defaults to 100,000 — see [Limits](/reference/limits) for storage and active-contact tiers
## FAQ
### What is the difference between a stage and a status?
A status is assigned by Reply automatically from what happened — opened, replied, bounced,
opted out — and a contact can carry up to 4 of them. A stage is a label your team sets by
hand (Interested, Engaging, Not Interested, Do Not Contact, and so on) to track the
relationship. See [Status transitions](/behavior/status-transitions).
### Can a contact be in several lists and several sequences?
A contact can be in any number of lists at once. Moving contacts to a new sequence removes
them from their previous sequence, and the email is delivered immediately regardless of the
step's delay setting — see [Contact enrollment](/behavior/contact-enrollment).
### Does blacklisting really stop sending?
Yes. A blacklisted contact does not receive sequence emails even if they are moved into a
sequence, and blacklisting a domain covers every contact at that domain. Blacklisted
contacts are marked with a black dot on the People page.
### How does Reply avoid duplicate contacts?
Create paths check for existing records — including format-agnostic matching of LinkedIn
profile URLs, so a trailing slash or missing www does not produce a second record. The full
rule set is in [Contact deduplication](/behavior/contact-deduplication) and
[Manage duplicates](/how-to/manage-duplicates).
## Related
- [Contacts](/specifications/contacts) · [Companies](/specifications/companies) · [Lists](/specifications/lists) — the underlying objects
- [Build a prospect list](/workflows/build-a-prospect-list) — the workflow this capability powers
- [Contact deduplication](/behavior/contact-deduplication)
- [Import contacts](/how-to/import-contacts)
- [Data enrichment](/capabilities/data-enrichment)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contacts, companies, lists, and blacklist endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — contact search, filtering, and update operations
---
# Data enrichment
> Reply finds missing LinkedIn URLs, emails, and phone numbers for existing contacts, refreshes profile fields, fills AI custom fields from prompts, and validates addresses before sending.
**Yes. Reply finds missing LinkedIn URLs (1 credit), emails (2 credits), and phone numbers (3 credits) for existing contacts, refreshes profile and company fields from LinkedIn, and fills AI custom fields from prompts. Email validation classifies addresses as Valid, Risky, or Invalid before sending — Invalid contacts never receive sequence emails.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Fills missing LinkedIn URLs, emails, and phone numbers; refreshes profile fields from LinkedIn; enriches AI custom fields; validates email addresses |
| **Required objects** | Existing contacts; Reply credits for enrichment and AI fields; email validation credits for validation |
| **Surfaces** | UI (People page, CSV import, sequence settings) · REST API (coming soon) · MCP (partial — enrichment settings live) |
| **Key limit** | 1 credit per LinkedIn URL, 2 per email, 3 per phone number; AI field enrichment also consumes Reply credits |
| **Stops on** | An empty credit balance blocks new enrichment; email validation runs one batch at a time |
| **Does not** | Overwrite existing emails or phone numbers during background enrichment; guarantee a result for every contact; send email to Invalid addresses |
| **Plans** | All plans — trial includes 50 Reply credits; paid plans include 50 per month; validation packages are a separate add-on |
## Summary
Reply enriches the [contacts](/specifications/contacts) you already have: it finds missing
LinkedIn URLs, email addresses, and phone numbers for Reply credits, refreshes profile and
company fields from a contact's LinkedIn profile, and generates AI custom field values from
prompts you define. A separate email validation service classifies every address as Valid,
Risky, or Invalid before a [sequence](/specifications/sequences) sends to it. Enrichment
runs on demand from the People page, during CSV import, or automatically when LinkedIn
sequence steps execute.
## Problems it solves
- Lists with names but no reachable email or phone number
- Stale job titles and company fields that break personalization
- High bounce rates from unverified addresses — see [Bounce handling](/behavior/bounce-handling)
- Research fields (one-line openers, firmographic answers) filled by AI instead of by hand
## What Reply can do
- Find a contact's missing LinkedIn URL (1 credit), email address (2 credits), or phone number (3 credits) — individually, in bulk from the People page, or during CSV import
- Try to fill job title and company name alongside a found LinkedIn URL, with a choice to keep existing data or override it with newer information
- Auto-enrich missing LinkedIn URLs for contacts in LinkedIn sequences — on by default, toggled in settings
- Collect extra data at no credit charge while executing LinkedIn steps that view a profile — filling empty email and phone fields and recording badges such as Open to Work, Hiring, Creator mode, and Top Voice
- Refresh contact data from a known LinkedIn URL (where available): update title, company, industry, location, and company size, and create or relink the matching company account automatically
- Enrich AI custom fields in bulk or per contact, with per-field result statuses (Enriched, Missing variables, No results found, Failed) and a CSV summary in the notification center
- Validate email addresses on demand or automatically whenever contacts are added to a sequence, classifying each as Valid, Risky, or Invalid
- Gate sequence branches on validation results — for example, send only when validation returned Valid
## What Reply cannot do
- Overwrite an existing email or phone number during background LinkedIn-step enrichment — only empty fields are filled (system-generated placeholder emails are the one exception)
- Save an email that already belongs to another contact — it is skipped to avoid duplicates
- Guarantee a result for every contact — coverage depends on what the data sources hold
- Enrich without Reply credits, or validate without email validation credits — they are separate balances
- Send sequence emails to a contact whose address validated as Invalid — this applies via the API too
- Find an email without the contact's full name and company name
## Required inputs
Existing contact records with enough data to search from (name and company for email
finding, or a LinkedIn URL for profile refresh); a Reply credit balance for enrichment and
AI fields; an email validation package for validation.
## Produced outputs
Updated contact records — found emails, phone numbers, LinkedIn URLs, refreshed profile
fields, filled AI custom fields with per-field statuses — plus a validation status (Valid,
Risky, Invalid) on each checked address and completion notifications with summaries.
## Use Reply when
- Your contacts already live in Reply and you want data gaps closed where outreach runs
- You want validation wired into enrollment so invalid addresses never reach a mailbox — see [Contact enrollment](/behavior/contact-enrollment)
- You want AI-researched fields available as message variables without exporting data
## Do not use Reply when
- You need a specialty data vendor for a niche market — enrich there, then [import](/how-to/import-contacts) the finished records and let Reply execute
- You need enrichment for records that will never enter Reply — enrichment applies to contacts in your Reply base
## What you still need to build
- The decision rules for what to do with unenrichable contacts — park, retry, or discard
- Prompts for AI custom fields — output quality follows prompt quality
```yaml
capability: data_enrichment
supported: true
interfaces:
product_ui: live
api: coming-soon
mcp: partial
cli: not-verified
required_objects:
- contact
- credits
side_effects:
- updates_contacts
- consumes_credits
human_approval_recommended: false
```
## Limits
- Enrichment credits: 1 per LinkedIn URL, 2 per email, 3 per phone number — see [Limits](/reference/limits) for credit grants
- Email validation runs one batch at a time; start the next batch after the first finishes
- Automatic validation needs time when enrolling large lists — allow roughly 10 minutes per 1,000 contacts before a sequence condition checks the result
- AI custom field values are capped at 1,500 characters
- Credits are charged when AI enrichment returns "No results found" (the request was processed) but not on a system failure
## FAQ
### What do Valid, Risky, and Invalid mean?
Valid — verification completed with no high-risk factors; safe to sequence. Risky — the
mail server says the recipient exists but delivery may still bounce (disposable domains,
catch-all servers, honeypots); treat as Valid but keep Risky addresses to about 20% of a
send. Invalid — syntax, DNS, or mailbox checks failed; Reply will not email these contacts.
### Can I put a contact with an Invalid email into a sequence?
Yes, as long as the sequence has no email steps at that moment — useful for LinkedIn-only
outreach at volume. Email steps will not send to Invalid addresses, which protects your
bounce rate; see [Bounce handling](/behavior/bounce-handling).
### Does LinkedIn-step enrichment cost credits?
No. When a LinkedIn step views a profile during [sequence execution](/behavior/sequence-execution),
Reply collects available data in the background at no credit charge — filling only empty
email and phone fields, never replacing existing values.
### Are Reply credits and email validation credits the same thing?
No. Reply credits pay for finding data (LinkedIn URLs, emails, phones, AI fields). Email
validation uses separate validation packages bought as an add-on. An empty balance in one
does not affect the other.
## Related
- [Prospect data](/specifications/prospect-data) — the underlying objects
- [Find prospects from an ICP](/workflows/find-prospects-from-an-icp) — sourcing plus enrichment in one flow
- [Contact enrollment](/behavior/contact-enrollment) — where automatic validation fires
- [Prospect search](/capabilities/prospect-search)
- [Contact management](/capabilities/contact-management)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — enrichment and validation endpoints (check operation status)
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — enrichment settings and contact operations
---
# Email outreach
> Reply sends multi-step email sequences with A/B variants, variables and spintax, optional tracking, threaded follow-ups, three unsubscribe mechanisms, and throttled daily contact starts.
**Yes. Reply executes multi-step email sequences from connected mailboxes with A/B variants per step, personalization variables, spintax, optional open and click tracking, and threaded follow-ups. Sending respects schedules, per-account daily caps (400 on paid plans), delays between sends, and reply handling that stops or continues follow-ups per your setting.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Multi-step email sequences with variants, personalization, tracking, threading, unsubscribe handling, and configurable reply behavior |
| **Required objects** | Contact with a valid email; connected email account; sequence with steps |
| **Surfaces** | UI · REST API · MCP · CLI |
| **Key limit** | 400 emails per day per email account on paid plans (200 on trial); sequence cap configurable up to 10,000 |
| **Stops on** | Reply (when replies handling is set to mark as finished); bounce; opt-out |
| **Does not** | Track opens or clicks in plain-text mode; thread follow-ups when the Step 1 subject carries a "Re:" prefix; apply daily limits to Manual email steps |
| **Plans** | All plans |
## Summary
Reply executes multi-step email outreach: templated, personalized emails sent from your
connected [email accounts](/specifications/email-accounts) inside
[schedules](/specifications/schedules) and daily limits, with A/B variants, threaded
follow-ups, three unsubscribe mechanisms, and reply handling you configure per
[sequence](/specifications/sequences).
## Problems it solves
- Follow-up discipline — steps happen without a human remembering
- Sending infrastructure: account assignment, daily caps, delays, throttled contact starts
- Copy testing with per-variant statistics
- Personalization at scale through variables, fallbacks, and spintax rather than manual edits
## What Reply can do
- Send sequences from one or several connected email accounts, with optional matching of contacts to sending accounts by email provider
- Add A/B variants to any email step — clone, edit, pause, resume, or remove variants, and compare their statistics in the sequence Stats tab
- Personalize with contact, team, custom, and advanced variables, including conditional logic and fallback values for missing data
- Rotate wording with spintax — a Random variable picks one of your listed options per message sent
- Send follow-ups in the same thread by leaving the follow-up subject line empty
- Enforce sending discipline: max emails per day (up to 10,000), delay between sends, max daily emails per contact, and a same-domain daily cap that excludes common free domains
- Throttle new contact starts with Max new daily contacts — contacts wait in a Throttled state and enter Step 1 at your chosen daily rate, in add-full-amount or add-until-capacity mode
- Handle replies per sequence: mark the contact finished or continue the remaining follow-ups
- Offer three unsubscribe mechanisms: an opt-out text or link appended per email account, a custom opt-out link placed inside any step, and a List-Unsubscribe header toggle per sequence
- Send in plain-text mode (default for new sequences) — all HTML, tracking, and images removed while attachments still send
- Track opens and clicks when enabled (both are off by default), and send test emails from any step editor before launch
## What Reply cannot do
- Exceed the per-account daily cap — 400 emails per day on paid plans, 200 on trial — regardless of sequence settings
- Track opens or clicks while plain-text sending mode is on, or thread follow-ups when the Step 1 subject contains symbols or prefixes like "Re:"
- Stop a contact when they answer a direct email — only replies to sequence emails set Finished; direct replies set Replied without stopping the sequence
- Place variables inside a spintax block — variable chaining within Random is not supported
- Apply opt-out links to test emails — they lack sequence and contact context
- Guarantee the List-Unsubscribe header is shown — visibility depends on the recipient's email provider
## Required inputs
Contacts with valid email addresses (validate first — see
[Data enrichment](/capabilities/data-enrichment)); at least one connected
[email account](/specifications/email-accounts); a sequence with email steps and templates;
a [schedule](/specifications/schedules).
## Produced outputs
Sent and scheduled emails, threaded conversations, per-contact statuses (Replied, Finished,
Bounced, Opted Out), and per-step, per-variant statistics — opens, clicks, replies —
feeding [campaign analytics](/capabilities/campaign-analytics).
## Use Reply when
- You want follow-up sequences executed automatically under real sending discipline — caps, delays, schedules, throttling
- You test copy and need variant-level statistics per step
- Compliance matters: opt-out text or link, one-click opt-out page, and List-Unsubscribe header are built in
## Do not use Reply when
- You need transactional or bulk newsletter email — Reply's limits and threading model are built for outreach conversations, not broadcast volume
- You need marketing-automation journeys keyed to website behavior — pair Reply with a marketing platform instead
## What you still need to build
- The copy itself and your testing plan — Reply distributes variants randomly and reports results; you decide what wins
- List quality: targeting and segmentation happen before the sequence — see [Build a prospect list](/workflows/build-a-prospect-list)
```yaml
capability: email_outreach
supported: true
interfaces:
product_ui: live
api: live
mcp: live
cli: live
required_objects:
- contact
- sequence
- email_account
side_effects:
- schedules_messages
- sends_messages
- updates_contact_statuses
- updates_statistics
human_approval_recommended: true
```
## Limits
- 400 emails per day per email account on paid plans, 200 on trial — the platform ceiling
- Max number of emails per day per sequence: configurable up to 10,000, never above the sum of account caps
- Max daily emails per contact defaults to 1; Manual email steps are exempt from the daily limits
- Recommended delay between sends: 120–180 seconds; the system adds roughly 10–15 seconds of its own
- Bounce-rate thresholds stop a sending step at 8% — see [Bounce handling](/behavior/bounce-handling)
- Full table: [Limits](/reference/limits)
## FAQ
### How do follow-ups land in the same thread?
Give Step 1 a subject and leave the follow-up subject lines empty — Reply groups them into
the original thread. If the Step 1 subject contains symbols or prefixes such as "Re:",
follow-ups will not thread and will have no subject. Test emails always arrive separately,
because tests are not linked into a thread.
### What exactly happens when a prospect replies?
With replies handling set to *Mark as finished*, the contact stops receiving follow-ups
and becomes Finished. Set to *Continue sending emails*, the remaining steps still go out.
A reply to a direct (non-sequence) email sets Replied but does not stop the sequence. See
[Reply detection](/behavior/reply-detection) and [Sequence stopping](/behavior/sequence-stopping).
### Why are opens not being tracked?
Opens tracking is disabled by default, and plain-text sending mode — on by default for new
sequences — removes tracking entirely along with HTML and images. Enable opens or link
tracking in sequence settings and turn plain-text mode off if tracking matters more than
the deliverability gain.
### Who receives variant A versus variant B?
Distribution is random per step — you cannot pin a contact to a variant, and a contact who
received variant A in Step 1 may receive variant B in Step 2. Copying a step copies all its
variants. Compare results with the A/B toggle in the sequence Stats tab.
## Related
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign) — the full workflow
- [Sequences](/specifications/sequences) · [Sequence steps](/specifications/sequence-steps) · [Email accounts](/specifications/email-accounts)
- [Sending schedules](/behavior/sending-schedules) · [Mailbox selection](/behavior/mailbox-selection)
- [Deliverability](/capabilities/deliverability)
- [Configure sending limits](/how-to/configure-sending-limits)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequences, steps, variants, and email-account endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — sequence creation, settings, and sending operations
---
# LinkedIn outreach
> Reply automates nine LinkedIn action types — connections, messages, InMail, voice and AI voice messages, views, likes, endorsements, follows — under per-account safety limits.
**Yes. Reply runs LinkedIn as a sequence channel with nine automatic action types — connection requests, messages, InMail, voice and AI voice messages, profile views, post likes, endorsements, and follows. Per-account safety limits default to 25–35 actions per day (35–50 for messages), capped at 100, and acceptance is detected across all connected accounts.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Automates LinkedIn actions inside sequences — connect, message, InMail, voice and AI voice messages, view, like, endorse, follow — plus one-off direct actions from the contact card |
| **Required objects** | Contact with a LinkedIn profile URL; connected LinkedIn account; sequence with LinkedIn steps |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Up to 100 actions per day per action type; suggested ranges 25–35 (35–50 for messages); limit changes take effect the next day |
| **Stops on** | A reached daily safety limit pauses that action until the next day; a reply stops the contact per sequence settings |
| **Does not** | Message contacts outside your network (messages need a 1st-degree connection); send InMail without Sales Navigator; resend a revoked connection request for up to 3 weeks |
| **Plans** | LinkedIn seats are included on some plans and available as a paid add-on on others — check Plans and Billing for included and used seats |
## Summary
Reply runs LinkedIn as an automated channel inside [sequences](/specifications/sequences).
Nine automatic step types cover the network-building ladder — view a profile, like recent
posts, follow, endorse skills, send a connection request, then message, InMail, voice
message, or AI voice message — with per-account safety limits that randomize daily volume
to look natural. Connection acceptance is tracked as a status you can filter and branch on,
and five action types can also be sent directly from a contact card without any sequence.
## Problems it solves
- LinkedIn touches executed on time, at safe volume, without a person clicking through profiles
- Multichannel sequences where LinkedIn warms up or follows up on email — see [Run multichannel outreach](/workflows/run-multichannel-outreach)
- Knowing who accepted a connection request, and routing them differently when they did
- Voice outreach at scale through AI-generated voice messages in your own voice profile
## What Reply can do
- Automate nine LinkedIn step types: Message, Connect, InMail, View Profile, Like Recent Posts, Endorse Skills, Follow Profile, Voice Message, and AI Voice Message
- Enforce per-account safety limits — dynamic daily ranges (default 25–35 for most actions, 35–50 for messages) or a static cap (default 30), adjustable up to 100 per action type
- Skip steps intelligently: Connect is skipped for existing connections, Message for non-connections, InMail for contacts whose privacy settings forbid it — the contact moves to the next step
- Track connection request statuses (Unchecked, Pending, Connected, Not Connected, Connection forbidden, Invalid URL, Revoked) and detect acceptance across all LinkedIn accounts connected to the team
- Send InMail with a subject and body to contacts outside your network via a Sales Navigator subscription, with optional automatic skipping when InMail credits run out, and branch the sequence on InMail status (Accepted, Rejected, Set, Not Set)
- Send 60-second voice messages — uploaded or recorded — and AI voice messages generated from text in a cloned voice profile, with per-account default voices and a team pronunciation dictionary
- A/B test any automatic step with a text body or recording — variants are distributed evenly, with a per-variant breakdown in sequence stats
- Personalize every step with variables and templates; messages support links, pictures, and one attachment up to 3 MB
- Send one-off direct LinkedIn actions (Connection Request, InMail, Message, Voice Message, AI Voice Message) from a contact card without enrolling the contact in a sequence
- Connect LinkedIn accounts three ways — session cookie via the Findy extension, credentials, or a shareable invite link for accounts you do not have direct access to
- Convert Sales Navigator lead links to public profile links automatically when a step runs
## What Reply cannot do
- Send automatic messages to contacts who are not 1st-degree connections — include a Connect step first
- Send InMail from Free, Premium, or Recruiter subscriptions — only Sales Navigator is supported, and LinkedIn InMail credits must be available
- Exceed 100 actions per day per action type, or apply a limit change same-day — new limits start the next day
- Resend a revoked connection request to the same person for up to 3 weeks
- A/B test manual LinkedIn tasks — variants apply to automatic steps only
- Guarantee full automation on non-English LinkedIn interfaces — set the LinkedIn site language to English
- Attach files to connection requests or InMail — attachments are supported only on Message steps
## Required inputs
Contacts with valid LinkedIn profile URLs; a connected LinkedIn account assigned to the
sequence; message texts or voice recordings per step; for InMail, an active Sales Navigator
subscription; for AI voice messages, a voice profile.
## Produced outputs
Executed LinkedIn actions with per-contact activity records, connection request statuses
you can filter and branch on, background-collected profile data (see
[Data enrichment](/capabilities/data-enrichment)), and per-step, per-variant LinkedIn
statistics in sequence stats and reports.
## Use Reply when
- You want LinkedIn and email coordinated in one [sequence](/specifications/sequences) with shared stopping rules
- You need safe daily volumes enforced per account, with randomized ranges rather than a flat robotic count
- You branch outreach on real signals — connection accepted, InMail rejected — instead of blind delays
## Do not use Reply when
- Your targets rarely use LinkedIn — run [email outreach](/capabilities/email-outreach) and calls instead
- You need bulk one-off LinkedIn blasts outside sequences — direct actions send to one contact at a time by design
## What you still need to build
- The connection-request and message copy that earns acceptance — automation delivers it, it does not write your positioning (unless you use the [AI SDR](/capabilities/ai-sdr))
- Your escalation ladder — which soft touches (view, like, follow) precede a request, and when
```yaml
capability: linkedin_outreach
supported: true
interfaces:
product_ui: live
api: live
mcp: live
cli: not-verified
required_objects:
- contact
- sequence
- linkedin_account
side_effects:
- executes_linkedin_actions
- creates_tasks
- updates_statistics
human_approval_recommended: true
```
## Limits
- Suggested daily ranges: 25–35 for connections, profile views, post likes, InMails, detections, revoke connections, endorse skills, and follow profile; 35–50 for messages
- Static limit default: 30 per action type; maximum 100 per action type per day; changes take effect the next day
- Message body up to 8,000 symbols; connection request note up to 300 symbols; InMail subject up to 200 characters
- Voice messages up to 60 seconds; one attachment per message, 3 MB maximum
- Safety limits cover automatic steps only — manual actions and direct contact-card actions are not counted
- Full table: [Limits](/reference/limits)
## FAQ
### What happens when a daily LinkedIn limit is reached?
Reply pauses that action type for the rest of the day and notes it in the Sequence → Log
tab. Everything resets the next day — no permanent stop, no account flag from Reply's side.
See [Sequence execution](/behavior/sequence-execution).
### How does Reply know a connection request was accepted?
Acceptance detection runs across all LinkedIn accounts connected to the team and matches on
the contact's profile URL — the contact does not need to be assigned to the account that
accepted. The status updates to Connected, the contact proceeds to the next LinkedIn step,
and the accepting account is named in the contact's activity log.
### Can I send a LinkedIn action without a sequence?
Yes. From the contact card, choose Send via LinkedIn: Connection Request, InMail, Message,
Voice Message, or AI Voice Message. Direct actions do not count toward safety limits and do
not touch sequence statistics; replies land in the [Inbox](/specifications/inbox) like any
other conversation.
### Do I need Sales Navigator?
Only for InMail steps and the Sales-Navigator-based prospect import. Connection requests,
messages, views, likes, endorsements, follows, and voice messages work without it. Sending
InMail also consumes LinkedIn InMail credits — except to Open Profile members, which are
free and still send when credits run out.
## Related
- [Run multichannel outreach](/workflows/run-multichannel-outreach) — the full workflow
- [Sequence steps](/specifications/sequence-steps) · [Sequences](/specifications/sequences)
- [Sequence execution](/behavior/sequence-execution) · [Reply detection](/behavior/reply-detection)
- [Multichannel outreach](/capabilities/multichannel-outreach)
- [Prospect search](/capabilities/prospect-search) — Sales Navigator imports
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — LinkedIn account and sequence endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — LinkedIn account management and safety-limit operations
---
# Multichannel outreach
> Reply mixes email, LinkedIn, call, SMS, WhatsApp, task, and Zapier steps in one sequence, branches on conditions, and compares channel performance in one dashboard.
**Yes. One Reply sequence can hold email, LinkedIn, call, SMS, WhatsApp, task, and Zapier steps with Yes/No condition branches. Calls run through built-in Cloud Calls with recording and resolutions; SMS sends automatically or as tasks; WhatsApp is semi-automated. The Channel Efficiency dashboard compares touches, replies, and meetings per channel.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | One sequence combining email, LinkedIn, calls, SMS, WhatsApp, to-do and meeting tasks, Zapier triggers, and Yes/No condition branches |
| **Required objects** | Contact; sequence; per-channel prerequisites — email account, LinkedIn account, rented phone number, funded Cloud Calls wallet |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Each channel keeps its own caps — email daily limits, LinkedIn safety limits, 160 characters per single SMS |
| **Stops on** | Reply handling per sequence settings; optional pause on a successful call; a Zapier step can hold contacts until an external signal |
| **Does not** | Fully automate WhatsApp (semi-automated tasks); send automatic SMS to contacts without a phone number; allow more than one Zapier step per sequence |
| **Plans** | Channel availability varies — Cloud Calls and SMS require the calling feature and a rented number; LinkedIn requires a seat |
## Summary
A Reply [sequence](/specifications/sequences) is not email-only: its
[steps](/specifications/sequence-steps) can be automatic or manual emails, automatic or
manual LinkedIn actions, call steps backed by built-in Cloud Calls, automatic or manual
SMS, semi-automated WhatsApp tasks, to-do and meeting tasks, Zapier triggers into 7,000+
external apps, and condition steps that branch contacts into Yes/No paths on data or
behavior. Channel results meet in one place — the Channel Efficiency dashboard.
## Problems it solves
- Coordinating touches across channels in one timeline instead of three disconnected tools
- Routing contacts by fit and signal — branch on email validation, LinkedIn connection status, opens, phone type, ICP score, and more
- Calling at the moment of interest — trigger a call automatically after a set number of email opens
- Comparing what actually books meetings, per channel, over time
## What Reply can do
- Mix automatic and manual steps for email, LinkedIn, calls, SMS, and WhatsApp in one sequence, in any order
- Create call tasks and place calls in-platform via Cloud Calls — record calls, take notes in the call widget, and log resolutions (default or custom)
- Trigger a call automatically once a contact opens your email a set number of times (4–7 opens recommended), and optionally pause a contact after a successful call
- Send automatic template-based SMS or create manual SMS tasks, with replies synced to the contact activity log and a dedicated SMS Inbox for threads
- Run WhatsApp as semi-automated tasks — the contact moves to the next step once the task is sent or completed
- Generate manual LinkedIn tasks (Message, Connect, InMail, View Profile) that the Reply Chrome extension completes automatically as you act on LinkedIn
- Add to-do and meeting Task steps with manual or automatic completion modes
- Trigger external automations with a Zapier step — continue immediately or hold the contact until Zapier signals to move on
- Branch sequences with condition steps on dozens of criteria: email presence and validation status, LinkedIn URL and connection status, InMail status, phone number and type, opens, clicks, views, ICP score, inbox category, company data, custom fields, CRM source, and more
- Compare channels in the Channel Efficiency dashboard — prospects contacted, touches, replies, and meetings booked across automatic and manual email, calls, LinkedIn, SMS, and WhatsApp, with breakdowns by channel, team member, and sequence
## What Reply cannot do
- Fully automate WhatsApp — WhatsApp steps are semi-automated tasks completed by a person
- Send automatic SMS to a contact with no phone number — in manual task-handling mode the contact stops on the step; in automatic mode they skip forward
- Fit more than 160 characters in a single SMS — longer texts are split into multiple messages
- Add more than one Zapier step per sequence
- Check LinkedIn connection or InMail status conditions with less than a 2-hour step delay — the system needs that time to detect the status
- Place calls without the Cloud Calls feature enabled, a funded wallet, and a rented number
## Required inputs
A sequence with the steps you need; per channel: a connected
[email account](/specifications/email-accounts), a connected LinkedIn account, a rented
phone number with Cloud Calls enabled, or phone numbers on contacts for SMS and WhatsApp.
For Zapier steps, a configured Zap on the Zapier side.
## Produced outputs
Executed touches and created tasks per channel, call recordings and logged resolutions,
SMS and WhatsApp threads, branch routing decisions, and per-channel statistics — touches,
replies, meetings booked — in sequence stats and the Channel Efficiency dashboard.
## Use Reply when
- Your buyers answer on different channels and you want one timeline, one contact state, and one report — see [Run multichannel outreach](/workflows/run-multichannel-outreach)
- You want behavior-driven routing: different follow-ups for connected vs not-connected, valid vs invalid email, opened vs silent
- Reps make calls and need tasks, dialing, recording, and resolutions inside the same tool
## Do not use Reply when
- You only ever send email — [email outreach](/capabilities/email-outreach) alone is simpler to operate
- You need fully automated WhatsApp or a contact-center phone system — Reply's WhatsApp is task-based and Cloud Calls is built for outreach calls, not inbound queues
## What you still need to build
- The channel strategy — which sequence of touches fits your market; Reply executes the plan you design
- Zapier-side configuration for any external automation a Zapier step triggers
```yaml
capability: multichannel_outreach
supported: true
interfaces:
product_ui: live
api: live
mcp: live
cli: not-verified
required_objects:
- contact
- sequence
- email_account
- linkedin_account
side_effects:
- sends_messages
- executes_linkedin_actions
- creates_tasks
- updates_statistics
human_approval_recommended: true
```
## Limits
- One SMS carries 160 characters; longer texts send as multiple messages
- Conditions on LinkedIn connection status or InMail status require a step delay of at least 2 hours
- One Zapier step per sequence
- A last-step call or task marks the contact Finished after a set number of days (5 by default)
- Per-channel caps still apply — email daily limits and LinkedIn safety limits; see [Limits](/reference/limits)
## FAQ
### How do manual steps move contacts forward?
In manual mode the contact waits until you finish the task. In automatic mode the contact
moves on after the step delay even if the task was not completed. WhatsApp tasks move the
contact as soon as the task is sent or completed. See
[Sequence execution](/behavior/sequence-execution).
### Can the sequence react to what a contact does?
Yes — condition steps branch into Yes/No paths on behavior (opens, clicks, replies),
channel state (LinkedIn connection status, InMail accepted or rejected, email validation),
and data (phone type, company size, ICP score, custom fields). Contacts route
automatically when they reach the condition.
### What happens to replies on non-email channels?
SMS replies sync into the contact's activity log and the SMS Inbox; LinkedIn replies land
in the [Inbox](/specifications/inbox) alongside email threads. Reply detection and
stopping rules are described in [Reply detection](/behavior/reply-detection).
### Which channel performs best?
That is what the Channel Efficiency dashboard answers: replies and meetings booked per
channel, as counts and rates, over any date range — with drill-downs by team member and
sequence. See [Analyze campaign performance](/workflows/analyze-campaign-performance).
## Related
- [Run multichannel outreach](/workflows/run-multichannel-outreach) — the full workflow
- [Sequence steps](/specifications/sequence-steps) — every step type in detail
- [Sequence execution](/behavior/sequence-execution)
- [Email outreach](/capabilities/email-outreach) · [LinkedIn outreach](/capabilities/linkedin-outreach)
- [Campaign analytics](/capabilities/campaign-analytics)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequences, steps, and calls endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — sequence, task, and call-settings operations
---
# Calls and SMS
> Reply places Cloud Calls through rented local numbers with recording, resolutions, and inbound transfer, and sends sequence SMS with pre-send phone validation and a dedicated SMS Inbox.
**Reply makes and receives calls through rented Cloud Calls numbers and sends SMS as automated or manual sequence steps. It records calls with consent handling, logs call resolutions, transfers inbound calls to your real phone, triggers calls on email opens, validates phone numbers before automated SMS, and collects SMS replies in a dedicated inbox.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Cloud Calls from the app or Chrome extension, rented local numbers, call recording with consent handling, call resolutions, inbound call transfer, automatic calls on email opens, automated and manual SMS steps, phone-number validation, and an SMS Inbox |
| **Required objects** | A contact with a valid phone number; a sequence for call and SMS steps; a rented phone number |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Up to 10 rented phone numbers by default (support can raise it); a single SMS is 160 characters — longer texts split into multiple messages |
| **Stops on** | A successful call longer than 6 seconds pauses further automated emails when Pause on successful call is on; landline or invalid phone numbers stop a contact on the automated SMS step with the Missing data status |
| **Does not** | Call from your own line (Custom Caller ID only masks the rented number, US and Canada); answer inbound calls with a live operator; send automated SMS to landline or invalid numbers; insert SMS opt-out language for you; text US numbers without A2P 10DLC registration |
| **Plans** | Requires the Cloud Calls feature enabled for the account and a funded wallet — number rental, calls, SMS, and phone validation are billed from the wallet |
## Summary
Reply runs the phone channel inside the same [sequences](/specifications/sequences) that
send email and LinkedIn touches. Cloud Calls places calls from the contact sidebar, the
People tab of a sequence, the Chrome extension, or a dialer, through phone numbers rented
in Reply. Calls are recorded with consent-aware rules, logged with resolutions that map to
contact statuses, and reported with dispositions. SMS runs as an automated step (template,
validated numbers only) or a manual task, and every SMS reply lands in the SMS Inbox and
the contact's activity. How the channels combine is covered in
[Multichannel outreach](/capabilities/multichannel-outreach).
## Problems it solves
- Phone touches living outside the outreach system — call steps, tasks, notes, recordings, and outcomes stay on the same contact record as email and LinkedIn activity
- Out-of-area caller IDs depressing answer rates — Reply matches the contact's area code against your rented numbers and calls from the local one when it can
- Recording compliance left to each rep — Consent recording adjusts to the called contact's local consent laws automatically
- Automated SMS wasted on numbers that cannot receive it — pre-send validation filters out invalid and landline numbers
- Inbound interest lost after an outbound call — inbound transfer rings your real phone, and missed inbound calls surface in reports with a call-back path
## What Reply can do
- Call contacts from the contact sidebar on the People page, the People tab inside a sequence, the Chrome extension, or the dialer, with in-call notes and mute; notes save to the contact's activity automatically
- Rent up to 10 phone numbers from different areas, set one as default, and share all of them with the whole team; when a contact's area code matches a rented number, the call uses that number, otherwise the default
- Route callbacks to the right person — when a contact returns a call, Reply matches the user ID from the original call
- Record calls with team-level controls: who can listen (team owner or everyone), who can turn recording on (always record or everyone), and a Consent recording option that records both sides in one-party consent states but only the Reply user's side in two-party consent states
- Log every call with a resolution — the defaults Positive, Negative, and To Call, plus custom resolutions mapped to a default value and shared across the team; Positive and Negative set the contact status Called, To Call sets To Call
- Transfer inbound calls from a rented number to your real phone, and report inbound missed calls on the Reports Calls tab with dispositions (Answered, Busy, Logged Manually, Failed, No Answer) and an in-report call-back action
- Trigger an automatic call after a contact opens an email a set number of times (minimum 3, recommended 4–7); Reply connects with you first, announces the sequence and contact name, and lets you accept or decline — calls fire only within the sequence schedule
- Pause a contact's automated emails after a successful call longer than 6 seconds with the Pause on successful call setting
- Run Call steps as tasks with manual or automatic handling — manual holds the contact until you finish the task; automatic moves the contact on after the step delay
- Send automated SMS from a template step, or generate manual SMS tasks completed from the Chrome extension
- Validate phone numbers by lookup before every automated SMS — only valid, mobile-type numbers receive automated SMS; each number is validated once, stored, and revalidated when edited
- Collect SMS conversations in the SMS Inbox with threads, Notification Center alerts, and activity-log sync, and surface contacts waiting for a call with the Calls quick filter and resolution-based smart filters
## What Reply cannot do
- Place calls from your own phone line — all calls go through rented numbers; Custom Caller ID can display your real number instead, for US and Canadian numbers only
- Show the prospect's phone number on an inbound call when inbound transfer is enabled
- Answer inbound calls with a live operator — without transfer, inbound calls log as missed with the No Answer disposition
- Send automated SMS to landline or invalid numbers — the contact stops with the Missing data status instead
- Validate Canadian phone numbers — Canadian law prevents lookup access, so delivery to Canadian numbers is not guaranteed
- Keep texting unregistered US numbers — since August 31, 2023, US carriers block A2P SMS from unregistered senders at increasing rates up to a complete block
- Insert SMS opt-out language automatically — you add opt-out wording to the message text yourself
- Edit or delete the default call resolutions — only custom resolutions can be changed
- Rent a number or place a call on an empty wallet — a minimum wallet balance is required
## Required inputs
Cloud Calls enabled for the account (with identity verification), a funded wallet, a
rented phone number, and contacts with phone numbers — E.164 format is recommended, and
the phone field accepts only digits with `+`, parentheses, and dashes. US SMS additionally
requires an approved A2P 10DLC registration: a registered business with a Tax ID/EIN, a
publicly verifiable representative, and a documented opt-in mechanism.
## Produced outputs
Call recordings and notes on the contact's activity, call resolutions and dispositions in
the Reports Calls tab, contact status updates (Called, To Call, Missing data), tasks for
manual call and SMS steps, and SMS threads in the SMS Inbox.
## Use Reply when
- Calls and SMS should run inside the same sequence as email and LinkedIn, sharing the schedule, contact state, and reporting — see [Run multichannel outreach](/workflows/run-multichannel-outreach)
- Call outcomes need to drive what happens next — resolutions set contact statuses that filters and reports read
- Local presence matters: rented numbers across regions with automatic area-code matching
## Do not use Reply when
- You need call-center machinery — live operators, IVR menus, or queueing; Reply's inbound story is transfer-to-your-phone plus missed-call reporting
- Your SMS program is bulk broadcast messaging to opted-in marketing lists — sequence SMS is one-to-one outreach tied to a contact record
## What you still need to build
- The A2P 10DLC registration package for US SMS — business profile, brand, campaign description, two sample messages, and a verifiable opt-in flow; each step is reviewed by the messaging provider
- Opt-out wording in your SMS templates — STOP, UNSUBSCRIBE, END, QUIT, and HALT trigger opt-outs, and an opt-out blocks texts to that specific number only
- Network readiness for VoIP — wired connections, open outbound ports, and QoS prioritization at your office or for remote reps
```yaml
capability: calls_and_sms
supported: true
interfaces:
product_ui: live
api: live
mcp: live
cli: not-verified
required_objects:
- contact
- sequence
- phone_number
side_effects:
- places_outbound_calls
- sends_sms_messages
- charges_wallet
human_approval_recommended: false
```
## Limits
- Rented phone numbers: up to 10 by default; contact support to raise the limit
- Self-service number rental covers US and Canadian numbers; other countries go through support
- Custom Caller ID: US and Canadian phone numbers only
- Single SMS: 160 characters; a 200–300 character text sends as multiple messages
- Automatic calls on opens: minimum trigger is 3 opens; 4–7 recommended
- Phone-number validation covers all countries except Canada; each number is validated once until edited
- Call step as the last step: the contact gets the Finished status after a set number of days (5 by default)
- Phone field characters: `+`, parentheses, and dashes only; E.164 numbers run up to 15 digits after the plus sign
- Dialer network: outbound TCP 80 and 443, UDP 10,000–20,000, with the provider's domains and IPs allowed
## FAQ
### Can I call prospects from my real phone number?
Not directly — calls always go out through a rented number. Custom Caller ID masks the
rented number with your real one on the contact's screen, for US and Canadian numbers.
Inbound is the mirror image: transfer forwards calls to a rented number through to your
real phone.
### Why did an automated SMS not go out to a contact?
Most often validation: lookup classified the number as landline or invalid, so Reply set
the contact to Missing data instead of sending — see [Statuses](/reference/statuses). If
the number is fine, check A2P registration for US recipients and the message-length split.
If lookup itself is unavailable, Reply sends the SMS without validation.
### What happens when a prospect calls back?
With inbound transfer on, the call to your rented number rings your real phone; Reply
matches the original caller's user ID, so callbacks reach the person who made the first
call. Missed inbound calls appear on the Reports Calls tab, filtered by Inbound, where you
can call the prospect back.
### Who controls call recording and who can hear recordings?
The team owner. Recording setup is owner-only: the recording toggle, Consent recording,
who can listen (team owner or everyone), and who can turn recording on (always record or
everyone). Recordings play from the contact sidebar's activity. With Consent recording
off, all calls record by default regardless of local consent laws — a compliance risk the
setting exists to remove.
## Related
- [Multichannel outreach](/capabilities/multichannel-outreach) — where calls and SMS fit among channels
- [Run multichannel outreach](/workflows/run-multichannel-outreach) — building the combined sequence
- [Sequence steps](/specifications/sequence-steps) — call and SMS step mechanics
- [Tasks](/specifications/tasks) — how manual call and SMS steps surface
- [Sending schedules](/behavior/sending-schedules) — the windows automatic calls respect
- [Statuses](/reference/statuses) — Called, To Call, and Missing data
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact and sequence operations behind call and SMS steps
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — call resolutions, sequence call handling, and workspace call settings
---
# Reply management
> Reply collects replies into one team Inbox, classifies each thread by AI into intent categories, pauses out-of-office contacts, and drafts or sends responses with Jason AI.
**Yes. Reply gathers replies into one Inbox shared across the team, where AI assigns one category per thread — Interested, Not interested, Do not contact, Not now, Forwarded, plus a Meeting intent subcategory. Out-of-office contacts pause and resume automatically, triggers act on categories, and Jason AI drafts or sends grounded responses.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | One consolidated Inbox for reply threads, AI intent classification per thread, out-of-office handling, category-driven triggers, and AI-drafted or auto-sent responses |
| **Required objects** | A conversation (a contact's reply), the contact, and the originating sequence; a knowledge base for grounded AI answers |
| **Surfaces** | UI · REST API · MCP · CLI |
| **Key limit** | One inbox category per thread (Meeting intent is the only subcategory); AI responds only to the most recent message in a burst |
| **Stops on** | A reply stops or continues follow-ups per sequence settings; the Do not contact category never gets an AI response |
| **Does not** | Detect the return date inside an out-of-office email (uses one fixed resume delay for all); reply to teammates' threads by default; consolidate SMS into the email Inbox (SMS has its own inbox) |
| **Plans** | All plans; AI reply features are part of Jason AI |
## Summary
Every reply lands in the consolidated [Inbox](/specifications/inbox) — one place for all
threads from all sequences and team members. AI classifies each thread's tone into an
intent category, out-of-office answers pause the contact automatically, triggers automate
what happens next per category, and Jason AI can draft or send the response itself,
grounded in your [knowledge base](/specifications/knowledge-bases) and reply handlers.
## Problems it solves
- Replies scattered across mailboxes and sequence tabs — one Inbox for the whole team
- Finding the signal: interested and meeting-ready threads surfaced by classification, not by reading everything
- Out-of-office noise pausing and resuming contacts by hand
- Response speed: AI drafts waiting in the thread when you open it, or sent automatically for routine questions
## What Reply can do
- Consolidate reply threads from all sequences and team members into one Inbox, with unread counters, search, filters by sequence, sending email, category, time, and team member, and bulk read/unread and categorization actions
- Classify replies automatically by tone into inbox categories — Interested, Not interested, Do not contact, Not now, Forwarded — plus the Meeting intent subcategory; classification covers email, LinkedIn, and LinkedIn voice message replies
- Support custom categories and manual assign, reassign, or clear per thread or in bulk
- Assign the Out-of-office status automatically and resume those contacts after a set number of days (on by default), or let you resume them manually
- Fire triggers when a category is set — move the contact to another sequence or list, pause them, and other follow-on actions
- Generate AI replies with Jason AI: categorize, draft from the reply, prior conversation, and your context, then save as an AI Draft for review or send automatically — with a Mixed mode that routes each question type per its reply handler
- Define reply handlers per common question with delivery mode Auto, Draft, or Stop and notify, plus instructions, sample answer, tone of voice, response length, resource links, and media
- Book meetings on Meeting intent replies — check availability via a connected meeting tool or booking link, book the slot, or propose the next available time
- Let you edit, regenerate, re-instruct, re-tone, or translate an AI draft before sending, and rate drafts to improve future output
- Speed up manual replies with canned responses inserted from the note icon, a "/" shortcut, or a keyboard shortcut
## What Reply cannot do
- Assign more than one category per thread — Meeting intent is the only subcategory that stacks with a category
- Read the return date in an out-of-office email — the automatic resume uses one fixed day count for every contact
- Generate an AI response for threads categorized Do not contact
- Answer every message in a burst — when a prospect sends several replies, only the most recent gets a generated response, and a newer reply discards the previous draft
- Reply to a teammate's thread by default — replying on behalf of teammates is enabled by support on request
- Show SMS threads in the email Inbox — SMS replies live in the dedicated SMS inbox and the contact activity log
## Required inputs
Running outreach that produces replies; for AI responses: the Handle replies toggle (on by
default), optionally a knowledge base, reply handlers, and a meeting tool or booking link;
for automation: triggers configured per category.
## Produced outputs
Categorized threads, updated contact statuses (Replied, Out-of-office, Opted Out — see
[Status transitions](/behavior/status-transitions)), trigger-driven contact moves, AI
drafts or sent responses, booked meetings, and reply statistics feeding
[campaign analytics](/capabilities/campaign-analytics).
## Use Reply when
- The team shares reply duty and needs one queue with intent labels instead of per-rep mailboxes
- You want routine answers handled automatically and judgment calls held for review — delivery mode is set per question type
- Meeting-ready replies should turn into booked meetings without a scheduling ping-pong
## Do not use Reply when
- You need a full customer-support helpdesk with SLAs, ticket assignment, and CSAT — the Inbox is built for outreach conversations
- Your replies arrive in channels Reply does not track — see [Reply detection](/behavior/reply-detection) for what is detected where
## What you still need to build
- The knowledge base content and reply handler instructions that make AI answers accurate — see [Process positive replies](/workflows/process-positive-replies)
- Your escalation rules: which categories a human always reads, which handlers may auto-send
```yaml
capability: reply_management
supported: true
interfaces:
product_ui: live
api: live
mcp: live
cli: live
required_objects:
- conversation
- contact
- sequence
side_effects:
- updates_contact_statuses
- stops_outreach
- sends_replies_when_configured
human_approval_recommended: true
```
## Limits
- One inbox category per thread, plus the Meeting intent subcategory
- Inbox pages hold up to 50 threads; use filters and search for volume
- LinkedIn replies from the Inbox are limited to 8,000 symbols
- The out-of-office resume delay is one account-wide number of days — not per contact
- AI drafts regenerate on new inbound replies; the older draft is discarded
## FAQ
### Which categories exist and who assigns them?
Interested, Not interested, Do not contact, Not now, and Forwarded, with Meeting intent as
a subcategory (for example Interested + Meeting intent). Reply's AI assigns them from the
tone of the reply; you can reassign manually, in bulk, or add custom categories. See
[Reply classification](/learn/reply-classification).
### Does a reply stop the sequence?
That is a per-sequence setting: mark the contact as finished, or continue the remaining
follow-ups. Replies to direct emails set Replied without stopping the sequence. Details in
[Reply detection](/behavior/reply-detection) and [Sequence stopping](/behavior/sequence-stopping).
### When does Jason AI send without a human?
Only when you choose it: Send automatically applies to the whole sequence, and Mixed mode
follows each reply handler's delivery mode — Auto sends immediately, Draft waits for
review, Stop and notify pauses the contact and alerts the assigned rep instead of
answering. Do not contact threads never get an AI response.
### How are out-of-office replies handled?
Reply detects the auto-reply, sets the Out-of-office status, and pauses the contact. With
automatic handling on (the default), contacts resume after the number of days you set —
the same delay for everyone, since the date inside the email is not parsed. When the
contact later replies for real, sequence reply settings take over.
## Related
- [Process positive replies](/workflows/process-positive-replies) — the full workflow
- [Inbox](/specifications/inbox) · [Conversations](/specifications/conversations) · [Knowledge bases](/specifications/knowledge-bases)
- [Reply detection](/behavior/reply-detection) · [Status transitions](/behavior/status-transitions)
- [Reply classification](/learn/reply-classification)
- [AI SDR](/capabilities/ai-sdr)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — inbox, conversations, and reply-handler endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — inbox reading, categorization, and reply operations
---
# Campaign analytics
> Reply reports per-sequence, per-step, and per-variant metrics plus dashboards for emails, LinkedIn, calls, channel efficiency, team performance, and agencies, with CSV export and period comparison.
**Yes. Reply reports delivery, open, reply, interested, meeting, opt-out, and bounce metrics per sequence with per-step and per-variant breakdowns, plus dashboards for emails, LinkedIn, calls, channel efficiency, team performance, and agencies. Trends compares periods, and stats export as contact-based or sequence-based CSV — also via the REST API.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Sequence Stats tab plus Reports dashboards — Emails, LinkedIn, Calls, Channel Efficiency, Team Performance, Agency — with filters, charts, breakdowns, exports, and period comparison |
| **Required objects** | A sequence with activity; team and agency dashboards need Team Edition or agency setup |
| **Surfaces** | UI · REST API · MCP · CLI |
| **Key limit** | Key metrics are prospect-level — multiple emails to one contact count once |
| **Stops on** | Nothing — reporting is read-only |
| **Does not** | Modify contacts or sequences; count LinkedIn acceptance and reply rates for manual steps; show meetings booked outside email in sequence-level reports |
| **Plans** | All plans; Owners filter needs Team Edition; Agency dashboard is for agency accounts |
## Summary
Every [sequence](/specifications/sequences) has a Stats tab with prospect-level key metrics
(Total people, Contacted, Delivery rate, Open rate, Reply rate, Interested, Meetings
booked, Opt-outs, Bounce rate, Not reached), a performance chart, and per-step Brief and
Detailed views with an A/B variant toggle. The Reports section adds account-wide
dashboards — Emails, LinkedIn, Calls, Channel Efficiency, Team Performance, and Agency —
with filters, Trends period comparison, and CSV export. The formulas behind each rate are
documented in [Statistics calculation](/behavior/statistics-calculation).
## Problems it solves
- One consistent definition of open, reply, and bounce rates across sequences, dashboards, and exports
- Copy decisions backed by per-step and per-variant numbers rather than gut feel
- Channel and team comparisons — where replies and meetings really come from
- Client reporting for agencies, with KPIs and per-team breakdowns
## What Reply can do
- Report per-sequence key metrics — Total people, Contacted, Total accounts, Delivery rate, Open rate, Reply rate, Interested, Meetings booked, Opt-outs rate, Bounce rate, and Not reached (Out of Office + Bounced + Auto replied, with a hover breakdown)
- Break metrics down per step in Brief or Detailed view, per A/B variant via a toggle, and over time in a chart of deliveries, opens, replies, interested, and meetings booked (opt-outs and bounces revealed on demand)
- Count reply rate across channels — distinct contacts who replied by email, LinkedIn message or InMail, or a connection request with a note
- Filter dashboards by email account, domain, sequence (including direct emails outside sequences), owner, time range, and smart filters
- Track LinkedIn touches — connections, messages including voice and AI voice, InMails, profile views, likes, endorsements, follows — with acceptance and reply conversion rates for automated steps
- Analyze calls: totals and average connected duration, per-team-member tables, resolution and disposition pies, and an answered-calls heat map by weekday and hour
- Compare channels in the Channel Efficiency dashboard — touches, replies, and meetings booked across automatic and manual email, calls, LinkedIn, SMS, and WhatsApp
- Measure team performance: booked meetings, contacts sequenced, meeting conversion, auto and manual touches per contact, average response time, and reply sentiment per member
- Attribute booked meetings to their source channel (Email, SMS, Call, WhatsApp, LinkedIn) in Team Performance reports
- Serve agencies a dedicated dashboard with KPI charts and lists, user and team performance, email account and LinkedIn tabs, and task counts
- Compare periods with Trends — previous period by weekdays, by calendar, or a custom range — showing percentage change per metric, with reversed coloring for bounce, opt-out, and not-reached
- Export contact-based or sequence-based CSV reports, LinkedIn exports with job title and company, and call exports
## What Reply cannot do
- Count one contact several times in key metrics — they are prospect-level by design, so step-level sends do not inflate rates
- Track LinkedIn connection acceptance or reply rates for manual steps — those rates cover automated steps only
- Show meetings booked through channels other than email inside sequence-level reports — cross-channel meeting attribution lives in Team Performance
- Count a LinkedIn connection request without a note as "contacted" in reply rate
- Recalculate past periods when a deleted contact changes counters — some counters shift when contacts are deleted, and team-member deletion does not change team reports
## Required inputs
Running sequences generating events. For team dashboards: Team Edition with owners
assigned. For meeting stats: booking links sent through Reply. For Trends: a selected
current range and a comparison mode.
## Produced outputs
Live dashboards, per-step and per-variant tables, hover breakdowns, percentage-change
comparisons, and downloadable CSVs (contact-based and sequence-based, LinkedIn, calls)
delivered through the notification center.
## Use Reply when
- You want execution and measurement in one system, with the same counters everywhere — see [Analyze campaign performance](/workflows/analyze-campaign-performance)
- A/B decisions need variant-level evidence per step
- Managers need team, channel, and meeting attribution without building a BI pipeline
## Do not use Reply when
- You need revenue attribution across your whole funnel — export the CSVs or pull the [REST API](https://docs.reply.io/api-reference/introduction) into your warehouse and model it there
- You need custom metric definitions — Reply's formulas are fixed; see [Calculations](/reference/calculations)
## What you still need to build
- Benchmarks and targets — Reply reports the numbers; you decide what good looks like
- Any BI joins with CRM revenue data, via CSV export or the API
```yaml
capability: campaign_analytics
supported: true
interfaces:
product_ui: live
api: live
mcp: live
cli: live
required_objects:
- sequence
side_effects: []
human_approval_recommended: false
```
## Limits
- Sequence Stats default to the last 7 days — switch the time filter for all-time or custom ranges
- Key metrics count each contact once regardless of how many steps they received
- LinkedIn acceptance and reply conversion rates cover automated steps only
- Reply-rate history can shift over time as replies arrive and statuses change
- Formula reference: [Statistics calculation](/behavior/statistics-calculation) and [Calculations](/reference/calculations)
## FAQ
### How are the rates actually calculated?
Each rate has a fixed formula — for example Reply rate = replied contacts × 100 ÷
contacted contacts, and Bounce rate = bounced emails × 100 ÷ total people. Contacted
excludes Out of Office, Bounced, and Auto replied contacts. The full formula set with
denominators is in [Statistics calculation](/behavior/statistics-calculation).
### Why is my sequence's meetings number lower than Team Performance?
Sequence-level reports count only meetings booked through emails. Team Performance tracks
booked meetings per source channel — Email, SMS, Call, WhatsApp, and LinkedIn — so its
totals can be higher.
### Can I compare this month to last month?
Yes — enable Trends in the Emails report filters and pick a comparison mode: previous
period aligned by weekdays, previous calendar period, or a custom range. Each metric shows
its percentage change, and for bounce rate, opt-out rate, and not-reached a decrease is
treated as the positive direction.
### What export formats exist?
Contact-based CSV (one row per contact with engagement fields and custom fields) and
sequence-based CSV (one row per sequence and owner and email account with counts and
rates), plus LinkedIn and calls exports. Files arrive via the notification center. For
programmatic access, use the [REST API](https://docs.reply.io/api-reference/introduction).
## Related
- [Analyze campaign performance](/workflows/analyze-campaign-performance) — the full workflow
- [Statistics calculation](/behavior/statistics-calculation) — every formula
- [Sequences](/specifications/sequences)
- [Calculations](/reference/calculations)
- [Troubleshooting: statistics do not match](/troubleshooting/statistics-do-not-match)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — statistics endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — sequence stats and performance comparison operations
---
# Deliverability
> Reply layers MailToaster warm-up, default-on ramp-up, a weekly domain Health Checker, Postmaster spam monitoring, custom tracking domains, and AI template scoring around every send.
**Reply protects sending in layers: MailToaster warm-up with configurable profiles, ramp-up mode on by default for new email accounts (10 per day rising by 3 to 100), a weekly domain Health Checker for SPF, DKIM, DMARC, MX, and rDNS, Google Postmaster spam-rate monitoring, custom tracking domains, AI template scoring, and bounce thresholds that stop a step.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Warm-up (MailToaster), ramp-up, domain health checks, spam-rate monitoring, custom tracking domains, tracking controls, AI template scoring, and safe sending defaults |
| **Required objects** | A connected email account; DNS access for domain fixes and custom tracking links |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Ramp-up default: start at 10 emails per day, +3 daily, up to 100; warm-up seats follow your MailToaster plan |
| **Stops on** | 8% bounce rate stops the sending step until the next day (after 200 sends) — see [Bounce handling](/behavior/bounce-handling) |
| **Does not** | Guarantee inbox placement; edit your DNS for you; rescue a burned domain quickly; monitor spam rates without a connected Postmaster account |
| **Plans** | MailToaster warm-up is available with a paid Reply subscription — one warm-up seat per connected mailbox by default |
## Summary
Reply treats deliverability as infrastructure around every [email account](/specifications/email-accounts):
MailToaster warm-up simulates positive email exchanges, ramp-up mode grows real sending
volume gradually (on by default for new accounts), the Health Checker verifies the
domain's SPF, DKIM, DMARC, MX, A, rDNS, and domain age weekly, the Spam Monitor pulls
Google Postmaster spam-rate data, custom tracking links move opens, clicks, and opt-out
URLs to your own domain, and an AI quality check scores every template before it sends.
The background is explained in [Email deliverability](/learn/email-deliverability) and
[Sender reputation](/learn/sender-reputation).
## Problems it solves
- New mailboxes and domains burning out from full-volume cold sending on day one
- Silent DNS misconfiguration — SPF, DKIM, DMARC errors surfaced with fixes instead of quiet spam-foldering
- Compliance with Google's bulk-sender rules: authentication, one-click unsubscribe, spam rate below 0.3%
- Spam-trigger templates and shared tracking domains dragging reputation down
## What Reply can do
- Warm up email accounts through MailToaster — no separate account, single sign-on from Reply, one warm-up seat per connected mailbox, workspace-scoped for teams
- Apply warm-up profiles: New email account, Reputation protect, or a custom profile controlling what share of warm-up emails are opened, rescued from spam, replied to, or marked important
- Grow warm-up volume by a fixed daily increment or a randomized daily range, with optional cleanup of warm-up emails older than 3 days from the Sent folder
- Ramp up real sending automatically — on by default for new email accounts, starting at 10 emails per day and adding 3 per day until 100, stopping with a notification when the account's total limit is reached
- Check domain health weekly on the Domain Setup tab — SPF, DKIM, DMARC, domain age, MX records, A records, and rDNS — with expandable errors and fix guidance
- Monitor Gmail spam-report rates by connecting Google Postmaster Tools to the Spam Monitor tab
- Replace Reply's default tracking domains with your own subdomains for opens, clicks, and opt-out links, matched to a sending domain, selected accounts, or all accounts
- Disable open tracking in bulk across every sequence with one account-level toggle, with per-sequence overrides
- Score email templates as you type on subject length, word count, question count, reading level, positivity, and spam-word count, with an overall response-likelihood recommendation
- Space sends with randomized delays (default 300–450 seconds between emails on new accounts) and stop a sending step when the bounce rate crosses 8%
## What Reply cannot do
- Guarantee inbox placement — a 10/10 deliverability score does not promise inbox delivery
- Edit DNS records for you — SPF, DKIM, DMARC, MX, and custom tracking CNAME/TXT records are set at your domain host
- Skip the calendar: a new domain still needs roughly 2–3 weeks of warm correspondence before cold outreach (1–2 weeks for a new mailbox on an established domain)
- Monitor spam rates without a Google Postmaster account connected for the domain
- Analyze template text beyond 1,000 characters in the quality check
- Warm up more mailboxes than your MailToaster seats allow — adding a mailbox with no free seat fails with a seat-count error
## Required inputs
A connected email account; access to the domain's DNS for authentication fixes and custom
tracking subdomains; a Google Postmaster account for spam monitoring; template text for
quality scoring.
## Produced outputs
Warm-up activity and progress per mailbox, a rising daily send ceiling per account, weekly
domain health reports with per-record status, spam-rate dashboards, domain-based tracking
URLs, and template scores with optimal-interval guidance.
## Use Reply when
- You are launching new mailboxes or domains and want warm-up, ramp-up, and monitoring in the same place sending happens — see [Connect a mailbox](/how-to/connect-a-mailbox)
- You need Google bulk-sender compliance visible: authentication status, unsubscribe mechanisms, spam-rate tracking
- Multiple team mailboxes need consistent safety settings instead of per-rep improvisation
## Do not use Reply when
- You send transactional or newsletter volume — that calls for an ESP with dedicated IPs, not outreach-grade limits
- A domain is already blocklisted and you need immediate recovery — reputation rebuilds over weeks; consider fresh sending domains while the damaged one rests
## What you still need to build
- The DNS changes themselves — Reply diagnoses and instructs; your domain host applies; see [SPF, DKIM, DMARC](/learn/spf-dkim-dmarc)
- List hygiene policy — validation and targeting quality remain your call; see [Data enrichment](/capabilities/data-enrichment)
```yaml
capability: deliverability
supported: true
interfaces:
product_ui: live
api: live
mcp: live
cli: not-verified
required_objects:
- email_account
side_effects:
- sends_warmup_traffic
- adjusts_sending_volume
human_approval_recommended: false
```
## Limits
- Ramp-up default: 10 emails per day at the start, +3 per day, up to 100; configurable per account
- Default delay between emails on a new account: randomized 300–450 seconds
- Bounce thresholds: warning at 4%, step stop at 8% after 200 daily sends — see [Bounce handling](/behavior/bounce-handling)
- Google bulk-sender bar: spam rate below 0.3%, authentication required for high-volume senders, unsubscribe requests honored within two days
- One SPF record per domain, maximum 10 DNS lookups; quality check reads up to 1,000 characters
- Account daily ceilings: 400 per day on paid plans — see [Limits](/reference/limits)
## FAQ
### What is the difference between warm-up and ramp-up?
Warm-up (via MailToaster) builds reputation with simulated positive exchanges — opens,
replies, spam-folder rescues — outside your real sequences. Ramp-up runs inside Reply and
gradually raises the real daily sending cap. Best practice: warm up first, keep warm-up
running, and let ramp-up grow live volume — see [Email warm-up](/learn/email-warm-up).
### What does the Health Checker verify?
SPF, DKIM, DMARC, domain age, MX records, A records, and rDNS, refreshed weekly with
notifications on problems. Each failed check expands into an explanation and a fix path —
the records themselves are edited at your domain host. Background:
[SPF, DKIM, DMARC](/learn/spf-dkim-dmarc).
### Why use custom tracking links?
By default, tracking URLs use Reply's shared domains. Custom tracking links serve opens,
clicks, and opt-out URLs from subdomains of your own domain (for example
opens.yourdomain.com), tying tracking reputation to your domain instead of a shared one.
Setup needs one CNAME and one TXT record per link.
### Does disabling tracking help deliverability?
Removing tracking simplifies the email. Plain-text sending mode (default for new
sequences) strips HTML, tracking, and images entirely, and the bulk toggle disables open
tracking account-wide. You trade open-rate data for cleaner emails — see
[Email outreach](/capabilities/email-outreach).
## Related
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign) — where these safeguards apply
- [Bounce handling](/behavior/bounce-handling) · [Sending schedules](/behavior/sending-schedules)
- [Email accounts](/specifications/email-accounts)
- [Email deliverability](/learn/email-deliverability) · [Email warm-up](/learn/email-warm-up) · [Sender reputation](/learn/sender-reputation)
- [Configure sending limits](/how-to/configure-sending-limits)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email-account and warm-up endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — warm-up status, safety settings, and account health operations
---
# AI SDR
> Jason AI generates offers and sequences from your website, sources contacts daily from ICP filters and intent signals, personalizes per prospect, handles replies, and books meetings.
**Given your website, Jason AI generates offers, a multichannel sequence, and per-contact personalized messages, sources contacts continuously — up to 500 per day per sequence, 3 per company, filtered by ICP fit — handles replies from a knowledge base, re-engages silent leads, and books meetings, in approval mode or full autopilot.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Generates offers and sequences from your website, sources contacts daily from ICP filters and buying-intent signals, personalizes every message, answers replies, re-engages, books meetings |
| **Required objects** | An offer (generated from your website, files, or text); a sequence; a knowledge base for reply handling |
| **Surfaces** | UI · REST API (partial) · MCP |
| **Key limit** | Autopilot sourcing: up to 500 contacts per day per sequence (default 10), 3 contacts per company |
| **Stops on** | Approval mode holds every message until a human approves; deleting a pending message removes the prospect from the sequence |
| **Does not** | Know your business without inputs; send unapproved messages in approval mode; answer Do-not-contact threads |
| **Plans** | AI SDR plans; run and contact allowances vary by tier |
## Summary
Jason AI is Reply's AI SDR. Point it at your website (or upload files, or paste text) and
it derives your ICP, pain points, value propositions, proof points, case studies, and CTAs,
packages them into [offers](/specifications/offers), and generates a multichannel
[sequence](/specifications/sequences) shaped by a [playbook](/specifications/playbooks).
It sources its own audience daily from ICP filters and buying-intent signals, writes a
unique message per contact, classifies and answers replies from a
[knowledge base](/specifications/knowledge-bases), re-engages leads that go quiet, and
books meetings — with a human approving each message, or fully automatic. The model is
explained in [The AI SDR model](/learn/ai-sdr-model).
## Problems it solves
- Sequence strategy and copywriting from a standing start — offers, structure, and messages generated, not templated
- Continuous prospecting without manual list refills, with per-source tags on every contact
- Reply handling at speed, grounded in your material, with per-question-type control over automation
- Prioritization: ICP and LinkedIn Activity scores show who fits and which channel to lead with
## What Reply can do
- Generate business context from a website URL, uploaded PDF or text files (up to 100 MB), or pasted text — company description, ICP, pain points, value propositions, proof points, case studies, and CTAs, all editable
- Auto-generate 5 offers per sequence creation — different angles on the same product by ICP and pain points — and update an offer in place or fork it per sequence
- Generate sequences shaped by a playbook (do's and don'ts, per-step instructions, subject-line rules, call scripts), in a chosen language, tone of voice, and message length
- Source contacts continuously via Autopilot — Sales-Navigator-style ICP filters or a pasted Sales Navigator URL — at up to 500 new contacts per day per sequence (default 10), 3 contacts per company
- Add contacts from buying-intent signals: job hiring, technology used, company or department growth, changed jobs in 90 days, LinkedIn post engagers (up to 50 likers plus 50 commenters per post), and competitor followers scanned daily — filtered by ICP fit (default 60%)
- Mix in AI web search, website-visitor tracking, and manual sources (CSV, existing contacts, LinkedIn search), tagging every contact with its source in the activity log
- Write a unique message per contact by rotating your pain points, value propositions, case studies, and CTAs and researching public data — recent news, the contact's LinkedIn activity from the past 3 months, the company page and website — with a template fallback when nothing is found
- Score every contact per sequence: an ICP score with hover explanations and a LinkedIn Activity score (Frequent, Consistent, Occasional), both usable as filters
- Run in approval mode — every generated message waits on the Pending approvals page where you edit, regenerate with a prompt, approve singly or in bulk, or delete — or in automatic mode with no review
- Handle replies from the knowledge base with per-question-type reply handlers (Auto, Draft, or Stop and notify) and re-engage silent leads with timed follow-up cards
- Learn your writing style from likes, dislikes, and edits (AI Learnings) — rules you can view, edit, enable, or add to
- Generate up to 15 ready-to-launch sequence ideas per AI Strategist run — each with its own audience, offer, playbook, and pre-filled Autopilot filters
## What Reply cannot do
- Know your business without inputs — offer, playbook, and knowledge base quality bound output quality
- Send a message in approval mode without human approval — and throughput is bounded by review speed
- Score contacts globally — ICP scores are computed per sequence and offer, so the same contact can score differently in different sequences
- Exceed source caps: 500 contacts per day per sequence, 3 per company, 500 per one-time intent search, 50 likers plus 50 commenters per post
- Generate AI replies for threads categorized Do not contact
- Replace your qualification bar — approval mode and ICP-score filters exist precisely for that
## Required inputs
A website URL, files, or pasted text to generate the offer from; connected sending
accounts (email, LinkedIn) for the generated channels; optionally a playbook, knowledge
base, tone and language settings, and intent-signal configuration.
## Produced outputs
Generated offers, playbooks (via AI Strategist), and sequences; a daily stream of sourced,
scored, source-tagged contacts; personalized sent messages; classified replies with drafts
or automatic answers; re-engagement follow-ups; booked meetings.
## Use Reply when
- You want the whole loop — find, write, send, respond, book — in one system with human approval available at each stage; see [Build an AI SDR](/workflows/build-an-ai-sdr)
- Your team is small and list building is the bottleneck — intent signals and Autopilot keep sequences fed
- You want messaging variation per contact without hand-writing hundreds of emails
## Do not use Reply when
- You are building your own agent orchestration and only need primitives — use the [API, MCP, and CLI](https://agents.reply.io) directly; Jason AI and your agent can share the same workspace
- Your channel mix is dominated by channels Jason does not generate — calls-only or SMS-only motions are better built as regular [multichannel sequences](/capabilities/multichannel-outreach)
## What you still need to build
- The substance of the offer — pain points and proof that are actually true; generation amplifies inputs, it does not invent credibility
- Your qualification and escalation rules: ICP-score thresholds, which reply types stay human, when to loosen approval mode
```yaml
capability: ai_sdr
supported: true
interfaces:
product_ui: live
api: partial
mcp: live
cli: not-verified
required_objects:
- offer
- sequence
side_effects:
- creates_sequences
- sources_contacts
- sends_messages
- sends_replies
human_approval_recommended: true
```
## Limits
- Autopilot: up to 500 new contacts per day per sequence, default 10 per day, 3 contacts per company
- One-time intent searches (hiring intent, technology used, competitor followers): up to 500 contacts per search, re-runnable after launch
- LinkedIn post engagers: up to 50 likers and 50 commenters per post; ICP fit threshold defaults to 60%
- Knowledge base and offer uploads: PDF, DOC, DOCX up to 100 MB per file; links added one at a time
- AI Strategist: up to 15 sequences per run; 30–60 minutes per run; monthly run allowance depends on your AI SDR plan
- Sends inherit all email and LinkedIn limits — see [Limits](/reference/limits) and [Sending schedules](/behavior/sending-schedules)
## FAQ
### Does a human approve messages before they send?
Your choice per sequence. In approval mode every generated message waits on the Pending
approvals page — edit, regenerate with a short prompt, approve one by one or in bulk, or
delete (which removes the prospect from the sequence). In automatic mode Jason sends
without review. Approved messages still respect the sequence's schedule and limits.
### What grounds Jason AI's reply answers?
Your knowledge base (text, documents, links) plus reply handlers — per-question-type
instructions with a delivery mode of Auto, Draft, or Stop and notify. Jason answers the
most recent message in a thread, never Do-not-contact threads, and books meetings on
Meeting-intent replies via your connected calendar or booking link. See
[Reply management](/capabilities/reply-management) and [Reply detection](/behavior/reply-detection).
### How does Jason personalize each message?
It combines your business context — rotating one pain point, value proposition, case
study, and CTA per message — with public contact research: recent news, the contact's
LinkedIn posts and comments from the past 3 months, and the company's page and website.
When no relevant information is found, a default template keeps the sequence moving.
### What are the ICP and LinkedIn Activity scores?
Per-sequence columns in the AI SDR People tab. The ICP score measures fit against the
sequence's offer — the same contact can score differently in different sequences — with
hover explanations. LinkedIn Activity (Frequent, Consistent, Occasional) suggests which
channel to lead with. Both work as filters, for example removing contacts scoring under 60.
## Related
- [Build an AI SDR](/workflows/build-an-ai-sdr) — the full workflow
- [Offers](/specifications/offers) · [Playbooks](/specifications/playbooks) · [Knowledge bases](/specifications/knowledge-bases)
- [The AI SDR model](/learn/ai-sdr-model)
- [Contact enrollment](/behavior/contact-enrollment)
- [Reply management](/capabilities/reply-management) · [Prospect search](/capabilities/prospect-search)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — ai-sdr endpoint group (check operation status)
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — offers, playbooks, knowledge bases, approvals, and sequence generation
- Agent workflows: [agents.reply.io/workflows](https://agents.reply.io/workflows)
---
# Meetings
> Reply books meetings through a personalized Google Calendar booking link with Google Meet or Zoom, or through a connected Calendly account, setting contacts to Meeting Booked and reporting bookings per channel.
**Reply books meetings through a personalized public calendar link backed by Google Calendar, with Google Meet or Zoom as the location, or through a connected Calendly account. Booking sets the contact to Meeting Booked and finishes the sequence, Jason AI can book from reply conversations, and reports track meetings per channel.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | A public booking link built from Google Calendar availability, Google Meet or Zoom locations, a Calendly integration, AI-booked meetings from reply conversations, per-channel meeting reports, and manual meeting logging |
| **Required objects** | A connected Google Calendar or Calendly account; a contact to book with |
| **Surfaces** | UI · MCP |
| **Key limit** | One booking source at a time — Google Calendar or Calendly, not both — and one connected Calendly account per Reply account |
| **Stops on** | A booked meeting: the contact gets the Meeting Booked status and is marked Finished, which stops further sequence steps |
| **Does not** | Book through Calendly team or shared events; run without a connected calendar source; work with a free Calendly plan (paid or active trial required); exclude US holidays unless the holiday toggle is on; guarantee the prospect shows up |
| **Plans** | Works with a connected calendar account; the Calendly side requires a paid Calendly plan or an active trial |
## Summary
Reply closes the outreach loop at the calendar. A personalized booking link — generated
from your Google Calendar availability, with Google Meet or Zoom as the location, or
pulled from a connected Calendly account — goes into sequence emails through the editor.
When a prospect books, both sides get a confirmation email, the contact's status flips to
Meeting Booked, and the [sequence](/specifications/sequences) finishes for that contact so
no further steps fire. With AI reply handling on, meetings are booked directly from the
conversation — see [Reply management](/capabilities/reply-management) — and reports track
booked meetings by the channel that produced them.
## Problems it solves
- The gap between "interested" and "scheduled" — the booking link travels inside the outreach email, pre-filled with the prospect's name, email, and phone
- Sequences that keep touching a prospect after a meeting is already on the calendar — booking sets Meeting Booked and Finished automatically
- Back-and-forth time negotiation — AI reply handling books a proposed time, picks the first available slot from several, or has Jason AI suggest slots when none is given
- Meetings booked outside the system disappearing from stats — a manual Log a meeting booked action records them on the contact
- Not knowing which channel books meetings — per-channel tracking across Email, SMS, Call, WhatsApp, and LinkedIn
## What Reply can do
- Generate a public, personalized meeting link from your Google Calendar availability — set the time zone, meeting title, description, and duration at connection
- Insert the link into sequence emails with the Book meeting link button; meeting links are personalized and tracked for clicks
- Offer Google Meet or Zoom as the meeting location — Zoom connects with a free or Pro account authorized through the Zoom Marketplace
- Shape availability with day-and-hour windows, buffer time between appointments, earliest and latest booking cutoffs, and an optional toggle that excludes US holidays
- Confirm by email to both sides after booking and send a reminder 15 minutes before the call
- Connect one Calendly account and insert Calendly event links — My events and other users' personal events are supported
- Set the contact to Meeting Booked and Finished when a booking event arrives, stopping further sequence steps; on cancellation, remove the status and record the cancellation on the contact's activity
- Create a new contact when an unknown person books through Calendly (with Calendly as the creation source, filterable on the People page) — when the create-if-missing option is enabled
- Book from conversations with AI reply handling: a proposed time is booked and invited directly, multiple proposed times resolve to the first available slot, and a yes-without-a-time gets slot suggestions from Jason AI; reschedules are rebooked against your calendar
- Send follow-ups when a meeting is booked or canceled, manually or automatically
- Report booked meetings by source channel — Email, SMS, Call, WhatsApp, LinkedIn — in the Team performance report, with filters and export
- Log a meeting booked outside any sequence manually from the contact profile, with a No sequence option
- Create a task in Reply when a prospect books a Zoom call
## What Reply cannot do
- Run Google Calendar and Calendly booking at the same time — one meeting booking source per account
- Connect more than one Calendly account
- Use Calendly team or shared events — only My events and other users' personal events
- Work with a free Calendly plan — a paid plan or active trial is required
- Show non-email bookings on the sequence-level Reports page — that view counts only meetings booked within emails; use Team performance for all channels
- Skip US holidays by default — holiday exclusion is off until you enable it
## Required inputs
A connected Google Calendar (with time zone, meeting title, description, and duration
set) or a connected Calendly account; for Zoom locations, a Zoom account authorized and
pre-approved for Reply in the Zoom Marketplace; the prospect's email address, which is how
Reply matches a booking event to a contact.
## Produced outputs
A public personalized booking link, calendar events with confirmation emails and a
15-minute reminder, Meeting Booked status changes that finish the sequence for the
contact, activity-log entries for cancellations, a task per booked Zoom call, and
per-channel meeting counts in Team performance reports.
## Use Reply when
- Booking should close the loop inside outreach — link in the email, status change on booking, sequence stops itself
- You already schedule through Calendly and want bookings reflected on Reply contacts and stats
- An AI handles replies and should book meetings without a human in the thread — see [AI SDR](/capabilities/ai-sdr)
## Do not use Reply when
- You need Calendly team routing — round-robin or shared events are not supported through the integration
- The meetings are internal calendar coordination rather than prospect-facing booking
## What you still need to build
- No-show and follow-through policy — Reply records the booking and cancellation; what happens after a missed meeting is your process
- The CRM handoff for booked meetings — see [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm)
```yaml
capability: meetings
supported: true
interfaces:
product_ui: live
api: not-verified
mcp: live
cli: not-verified
required_objects:
- contact
- calendar_account
side_effects:
- books_calendar_events
- changes_contact_status
- creates_contacts
human_approval_recommended: false
```
## Limits
- One meeting booking source at a time: Google Calendar or Calendly
- One Calendly account per Reply account
- Calendly connection requires a paid Calendly plan or an active trial
- Calendly team and shared events are not supported
- US holidays are included in availability by default; a toggle excludes them
- The reminder email goes out 15 minutes before the call
- Sequence-level reports count only meetings booked within emails; the Team performance report covers Email, SMS, Call, WhatsApp, and LinkedIn
## FAQ
### Can I use Google Calendar and Calendly together?
No. Reply supports one meeting booking source at a time — either the Google
Calendar-backed Reply link or Calendly. You can switch sources, and you can reconnect or
disconnect Calendly at any time.
### What happens in the sequence when a prospect books?
Reply identifies the prospect by email, assigns the Meeting Booked status, and marks the
contact Finished, which stops any further steps. If the meeting is canceled, the Meeting
Booked status is removed and the cancellation is recorded on the contact's activity — see
[Statuses](/reference/statuses) and [Sequence stopping](/behavior/sequence-stopping).
### How are meetings booked outside a sequence counted?
Log them manually: open the contact on the People page, use Log a meeting booked, fill in
the details, and check the No sequence box if the meeting did not come from a sequence.
### Can Jason AI book the meeting for me?
Yes, with AI reply handling enabled. A prospect who proposes a time gets booked and
invited directly; several proposed times resolve to the first available slot on your
calendar; a yes without a time gets slot suggestions; a reschedule request is rebooked
after a calendar check. Booked and canceled meetings can trigger automatic follow-ups.
## Related
- [Process positive replies](/workflows/process-positive-replies) — the step before booking
- [Book meetings from inbound signals](/playbooks/book-meetings-from-inbound-signals) — a play built on this capability
- [Reply management](/capabilities/reply-management) — how AI reply handling classifies and answers
- [AI SDR](/capabilities/ai-sdr) — autonomous booking in context
- [Campaign analytics](/capabilities/campaign-analytics) — where meeting stats live
- [Statuses](/reference/statuses)
## Build with Reply
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — meeting settings, public calendar links, and calendar account management
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — meeting-specific endpoint coverage is not verified on this page; check the reference
---
# CRM and integrations
> Reply syncs two-way with Salesforce, HubSpot, Pipedrive, and Copper, reaches thousands of apps through Zapier, Make, and n8n, serves AI agents over MCP, and emits real-time webhooks.
**Reply syncs contacts, statuses, and activities two-way with Salesforce, HubSpot, Pipedrive, and Copper on a 2–3 hour cycle with field mappings and filters, connects to thousands of apps through Zapier, Make, and n8n, exposes an MCP server so AI agents can operate the account, and emits real-time webhooks for outreach events.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| | |
| --- | --- |
| **What it does** | Native two-way CRM sync (Salesforce, HubSpot, Pipedrive, Copper), workflow platforms (Zapier, Make, n8n), an MCP server for AI agents, real-time webhooks, website visitor tracking, Clay and RB2B lead feeds, and Okta or Microsoft Entra SSO |
| **Required objects** | An account or API key on the other platform; Reply contacts and sequences to sync with |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Automatic CRM sync runs on a 2–3 hour cycle (every 2 hours for Salesforce, HubSpot, and Pipedrive); Sync now forces an immediate pass |
| **Stops on** | The integration's Enabled toggle — off pauses the whole integration; sync errors surface in the Logs tab |
| **Does not** | Sync multi-select picklist fields; update converted Salesforce leads; sync LinkedIn activities to Pipedrive; fire CRM triggers retroactively or for contacts missing on either side; let an MCP agent act on behalf of a whole team |
| **Plans** | Ownership mappings require Team Edition; Website Visitors includes 200 free visitor credits with paid add-ons (included on AI SDR plans); RB2B requires an RB2B Pro account |
## Summary
Reply moves outreach data in and out through four layers: native CRM integrations that
sync people, statuses, and activities both ways on a schedule; workflow platforms (Zapier,
Make, n8n) driven by triggers and actions; a real-time layer of webhooks that push events
to your endpoints; and an MCP server that lets AI agents read and operate the account
directly. Every CRM integration is built from the same parts — sync steps with a
direction, field mappings, filtering rules, and optional push-to-sequence actions — so
[Sync Reply with a CRM](/workflows/sync-reply-with-a-crm) applies to all of them.
## Problems it solves
- Manual re-entry between the CRM and the outreach tool — sync steps carry contacts, statuses, emails, tasks, calls, and notes in both directions
- Outreach activity invisible to sales — emails log as CRM tasks or logged emails, replies and inbox categories map to lead statuses
- CRM leads sitting untouched — filtered CRM segments push straight into a sequence at a chosen step
- Anonymous website interest going cold — Website Visitors identifies visitors, creates contacts, and can enroll new ones into sequences
- AI agents locked out of the execution layer — the MCP server gives a model scoped access to contacts, sequences, inbox, and reporting
## What Reply can do
- Sync Salesforce two-way with Default (preset) or Custom profiles — contacts, leads, people statuses, inbox categories, emails, tasks, calls, notes, and LinkedIn activities mapping to Salesforce tasks and notes
- Sync HubSpot two-way, including Reply emails as HubSpot logged emails, plus BCC-based logging (your HubSpot BCC address) and a Chrome-extension import path
- Sync Pipedrive people every 2 hours over API, with instant webhook-driven triggers — email sent, opened, replied, link clicked, Interested or Negative inbox category, task completed, call logged, note added — firing Pipedrive actions such as recording activity, creating a deal in a pipeline, or moving a deal a stage forward
- Pull Copper leads and people into Reply, picking one primary email in Work → Personal → Other order
- Map fields per sync step (first name, last name, and email are required; leads also map Company to Account), including a CRM company-name field to Reply Account so account records are created and contacts assigned automatically
- Filter what syncs — default filters (Opened, Replied, Bounced, Opted out, To call, Clicked) or saved People-page filters as outbound filters
- Route synced contacts to owners with ownership mappings (Team Edition) and into a sequence at a chosen step, with Ignore step delay and Only for new records options
- Automate through Zapier triggers and actions (including a Zapier step reached mid-sequence), Make modules, and the n8n node, which covers account-health, email, LinkedIn, and sequence events plus contact and sequence actions
- Push real-time webhooks for email, LinkedIn, call, and sequence events — with personal or team scope, optional payload fields, test deliveries, and delivery logs, managed in Settings or over the API
- Serve AI agents over MCP: the endpoint and API key come from the Integrations page, authentication is a bearer API key or OAuth, and agents work with contacts, sequences, inbox, tasks, analytics, and Jason AI configuration at the permission scopes the key grants
- Track website visitors with a header script — matching by email, normalized LinkedIn URL, then name plus company — creating or updating contacts and adding new ones to lists or sequences
- Ingest leads from Clay (create contact, push to sequence) and from RB2B via webhook with automatic field mapping
- Lock organization sign-in to Okta or Microsoft Entra SSO, with automatic user provisioning on first sign-in
## What Reply cannot do
- Sync multi-select picklist fields with Salesforce, HubSpot, or Pipedrive
- Update a converted Salesforce lead — the sync logs an error instead
- Sync more than one lead status into HubSpot — the result depends on status mapping order
- Sync LinkedIn activities to Pipedrive
- Fire CRM triggers for contacts that are not already in both systems, or for events that happened before the trigger was enabled
- Push existing contacts to lists or sequences from Website Visitors — only newly created contacts are added
- Delete a tracked website in Reply before the script is removed from the site
- Let an MCP agent act on behalf of a team or organization — only a personal API key or OAuth as yourself works, and OAuth grants full permissions without scoping
- Undo an SSO tenant lock self-service — Microsoft Entra tenant lock is permanent by design, and with Okta or Entra active, SSO is the only way to log in
## Required inputs
Credentials on the other side — a Salesforce or HubSpot login, a Pipedrive or Copper API
key, a Reply API key for Zapier, Make, n8n, Clay, and MCP connections — plus field
mappings for custom sync steps, a webhook endpoint URL for event delivery, and site access
to install the Website Visitors script. SSO setup goes through Reply support with your
identity-provider parameters.
## Produced outputs
Synced contact and lead records with a direct link to the CRM record on the contact card,
CRM tasks, logged emails, and notes from Reply activity, deals created or advanced in
Pipedrive, webhook deliveries with logs, contacts created from website visits (exportable
with first-tracked timestamps), and a sync Log tab per integration showing what moved.
## Use Reply when
- The CRM must stay the system of record while Reply executes outreach — see [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm)
- You want CRM segments flowing into sequences automatically, filtered and owner-routed
- An AI agent should operate outreach through MCP with scoped permissions — see [Agent index](/start/agent-index)
- You need events (replies, bounces, categorizations, account errors) pushed to your own systems in real time
## Do not use Reply when
- You need CRM-grade pipeline management inside Reply itself — deals, forecasts, and revenue reporting live in the CRM; Reply syncs into them
- You expect instant full-record sync — record sync is cycle-based (2–3 hours); only Pipedrive triggers and webhooks are real-time
## What you still need to build
- The field-mapping and ownership design — which system wins for which field, and who owns synced records; see [Contact deduplication](/behavior/contact-deduplication) for how matching behaves
- Webhook consumers — Reply delivers events; the endpoint that reacts to them is yours
- Sequence-side handling for pushed CRM contacts — enrollment rules still apply; see [Contact enrollment](/behavior/contact-enrollment)
```yaml
capability: integrations
supported: true
interfaces:
product_ui: live
api: live
mcp: live
cli: not-verified
required_objects:
- contact
- sequence
side_effects:
- syncs_crm_records
- creates_contacts
- pushes_contacts_to_sequences
- sends_webhook_events
human_approval_recommended: false
```
## Limits
- Automatic sync: every 2 hours for Salesforce, HubSpot, and Pipedrive; described generally as every 2–3 hours; Sync now runs an immediate pass
- HubSpot → Reply filters: two rules per filter, one rule when a date filter is used; syncs of 10,000+ records run slowly against HubSpot API rate caps
- One sequence per team member per Salesforce sync step
- Multi-select picklists: not supported across Salesforce, HubSpot, and Pipedrive
- Copper: one primary email synced per person (Work → Personal → Other); extra emails map to custom fields
- Website Visitors: 200 free visitor credits by default; add-ons raise the cap; included on AI SDR plans
- RB2B: RB2B Pro accounts and US-based traffic only
- Clay push-to-sequence: only contacts not already active in another sequence, and only into existing sequences
- MCP: personal API key (scopable) or OAuth as yourself; team and organization keys are not supported
- Date filters in sync rules evaluate in UTC±0
## FAQ
### How often does data sync, and can I force it?
Record sync runs automatically every 2–3 hours (the Salesforce, HubSpot, and Pipedrive
integrations state every 2 hours); Sync now triggers an immediate pass. Pipedrive
Triggers & Activity and Reply webhooks are event-driven and fire in real time. A yellow
dot next to the CRM means a sync is in progress; results land in the Logs tab.
### Can CRM contacts go straight into a sequence?
Yes. On a CRM-to-Reply sync step, add a sequence mapping: pick the sequence and the
starting step, optionally Ignore step delay so processing starts as soon as the sending
window opens, and Only for new records to skip updates. Enrollment checks still apply —
see [Contact enrollment](/behavior/contact-enrollment).
### How do AI agents connect to Reply?
Over MCP. The endpoint URL and API key are on the Integrations page under the MCP server's
Configure panel; authenticate with a bearer API key header, or OAuth. A personal API key
can be scoped to just the permissions the agent needs, and operations that create, change,
or send things require write-level scopes — compatible clients ask for confirmation before
running them. Connection guides cover n8n, Make, Claude, Claude Code, and ChatGPT — see
[agents.reply.io/mcp](https://agents.reply.io/mcp).
### My CRM is not on the native list — what are the options?
Zapier (thousands of apps, trigger-action Zaps), Make, or the n8n node for workflow-level
sync; webhooks for pushing Reply events into your systems; and the
[REST API](https://docs.reply.io/api-reference/introduction) for anything custom. The
native HubSpot BCC option also works for plain email logging.
## Related
- [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm) — the workflow built on this capability
- [Contacts](/specifications/contacts) — the primary object integrations create and update
- [Contact management](/capabilities/contact-management) — the surrounding capability
- [Contact deduplication](/behavior/contact-deduplication) — how matching and updates behave
- [Contact enrollment](/behavior/contact-enrollment) — what happens when synced contacts hit a sequence
- [API limits](/reference/api-limits) — rate limits on the API side
- [Agent index](/start/agent-index) — the machine-readable entry points
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contacts, sequences, and webhook subscription endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agent access to contacts, sequences, inbox, analytics, and Jason AI configuration
- Webhooks: managed in Settings or over the API — event catalog and payload options in the API reference
---
# Workflows
> Complete outcomes built on Reply — from finding prospects to booking meetings. Each workflow states what Reply provides, what you build, and every rule on the path.
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
A workflow page describes a complete outcome, not a feature: the goal, the preconditions,
each step with the product behavior behind it, the failure modes, the exact limits, and
how to verify success. Start here to see whether Reply covers the whole job — then descend
into capabilities and specifications.
## Build and launch
- [Build an AI SDR](/workflows/build-an-ai-sdr) — the flagship: the five-step Jason AI SDR wizard, from business inputs to launch
- [Find prospects from an ICP](/workflows/find-prospects-from-an-icp) — from criteria to a deduplicated, validated list
- [Build a prospect list](/workflows/build-a-prospect-list) — import, search, validate, blacklist, and segment into lists
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign) — mailbox, sequence, schedule, limits, go
- [Run multichannel outreach](/workflows/run-multichannel-outreach) — email, LinkedIn, calls, SMS, and WhatsApp in one flow
## Operate and analyze
- [Process positive replies](/workflows/process-positive-replies) — from detected reply to routed opportunity and booked meeting
- [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm) — contacts, statuses, and activity in both systems
- [Analyze campaign performance](/workflows/analyze-campaign-performance) — read the numbers that share definitions
## Planned
| Page | Status |
| --- | --- |
| Enrich existing contacts | Not written |
| Route replies to sales | Not written |
| Optimize an underperforming campaign | Not written |
| Manage multiple sending mailboxes | Not written |
| Stop outreach after a reply (deep-dive) | Not written |
| Re-engage existing contacts | Not written |
## Related
- [Capabilities](/capabilities) — can Reply do the individual task?
- [What can you build?](/start/what-can-you-build) — systems these workflows compose into
## Build with Reply
- Agent workflow guides: [agents.reply.io/workflows](https://agents.reply.io/workflows)
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — several workflows ship as installable skills
---
# Build an AI SDR
> The five-step Jason AI SDR wizard — business information, contact sources, personalization, generated steps, and launch settings — plus approval mode, reply handling, and meeting scheduling.
**Create a Jason AI SDR sequence in five wizard steps: add business information so Jason generates your offer, define contact sources such as Autopilot filters and intent signals, choose personalization options, review the generated outreach steps, then pick approval or automatic mode, reply handling, and meeting scheduling before launch.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **Outcome** | A live Jason AI SDR sequence: offer generated from your website, contacts sourced daily, personalized messages sent, replies answered, meetings scheduled |
| **Required objects** | An [offer](/specifications/offers) (generated or manual), a sequence, connected sending accounts; optionally a [playbook](/specifications/playbooks) and [knowledge base](/specifications/knowledge-bases) |
| **Surfaces** | UI · REST API (check operation status on docs.reply.io) · MCP |
| **Key limit** | Autopilot sourcing: up to 500 contacts per day per sequence (default 10), 3 contacts per company |
| **Stops on** | Approval mode holds every message until a human approves; deleting a pending message removes the prospect from the sequence |
| **Does not** | Know your business without inputs; send unapproved messages in approval mode; replace your qualification judgment |
| **Plans** | AI SDR plans |
## Goal
A working AI SDR loop on Reply: Jason AI derives your business context from a website,
files, or pasted text, generates offers and a multichannel sequence, sources its own
contacts on a schedule, personalizes every message, answers replies from a knowledge
base, and books meetings — with a human approving each message, or fully automatic.
## When to use this workflow
- You want the whole loop — find, write, send, respond, book — generated and run inside one system, with approval gates where you choose.
- List building is the bottleneck: Autopilot and intent signals keep the sequence fed daily.
- For hand-written sequences with full manual control, start from [Launch an outbound campaign](/workflows/launch-an-outbound-campaign) instead.
## What Reply provides
- Business-context generation from a website URL, uploaded files, or pasted text — company name, description, ICP, pain points, value propositions, proof points, case studies, and CTAs, all editable
- 5 auto-generated [offers](/specifications/offers) per sequence creation — different angles by ICP and pain points — plus [playbooks](/specifications/playbooks) for tone, structure, and do's and don'ts
- A generated multichannel sequence with a swappable structure, personalized per contact at send time
- Contact sources: Sales Navigator Autopilot filters, buying-intent signals, LinkedIn post engagers, competitor followers, AI web search, website visitors, and manual methods — every contact tagged with its source
- Per-sequence ICP and LinkedIn Activity scores with hover explanations, usable as filters
- Approval mode with a Pending approvals queue, and reply handling grounded in a [knowledge base](/specifications/knowledge-bases)
- Meeting scheduling against your connected calendar
## What you must provide
- The inputs: your website, files, or text — generation amplifies inputs, it does not invent credibility
- Connected sending accounts for the generated channels (email, LinkedIn)
- The qualification bar: approval-mode decisions, ICP-score thresholds, which reply types stay human
- Knowledge base substance for reply handling, and a calendar if Reply schedules meetings
## Preconditions
A workspace on an AI SDR plan; a website URL, files, or pasted text to generate from;
connected [email accounts](/specifications/email-accounts) and a LinkedIn account for the
channels you will use; for automatic meeting booking, a calendar linked under
Settings → Meetings.
## Entities involved
Business inputs → [offer](/specifications/offers) (+ [playbook](/specifications/playbooks),
[knowledge base](/specifications/knowledge-bases)) → [sequence](/specifications/sequences)
→ contact sources → scored [contacts](/specifications/contacts) →
[conversations](/specifications/conversations) → meetings and reports.
## Flow
```text
Step 1 Business information → offer, playbook, knowledge base, message settings
Step 2 Contact sources → Autopilot filters, intent signals, manual methods
Step 3 Personalization → personalization points for per-contact research
Step 4 Review outreach steps → generated sequence; edit steps or swap structure
Step 5 Configure settings → sending mode, reply handling, meeting scheduling
Launch → approval queue (or automatic sending) → replies handled → meetings booked
```
## Step-by-step
1. **Create the sequence.** Go to **AI SDR → Jason AI SDR**, or click **New sequence** and select **Jason AI SDR**.
2. **Add business information (Step 1).** Paste your website URL, upload files such as pitch decks or product documentation (several PDF or text files at once, up to 100 MB), or paste plain text — Jason converts it into a formal offer. The system generates your company name, description, ICP, pain points, value propositions, proof points, case studies, and CTAs; edit any of them or add more with the + button. You can also choose which AI model analyzes your website — for non-English output the system recommends a different model.
3. **Attach guidance objects.** A [playbook](/specifications/playbooks) shapes how messages are written — tone, style, do's and don'ts, step-specific instructions, subject-line rules; it cannot create the sequence structure, run LinkedIn actions, filter the audience, or manage replies. A [knowledge base](/specifications/knowledge-bases) holds the product content Jason answers replies from. An [offer](/specifications/offers) targets a segment: Jason generates 5 offers per sequence creation (one shown in the wizard, four more appear on the Offers page) and pre-selects the first. If you edit offer inputs mid-wizard, choose **Update original** (applies to every sequence using the offer) or **Keep separate** (a new offer for this sequence only).
4. **Choose message settings.** Language, tone of voice, message length (default Short), and — for languages whose grammar depends on it — the sender's gender.
5. **Define contact sources (Step 2).** Add one or more sources; each both feeds the pipeline and tags its contacts, visible in the contact's activity log and the sequence Logs. Options: **Sales Navigator Autopilot** (ICP filters pre-filled from Step 1, or a pasted Sales Navigator search URL — unsupported filters are skipped; max 500 contacts per day, default 10, 3 per company), **Hiring Intent** or **Technology Used** (one at a time; one-time searches of up to 500 contacts, re-runnable after launch), **LinkedIn Post Engagers** (up to 50 likers and 50 commenters per post; ICP fit defaults to 60%), **Competitor Followers** (maximum 500 contacts from all competitor pages combined, scanned daily for new followers), **AI Web Search** (maximum 500 contacts per search), **Website Visitors**, and **Manual Methods** (CSV import, add from existing, create manually, integration, LinkedIn search with your connected account).
6. **Select personalization options (Step 3).** Personalization points define what Jason researches before writing — company details, the prospect's role or achievements, relevant industry context — so messages go beyond basic contact fields.
7. **Review outreach steps (Step 4).** Jason generates the sequence and picks a structure suited to your inputs. Steps contain placeholder text that is personalized per contact when the step is scheduled. Edit, remove, or add steps; browse alternative structures in the picker (Default, My, Workspace, Organization scopes) or save your own layout as a structure template (name up to 50 characters).
8. **Configure settings (Step 5).** Sending mode: **Approval mode** (every message waits on the Pending approvals page) or **Automatic**. Enable **Handle replies** if Jason should respond to incoming messages — automatically or as drafts for review — and decide whether follow-ups to silent leads send automatically or as drafts. Choose meeting scheduling: manual, Reply (link a calendar under Settings → Meetings; Jason checks availability, suggests times, and answers meeting-related replies), or another tool.
9. **Launch and work the approval queue.** On **AI SDR → Pending approvals**, sort by newest or oldest and filter by channel (Email or LinkedIn), sequence, or owner. Edit a message inline, click **Regenerate** with an optional short prompt, approve one by one or with **Approve selected** in bulk — or delete it, which removes the prospect from the sequence. Approved messages send according to the sequence's [schedule](/specifications/schedules) and limits.
10. **Iterate.** Return to **Jason AI → Settings** to adjust sending mode, AI model, tone of voice, playbook, personalization points, language, or business information — changes apply only to contacts who have not yet received any steps. In the sequence's People tab, filter by ICP score (for example, remove contacts scoring under 60) and lead with LinkedIn for contacts whose LinkedIn Activity score is Frequent.
## Important rules
[Contact enrollment](/behavior/contact-enrollment) · [Sequence execution](/behavior/sequence-execution) ·
[Reply detection](/behavior/reply-detection) · [Sequence stopping](/behavior/sequence-stopping) ·
[When Reply sends](/behavior/sending-schedules)
## Side effects
Contact sources keep fetching on their schedule until paused — Autopilot daily, competitor
pages scanned once a day. Intent searches start when you finish the sequence setup, not
when you save. Automatic mode sends without review. Deleting a pending approval removes
that prospect from the sequence permanently.
## Failure conditions
- **Hiring Intent and Technology Used unavailable** — both require the Accounts feature enabled, since they build an account list first
- **LinkedIn search grayed out** — it runs through your own LinkedIn account, which must be connected
- **Nothing sends in approval mode** — an unworked queue holds all outreach; review it daily or switch modes
- **Sequence toggle red or orange** — see [Why is a campaign not running?](/troubleshooting/campaign-is-not-running)
## Verification
After launch: contacts appear in the People tab with source tags in the Logs; ICP and
LinkedIn Activity columns fill in; generated messages land on Pending approvals (approval
mode) or send inside the schedule window (automatic); replies receive drafts or answers
according to each handler's delivery mode.
## Safe stopping
Pause Autopilot from the People tab toggle without touching the sequence; switch automatic
mode to approval mode to put a human back on the send button; or pause the whole sequence —
sending stops, state is kept. See [Sequence stopping](/behavior/sequence-stopping).
## Limits
- Autopilot: max 500 contacts per day per sequence; default 10 per day, 3 contacts per company
- Hiring Intent / Technology Used: one active signal at a time; up to 500 contacts per search; re-runnable after launch
- LinkedIn post engagers: up to 50 likers plus 50 commenters per post; ICP fit threshold defaults to 60%
- Competitor followers: maximum 500 contacts from all competitor pages combined
- AI Web Search: maximum 500 contacts per search
- Business-info uploads: several PDF or text files at once, up to 100 MB; knowledge base documents: PDF, DOC, DOCX up to 100 MB per file, other types rejected; links added one at a time
- Structure template name: up to 50 characters
- Email address checks aim for up to 98% accuracy
- Settings changes apply only to contacts who have not yet received a step
## Related
- [AI SDR capability](/capabilities/ai-sdr) — what Jason AI covers, end to end
- [The AI SDR model](/learn/ai-sdr-model) — how the pieces fit conceptually
- [Offers](/specifications/offers) · [Playbooks](/specifications/playbooks) · [Knowledge bases](/specifications/knowledge-bases)
- [Find prospects from an ICP](/workflows/find-prospects-from-an-icp) — the sourcing slice in detail
- [Process positive replies](/workflows/process-positive-replies) — the reply slice in detail
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — ai-sdr endpoint group (check operation status)
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — offers, playbooks, knowledge bases, approvals, and sequence generation
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripting and CI-friendly control
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — packaged outreach workflows
- Agent workflow guides: [agents.reply.io/workflows](https://agents.reply.io/workflows)
---
# Find prospects from an ICP
> Turn ICP criteria into Realtime B2B Data filters, preview matches, launch a Live Search to a list or sequence, and track credits — plus Sales Navigator import and email validation.
**Turn your ICP into Realtime B2B Data filters, preview 5-7 matching contacts, then launch a Live Search that saves results to a list, a sequence, or both. Saving costs Reply credits per contact, already-saved contacts are not duplicated, and the Search History tab tracks status, credits used, and contacts found.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **Outcome** | A list of ICP-matching contacts with revealed data, validated emails, and no duplicates against your existing base |
| **Required objects** | Reply credits, a destination [list](/specifications/lists) or [sequence](/specifications/sequences); a Sales Navigator account for LinkedIn search import |
| **Surfaces** | UI · other surfaces per operation status on docs.reply.io |
| **Key limit** | 1-3 Reply credits per saved contact depending on the data found; LinkedIn search import up to 2,000 contacts per day per LinkedIn account |
| **Stops on** | A paused search (the last batch of 10-20 contacts may still be added); an exhausted audience shows the No new contacts status |
| **Does not** | Define your ICP, or guarantee a phone number or email for every contact — contacts are still added when a valid number is not found |
| **Plans** | Every user receives 50 basic Reply credits; more are available as an add-on |
## Goal
A [list](/specifications/lists) of contacts matching your ICP — sourced live from LinkedIn
data, deduplicated against your account, and validated — ready for
[enrollment](/behavior/contact-enrollment).
## When to use this workflow
You know who you want to reach and need the records, without buying external lists and
importing CSVs. If your data already exists in files or a CRM, start from
[Build a prospect list](/workflows/build-a-prospect-list) instead.
## What Reply provides
Realtime B2B Data search with structured filters or a pasted Sales Navigator URL, a 5-7
contact preview before spending credits, saving to a list, sequence, or both, automatic
skipping of contacts already in your account, a Search History with statuses and credit
usage, LinkedIn search import through your own Sales Navigator account, and an
[email validation](/capabilities/data-enrichment) service.
## What you must provide
The ICP translated into concrete filters, the credit budget, and — for LinkedIn search
import — a LinkedIn account with Sales Navigator (other LinkedIn plans are not supported).
## Preconditions
Reply credits (every user receives 50 basic credits; buy more under
Plans & Billing → Manage current subscription); a destination list or sequence; for the
LinkedIn search path, a connected Sales Navigator account.
## Flow
```text
ICP criteria → Data page filters (or Sales Navigator URL)
→ preview 5-7 contacts → Launch Live Search
→ save to list / sequence / both → Search History tracks progress
→ validate emails → filter by ICP score inside an AI SDR sequence
```
## Step-by-step
1. **Set the filters.** Open the Data page and apply filters, or paste a LinkedIn Sales Navigator search URL — Reply's filters update to match it. Unsupported Sales Navigator filters such as Changed Jobs, Posted on LinkedIn, Shared Experiences, and saved searches are skipped with a note; the rest still apply. To target specific companies instead, select an Accounts list of uploaded domains — Industry and Employee Headcount lock because they come from your company data.
2. **Refine the search.** Add keywords (works for both companies and contacts), exclude values with the **–** button on Accounts lists, Industry, Account/Contact location, Keywords, Job title, and Department, or filter by **Hiring on Social Media**. Toggle **Contacts only** mode to find people even without company data (some filters like Industry become unavailable), **Add contacts without email addresses** for LinkedIn-only outreach, and **Find phone numbers** if you want numbers looked up.
3. **Check the preview.** The page shows 5-7 contacts matching your criteria — adjust filters until the preview looks like your ICP before spending credits.
4. **Launch the Live Search.** Click **Launch Live Search** and choose where to save: a specific list, a sequence, both, or neither (contacts save directly to your account).
5. **Track progress in Search History.** Each search shows its date, save target, status (Finished, No new contacts, Running, or Paused), used credits, contacts found, and owner. From the three-dot menu you can view contacts, reuse the search for a new batch, pause or resume it, or delete the entry. Contacts already saved to your account are not duplicated.
6. **Or import from your own Sales Navigator searches.** On the People page (or a sequence's People tab) click **Add contacts → LinkedIn search**, paste a Sales Navigator search or saved-list URL, choose how many contacts to extract, and pick **Skip** or **Add anyway** for contacts already in other sequences. Up to 2,000 contacts per day per LinkedIn account.
7. **Validate emails.** On the People page select at least one contact and click **Validate emails**. One batch validates at a time; results mark each address valid, risky, or invalid. Reply will not send emails to contacts with invalid addresses.
8. **Prioritize by fit.** Inside an AI SDR sequence's People tab, every contact gets an ICP score (computed against that sequence's offer, with hover explanations) and a LinkedIn Activity score (Frequent, Consistent, Occasional). Filter out low scores — for example, ICP under 60 — and lead with LinkedIn for highly active contacts. The scores are calculated automatically when enough data exists (LinkedIn URL, job title, company), including for imported lists.
## Failure conditions
- **Not enough credits** — saving stops until you buy more; validation shows a pop-up pointing to Plans & Billing
- **No new contacts** — the audience for these filters is exhausted; widen the filters or accept the count
- **Paused too late** — the system may still add the last batch of 10-20 contacts after you pause
- **Scores missing** — ICP and LinkedIn Activity scores need a LinkedIn URL, job title, and company data, and appear only in the People tab inside an AI SDR sequence
## Verification
The destination list holds the expected count; Search History shows Finished with the
credits you expected to spend; validation marks most addresses valid; no duplicate
records — already-saved contacts are skipped, and imports follow the
[deduplication rule](/behavior/contact-deduplication).
## Limits
- Credits per saved contact: 1 (LinkedIn profile link, no email), 2 (LinkedIn link and email), 3 (phone number found)
- Contacts without emails cost 1 credit each when enabled
- Every user receives 50 basic Reply credits
- Preview size: 5-7 contacts
- LinkedIn search import: up to 2,000 contacts per day per LinkedIn account; requires Sales Navigator
- Email validation: one batch at a time; Reply does not email contacts marked Invalid
- A contact with Invalid email status can still enter a sequence that currently has no email steps
## Related
- [Prospect search](/capabilities/prospect-search) — the capability behind this workflow
- [Build a prospect list](/workflows/build-a-prospect-list) — when data comes from imports too
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign) — the next step
- [Prospect data](/specifications/prospect-data)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — data endpoints (check operation status)
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · Skills: [agents.reply.io/skills](https://agents.reply.io/skills)
---
# Build a prospect list
> Assemble a clean outreach list from CSV imports, search results, and manual adds — identifier-based dedup, import statuses, email validation, blacklisting, and list segmentation.
**Assemble one clean list from CSV imports, search results, and manual adds. Choose a contact identifier at import so duplicates update or skip instead of doubling, validate emails before launch, and blacklist unwanted contacts or domains. A contact can belong to several lists, and lists can split into 2, 3, or 4 for testing.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **Outcome** | One deduplicated, validated list assembled from all your sources, segmented and ready to enroll |
| **Required objects** | Source data (CSV files, search results, or manual entries), a destination [list](/specifications/lists) |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Up to 10,000 rows per CSV file; First Name is mandatory; dedup keys on the identifier you choose at import |
| **Stops on** | A non-CSV file (xlsx is rejected), missing mandatory fields, or symbols in numeric fields — those rows become Import Errors |
| **Does not** | Supply the source data or decide segmentation; merge records that differ on the chosen identifier — see [contact deduplication](/behavior/contact-deduplication) |
| **Plans** | Plan-specific differences are not documented for this workflow |
## Goal
One [list](/specifications/lists) of clean, deduplicated, validated
[contacts](/specifications/contacts) assembled from whatever sources you have — with
invalid addresses flagged and unwanted contacts and domains blacklisted before anything
sends.
## When to use this workflow
Your prospects come from several places — a conference CSV, a
[prospect search](/workflows/find-prospects-from-an-icp), manual research — and outreach
needs one coherent, segmentable target.
## What Reply provides
CSV import with field mapping (standard and custom fields, automatic LinkedIn column
detection), identifier-based [deduplication](/behavior/contact-deduplication) with
Imported / Updated / Skipped / Errors reporting, lists that overlap freely (one contact,
many lists), list-level Opens, Replies, and Opt-outs tracking, 2-4-way list splitting for
testing, [email validation](/capabilities/data-enrichment), and contact- and domain-level
blacklisting.
## What you must provide
The source data and the segmentation logic — what belongs on this list, and how it splits
when messaging will differ.
## Flow
```text
CSV files ─┐
Search ─┼→ import with identifier dedup → Imported / Updated / Skipped / Errors
Manual ─┘ → validate emails → blacklist exclusions
→ one list → move / split / share
```
## Step-by-step
1. **Create the list.** In the Lists section of the Contacts page, click the plus button, name the list, and click **Create** — or select a list directly in the Import Contacts dialog so the upload lands there.
2. **Import the CSV.** The file must be CSV UTF-8 (xlsx and other formats are rejected), up to 10,000 rows, with First Name filled — it is required. Map columns to Reply fields, including custom fields; LinkedIn columns are detected and mapped to the LinkedIn profile field automatically, and you can override any mapping from the dropdown.
3. **Choose the identifier and duplicate handling.** Pick a unique identifier (Email, Last Name, or Phone) — it becomes the distinguishing key that prevents duplicates, and other fields become optional. For matched records, choose **Update Missing Fields** (overwrite existing contact fields with CSV data) or **Skip** (leave existing records untouched). For records without emails, choose **Add Generated Emails** — a placeholder genmail.com address; these contacts are skipped by email steps but work for SMS, WhatsApp, calls, and LinkedIn — or **Skip**. Optionally enable automatic timezone detection from city/state and country (may extend the import by up to 30 minutes).
4. **Read the import results.** The notification breaks the upload into **Imported** (new contacts), **Updated** (existing profiles refreshed), **Skipped** (duplicates removed during import), and **Import Errors** (missing mandatory fields or bad formats, such as symbols in the Phone field). Download the full import result file when a number surprises you.
5. **Land other sources on the same list.** Point a [Live Search](/workflows/find-prospects-from-an-icp) at the list, or select contacts on the People grid and use **Move to lists**.
6. **Validate emails.** Select contacts on the People page and click **Validate emails** — one batch at a time. Reply will not send emails to contacts marked Invalid; a contact with Invalid status can still be moved into a sequence that currently has no email steps.
7. **Blacklist what must never be contacted.** Select a contact → **More → Blacklist** to block one person, or **Blacklist domain** to block everyone at that company domain. Blacklisted contacts show a black dot and will not receive your emails even if moved into a sequence. Bulk-add domains under Settings → Blacklist, manually or via CSV, in the format `domain.com` (no http:// or www).
8. **Segment.** The same contact can sit in multiple lists, so build overlapping views freely — by owner, persona, or campaign. Split a selection between 2, 3, or 4 lists for testing. Each list reports Opens, Replies, and Opt-outs for its contacts, and lists can be renamed, shared with teammates, or deleted.
9. **Push a whole file into a sequence when needed.** Importing directly into a sequence skips contacts that are already in another sequence. To move everyone: import into a list, open it, choose **All in list**, and click **Move to sequence** — or filter the People page by the **Import File Name** smart filter and move the result. Both paths include contacts currently in other active sequences.
## Failure conditions
- **Wrong file format** — only CSV UTF-8 imports; xlsx and other formats fail
- **Missing First Name** or symbols/spaces in numeric fields — the row lands in Import Errors
- **Contacts silently missing from a sequence import** — they were already in another sequence; use the list or Import File Name paths in step 9
- **Duplicate surprises** — check which identifier was chosen and the matched-records option; see [Manage duplicate contacts](/how-to/manage-duplicates)
## Verification
List count matches Imported + Updated from the import results; a validation pass marks
most addresses valid; blacklisted records show the black dot; spot-checks look like the
ICP.
## Limits
- Up to 10,000 rows (contacts) per CSV file; CSV UTF-8 format only
- First Name is mandatory; numeric fields accept digits only
- Identifier choices: a unique field such as Email, Last Name, or Phone
- Email validation runs one batch at a time; Reply does not email Invalid contacts
- Automatic timezone detection may extend an import by up to 30 minutes
- A selection can be split between 2, 3, or 4 lists
- Blacklist domain format: `domain.com` — without http:// or www
## Related
- [Find prospects from an ICP](/workflows/find-prospects-from-an-icp) — filling the list from search
- [Lists](/specifications/lists) · [Contacts](/specifications/contacts)
- [Import contacts](/how-to/import-contacts) · [Manage duplicate contacts](/how-to/manage-duplicates)
- [Contact deduplication](/behavior/contact-deduplication) — the exact matching rule
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — lists and contact endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the `audience-building` skill
---
# Launch an outbound campaign
> From connected mailbox to live sending — create the sequence, assign accounts and a schedule, set daily limits and delays, test with a real email, preview per recipient, and launch.
**Connect a corporate mailbox, import contacts, create a sequence from template, scratch, Magic, or Jason AI SDR, then finish the settings: sending accounts, schedule, daily limits, replies handling, and tracking. Send a test email, check Preview per recipient, and launch; the first mailbox you add becomes the default sender.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **Outcome** | A live sequence sending to enrolled contacts inside safe limits, on a schedule, with replies stopping contacts |
| **Required objects** | A connected [email account](/specifications/email-accounts), [contacts](/specifications/contacts), a [sequence](/specifications/sequences) with steps, a [schedule](/specifications/schedules) |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Max new daily contacts overrides Max number of emails per day; the emails-per-day setting caps first-step emails at up to 10,000 |
| **Stops on** | Replies (under Mark as finished), closed schedule windows, reached limits, disconnected accounts — the toggle color reports which |
| **Does not** | Write the copy or pick the audience — you supply both; a mailbox is optional for creating a sequence but mandatory for launching email campaigns |
| **Plans** | Jason AI SDR sequences require an AI SDR plan; other creation options are standard |
## Goal
A live [sequence](/specifications/sequences) sending to a prepared audience, inside safe
limits, with replies detected and outreach stopping per contact. ("Campaign" is the
[former name](/specifications/campaigns) for a sequence.)
## When to use this workflow
The list is ready and the message is decided — this is the execution slice. For
AI-generated sequences, start from [Build an AI SDR](/workflows/build-an-ai-sdr) instead.
## What Reply provides
Mailbox connection for Gmail, Outlook/Office 365, Exchange, and other IMAP/SMTP providers;
four sequence creation paths (Template, Scratch, Magic, Jason AI SDR); step types across
email, calls, SMS, WhatsApp, LinkedIn, Zapier, tasks, and conditions; schedules with
timezone and holiday control; daily-limit throttling; replies handling; deliverability
settings; per-recipient preview and test emails.
## What you must provide
The audience, the copy, and the go decision — plus a corporate (not generic) sending
domain.
## Preconditions
A connected, tested [email account](/specifications/email-accounts) — the first mailbox
you add becomes the default and is added to your sequences automatically; an imported,
[validated](/workflows/build-a-prospect-list) audience; sequence content.
## Flow
```text
connect mailbox → import contacts → create sequence (+ steps)
→ assign accounts → attach schedule → set limits + replies handling
→ deliverability settings → test email + preview → launch → verify
```
## Step-by-step
1. **Connect the mailbox.** Settings → Email Accounts → **New email account**; pick the provider and continue. Gmail and Outlook/Office 365 offer single-click connection (IMAP must be enabled); Exchange and other providers connect with manual IMAP/SMTP settings. Use the Test buttons and confirm the green dot for both sending and receiving. See [Connect a mailbox](/how-to/connect-a-mailbox).
2. **Import the contacts.** Upload a CSV into the sequence's People tab or add from existing — the [import rules](/how-to/import-contacts) and [deduplication](/behavior/contact-deduplication) apply on entry.
3. **Create the sequence.** Four options: **From Template** (Reply's library or team templates), **From Scratch**, **From Magic** (AI shapes the sequence from a prompt), or **Jason AI SDR** (AI SDR plans only). Available step types: Email (automatic and manual), Call, SMS (automatic and manual), WhatsApp, LinkedIn (automatic and manual), Zapier, Task, and Condition — plus Action (move to sequence) and Merge for branch control. Reorder steps by drag-and-drop, clone them, add A/B variants, set per-step delays. Set a subject line on Step 1; leave later subject lines empty to keep emails in one thread.
4. **Assign sending accounts.** Connect one or several mailboxes to the sequence in the Accounts settings; check each is connected and warmed. See [Mailbox selection](/behavior/mailbox-selection) for how Reply rotates among them.
5. **Attach a schedule.** Pick weekdays and time ranges in the sending timezone — a delivery window of at least 2.5-4 hours is recommended. Reply schedules use UTC and do not adjust for Daylight Saving Time. Optionally set a separate schedule for follow-ups, use the contact's own timezone when set (detected at import from Country plus State or City), and skip public holidays with a system or custom calendar. A default schedule applies to new sequences automatically.
6. **Set the limits.** **Max new daily contacts** controls how many contacts start Step 1 each day — the rest wait as Throttled. Choose **Add until capacity** (default: tops up only to the limit and adds nothing on closed schedule days) or **Add full amount**; or enable **No limit on new daily contacts** to skip throttling. **Max number of emails per day** caps first-step emails at up to 10,000 — and Max new daily contacts overrides it, preparing contacts every day including weekends. Set a **delay between emails** of 120-180 seconds (the system needs an extra 10-15 seconds per send), and optionally cap same-domain contacts per day and enable matching email providers. See [Configure sending limits](/how-to/configure-sending-limits).
7. **Choose replies handling.** **Mark as finished** stops follow-ups to a prospect who replies; **Continue sending emails** sends the rest anyway. Optionally switch contacts to Finished when the last step is sent with no reply. Replies to direct (non-sequence) emails set Replied but do not stop the sequence.
8. **Review deliverability settings.** Plain text mode is enabled by default for new sequences — it strips HTML, images, and tracking links. Opens tracking and link tracking are both disabled by default; enable them only if you accept the tracking trade-off. An optional List-Unsubscribe header adds a standard unsubscribe path.
9. **Test before launch.** From the step editor, expand the dropdown next to **Save** and choose **Send Test email** — pick the To and From addresses. The opt-out link does not work in test emails, since they carry no sequence or contact context. Then open **Preview** to see each recipient's exact message; you can edit text per recipient without touching the master template. CC is not supported in customized emails, only automatic email and LinkedIn steps are previewable, and if you customize one A/B variant only the edited variant is sent.
10. **Launch and watch the first window.** Save and launch. Deliveries should start inside the first open schedule window; put your own address on the list to receive Step 1 yourself.
## Important rules
[Sequence execution](/behavior/sequence-execution) · [When Reply sends](/behavior/sending-schedules) ·
[Mailbox selection](/behavior/mailbox-selection) · [Reply detection](/behavior/reply-detection) ·
[Sequence stopping](/behavior/sequence-stopping)
## Side effects
Real email to real people from the first minute of the first open window. Throttled
contacts keep moving into Step 1 daily under Max new daily contacts — including weekends
under Add full amount.
## Failure conditions
Nothing sends: the schedule window is closed, a daily limit is exhausted, or the account
is disconnected — see [Why is a campaign not running?](/troubleshooting/campaign-is-not-running)
and [Why was an email not sent?](/troubleshooting/email-was-not-sent). A red or orange
sequence toggle names the blocking condition — [what each color means](/behavior/sequence-stopping).
## Verification
Within the first sending window: the Stats tab shows deliveries counting, the toggle is
green, and a test contact (your own address on the list) receives Step 1 threaded as
expected.
## Safe stopping
Pause the sequence — sending stops, state is kept, resume continues where it left off.
Nothing already delivered is retracted. See [Sequence stopping](/behavior/sequence-stopping).
## Limits
- Max number of emails per day: caps first-step emails, up to 10,000; Max new daily contacts overrides it
- Recommended delay between emails: 120-180 seconds, plus 10-15 seconds of system processing per send
- Recommended schedule window: at least 2.5-4 hours; schedules run on UTC with no Daylight Saving adjustment
- Plain text mode: on by default for new sequences; opens tracking and link tracking: off by default
- Same-domain daily cap excludes common free domains such as gmail.com and yahoo.com
- Contact timezone detection needs Country plus State or City at import
## Related
- [Run multichannel outreach](/workflows/run-multichannel-outreach) — adding channels beyond email
- [Analyze campaign performance](/workflows/analyze-campaign-performance) — after launch
- [Sequences](/specifications/sequences) · [Schedules](/specifications/schedules)
- [Create a sequence](/how-to/create-a-sequence) · [Launch a sequence](/how-to/launch-a-sequence)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequences, push-to-sequence, start operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the `campaign-launch` skill, with the gates in `approval-boundaries`
---
# Run multichannel outreach
> Coordinate email, LinkedIn, call, SMS, and WhatsApp steps in one sequence — manual vs automatic per action, LinkedIn safety limits, Cloud Calls, and condition-based branching.
**Add email, LinkedIn, call, SMS, and WhatsApp steps to one sequence, choosing manual or automatic per LinkedIn action and per SMS. LinkedIn automation runs under per-account daily safety limits, call steps create tasks or dial through Cloud Calls, and condition steps branch contacts by data such as connection status or ICP score.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **Outcome** | One sequence touching prospects across email, LinkedIn, calls, SMS, and WhatsApp, with per-contact stopping on reply |
| **Required objects** | A sequence with channel [steps](/specifications/sequence-steps), an email account, a connected LinkedIn account, contacts with the channel data each step needs |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | LinkedIn automatic actions run under per-account daily safety limits — default ranges 25-35 per action (35-50 for messages), settable up to 100 |
| **Stops on** | A reply — a sequence-email reply finishes the contact under Mark as finished; a reached LinkedIn limit pauses that action until the next day |
| **Does not** | Message LinkedIn users outside your network — automatic Message steps to non-connections are skipped; work your manual tasks for you |
| **Plans** | Cloud Calls requires activation and at least $10 in the wallet; other channels are standard step types |
## Goal
One [sequence](/specifications/sequences) that reaches prospects on the channels they
actually use — email, LinkedIn, calls, SMS, WhatsApp — with automated steps where safe,
tasks where a human touch is needed, and conditions routing each contact down the right
branch.
## When to use this workflow
Single-channel results have plateaued, or your audience demonstrably lives on more than
one channel. Channel data decides feasibility: LinkedIn steps need a LinkedIn URL on the
contact, calls and SMS and WhatsApp need a phone number.
## What Reply provides
All channels as [step types](/specifications/sequence-steps) in one sequence; manual and
automatic variants for LinkedIn and SMS; task generation for manual touches (worked from
the Tasks page or the Chrome Extension); per-account LinkedIn safety limits with daily
tracking; Cloud Calls with recording and call resolutions; Yes/No condition steps over
contact data and behavior; channel comparison in
[reports](/workflows/analyze-campaign-performance).
## What you must provide
Connected accounts per channel, channel-appropriate copy, contact records carrying the
data each channel needs, and daily attention to the tasks your manual steps generate.
## Preconditions
An email account and a LinkedIn account connected; contacts with LinkedIn URLs and phone
numbers where those channels are used; for automation, the LinkedIn account's site
language set to English — Reply's LinkedIn automation is fully supported only in English.
For in-platform calling, Cloud Calls enabled (Settings → Calls → Request calls; ID
verification applies) with at least $10 in the wallet and a rented number.
## Flow
```text
LinkedIn view profile → connection request (note ≤300 chars)
→ condition: LinkedIn Connection Status (delay ≥2 h)
yes → LinkedIn message (≤8,000 symbols)
no → email #1 → email #2
→ call task (Cloud Calls or manual) → SMS / WhatsApp follow-up
(a reply finishes the contact under Mark as finished)
```
## Step-by-step
1. **Plan channels around contact data.** Email steps need an address, LinkedIn steps a LinkedIn profile URL, calls/SMS/WhatsApp a phone number. Condition steps can check each of these up front (Email, Phone Number, LinkedIn URL, Email Validation Status) and route contacts accordingly.
2. **Add LinkedIn steps — manual or automatic.** Manual steps (Message, Connect, InMail, View Profile) generate tasks you execute from the Tasks page or the Chrome Extension, which auto-completes most of them as you act on LinkedIn. Automatic steps run on their own: Message (up to 8,000 symbols; skipped if you are not connected to the prospect), Connect (optional note up to 300 characters), InMail, View Profile, Like Recent Posts, Endorse Skills (up to 3 skills; skipped if not connected), Follow Profile (skipped if already connected), Voice Message (a 60-second audio clip), and AI Voice Message. Direct messages reach 1st-degree connections only — pair Connect and Message steps to reach beyond your network. Automatic LinkedIn messages support one attachment up to 3 MB; Connect steps take no attachments.
3. **Add call steps.** A contact reaching a Call step creates a call task with your notes and variables. With Cloud Calls enabled you call from the contact sidebar, the dialer, or the Chrome Extension, take notes in the widget, then log a resolution — **Log & Complete** moves the contact to the next step, **Log Only** keeps them on the step. Calls handling is manual (the contact waits until you finish the task) or automatic (the contact moves on after the step delay even if the task is not finished). Two automations help: **Automatically call on opens** (recommended trigger: 4-7 opens) and **Pause on successful call**, which stops further automated steps after a completed call. If Call is the last step, the contact becomes Finished after 5 days by default.
4. **Add SMS and WhatsApp steps.** Automatic SMS sends from the step template; manual SMS becomes a task in the Chrome Extension. Contacts without a phone number stop on an automatic SMS step when task handling is manual, or skip forward when it is automatic. WhatsApp steps are semi-automated: the system creates the task and moves the contact on once it is sent or completed. SMS replies sync into the contact's activity log.
5. **Branch with condition steps.** A Condition step routes each contact down a Yes or No path. Useful checks: LinkedIn Connection Status (Connected, Pending, Not connected, and more) and InMail Status — both require a step delay of at least 2 hours before the condition so the status can be detected; Email Validation Status; Phone Number and its type (Mobile, Landline, Invalid); Opens and Clicks; ICP Score and LinkedIn Activity Score; Inbox Category, including Meeting intent. Use Action (move to sequence) and Merge to rejoin branches.
6. **Review LinkedIn safety limits.** Settings → LinkedIn Accounts → your account. Two modes: **Limit ranges** (Reply picks a random number in the range daily — defaults 25-35 for connections, profile views, likes, InMails, and other actions, 35-50 for messages) or **Max amount** (a fixed number; default 30 per action). Limits go up to 100 per action, apply only to automatic steps, and edits take effect the next day. The daily counter shows in the corner of each action.
7. **Launch and work the tasks.** Launch as in [Launch an outbound campaign](/workflows/launch-an-outbound-campaign), then clear generated tasks daily — in manual handling mode an unworked task holds that contact in place.
8. **Compare channels.** Read replies and meetings per channel on the Channel Efficiency dashboard — see [Analyze campaign performance](/workflows/analyze-campaign-performance) — and cut the touches that do not perform.
## Important rules
A reply to a sequence email finishes the contact under Mark as finished —
[Reply detection](/behavior/reply-detection) and
[Sequence stopping](/behavior/sequence-stopping). Automatic steps skip rather than fail
when prerequisites are missing: Message and Endorse Skills skip non-connections, Follow
Profile skips existing connections, and the contact moves to the next step.
## Failure conditions
- **Missing LinkedIn URLs or phone numbers** — steps skip or contacts stall, depending on step type and handling mode; filter with conditions up front
- **Unworked manual tasks** — in manual handling mode the contact waits on the task indefinitely
- **LinkedIn limit reached** — the action pauses for the day, a notification lands in Sequence → Log, and everything resets the next day
- **LinkedIn site language not English** — some automation features may not work as expected
## Verification
Each channel's first action executes: LinkedIn counters tick up under safety limits, call
and WhatsApp tasks appear on the Tasks page, SMS sends log in the contact activity, and
the channel dashboard shows touches on every configured channel.
## Limits
- LinkedIn automatic message: up to 8,000 symbols; connection request note: up to 300 characters
- LinkedIn message attachments: 1 file, maximum 3 MB, LinkedIn-supported formats (PDF, PPT/PPTX, DOC/DOCX, JPG/JPEG, PNG, GIF)
- Endorse Skills: up to 3 skills per contact; Voice Message: 60-second clip
- Safety limits: default ranges 25-35 per action and 35-50 for messages; static default 30; maximum 100 per action; changes apply from the next day
- Direct LinkedIn messages reach 1st-degree connections only
- Condition steps on LinkedIn Connection Status and InMail Status require a step delay of at least 2 hours
- Cloud Calls: requires activation, ID verification, at least $10 in the wallet, and a rented number
- Call as the last step: the contact becomes Finished after 5 days by default
## Related
- [Multichannel outreach](/capabilities/multichannel-outreach) — the capability view
- [LinkedIn outreach](/capabilities/linkedin-outreach)
- [Sequence steps](/specifications/sequence-steps)
- [Multichannel strategy](/learn/multichannel-strategy)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — steps and channel accounts
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp)
---
# Warm up new mailboxes and domains
> The path from a fresh domain to full sending volume — DNS authentication first, MailToaster warm-up profiles and seats, then default-on ramp-up from 10 emails per day toward 100.
**Authenticate the domain first, then warm each mailbox in MailToaster for two to three weeks (one to two for a new mailbox on an established domain) using a warm-up profile, then start cold volume with ramp-up mode — 10 emails per day rising by 3 to 100 by default — and keep warm-up running throughout.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **Outcome** | A new domain and its mailboxes authenticated, warmed, and ramping to full sending volume without burning sender reputation |
| **Required objects** | A domain with DNS access; connected email accounts; a MailToaster warm-up seat per mailbox |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Roughly 2–3 weeks of warm correspondence for a new domain (1–2 weeks for a new mailbox on an established domain) before cold outreach; ramp-up default 10 emails per day, +3 daily, to 100 |
| **Stops on** | Ramp-up stops with a notification once the account's total email limit is reached; warm-up connect and the Activate toggle fail with an error when no warm-up seats are free |
| **Does not** | Make a fresh domain safe on day one — no setting skips the calendar; replace DNS authentication — warm-up builds reputation on top of correct records, not instead of them; send warm-up traffic itself through ramp-up, which only raises real sending volume |
| **Plans** | MailToaster comes with a paid Reply subscription — one warm-up seat per connected mailbox; the MailToaster instance is shared per workspace |
## Goal
Every new [email account](/specifications/email-accounts) reaches its working daily volume
through three ordered layers: authenticated DNS, several weeks of simulated positive
engagement (warm-up), and a gradual increase of real sending (ramp-up) — with warm-up
still running once cold email flows. The mechanism behind the ordering is explained in
[Email warm-up](/learn/email-warm-up) and [Sender reputation](/learn/sender-reputation).
## When to use this workflow
Any time sending will start from infrastructure that mailbox providers have never seen: a
newly registered domain, new mailboxes on an existing domain, or domains and mailboxes
purchased through Reply. If the domain is established and actively sending, only the new
mailbox needs the 1–2 week warm-up window.
## What Reply provides
MailToaster warm-up with no separate account — you are signed in through your Reply
session, every workspace gets its own shared instance, and each connected mailbox gets one
warm-up seat. Per-mailbox warm-up profiles, daily goals, and cleanup run from the mailbox's
WarmUp tab in Reply. Ramp-up mode is built into every email account's Safety settings and
is on by default for newly added accounts. The weekly domain Health Checker verifies the
DNS layer — see [Deliverability](/capabilities/deliverability).
## What you must provide
DNS access at your domain host, the warm-up patience (the weeks are the mechanism, not an
inconvenience), and — if you hand-send warm correspondence — real positive interactions:
opens, replies, not-spam rescues, forwards, across a variety of providers such as Gmail,
Outlook, and Yahoo. Deleting, opting out, or spam-flagging by your warm contacts works
against you.
## Preconditions
A domain with editable DNS; mailboxes you can authenticate (Gmail warm-up needs two-factor
authentication and an app password; Outlook connects to warm-up automatically; Exchange
Single Click and On-Premises mailboxes are not supported for warm-up); free warm-up seats.
## Buying the domain and mailboxes in Reply
You can also start this workflow without owning infrastructure: the Email Accounts page
has a purchase flow (beta, team owner only) that registers domains and provisions Google
or Microsoft mailboxes — up to 5 per domain, connected to Reply within 48 hours. Purchased
mailboxes default into MailToaster warm-up via the warm-up toggle at purchase: Google
mailboxes and pre-warmed Microsoft packages enroll as soon as they are provisioned, while
a regularly purchased Microsoft mailbox waits out a 4-day locked period first — its
absence from MailToaster in those first days is expected. Pre-warmed packages (a domain
bundled with 3 ready-to-send mailboxes) arrive already warmed. Domains are one-year
purchases and do not auto-renew — an expired domain deactivates its mailboxes and removes
them from warm-up.
## Step-by-step flow
```text
authenticate DNS → connect mailboxes → add to warm-up → pick profile
→ set daily goal → wait 2–3 weeks → start cold volume with ramp-up
→ keep warm-up running
```
1. Authenticate the domain: MX records to receive mail, SPF, DKIM, and DMARC to pass authentication — required by mailbox providers, and by Google and Yahoo sender rules. Major providers preset A and rDNS; self-hosted servers must check them. See [Set up DNS for sending](/how-to/set-up-dns).
2. [Connect the mailboxes](/how-to/connect-a-mailbox), or purchase them through Reply as above.
3. Add each mailbox to warm-up: Settings → Email Accounts → the mailbox's WarmUp tab → Connect, or check Import to MailToaster when adding the account. CSV bulk imports arrive with warm-up settings preconfigured and activate immediately. Procured mailboxes need no credentials at this step.
4. Pick a warm-up profile: New email account for fresh inboxes, Reputation protect for existing ones, or a Custom profile controlling what share of warm-up emails are opened, rescued from spam, replied to, or marked important.
5. Set the daily goal: Ramp-up mode (starting number plus a daily increment) or Random mode (a min–max range sent each day). Optionally enable Sent folder cleanup, which removes warm-up emails older than 3 days.
6. Let warm-up run — roughly 2–3 weeks for a new domain, 1–2 weeks for a new mailbox on an established domain — before any cold sending.
7. Start cold outreach with ramp-up mode on (it is on by default for new accounts): 10 emails per day, +3 daily, up to 100. Match the start to your warm-up volume — after finishing a 50-per-day warm-up, start around 40–45 with a ramp of 7–10; if warm-up and cold sending run simultaneously, start at 10–15.
8. Leave the per-email delay at its default (a random 300–450 seconds on new accounts). Sequence-level speed settings exist too, but the account's Safety settings win.
9. Keep warm-up enabled through ramp-up and after it ends, for as long as the account sends cold email.
## Rules that apply
[Sending schedules](/behavior/sending-schedules) — when sends happen ·
[Mailbox selection](/behavior/mailbox-selection) — how volume spreads across accounts ·
[Bounce handling](/behavior/bounce-handling) — the 4% and 8% thresholds that protect a
ramping account · The account daily limit always caps the sequence's own limit — see
[Configure sending limits](/how-to/configure-sending-limits).
## Failure conditions
- No free warm-up seats — Connect and the Activate/Pause toggle fail with a seat-count error until the subscription adds seats
- Exchange Single Click and On-Premises mailboxes cannot join MailToaster warm-up
- A regularly purchased Microsoft mailbox is missing from MailToaster during its first 4 days — expected, not a failure
- Procured-mailbox reconnects are rate-limited: 7 attempts per 7 days per mailbox, with a 60-minute cooldown between manual attempts
- Raising volume too fast after warm-up — the documented outcome is deliverability trouble; ramp-up exists to prevent exactly this
## Verification
Hover the fire icon on the email account to see the current ramp-up state without opening
the Safety tab. Warm-up activity shows per mailbox in MailToaster; the domain Health
Checker refreshes weekly with per-record status. A test send to your own address should
land in the inbox, not spam.
## Limits
| Limit | Value |
| --- | --- |
| Warm correspondence before cold outreach | ~2–3 weeks for a new domain; 1–2 weeks for a new mailbox on an established domain |
| Ramp-up default | Start 10 emails per day, +3 daily, up to 100 |
| Default delay between emails (new account) | Random 300–450 seconds |
| Account daily maximum | 400 emails on paid plans, 200 on trial |
| Sequence Max emails per day | Cannot exceed the account's own daily limit |
| Warm-up seats | One per connected mailbox; no free seat blocks connect |
| Sent folder cleanup | Removes warm-up emails older than 3 days |
| Regular Microsoft procured mailbox | 4-day lock before warm-up enrollment |
| Procured-mailbox reconnect | 7 attempts per 7 days; 60-minute manual cooldown |
## Related
- [Deliverability](/capabilities/deliverability) — the full protective stack around sending
- [Set up DNS for sending](/how-to/set-up-dns) — step 1 in detail
- [Connect a mailbox](/how-to/connect-a-mailbox) · [Configure sending limits](/how-to/configure-sending-limits)
- [Email warm-up](/learn/email-warm-up) · [Sender reputation](/learn/sender-reputation) · [SPF, DKIM, DMARC](/learn/spf-dkim-dmarc)
- [Email accounts](/specifications/email-accounts) · [Limits](/reference/limits)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email-account endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — warm-up connect and status, account safety settings
---
# Process positive replies
> From detected reply to booked meeting — inbox categories and triggers, AI reply handlers with Auto, Draft, and Stop and notify modes, canned responses, and per-channel meeting stats.
**Replies land in the Inbox where AI assigns one category per thread, such as Interested or Not interested, plus a Meeting intent sub-category. Route Interested threads with triggers, answer common questions with reply handlers in Auto, Draft, or Stop and notify mode, use canned responses, and track booked meetings per channel in reports.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **Outcome** | Every genuine reply stopped, categorized, answered fast, and routed — with meetings booked and counted per channel |
| **Required objects** | Running sequences, the [inbox](/specifications/inbox); for AI answers, a [knowledge base](/specifications/knowledge-bases) with reply handlers |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | One inbox category per thread, plus the Meeting intent sub-category; each reply handler uses exactly one delivery mode |
| **Stops on** | A Stop and notify handler match pauses all further sending on that contact and hands the thread to a human — no AI reply is generated |
| **Does not** | Set your qualification bar or owner map; match replies sent from a different address than the contacted one — see [reply detection](/behavior/reply-detection) |
| **Plans** | AI reply handlers belong to the AI SDR feature set; inbox categories, triggers, and canned responses are standard |
## Goal
Every genuine positive reply answered fast and routed to an owner — automation stopped
for that contact, intent recorded as a category, questions answered from your knowledge
base, and meetings booked without a scheduling ping-pong.
## When to use this workflow
The moment sequences go live. Reply speed on interested prospects is where outbound
converts or dies.
## What Reply provides
Automatic [reply detection](/behavior/reply-detection) that stops the contact; AI-assigned
inbox categories with manual and bulk reassignment; category-driven triggers; AI reply
handlers with per-question delivery modes (Auto, Draft, Stop and notify); canned
responses; forwarding and reply-on-behalf from the thread's own sending account; meeting
scheduling with availability windows and buffers; per-channel meeting stats in reports.
## What you must provide
The qualification bar (what counts as route-to-sales), the owner map, knowledge base
content that answers real questions, and your CRM handoff — see
[Sync Reply with a CRM](/workflows/sync-reply-with-a-crm).
## Preconditions
Running sequences with reply detection working; for AI answers, a knowledge base attached
to the sequence with reply handlers configured; a decision on delivery modes (start with
Draft until handlers prove out).
## Flow
```text
reply arrives → matched to contact → outreach stops (rule)
→ AI assigns category: Interested / Not interested / Not now
/ Do not contact / Forwarded (+ Meeting intent sub-category)
→ Interested: trigger routes the contact; you or Jason reply
→ question: reply handler answers (Auto / Draft / Stop and notify)
→ Meeting intent: scheduling against your availability
→ meetings counted per channel in Reports
```
## Step-by-step
1. **Confirm stopping works.** A reply to a sequence email marks the contact Replied and Finished under the default Mark as finished setting — no further automated steps. Verify the rule and its exceptions in [Reply detection](/behavior/reply-detection) and [Sequence stopping](/behavior/sequence-stopping).
2. **Work the categories.** Reply's AI analyzes the tone of each reply and assigns one category per thread from the defaults — Interested, Not interested, Do not contact, Not now, Forwarded — plus the Meeting intent sub-category for prospects who want a meeting. Categorization covers email, LinkedIn, and LinkedIn voice message replies. Categories act as filters in the left panel and as labels on threads; reassign manually or in bulk with the assign/reassign icon, clear a wrong one with the x, and create custom categories when the defaults do not fit.
3. **Automate routing with triggers.** Settings → Triggers → **New trigger** → pick **Inbox category set for reply**, choose the category for the IF condition, then the THEN action — move to sequence, move to lists, pause, and similar. This is how Interested replies reach the right owner or pipeline without manual triage.
4. **Answer questions with reply handlers.** In your knowledge base's Reply Handling tab, click **New handler**, describe the common question ("Do you offer a free trial?"), and pick a delivery mode per handler: **Auto** (AI sends immediately — for low-stakes, well-defined scenarios), **Draft** (AI composes, a human reviews before sending), or **Stop and notify** (all sending on the contact pauses, the conversation is flagged, and the assigned rep — plus an optional extra address — is notified by email with the reply and thread details; no AI reply is generated). Add instructions, an optional sample answer, a tone of voice (confident, persuasive, witty, straightforward, or empathetic), a response length (super short, short, medium, or long), resource links, and media attachments. Mixing Auto and Draft handlers requires the Mixed option in the sequence's Jason AI settings.
5. **Reply fast by hand.** Save a typed reply as a canned response via right-click; insert one from the note icon, by typing `/` in the reply field, or with Ctrl+S (Windows) / Cmd+S (Mac). Forward a whole thread or a single reply with the Forward controls. Teammates can respond on each other's threads: the reply always sends from the email account the thread is connected to and stays in the same thread — the From row is read-only.
6. **Book the meeting.** Set availability days and hours, a buffer between appointments, and windows that prevent scheduling too soon or too far out. Meeting links are personalized and tracked for clicks. US holidays are not skipped by default — turn the holiday toggle on if you want them excluded.
7. **Measure.** Reports → Team performance shows booked meetings by source channel — Email, SMS, Call, WhatsApp, LinkedIn — with filters and an Export button. The Reports page inside a sequence counts only meetings booked within emails.
## Important rules
[Reply detection](/behavior/reply-detection) — what matches and what does not, and the
detection window; [Status transitions](/behavior/status-transitions) — how Replied and
Finished are assigned.
## Failure conditions
- **Unmatched replies** — a prospect answering from a different address is not matched automatically; see [Why was a reply not detected?](/troubleshooting/reply-was-not-detected)
- **Non-English replies** — automatic categorization does not cover them; assign the category manually ([rule](/behavior/reply-detection))
- **Over-eager Auto mode** — a weak handler sending automatically is a brand risk; start in Draft and graduate handlers to Auto once their answers prove out
- **Nobody watching Stop and notify** — the pause is only useful if the notified rep actually takes over the thread
## Verification
Test end to end: reply to a sequence email from a test contact; confirm the contact stops,
the thread gets a category, the trigger fires, the handler produces an answer in the mode
you chose, and a Meeting-intent reply leads to a booked slot that appears in Team
performance.
## Limits
- One inbox category per thread; Meeting intent is the only sub-category and can combine with a category
- Each reply handler has exactly one delivery mode; different handlers can use different modes (Mixed setting required when combining Auto and Draft)
- Stop and notify generates no AI response — the thread waits for a human
- Response length options: super short, short, medium, long
- The sequence-level report counts meetings booked within emails only; per-channel numbers live in Reports → Team performance
- Replies on behalf of teammates always send from the thread's connected account
## Related
- [Reply management](/capabilities/reply-management) — the capability view
- [Knowledge bases](/specifications/knowledge-bases) · [Inbox](/specifications/inbox) · [Conversations](/specifications/conversations)
- [Process replies](/how-to/process-replies) — the task-level guide
- [Reply classification](/learn/reply-classification)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — inbox and contact status endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents triage threads, manage handlers, and send replies
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the `inbox-triage` skill
---
# Sync Reply with a CRM
> Connect Salesforce, HubSpot, or Pipedrive — Default vs Custom profiles, sync steps with field, filter, and ownership mappings, pushing contacts to sequences, and the 2-hour sync cadence.
**Connect Salesforce, HubSpot, or Pipedrive natively, pick the Default profile or build Custom sync steps with field mappings, filtering rules, and ownership mappings, and optionally push synced contacts into sequences. Contact sync runs about every 2 hours with a manual Sync now option; Pipedrive triggers fire through webhooks in real time.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **Outcome** | Contacts, statuses, and outreach activity consistent between Reply and the CRM, with synced contacts optionally flowing into sequences |
| **Required objects** | A CRM account with connect rights (Salesforce/HubSpot login, or a Pipedrive API key), [contacts](/specifications/contacts), a mapping plan |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Automatic sync runs every 2-3 hours (Salesforce and HubSpot document every 2 hours); Sync now forces an immediate pass |
| **Stops on** | Activity for a contact that does not yet exist in both systems is not synced; converted Salesforce leads cannot be updated |
| **Does not** | Support multi-select picklist contact fields; sync manual LinkedIn tasks or historical LinkedIn activity; sync out-of-office and auto-reply emails |
| **Plans** | Ownership mappings require Team Edition (or a team owner in Private mode) |
## Goal
Reply and the CRM agree: contacts exist in both, outreach activity — emails, tasks,
calls, notes, LinkedIn steps — is visible to sales in the CRM, statuses and inbox
categories update lead statuses, and CRM contacts can flow straight into sequences.
## When to use this workflow
A CRM is the system of record for pipeline and Reply is the execution layer for outreach —
that is, most real deployments.
## What Reply provides
Native integrations with Salesforce, HubSpot, Pipedrive, and Copper CRM, plus Zapier for
everything else. Each native integration offers a **Default profile** (preset sync steps,
start immediately, not editable) and a **Custom profile** (your own steps, directions,
field mappings, filtering rules, and ownership mappings), a Logs tab, and a **Sync now**
button on top of the automatic cadence.
## What you must provide
The ownership decision per field and per direction (which system wins), the field-mapping
plan, and — in teams — the owner pairs that route synced contacts to the right people.
## Preconditions
Connect rights in the CRM (Salesforce and HubSpot connect via login; Pipedrive uses the
API key from its Settings → API page); Team Edition for ownership mappings; in teams, set
the integration up from the team owner's account and map the rest via ownership mappings.
## Flow
```text
connect CRM → choose Default or Custom profile
→ add sync steps (direction per step)
→ map fields → add filtering rules → map owners (Team Edition)
→ optional: People to sequence (pick sequence + step)
→ activate step toggles + integration toggle
→ automatic sync every 2-3 hours + Sync now · check Logs
```
## Step-by-step
1. **Connect the CRM.** Open the Integrations page, find your CRM, and click **Connect** — log in for Salesforce or HubSpot, or paste the Pipedrive API key. Native options are Salesforce, HubSpot, Pipedrive, and Copper CRM; other tools connect through Zapier.
2. **Pick the profile.** The **Default profile** ships preset sync steps and field mappings you cannot edit but can run immediately. The **Custom profile** lets you add as many steps as you need, flip each step's direction, and control mappings and filters per step.
3. **Add sync steps.** Contacts sync both directions (Salesforce Leads or Contacts ↔ People in Reply; HubSpot Contacts ↔ People; Pipedrive People ↔ People). Outbound activity steps push emails, tasks, calls, notes (Salesforce), and LinkedIn activities into CRM records; status steps map Reply contact statuses and inbox categories onto CRM lead statuses. Pipedrive does not sync LinkedIn activities.
4. **Map fields.** Required mappings: Salesforce Contacts need First Name, Last Name, and Email; Salesforce Leads additionally map Company to Account; HubSpot needs first name and email; Pipedrive requires the full name field (first name alone is enough). Beyond those, map any standard or custom fields. Reply does not support multi-select picklist contact fields in Salesforce, HubSpot, or Pipedrive integrations.
5. **Add filtering rules.** Load a default filter (Opened, Replied, Bounced, Opted out, To call, Clicked) or a smart filter you saved on the People page, so only the right records sync. HubSpot-to-Reply filters support at most two rules per filter — one rule when a date filter is used. Date filters evaluate in UTC.
6. **Map owners (Team Edition).** In each step's Ownership mappings, pair CRM owners with Reply owners — **Save and apply for all steps** copies the pairs everywhere. For CRM-to-Reply sync each CRM owner maps only once (Reply owners can repeat); for Reply-to-CRM the reverse. Do not combine Owner ID filters with ownership mappings, and switch off Salesforce automatic assignment rules — both interfere.
7. **Push synced contacts into sequences.** In the People to sequence section, pick the target sequence and step. **Ignore step delay** processes the contact as soon as the schedule opens; **Only for new records** skips updated records. One sequence per team member per sync step, and only owners included in your ownership mappings receive contacts.
8. **For Pipedrive, wire triggers.** People sync via API every 2 hours; the Triggers & Activity section works through webhooks in real time. Events — email sent, opened, link clicked, replied, inbox category Interested or Negative, task completed, call logged, note added — fire actions in Pipedrive: record activity for the person or deal, create a deal in a chosen pipeline, or move a deal to the next stage. Triggers do not create contacts and do not sync retrospectively.
9. **Activate and monitor.** Turn on each sync step's toggle and the integration's own toggle. Automatic sync runs every 2-3 hours; click **Sync now** to force a pass. The Logs tab shows what synced and how many records; a yellow dot next to the CRM means a sync is in progress. Synced contacts get a direct link to their CRM record in the contact card.
## Failure conditions
- **Activity not syncing** — the contact must exist in both systems first; sync contacts before emails, tasks, or calls
- **Converted Salesforce leads** — they sync into Reply, but updates to a converted lead fail with an error in Logs
- **Field fights** — multi-select picklists are unsupported, and unmapped statuses do not transfer; map values explicitly in the Fields mapping block
- **Slow HubSpot syncs** — HubSpot API rate limits mean 10,000+ record syncs take considerable time
- **Owner conflicts** — Owner ID filters combined with ownership mappings, or Salesforce auto-assignment rules, can stop contacts from syncing correctly
## Verification
Pick one test contact: create it in the CRM and confirm it appears in Reply after a sync
pass (or Sync now); enroll it and confirm the sequence email shows up on the CRM record
(Salesforce: Activity History); set an inbox category and confirm the mapped lead status
updates; check the Logs tab counts.
## Limits
- Automatic sync cadence: every 2-3 hours (Salesforce and HubSpot: every 2 hours); manual Sync now anytime
- Each email, task, and call syncs only once; out-of-office and auto-reply emails are not synced
- Calls become available for sync about 30 minutes after completion, so recordings are ready
- Tasks sync as completed only by default (toggle to include pending); CRM-side tasks default to medium priority
- LinkedIn activities: automatic steps only, and only those performed after the integration was enabled; Pipedrive does not sync them
- HubSpot-to-Reply filters: two rules per filter maximum, one with a date filter
- Multi-select picklist contact fields are not supported
## Related
- [Contact management](/capabilities/contact-management)
- [Contacts](/specifications/contacts)
- [Process positive replies](/workflows/process-positive-replies) — what generates the statuses you sync
- [Contact deduplication](/behavior/contact-deduplication) — how synced records match existing ones
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contacts and webhooks endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents connect and configure integrations
---
# Analyze campaign performance
> Read the sequence Stats tab and the Reports dashboards — key prospect metrics, per-step detail, channel efficiency, Trends period comparison, smart filters, and CSV exports.
**Read the sequence Stats tab for key prospect metrics and per-step detail, then the Reports Emails dashboard for team, sequence, template, account, and provider breakdowns. Compare channels on the Channel Efficiency dashboard, compare periods with Trends, narrow with smart filters, and export contact-based or sequence-based CSV reports.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **Outcome** | A keep, fix, or kill decision grounded in metrics whose definitions and denominators you know |
| **Required objects** | Sequences with enough send volume to read; tracking settings known — opens require open tracking enabled |
| **Surfaces** | UI · REST API · CLI |
| **Key limit** | Key metrics are prospect metrics — a contact receiving multiple step emails counts once; the Stats tab defaults to the last 7 days |
| **Stops on** | Nothing sends here — this is a read loop; it stalls only when volume is too small to read |
| **Does not** | Set your benchmarks or make the change decision; count a LinkedIn connection request without a note as contacted |
| **Plans** | The Owners filter and Team breakdown require Team Edition |
## Goal
A decision — keep, fix, or kill — grounded in numbers whose definitions you trust.
("Campaign" is the [former name](/specifications/campaigns) for a sequence.)
## When to use this workflow
On a cadence (weekly), and whenever a sequence underperforms expectations.
## What Reply provides
A per-sequence Stats tab (key metrics, performance chart, per-step Detail View with A/B
variant breakdowns), the Reports → Emails dashboard with five breakdown views and smart
filters, the Channel Efficiency dashboard across all outreach channels, Trends
period-over-period comparison, and contact-based, sequence-based, and Trends CSV exports —
all on the shared definitions in [Calculations](/reference/calculations).
## What you must provide
Benchmarks for your market, and the judgment about what to change.
## Preconditions
Enough volume to read (tiny samples mislead); knowledge of the tracking setup — with open
tracking disabled, opens read zero; the account timezone in mind, since report metrics
are tied to the date emails were sent.
## Flow
```text
sequence Stats tab: Total people → Contacted → Delivery rate
→ Open rate → Reply rate → Interested → Meetings booked
→ find the cliff → Detail View per step → diagnose that layer
→ Reports → Emails (team / sequences / templates / accounts / providers)
→ Channel Efficiency → Trends vs previous period → change one thing
```
## Step-by-step
1. **Open the sequence Stats tab.** It defaults to the last 7 days — switch the Time filter to All time or a custom range before judging anything. Key metrics are prospect metrics: multiple emails to one contact count once.
2. **Read the funnel left to right.** Total people → Contacted → Delivery rate → Open rate → Reply rate → Interested → Meetings booked → Opt-outs. The first big drop is the problem to work. The exact formulas and denominators live in [How statistics are calculated](/behavior/statistics-calculation) — the ones that matter most: Reply rate counts distinct contacts who replied via email, LinkedIn message or InMail, or a connection request with a note, divided by Contacted; Bounce rate divides by Total people, not Contacted.
3. **Check Not reached.** It bundles Out of Office, Bounced, and Auto Replied contacts — hover over the metric for the breakdown. High bounces point at list quality: see [Bounce handling](/behavior/bounce-handling) and [Deliverability](/capabilities/deliverability).
4. **Find the failing step in Detail View.** The Brief view shows each step's template with Delivery, Open, Reply, and Interested rates; the Detailed view adds Opt-out and Not reached columns. Step type icons identify email vs LinkedIn steps, and the variants toggle splits A/B performance per variant.
5. **Read the performance chart.** Bars break down Deliveries, Opens, Replies, Interested, and Meetings booked over time; Opt outs and Bounced are hidden by default — click them in the legend to reveal. Bounced and Opt-out bars group by the date the email was sent, not the date of the event.
6. **Widen to Reports → Emails.** Filter by email accounts, domains, sequences (including No sequence for direct emails), owners, and time. The detailed breakdown has five views — Team, Sequences, Templates, Email accounts, and Contacts by providers — every column sortable, the grid customizable via the gear icon. Contacts by providers is where provider-specific deliverability problems show up.
7. **Narrow with smart filters.** Filter report stats by country, state, city, industry, company, title, contact list, source CSV file, email validation status, sequence step, message type, or template — combine several and save the pattern for reuse.
8. **Compare channels.** The Channel Efficiency dashboard covers Automatic and Manual Emails, Calls, LinkedIn, Automatic and Manual SMS, and WhatsApp: total prospects contacted (unique), total touches, replies and reply rate relative to touches, meetings booked and conversion rate — with best-channel bars, circle graphs, and a segmented column chart over time.
9. **Compare periods with Trends.** In Reports → Emails, open the Filters panel, pick the current range, and enable Trends. Compare against the previous period aligned by weekdays, by calendar, or a custom range. Trends shows the percentage change per metric; for Bounce rate, Opt-out rate, and Not reached the logic reverses — a decrease shows green.
10. **Export and log the decision.** The Export button produces a contact-based CSV, a sequence-based CSV, or sequences with Trends (when Trends is enabled); the file lands in the Notification Center. Change one variable, note the date, and re-read after a full comparable window.
## Important rules
[How statistics are calculated](/behavior/statistics-calculation) — before comparing two
reports, know their denominators. The Total for multiple time ranges within a sequence
can exceed the overall total, and deleting a contact decreases it. Mismatches:
[Why do statistics not match?](/troubleshooting/statistics-do-not-match).
## Verification
The change moved the metric it targeted over the next full window — confirmed with Trends
against a weekday-aligned previous period — or it did not; either way you learned. Log it.
## Limits
- Stats tab default window: last 7 days; key metrics count each prospect once across steps
- Opens require open tracking enabled in the sequence; report data is historical and tied to the send date, in the account timezone
- A LinkedIn connection request without a note does not count as contacted; a contact reached on several channels counts once in Reply rate
- Bounced and Opt-out chart bars group by send date, not event date
- Reply rate is based on historical data and can change over time
- The Owners filter and Team view require Team Edition
## Related
- [Campaign analytics](/capabilities/campaign-analytics)
- [Statistics calculation](/behavior/statistics-calculation) · [Calculations](/reference/calculations)
- [Read sequence reports](/how-to/read-sequence-reports)
- [Statistics do not match](/troubleshooting/statistics-do-not-match)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — statistics and reporting endpoints
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — pull reports into scripts
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the `performance-analysis` skill
---
# Playbooks
> Situation-anchored outreach recipes — each page maps one specific sales situation to targeting, sequence structure, message templates, expected results, and the steps that build it in Reply.
**Each playbook page anchors to a specific sales situation — reviving closed-lost deals, founder-led outbound, a cold database, a lean team adopting an AI SDR, or inbound signals going cold — and walks from targeting through sequence structure, templates, and expected results to the exact steps that build it in Reply.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
A playbook is anchored to a specific situation, never a keyword. Each page starts from a
moment teams actually recognize — "our closed-lost pipeline is sitting untouched", "trial
signups keep going cold" — and works forward: who the play fits, how to target, the
sequence structure step by step, illustrative message templates, the results to expect,
and the numbered steps that build the whole thing in Reply.
> **Playbooks (this section) vs Playbook (Jason AI object).** These pages are human-readable
> outreach recipes. The [Playbook object](/specifications/playbooks) is Jason AI
> configuration — the machine version of a strategy. A page here may tell you which Playbook
> object to create.
## The plays
- [Reactivate closed-lost pipeline](/playbooks/reactivate-closed-lost-pipeline) — deals lost to timing, budget, or a competitor, reopened with what-changed messaging
- [Outbound for seed-stage founders](/playbooks/outbound-for-seed-stage-founders) — founder-led meetings from a small account list without burning the main domain
- [Re-engage a cold contact database](/playbooks/re-engage-cold-database) — hygiene first, a permission-style reopener, prune whatever stays silent
- [AI SDR for lean teams](/playbooks/ai-sdr-for-lean-teams) — Jason AI with approval gates for a one-to-three person GTM team
- [Book meetings from inbound signals](/playbooks/book-meetings-from-inbound-signals) — fast follow-up on visitors, downloads, and trials before intent decays
## Related
- [Workflows](/workflows) — complete outcomes with every product rule on the path
- [Learn](/learn) — the mechanisms these plays depend on, from deliverability to reply classification
- [Capabilities](/capabilities) — what Reply can and cannot do at the task level
---
# Reactivate closed-lost pipeline
> A play for deals lost 6–18 months ago to timing, budget, or a competitor — validate the aged list, segment by loss reason, reopen with what-changed messaging on Reply's default step delays, and close with a permission-style breakup.
**Segment closed-lost deals by loss reason, validate every address before sending, and run a short what-changed sequence on Reply's default step delays. Every follow-up needs a real reason to reach out; after a couple of follow-ups, send a permission-style breakup email and route interested replies straight to the owning AE.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Situation
Your CRM holds deals marked closed-lost 6–18 months ago. They evaluated you seriously,
then walked away over timing, budget, or a competitor — and nobody has touched them since.
Circumstances change: budgets reset, champions move, the chosen vendor underdelivers. This
pipeline already knows who you are, which makes it the warmest untouched list you own.
## Who this is for
| **Role** | Sales or RevOps leader with an AE team, or an AE working their own book |
| **Company size** | Any team with 50+ closed-lost deals worth revisiting |
| **Motion** | Sales-led, with CRM discipline around loss reasons |
| **Prerequisite** | Closed-lost deals exportable with loss reason, close date, and deal owner |
## The play
### 1. Targeting
Pull closed-lost deals from the last 6–18 months. Exclude anything lost on fit — "wrong
product", "no need" — because nothing has changed for those. Split the rest into three
segments by loss reason: timing, budget, competitor. Import each segment as its own
[list](/specifications/lists) so messaging stays segment-specific, and let
[deduplication](/behavior/contact-deduplication) reconcile contacts already in your
workspace.
A list this old has decayed, so validate it before anything sends. Reply's email
validation marks each address `Valid`, `Risky`, or `Invalid`: treat Risky as valid but
keep Risky addresses to no more than 20% of what you send to avoid high bounce rates, and
Reply does not send sequence emails to Invalid addresses at all. See
[prospect data](/specifications/prospect-data).
### 2. Sequence structure
When you add steps, Reply pre-fills the delay between them — 0 days before the first
step, then 2, 4, and 7 days for the next insertion positions. Weekends count, and one day
of delay is 24 hours. Lengthen the delays in the step editor if you want a slower pace.
| Step | Channel | Default delay | Purpose |
| --- | --- | --- | --- |
| 1 | Email | Sends on launch | Reopen with what changed since the deal closed |
| 2 | Email | 2 days after step 1 | Proof point matched to the loss reason |
| 3 | LinkedIn | 4 days after step 2 | Light touch from the AE's profile to keep the thread warm |
| 4 | Email | 7 days after step 3 | Permission-style breakup: worth revisiting, or close the file for good |
### 3. Messaging angles
- **Timing losses** — "you said the timing was wrong; here is what changed on our side since"
- **Budget losses** — lead with a lower-commitment starting point or new ROI evidence, not a discount
- **Competitor losses** — ask how the chosen tool worked out; a meaningful question focused on their situation is useful either way
- Every message references the original evaluation — this is a warm thread, not cold outreach
- Give every follow-up a concrete reason to exist and something of value to add; a follow-up with no reason reads as pressure
- Send the breakup only after a couple of follow-ups, when you really mean it — Reply's documented example subject line for this message is "Permission to Close Your Account?"
### 4. Timing and cadence
On the default delays the four steps fit inside roughly two weeks; stretch them if that
feels rushed for your deal size. Run one segment at a time so you can compare messaging,
and keep sends inside your normal windows and limits — see
[sending schedules](/behavior/sending-schedules). After the sequence ends, filter the
non-repliers by number of email views: prospects who kept opening but never answered are
the documented retargeting cohort — move them to a re-nurturing sequence with fresh
content, call them, or connect on social instead of re-running the same message.
### 5. Handling replies
Route interested replies to the deal's owning AE the same day they arrive — the prior
relationship is the asset, so the familiar name should answer. Reply's
[reply classification](/learn/reply-classification) separates interested from not-now;
park not-now replies in a follow-up list with a date instead of letting them vanish again.
The sequence stops automatically on any reply — see
[sequence stopping](/behavior/sequence-stopping). If you run this motion through Jason
AI, Re-engagement follow-ups configured in the knowledge base can revive threads that go
quiet — each one fires a set number of days after the last reply, in Auto or Draft mode.
See [the AI SDR model](/learn/ai-sdr-model).
## Templates
The templates below are illustrative examples, not sourced product templates.
Double-brace placeholders are Reply variables; nonstandard ones like `{{LostQuarter}}`
must exist as custom fields before launch.
```
Subject: {{Company}} + {{MyCompany}} — worth another look?
Hi {{FirstName}},
When we spoke in {{LostQuarter}}, the timing wasn't right on your side.
Two things have changed since then that I think matter for {{Company}}:
1. {{ChangeOne}}
2. {{ChangeTwo}}
Worth a fresh 20 minutes, or should I close the file?
{{SenderName}}
```
```
Subject: how did {{CompetitorName}} work out?
Hi {{FirstName}},
You went with {{CompetitorName}} back in {{LostQuarter}} — a fair call at
the time, and I'm not writing to relitigate it.
Genuine question: did it solve {{OriginalProblem}}? If yes, I'll close the
file. If parts still hurt, that's exactly what we've rebuilt since — happy
to show you what changed.
{{SenderName}}
```
## Expected results
| Metric | What to expect | Conditions |
| --- | --- | --- |
| Open and reply rates | Reply publishes no closed-lost benchmarks. For sequence outreach generally, Reply's top customers reach a 70–80% open rate and a 20%+ reply rate after the first email and 2–3 follow-ups — a ceiling, not a baseline | Depends on loss-reason accuracy and how serious the original evaluation was |
| Retargeting lift | Reply's guidance is that retargeting prospects who viewed emails but did not reply "usually brings positive results" — no numeric range is published | Requires view-based filtering and fresh content, not a re-send |
| Meetings | Results depend on list quality and offer — Reply does not publish benchmark rates | Varies with deal size and how much genuinely changed |
## Common mistakes
- Sending one generic "checking in" message to all loss reasons at once
- Skipping validation on a list that has aged 6–18 months, or sending a segment that is more than 20% Risky addresses
- Including deals lost on product fit — nothing changed for them
- Writing as if the relationship never existed, forcing the prospect to re-explain context
- Letting interested replies sit unassigned instead of routing them to the owning AE
- Re-running the play on the same contacts every quarter until they unsubscribe
## Build this in Reply
1. Export closed-lost deals with loss reason and owner from your CRM, or pull them through a [CRM sync](/workflows/sync-reply-with-a-crm).
2. [Import contacts](/how-to/import-contacts) into one list per loss reason — [contact management](/capabilities/contact-management) covers fields and ownership.
3. Validate the addresses: on the People page, select the contacts and click **Validate emails** (one batch at a time). Keep Risky under 20% of the send; Invalid addresses are excluded from email steps automatically.
4. [Create a sequence](/how-to/create-a-sequence) per segment using the four steps above — Reply pre-fills the delays; structure guidance in [sequence design](/learn/sequence-design).
5. [Launch](/how-to/launch-a-sequence) one segment first and confirm [enrollment](/behavior/contact-enrollment) picked up the list.
6. [Process replies](/how-to/process-replies) daily and hand interested threads to the owning AE — [reply management](/capabilities/reply-management) covers the routing. Afterward, filter non-repliers by email views and move the engaged ones to a re-nurture sequence.
## Related
- [Re-engage a cold contact database](/playbooks/re-engage-cold-database) — the same muscle applied to contacts rather than deals
- [Sequence design](/learn/sequence-design)
- [Process positive replies](/workflows/process-positive-replies)
- [Reply classification](/learn/reply-classification)
- [Bounce handling](/behavior/bounce-handling)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — import lists and create sequences programmatically
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents segment contacts and launch sequences conversationally
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted list import and launch
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — packaged outreach workflows
---
# Outbound for seed-stage founders
> A play for founder-led outbound — a separate business sending domain warmed for 2–3 weeks, ramp-up from roughly 10–15 emails a day, a tight 50–100 account list, and founder-voice messages of about five sentences.
**Run founder-led outbound on infrastructure that protects your main domain — a separate business domain, since Reply does not accept generic domains like gmail.com for sending, warmed up for two to three weeks before any cold email. Ramp volume gradually with Daily Ramp-up, keep messages short and specific in your own voice, and let a sequence handle follow-up discipline.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Situation
You are a founder selling your own product. No SDR, no sales team — maybe a co-founder
splitting calls with you. Your target market is narrow, 50–100 accounts that genuinely
fit, and you need meetings from it this quarter without gambling the company's main domain
on cold-email mistakes.
## Who this is for
| **Role** | Founder or founding team member doing the selling |
| **Company size** | Pre-seed to seed, roughly 1–10 people |
| **Motion** | Founder-led sales into a defined niche |
| **Prerequisite** | A clear ICP and a product you can demo |
## The play
### 1. Targeting
50–100 accounts, two to three contacts each. Never buy a list — build it against your ICP
with [prospect search](/capabilities/prospect-search) or the
[find prospects from an ICP](/workflows/find-prospects-from-an-icp) workflow, and
double-check it before it enters a sequence. The small list is the feature, not a
limitation: at this size every message can be genuinely specific, and specificity is the
only edge a founder has over a volume shop.
### 2. Sequence structure
Reply pre-fills the delay between steps as you add them — 0 days before the first step,
then 2, 4, and 7 days for the next positions (weekends count; one day of delay is 24
hours). Edit them in the step editor if you want more room.
| Step | Channel | Default delay | Purpose |
| --- | --- | --- | --- |
| 1 | Email | Sends on launch | Founder-to-operator note: the problem, why you built this |
| 2 | LinkedIn | 2 days after step 1 | Connection request from the founder's own profile |
| 3 | Email | 4 days after step 2 | One concrete proof point or early-customer story |
| 4 | Email | 7 days after step 3 | Short close: a direct ask or a graceful exit |
### 3. Messaging angles
- Write as a founder, not a rep — "I built this because" reads differently from a pitch
- Keep the body to about five sentences with one clear call to action; short emails outperform long ones
- Get personal in the first line and put the important information at the top
- Keep subject lines short — the guideline is 50 characters or less — and skip spam-trigger words like "Free"; drafting 15–20 subject line options before picking one is Reply's documented practice
- Never write in all caps or lean on exclamation marks
- Finish with a real signature — name, title, company, and website — because a credible sign-off adds the trust a cold note needs
### 4. Timing and cadence
The infrastructure sets the pace, not your impatience. A new domain needs its DNS
configured and checked first — see [SPF, DKIM, and DMARC](/learn/spf-dkim-dmarc) — and
then 2–3 weeks of warm correspondence with real contacts (opens, replies, marking
not-spam, forwards, across several mail providers) before any cold sends. A new mailbox
on an existing active domain still needs 1–2 weeks. MailToaster warm-up is included with
a paid Reply subscription, signs you in through your Reply session, and gives one warm-up
seat per connected mailbox — see [email warm-up](/learn/email-warm-up).
Then start low and ramp: Daily Ramp-up mode's default starts at 10 emails a day and adds
3 per day until 100, with a randomized 300–450 second delay between sends. Reply's
documented example schedule starts at 15 emails a day and only reaches 200 by day 20. The
hard ceiling is 400 emails a day per email account on paid plans (200 on trial), and a
sequence's daily limit can never exceed the account's — for this play you will never need
the ceiling. When replies are slow, fix the message, not the volume.
### 5. Handling replies
You are also the AE, so reply the same day — a founder answering personally is part of the
product demo. Interested replies go straight to a scheduling exchange; objections get a
real answer, not a template. Every reply stops the sequence automatically
([reply detection](/behavior/reply-detection)), and conversations collect in the
[inbox](/specifications/inbox) so nothing slips while you are building.
## Templates
The template below is an illustrative example, not a sourced product template.
Double-brace placeholders are Reply variables; nonstandard ones like `{{PainPoint}}` must
exist as custom fields before launch.
```
Subject: {{PainPoint}} at {{Company}}
Hi {{FirstName}},
I'm the founder of {{MyCompany}}. Before this I ran {{PreviousRole}}, and
{{PainPoint}} quietly ate a day of my week — so I built the thing I wished
had existed.
We now do {{OneLineWhatItDoes}} for teams like {{CustomerExample}}.
You run {{Function}} at {{Company}} — is this a problem worth 20 minutes?
{{SenderName}}
```
## Expected results
| Metric | What to expect | Conditions |
| --- | --- | --- |
| Open and reply rates | Reply publishes no founder-specific benchmarks. Its top customers reach a 70–80% open rate and a 20%+ reply rate after the first email and 2–3 follow-ups — a ceiling, not a plan | Varies with ICP tightness and message specificity |
| Meetings | Results depend on list quality and offer — Reply does not publish benchmark rates | Assumes real personalization, not volume |
| Domain health | Main domain unaffected, by design | Requires the separate business domain, DNS checks, and the full 2–3 week warm-up |
## Common mistakes
- Sending from the main company domain to save setup time
- Trying to connect a generic mailbox — Reply only accepts business domains for sending, not gmail.com or yahoo.com addresses
- Skipping or shortcutting the 2–3 week warm-up because the list is small
- Raising volume when replies are slow instead of fixing the message
- Writing like a rep — the founder voice is the entire advantage of this play
- Expanding to 500 accounts "to be safe" and losing the specificity that made it work
## Build this in Reply
1. Register a separate business sending domain and set up [SPF, DKIM, and DMARC](/learn/spf-dkim-dmarc) on it — Reply does not accept generic domains like gmail.com as sending accounts.
2. [Connect mailboxes](/how-to/connect-a-mailbox) on that domain and run [warm-up](/learn/email-warm-up) for 2–3 weeks before any real outreach — MailToaster is included with a paid subscription, one seat per connected mailbox.
3. [Configure sending limits](/how-to/configure-sending-limits): enable Daily Ramp-up (default 10 a day, increasing by 3) and keep the default 300–450 second delay between sends.
4. Build the account list — [find prospects from an ICP](/workflows/find-prospects-from-an-icp) — and [import contacts](/how-to/import-contacts).
5. [Create the sequence](/how-to/create-a-sequence) with the steps above, then [launch](/how-to/launch-a-sequence) and answer every reply yourself.
## Related
- [Email deliverability](/learn/email-deliverability)
- [Sender reputation](/learn/sender-reputation)
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign)
- [LinkedIn outreach](/capabilities/linkedin-outreach)
- [AI SDR for lean teams](/playbooks/ai-sdr-for-lean-teams) — when you are ready to hand the writing to an agent
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email accounts, limits, and sequences
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — run the whole setup conversationally from an agent
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scriptable account and sequence management
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — packaged launch workflows
---
# Re-engage a cold contact database
> A play for a CRM full of contacts untouched for a year or more — validate every address into Valid, Risky, or Invalid, keep Risky under 20% of the send, reopen with a permission-style message, and prune whoever stays silent.
**Clean before you send. Validate every address so Valid, Risky, and Invalid statuses are known, keep Risky under 20 percent of the send, and let Reply exclude Invalid addresses automatically. Reopen with a permission-style message that acknowledges the silence, then prune whoever stays silent after a couple of follow-ups instead of pushing harder.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Situation
Your CRM holds thousands of contacts nobody has emailed in 12+ months — old leads, event
lists, past evaluations. The data has decayed: people changed jobs, mailboxes were
retired, context evaporated. Sending to it as-is would spike bounces and damage sender
reputation; ignoring it wastes the cheapest pipeline you have.
## Who this is for
| **Role** | Marketing, RevOps, or sales ops owner of the database |
| **Company size** | Any — the play scales with list size |
| **Motion** | An existing database with inbound or outbound history |
| **Prerequisite** | A legitimate basis to email these contacts, and export access to the CRM |
## The play
### 1. Targeting
Hygiene before anything else. Export the database, drop role addresses (info@, sales@),
prior hard bounces, and unsubscribes, then run Reply's email validation on everything that
remains: on the People page, select the contacts and click **Validate emails** (one batch
at a time). Validation sorts addresses into `Valid`, `Risky`, and `Invalid`. Valid is safe
to sequence. Risky means the mail server says the recipient exists but the send may still
bounce — catch-all domains, disposable-address providers, honeypots — so treat Risky as
valid but keep it to no more than 20% of what you send to avoid high bounce rates.
Invalid contacts do not receive sequence emails at all. Segment by last-touch context
(demo request, event scan, newsletter signup), refresh titles and companies with
[data enrichment](/capabilities/data-enrichment), and import segment by segment into
[lists](/specifications/lists).
### 2. Sequence structure
Reply pre-fills the delay between steps — 0 days before the first step, then 2 and 4 days
for the next positions (weekends count; one day of delay is 24 hours). Stretch the delays
in the step editor if you want the three touches spread across two weeks instead of one.
| Step | Channel | Default delay | Purpose |
| --- | --- | --- | --- |
| 1 | Email | Sends on launch | Permission-style reopener: acknowledge the silence, offer an easy out |
| 2 | Email | 2 days after step 1 | One useful thing — a resource or insight, no ask |
| 3 | Email | 4 days after step 2 | Direct question tied to their original context |
Three touches, then out. This play deliberately has no long tail: contacts who stay silent
leave the list, not the sequence queue.
### 3. Messaging angles
- Acknowledge the gap — "we spoke a while back and then went quiet" beats pretending continuity
- Permission framing: asking whether you may reach out again is a documented follow-up practice — make "no" a one-word reply, and honor it permanently
- Anchor to the original context — the demo they requested, the event where you met — and give each touch a concrete reason to exist
- No product dump; a cold database needs a reason to re-open the relationship, not a feature list
- When a prospect keeps ignoring you, leave them alone — Reply's guidance is to send the breakup after a couple of follow-ups, when you really mean it; its documented example subject line is "Permission to Close Your Account?"
### 4. Timing and cadence
Start with the freshest, highest-intent segment and ramp outward only if bounce rates stay
acceptable — a stale list is exactly the kind of traffic
[bounce handling](/behavior/bounce-handling) exists for: Reply warns at a 4% sequence
bounce rate and stops the sending step at 8%. Keep daily volume well inside warmed
limits, because to receiving providers this looks like new sending behavior. Sequences
stop emailing `Bounced` contacts automatically; clear them out afterward from the
sequence's People tab — open the **Bounced** category and click **Remove from Sequence**
— and drop them from the database.
### 5. Handling replies
Interested replies route to sales the same day. "Not interested" and opt-outs go to a
permanent suppression list — recycling them into the next import is how databases earn
spam reports. If several segments run in parallel, a Team Owner can enable **Pause
contact in all sequences on reply** (and optionally the same-organization pause) under
Settings → Contact handling, so one reply halts every parallel thread; both options are
off by default and apply to business domains only. Silent after three touches means
pruned — though contacts who kept opening without replying are the documented retargeting
cohort: filter by number of email views and move them to a re-nurturing sequence with
fresh content, call them, or connect on social.
[Reply classification](/learn/reply-classification) sorts the queue.
## Templates
The template below is an illustrative example, not a sourced product template.
Double-brace placeholders are Reply variables; nonstandard ones like
`{{OriginalContext}}` must exist as custom fields before launch.
```
Subject: still the right person for {{Topic}}?
Hi {{FirstName}},
We last talked to {{Company}} back when you were looking at
{{OriginalContext}} — and then we did a poor job of staying in touch.
That's on us.
If {{Topic}} is still on your plate, I'd be glad to share what's changed
since. If not, reply "no" and I won't email again.
{{SenderName}}
```
## Expected results
| Metric | What to expect | Conditions |
| --- | --- | --- |
| Bounce rate after cleaning | Validation exists to keep this low: hold Risky under 20% of the send and stay clear of the 4% warning and 8% stop thresholds | Depends entirely on validation quality |
| Reply rate | Results depend on list quality and offer — Reply does not publish benchmark rates | Fresher, higher-intent segments respond measurably better |
| List shrinkage | Expect the database to end much smaller — that is the goal | Pruning non-responders is part of the play, not a failure |
## Common mistakes
- Emailing the raw export without validation and letting bounces burn the domain
- Sending Risky-heavy segments — more than 20% Risky addresses invites the bounce thresholds
- Sending to the entire database in week one instead of ramping segment by segment
- Pretending the relationship is current instead of acknowledging the gap
- Keeping silent contacts enrolled past three touches "just in case"
- Skipping suppression hygiene, so opted-out contacts resurface in the next import
## Build this in Reply
1. Export and pre-clean the database — drop role addresses, prior hard bounces, and unsubscribes before anything enters Reply.
2. [Import contacts](/how-to/import-contacts) segment by segment and [manage duplicates](/how-to/manage-duplicates) on the way in — see [contact deduplication](/behavior/contact-deduplication).
3. Validate every segment on the People page (**Validate emails**, one batch at a time); plan sends so Risky stays under 20%, and let Reply exclude Invalid addresses automatically.
4. Refresh stale fields with [data enrichment](/capabilities/data-enrichment), then [create the sequence](/how-to/create-a-sequence) with the three steps above and [launch](/how-to/launch-a-sequence) to the freshest segment first.
5. Watch [bounce handling](/behavior/bounce-handling), remove Bounced contacts from the sequence's People tab, [process replies](/how-to/process-replies) daily, and prune everything that stays silent.
## Related
- [Email deliverability](/learn/email-deliverability)
- [Bounce handling](/behavior/bounce-handling)
- [Reactivate closed-lost pipeline](/playbooks/reactivate-closed-lost-pipeline) — the deal-level version of this play
- [Contact management](/capabilities/contact-management)
- [Prospect data](/specifications/prospect-data)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — bulk contact import and list management
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents filter, segment, and enroll contacts
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted import and cleanup runs
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — packaged list-hygiene and outreach workflows
---
# AI SDR for lean teams
> A play for one-to-three person GTM teams that want outbound running without an SDR hire — Jason AI in Approval mode, one Offer, one Playbook object, a knowledge base with Re-engagement follow-ups, and Autopilot held to its defaults.
**Start Jason AI in Approval mode, where every generated message waits on the Pending approvals page until you approve, edit, or regenerate it. One Offer, one Playbook object, and a knowledge base ground what it writes. Keep Autopilot sourcing at its default ten contacts a day, and switch to Automatic mode only after approvals stop needing edits.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Situation
Your GTM team is one to three people wearing every hat. Outbound matters, but nobody has
the hours to research, write, send, and follow up — and hiring an SDR is premature. You
want the outbound motion running this quarter without adding headcount, and without
letting an unsupervised agent speak for the company.
## Who this is for
| **Role** | Founder, first marketer, or a one-person sales team |
| **Company size** | Startup with a working product and at least a few reference customers |
| **Motion** | Wants a steady outbound motion without an SDR hire |
| **Prerequisite** | A sellable offer you can describe honestly, and one hour a week for review |
## The play
### 1. Targeting
Define one ICP and hold it. Jason AI can suggest the ICP from your website plus a few
inputs like pain points and value, then source prospects against it in real time from
LinkedIn data using filters such as location, industry, and job title — or you bring your
own list; [find prospects from an ICP](/workflows/find-prospects-from-an-icp) covers both
routes. With Autopilot on, new contacts are added daily; the Sales Navigator Autopilot
source defaults to 10 contacts a day and 3 contacts per company (500 a day is the
maximum). Keep the defaults while trust builds; a second ICP comes only after the first
produces meetings.
### 2. Sequence structure
Jason AI generates the sequence from your inputs — emails and LinkedIn steps are added
automatically, and you can add calls, WhatsApp, SMS, or manual tasks. The table below is
an illustrative generated shape, not steps you author by hand.
| Step | Channel | Day | Purpose |
| --- | --- | --- | --- |
| 1 | Email | 1 | Opening message generated from the Offer and knowledge base |
| 2 | LinkedIn | 4 | Profile touch or connection request |
| 3 | Email | 7 | Follow-up angle: proof point or objection preempt |
| 4 | Email | 14 | Closing note with a clear ask |
### 3. Messaging angles
- The Offer carries who you sell to and what you offer them — audience, pain points, priorities; the knowledge base carries the product facts the AI must not invent
- When you create a sequence, Jason generates five Offers from your website and business inputs — one pre-selected, four more in the Offers section — each a different angle on the same product, differing by ICP and pain points
- Vague inputs produce vague messages — "we help companies grow" in the Offer guarantees generic output
- Fix problems upstream: editing an Offer with **Update original** improves every sequence that uses it; **Keep separate** forks a variant for one sequence so you can test without side effects
- The Playbook object sets the strategy layer — channels, structure, pacing — so generation stays consistent
### 4. Timing and cadence
The sending mode is the supervision dial, chosen per sequence. Start in **Approval
mode**: every generated message lands on the Pending approvals page (AI SDR → Pending
approvals) and nothing sends until you approve it. In the queue you can edit a message
directly, click **Regenerate** with a short prompt to steer a new version, and approve
one by one or in bulk; approved messages still respect the sequence's schedule and
limits. Deleting a queued message removes that prospect from the sequence entirely — it
is a rejection, not a skip. Your likes, dislikes, and edits feed Jason's AI Learnings —
inferred writing-style rules you can view, edit, or disable from the AI SDR tab — so
early reviewing compounds. Switch a sequence to **Automatic mode**, where Jason generates
and sends without waiting, only after the queue has stopped needing edits. Hold a fixed
weekly review either way; the model is described in
[the AI SDR model](/learn/ai-sdr-model).
### 5. Handling replies
Jason AI handles incoming replies your way: it either saves drafts for your review or
sends responses automatically — keep drafts longest, because this is where trust is won
or lost. It can also cover common replies like meeting requests and objections. For
threads that go quiet, configure Re-engagement in the knowledge base: each follow-up
fires a set number of days after the last reply (for example one after 2 days, another
after 5), in Auto or Draft mode, referencing the previous conversation on email or
LinkedIn. See [reply classification](/learn/reply-classification) for how the sorting
works.
## Templates
You do not write the messages — Jason AI does. What you control is the style: the
knowledge base and Re-engagement settings take instructions, a sample answer written in
your voice, and a tone of voice picked from confident, persuasive, witty,
straightforward, or empathetic. The example below is illustrative — a style reference you
might store, not a sourced product template.
```
Subject: {{PainPoint}} at {{Company}}
Hi {{FirstName}},
Noticed {{Trigger}} — in our experience {{PainPoint}} is usually close
behind.
{{MyCompany}} does {{OneLineWhatItDoes}}. {{CustomerExample}} used it to
{{ConcreteOutcome}}.
Open to 20 minutes next week?
{{SenderName}}
```
## Expected results
| Metric | What to expect | Conditions |
| --- | --- | --- |
| Email accuracy | Jason checks each email address before sending and aims for up to 98% accuracy | Product behavior — a deliverability guardrail, not a reply-rate promise |
| Approval workload | Front-loaded, then drops — AI Learnings turns your likes, dislikes, and edits into standing writing-style rules | Requires actually working the queue, not rubber-stamping it |
| Reply quality and meetings | Results depend on list quality and offer — Reply does not publish benchmark rates | The Offer and knowledge base set the ceiling on output quality |
## Common mistakes
- Starting in Automatic mode before Approval mode has proven the output
- Writing a vague Offer and expecting specific messages
- Correcting individual drafts forever instead of fixing the Offer and knowledge base
- Deleting queued messages casually — deletion removes the prospect from the sequence, it is not a skip
- Skipping the weekly review once things "seem fine"
- Running three ICPs at once before one of them works
## Build this in Reply
1. Follow [build an AI SDR](/workflows/build-an-ai-sdr) end to end — it is this play as a step-by-step workflow.
2. Create one [Offer](/specifications/offers): paste your website and let Jason generate the angles, then edit the audience, pain points, and proof points honestly.
3. Create one [Playbook object](/specifications/playbooks) for strategy and one [knowledge base](/specifications/knowledge-bases) with product facts; add Re-engagement follow-ups there.
4. [Connect a mailbox](/how-to/connect-a-mailbox), keep [sending limits](/how-to/configure-sending-limits) conservative, and leave Autopilot at its default 10 contacts a day and 3 per company while trust builds.
5. Launch with Approval mode selected as the sending mode — the [AI SDR capability](/capabilities/ai-sdr) page covers the modes — and hold the weekly review before considering Automatic.
## Related
- [Build an AI SDR](/workflows/build-an-ai-sdr)
- [The AI SDR model](/learn/ai-sdr-model)
- [AI SDR capability](/capabilities/ai-sdr)
- [Playbook object](/specifications/playbooks)
- [Outbound for seed-stage founders](/playbooks/outbound-for-seed-stage-founders) — the manual version of this motion
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — offers, playbooks, and knowledge-base endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents create Offers and Playbooks and work the approval queue
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted setup and review pulls
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the build-an-AI-SDR workflow as an installable skill
---
# Book meetings from inbound signals
> A play for inbound signals going cold — Website Visitors tracking and the RB2B integration feed identified visitors straight into a sequence, the first line names what the person did, and a connected calendar puts the booking link in the email.
**Follow up while the signal is warm — the quicker a situational email goes out, the more relevant it lands. Website Visitors tracking and the RB2B integration can add identified visitors to a sequence automatically, a connected calendar puts a booking link in your emails, and the sequence stops the moment someone replies.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Situation
Your site produces signals every week — product-page visits, content downloads, trial
signups — and most of them go nowhere because follow-up happens days later, if at all.
Intent decays by the hour: by the time a generic nurture email lands, the visitor has
forgotten the visit. The leads are not bad; the follow-up is late.
## Who this is for
| **Role** | SDR, marketer, or founder who owns inbound follow-up |
| **Company size** | Any team with a steady trickle of inbound signals |
| **Motion** | Product-led or content-led inbound feeding a sales conversation |
| **Prerequisite** | Signal capture in place — form fills, trial events, or visitor identification reaching a list or webhook |
## The play
### 1. Targeting
Capture the signals inside Reply so enrollment needs no human. **Website Visitors** puts
a tracking script in your site's header (guides cover WordPress, Shopify, Squarespace,
Wix, and Webflow); once the status shows Active, Reply creates contacts from identified
visitors and can add new ones automatically to the lists or sequences you choose —
existing contacts are updated, not re-enrolled. Before creating a contact, Reply checks
for an existing match by email, then LinkedIn URL, then first name + last name + company,
so visitor traffic does not create duplicates. You can require an email address or
LinkedIn profile before a visitor becomes a contact, which matters here because only
reachable contacts belong in this play. Accounts include 200 website visitor credits by
default, and AI SDR plans include Website Visitors. For US traffic, the **RB2B**
integration (RB2B Pro accounts, US-based traffic only) pushes identified visitors through
a webhook into a sequence, a list, or both — within minutes of the visit. Keep signal
types in separate [lists](/specifications/lists): a trial signup and a whitepaper
download deserve different first lines. Signals age fast — the quicker a situational
email goes out, the more relevant it lands — so stale signals go to standard nurture, not
this sequence.
### 2. Sequence structure
Step 1 sends as soon as the contact enrolls — and with Website Visitors or RB2B feeding
the sequence, enrollment can happen minutes after the visit. Reply pre-fills the later
delays (2, 4, then 7 days; weekends count, one day of delay is 24 hours); shorten or
stretch them in the step editor to fit how fast your signals cool.
| Step | Channel | Default delay | Purpose |
| --- | --- | --- | --- |
| 1 | Email | Sends on enrollment | Fast follow: name the signal, offer one relevant next step |
| 2 | Email | 2 days after step 1 | Booking link with a concrete agenda tied to the signal |
| 3 | LinkedIn | 4 days after step 2 | Light connect from the sender's profile |
| 4 | Email | 7 days after step 3 | Last check: answer one likely question, restate the link |
### 3. Messaging angles
- Customize the message around the person's recent activity — blog reading, trial signups, referrals, visits to high-intent pages; a sourced example subject line for this pattern is "Enjoying Your New eBook?"
- The first line names what they did — "you picked up the integration guide yesterday" — specific without being surveillance-toned
- Match the ask to signal strength: a trial signup earns setup help, a content download earns a related insight, not a demo push
- Have a good reason for every touch and end each exchange with a planned next step — both documented follow-up practices
- The booking link waits until step 2, after the first touch has established context; connect a calendar under Settings → Meetings and Reply generates a public meeting link from your availability, inserted with the **Book meeting link** button in the email editor — the link pre-fills the prospect's name, email, and phone where available
### 4. Timing and cadence
The whole play lives in the first week: four touches, then out. Automate enrollment so
the sequence starts the moment the signal fires — manual triage is where warm signals
die, and being prompt with automation keeping everything on track is the first documented
follow-up technique. Sending windows still apply
([sending schedules](/behavior/sending-schedules)), so set a schedule wide enough that a
Friday-evening signal is not answered on Tuesday.
### 5. Handling replies
Stop rules are the discipline: any reply ends the sequence automatically —
[sequence stopping](/behavior/sequence-stopping) and
[reply detection](/behavior/reply-detection) cover the mechanics. When a meeting is
booked through the calendar link, both sides get a confirmation email and a reminder 15
minutes before the call — finish the contact in the sequence yourself if they booked
without replying, because a fast-follow play that keeps sending after the meeting books
undoes its own credibility. Work incoming replies the same day from the
[inbox](/specifications/inbox), with
[reply classification](/learn/reply-classification) sorting interested from everything
else.
## Templates
The templates below are illustrative examples, not sourced product templates.
Double-brace placeholders are Reply variables; nonstandard ones like `{{ResourceLink}}`
must exist as custom fields before launch.
```
Subject: saw you started a {{ProductName}} trial
Hi {{FirstName}},
You spun up a trial this morning. Most {{Role}}s start with
{{CommonFirstTask}} — if that's you, this three-minute setup note saves
the usual first stumble: {{ResourceLink}}
Anything already in the way? Just reply.
{{SenderName}}
```
```
Subject: 15 minutes to map {{ProductName}} to {{Company}}?
Hi {{FirstName}},
Day two of a trial is usually where the real questions show up. If it
helps, I'll walk through how teams like {{CustomerExample}} set this up —
15 minutes, your use case, no slides.
Grab a slot: {{MeetingLink}}
{{SenderName}}
```
## Expected results
| Metric | What to expect | Conditions |
| --- | --- | --- |
| Speed to first touch | With Website Visitors or RB2B enrolling contacts automatically, outreach can start within minutes of the visit | Requires automated enrollment, not manual triage |
| Reply rate | Results depend on list quality and offer — Reply does not publish benchmark rates; its one documented timing rule: the quicker the situational email, the more relevant it lands | Decays as the signal ages |
| Meetings booked | Results depend on signal strength and offer — Reply does not publish benchmark rates | A calendar link with pre-filled details removes scheduling friction |
## Common mistakes
- Following up three days later with "just checking in"
- Running one generic sequence for every signal type
- Opening with a demo push when the signal was a casual content download
- Pointing RB2B at non-US traffic — the integration identifies US-based visitors only, and needs an RB2B Pro account
- Letting anonymous or unreachable visitors into the play instead of requiring an email or LinkedIn profile at capture
- Letting the sequence keep sending after the meeting books because nobody finished the contact
## Build this in Reply
1. Set up Website Visitors (Execution → Website Visitors → Add new): paste the tracking script into your site's header, confirm the status is Active, and pick the lists or sequences new visitor contacts should join. For US traffic, connect RB2B via the webhook URL on the Integrations page and map its fields.
2. Pipe the remaining signals — form fills, trial events — into one [list](/specifications/lists) per signal type via the API or a [CRM sync](/workflows/sync-reply-with-a-crm).
3. [Create a sequence](/how-to/create-a-sequence) per signal type using the steps above, connect a calendar under Settings → Meetings, and insert the **Book meeting link** button in the step 2 email.
4. [Launch](/how-to/launch-a-sequence) and confirm [enrollment](/behavior/contact-enrollment) fires on new signals and that [sequence stopping](/behavior/sequence-stopping) ends the sequence on reply.
5. [Process replies](/how-to/process-replies) same day and track speed-to-touch and booked meetings in [campaign analytics](/capabilities/campaign-analytics).
## Related
- [Reply classification](/learn/reply-classification)
- [Process positive replies](/workflows/process-positive-replies)
- [Reply management](/capabilities/reply-management)
- [Sequence stopping](/behavior/sequence-stopping)
- [AI SDR for lean teams](/playbooks/ai-sdr-for-lean-teams) — hand the fast-follow writing to an agent
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — push signal contacts and enroll them programmatically
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents enroll signal contacts and work the reply queue
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted enrollment from signal exports
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — packaged inbound follow-up workflows
---
# Specifications
> The authoritative definition of every Reply object — what it is, how it relates to other objects, its lifecycle, configuration, side effects, and edge cases.
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
A specification page is the canonical explanation of one product object. Capabilities say
what Reply can do; specifications say what the objects *are*. Every page follows the same
skeleton — definition, relationships, lifecycle, configuration, behavior, limits, edge
cases — so any section can be retrieved on its own.
## Data objects
- [Contacts](/specifications/contacts) — one record per person, with statuses, stages, and custom fields
- [Companies](/specifications/companies) — organizations grouping their contacts; Accounts in the app
- [Lists](/specifications/lists) — named collections of contacts or accounts for segmentation
- [Prospect data](/specifications/prospect-data) — Realtime B2B Data search, enrichment, and email validation
## Outreach objects
- [Sequences](/specifications/sequences) — the unit of execution (formerly "campaigns")
- [Sequence steps](/specifications/sequence-steps) — email, LinkedIn, call, SMS, WhatsApp, task, condition
- [Campaigns](/specifications/campaigns) — the legacy name, and where it survives
- [Email accounts](/specifications/email-accounts) — sending identities (mailboxes)
- [Schedules](/specifications/schedules) — when sending is allowed
## Conversation objects
- [Conversations](/specifications/conversations) — the message history with one contact
- [Inbox](/specifications/inbox) — workspace triage over all conversations
## Jason AI objects
- [Knowledge bases](/specifications/knowledge-bases) — sources and reply handlers that ground AI replies
- [Offers](/specifications/offers) — what you sell, as Jason AI's input
- [Playbooks](/specifications/playbooks) — reusable outreach strategies
## Planned
| Page | Status |
| --- | --- |
| Workspaces, users, teams | Not written |
| Tasks | Not written |
| Calls · Meetings | Not written |
| Messages | Not written |
| Integrations | Not written |
| Subscriptions · Credits | Not written |
## Related
- [Behavior](/behavior) — the deterministic logic that moves these objects
- [Entity relationships](/reference/entity-relationships) — the full object graph
- [Statuses](/reference/statuses) — every enum value
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — each object maps to an endpoint group
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
---
# Contacts
> The specification of the Reply contact — one record per person with profile fields, custom fields, an email validation status, 14 sequence statuses, and a separate pipeline stage. Called People in the app.
**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.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
> **Contact vs Company.** A Contact is a person; a [Company](/specifications/companies) is
> the organization the person belongs to. The Reply app labels these People and Accounts.
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | The 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 / Contains** | Belongs to one [company](/specifications/companies) at a time and an owner; member of any number of [lists](/specifications/lists); processed by [sequences](/specifications/sequences) |
| **Surfaces** | UI (People → Contacts) · REST API · MCP |
| **Key limit** | Up to **50** custom fields per account; contact storage **100,000** by default — see [Limits](/reference/limits) |
| **Lifecycle** | Statuses (14 values, up to 4 at once) track processing inside a sequence; a separate stage tracks engagement across all outreach |
| **Does not** | Send anything by itself, keep the Bounced status when moved to another sequence, or shed Opted Out — that status is retained even outside sequences |
| **Plans** | With 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](/specifications/prospect-data)
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](/specifications/lists), and bulk quick
actions such as email validation, enrichment, and moving to sequences.
## Relationships
| Relationship | Object |
| --- | --- |
| Belongs to | One [company](/specifications/companies) at a time, plus an owner — the team member responsible for the contact |
| Member of | Any number of [lists](/specifications/lists) |
| Processed by | [Sequences](/specifications/sequences) — statuses track processing per sequence; the contact card's Sequences tab lists current and past sequences |
| Enriched by | [Prospect data](/specifications/prospect-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](/specifications/prospect-data), 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](/behavior/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](/reference/statuses).
A contact that is part of a sequence carries statuses drawn from these 14 values:
| Status | Assigned when | Manual control |
| --- | --- | --- |
| **Active** | The contact is added to an active sequence — steps can be sent and replies tracked | Yes — can be changed to Paused, Finished, Out of office, or Opted Out; to Bounced or Replied only after at least one email was received |
| **Paused** | Set manually to temporarily halt sending and reply tracking | Yes — only for contacts that are in a sequence; revert to Active to resume |
| **Missing Data** | A template variable has no value in the contact's profile | Removal is manual — fill in the variable or remove it from the template; no emails are sent while set |
| **Bounced** | An email is returned undelivered | Can also be set manually after at least one email was sent; fix the address, remove the status, and set Active to resend |
| **Out of office** | An auto-reply with out-of-office key words is detected | Yes — further steps stop until the status is removed or the reply is processed automatically |
| **Finished** | The prospect replies, or all steps have been sent | Yes — back to Active only if steps remain or new steps were added; no sending or reply detection while set |
| **Contacted** | The contact received at least one email from the current sequence | No |
| **Opted Out** | The prospect clicks the opt-out link, or an unsubscribe reply is sorted into the Do Not Contact inbox category | Yes — can be set and removed manually; any team member can set it |
| **Replied** | The prospect responds by email (from the same address, or forwarded from a thread) or by SMS | Yes — the sequence stops by default; usually comes together with Finished |
| **Opened** | The prospect opens an email, with opens tracking enabled | No |
| **Clicked** | The prospect clicks a tracked link, with links tracking enabled | No |
| **Auto-replied** | An automatic reply is detected | No — cannot be set or removed manually; comes along with Finished |
| **To call** | The contact is moved to a Call step in a sequence | Yes — can also be set from the Contact sidebar |
| **Called** | Any call action — a completed Call task, a Cloud Calls call, or a logged call | Permanent — 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](/specifications/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
| Limit | Value |
| --- | --- |
| Custom fields per account | **50** (standard and AI combined) |
| Text custom field value | Up to **4000** characters |
| AI custom field value | Up to **1500** characters |
| Statuses per contact | Up to **4** |
| Stage name | **21** symbols maximum |
| Stage description | **512** symbols maximum |
| Contact storage | **100,000** by default — see [Limits](/reference/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](/behavior/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](/reference/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](/troubleshooting/email-was-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](/behavior/contact-deduplication) and
[Manage duplicates](/how-to/manage-duplicates).
## Related
- [Companies](/specifications/companies) · [Lists](/specifications/lists) · [Prospect data](/specifications/prospect-data)
- [Contact management](/capabilities/contact-management)
- [Import contacts](/how-to/import-contacts) · [Manage duplicate contacts](/how-to/manage-duplicates)
- [Statuses](/reference/statuses) · [Status transitions](/behavior/status-transitions)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contacts endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents search, create, and update contacts
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the `audience-building` skill
---
# Companies
> The specification of the Reply company record — Accounts in the app. How accounts group contacts, the eight account stages, account lists, CSV import modes, and filters.
**A company is Reply's record for one organization — Accounts in the app, Company in the API. Each account groups contacts, and one contact belongs to at most one account at a time. Accounts carry an eight-value stage enum from New to Closed-won and Closed-lost, plus account lists, CSV import with four merge modes, and filters.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
> **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
| Aspect | Detail |
| --- | --- |
| **What it is** | The record for one organization — Accounts in the app, Company in the API — grouping the contacts that belong to it |
| **Belongs to / Contains** | Contains [contacts](/specifications/contacts) — one contact can only be in one account at a time; member of account [lists](/specifications/lists) |
| **Surfaces** | UI (People → Accounts) · REST API · MCP |
| **Key limit** | CSV import of up to **10k** accounts per file |
| **Lifecycle** | Eight account stages, from New through Qualified and Negotiating to Closed-won or Closed-lost |
| **Does not** | Get enrolled in sequences (enrollment is per contact), hold a contact that already sits in another account, or copy contacts when duplicated |
| **Plans** | The Accounts feature is switched on from the People → Accounts page; existing prospect data is migrated into accounts when you enable it |
## Definition
An account groups contacts that belong to the same company or organization — for
example, Reply or Salesforce. Each account can include multiple contacts, making it
easier to see all interactions with a company in one place and choose the right person
to reach out to. The app calls the section **Accounts** (People → Accounts); the API
noun is Company. Accounts are created manually, imported from CSV, or formed
automatically from the contact information in your Reply account.
## Purpose
Companies add an organization level on top of individual contacts: account stages track
the pipeline from initial contact to deal closure, account lists group companies by
industry, region, or any other attribute, and the individual account page collects
company-wide activity, notes, and contacts in one place. Once Accounts are enabled,
company-level fields such as company size and industry are managed on the account rather
than on each contact.
## Relationships
| Relationship | Object |
| --- | --- |
| Contains | [Contacts](/specifications/contacts), assigned through the contact's Account field or the **Move to account** action — one contact can only be in one account at a time |
| Member of | Account [lists](/specifications/lists) — accounts can be added to multiple lists at once |
| Tracked by | Account stages, plus per-account activity feeds and notes |
## Creation
- **Manually**: People → Accounts → **New Account** → **Create manually**, fill in the fields, and save. You can also create an account inline from a contact's profile via **+ New Account** in the Account field.
- **CSV import**: **New account** → **Import from CSV**. Importable fields: Domain name, Account name, Domain secondary, Description, Email, Phone number, Industry, Company size, LinkedIn profile, Twitter profile, Country, State, City, Time Zone. The Account name is mandatory for mapping, and one file holds at most 10k rows. Company size accepts the values Empty, Self-Employed, 2-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000.
- **Automatically**: accounts are formed from contact information, and [data enrichment](/specifications/prospect-data) can create an account for an enriched company and link the contact to it.
When an imported account matches an existing one, the import's additional options decide
what happens:
| Import option | Effect |
| --- | --- |
| **Overwrite existing fields** | Imported data replaces the existing field values |
| **Update missing fields** | Only fields that are empty in the existing account are filled |
| **Skip** | Existing accounts are left untouched |
| **Duplicate** | The original account stays unchanged and a duplicate is created with the imported data |
The final import step reports how many accounts were imported, updated, and skipped,
plus failed rows — each with a downloadable file.
## Lifecycle and states
Account stages represent the phases of the outreach process with the account, from
initial contact to deal closure:
| Stage | Description |
| --- | --- |
| **New** | The account is new to the outreach pipeline |
| **Qualified** | Sales-qualified account |
| **Meeting booked** | A meeting is booked with a decision-maker |
| **Negotiating** | Negotiations are in progress |
| **Disqualified** | The account is not relevant |
| **On hold** | Contact later |
| **Closed-won** | The deal was completed successfully |
| **Closed-lost** | The deal was lost |
Stages are shown in the Accounts grid, on the individual account page, and in the
account sidebar. Set or change a stage with **Set stage**; selecting **None** removes
it. You cannot create new stages — only edit the existing ones (name, color, and
description) under Settings → Accounts → Account stages. The stage filter supports the
conditions **Equals**, **Does not equal**, and **None** (accounts with no stage set).
## Configuration
- **Enabling Accounts**: click **Enable Accounts** on the People → Accounts page and confirm. Reply migrates the prospects' data and creates accounts. Once enabled, the *Account company size* and *Account industry* fields become uneditable on contacts — that information is edited only in the Accounts tab.
- **Grid**: columns include Account Name, # of contacts, Domain, Country, City, Company Size, Sequences, Stage, Industry, Owner, and Last Activity Date. Customize order and visibility via the settings icon; any column sorts ascending or descending.
- **Account fields** (sidebar): Domain name, Account name, Domain secondary, Description, Email, Phone, Industry, Company Size, LinkedIn profile, Twitter profile, Country, State, City, Owner, Time Zone.
## Processing behavior
Newly created accounts appear at the top of the grid by default. Smart filters narrow
accounts by owner, creation date, number of contacts, stages, sequences, and more, with
the properties **Equals**, **Does not equal**, **Contains**, **Not contains**, and
**Is null**; default filters cover All owners, Activity date, and Saved filters.
The individual account page has four tabs — **Contacts activity**, **Notes**,
**Contacts**, and **Activity**. From the Contacts tab you can validate emails, move
contacts to a sequence or another account, change statuses, log meetings, blacklist or
unblacklist, export to CSV, and add new contacts (Import from CSV, Add from existing, or
Create manually). Contacts added there are linked to the account and added to the
general contact database.
## Side effects
- Enabling Accounts locks the *Account company size* and *Account industry* fields on contact records.
- **Duplicate** creates a copy of the account with the same information but without contacts; its name gets **(Copy)** appended by default.
- Because a contact can only be in one account at a time, moving it to another account replaces the previous link.
- LinkedIn URL enrichment always overwrites account fields with enriched values — there is no keep-existing option at the account level — and can move a contact to a different account when its company changed. See [Prospect data](/specifications/prospect-data).
## Limits
| Limit | Value |
| --- | --- |
| Accounts per CSV import | **10k** rows in one file |
| Accounts per contact | **1** |
| Account stages | **8** fixed values — editable, not extendable |
| Stage name | **21** symbols maximum |
| Stage description | **512** symbols maximum |
The support sources do not document a cap on the total number of accounts per workspace.
## Deletion behavior
Select the account(s) in the grid and click the **Delete** icon. Removing accounts from
a list is a separate action that requires typing REMOVE to confirm — the accounts stay,
only the list membership goes. The support sources do not document a cascade from
account deletion to its contacts; contacts are separate records on the People page.
## Edge cases
- The **Duplicate** import mode never merges: re-importing an existing account with it creates a second account while the original stays unchanged.
- A blacklisted contact stays linked to its account but does not receive emails or any other messages from the platform, even while still connected to sequences.
- Accounts can be formed automatically from contact information, so the Accounts page may list companies nobody created by hand.
- Filtering stages with the **None** condition is the way to find accounts that have no stage set.
## FAQ
### How does a contact get linked to a company?
Set the Account field while creating or editing the contact, use **Move to account** in
bulk from the People page, or let Reply form the account automatically from contact
information. One contact can only be in one account at a time. See
[Entity relationships](/reference/entity-relationships).
### Can a company be enrolled in a sequence?
No. Sequences process [contacts](/specifications/contacts). For account-based outreach,
open the account's Contacts tab, select the people you need, and move them to a
sequence from there.
### What happens when I import accounts that already exist?
The import's additional options decide: **Overwrite existing fields** replaces the data,
**Update missing fields** fills only empty fields, **Skip** leaves existing accounts
untouched, and **Duplicate** keeps the original and creates a copy with the imported
data.
### Does duplicating an account copy its contacts?
No. A duplicated account carries the same information but no contacts — add them later.
By default its name includes **(Copy)**, which you can change.
## Related
- [Contacts](/specifications/contacts) · [Lists](/specifications/lists)
- [Prospect data](/specifications/prospect-data)
- [Contact management](/capabilities/contact-management)
- [Entity relationships](/reference/entity-relationships)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — company endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
---
# Lists
> The specification of Reply lists — named collections of contacts or accounts for segmentation and team sharing, and how lists differ from filters and the blacklist.
**A list is a named collection of contacts — or, on the Accounts page, of companies — used to segment outreach. One contact can sit on any number of lists. Lists are created on the People page or during CSV import, shared with the team on Team Edition public mode, and are distinct from the blacklist, which suppresses sending.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | A named collection of [contacts](/specifications/contacts) (contact list) or [companies](/specifications/companies) (account list) used to segment outreach |
| **Belongs to / Contains** | Contains contacts or accounts; lives in the Lists panel of the People page; can be shared with the team |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | The same contact can sit on multiple lists — unlike filters or sequences |
| **Lifecycle** | Created → populated (grid actions, CSV import, or a [Realtime B2B Data](/specifications/prospect-data) search) → renamed, shared, or deleted |
| **Does not** | Enroll contacts in a sequence by itself, or suppress sending — suppression is the blacklist's job, not a list's |
| **Plans** | Sharing lists with the team requires the Public mode of Team Edition |
## Definition
A list is a named collection of contacts, managed in the **Lists** section of the
People → Contacts page. Unlike filters, which are positioned at the top of the Contacts
page, or sequences, lists offer the flexibility of having the same contact in multiple
lists. The Accounts page has its own lists panel for **account lists**, which group
companies — for example by industry or region.
## Purpose
Lists segment outreach: teams operating in the same Reply account use them to divide
clients, imports land contacts in the right segment, and each list reports tracking data
for its members — the number of Opens, Replies, and Opt-outs. Account lists additionally
serve as a targeting input for [Realtime B2B Data](/specifications/prospect-data)
searches, which can look for contacts only at the companies on an uploaded list.
## Relationships
| Relationship | Object |
| --- | --- |
| Contains | [Contacts](/specifications/contacts) or [companies](/specifications/companies) |
| Fed by | The **Move to lists** quick action, CSV import, and [Realtime B2B Data](/specifications/prospect-data) searches saved to a list |
| Distinct from | Filters (saved views over the grid) and the blacklist (a suppression mechanism) |
## Creation
Create a list from the Lists panel with the plus button — name it and click **Create**.
During a CSV import you can add the incoming contacts to a list directly from the Import
Contacts page, and you can split the contacts between 2, 3, or 4 lists (for example, for
A/B testing purposes). A Realtime B2B Data search can also save the contacts it finds to
a specific list. Account lists are created the same way from the Lists panel on the
Accounts page.
## Configuration
The three-dots menu on each list offers **Edit** (rename), **Share**, and **Delete**.
Sharing is available when the account is on the Public mode of Team Edition: shared
lists appear in a separate **Shared** section for the team, and access can be revoked
with the dedicated icon.
## Processing behavior
Adding contacts to a list is a grid action (**Move to lists**), separate from enrolling
them in a sequence — a list never sends anything by itself. See
[Contact enrollment](/behavior/contact-enrollment) for how contacts actually enter
sequences.
On the People page, contacts can be filtered by the account list their account belongs
to, where this filter is available for the team. The smart-filter property **Account
list** supports four conditions: **Is** (the account belongs to the selected list),
**Is not** (the account is not in the selected list — includes contacts with no
account), **Is set** (the account belongs to any account list), and **Is not set** (the
account is in no list — includes contacts with no account).
### Blacklist — suppression, not segmentation
The blacklist is a separate mechanism from lists: it prevents contacting people rather
than grouping them. A blacklisted contact will not receive your emails even if moved to
a sequence. You can blacklist an individual contact, all contacts within a domain, or
domains directly under Settings → Blacklist — entered manually or uploaded as a CSV.
Blacklisted contacts are marked with a black dot on the People page, and blacklisting is
reversible with **Unblacklist**. See [Contacts](/specifications/contacts) for the other
ways sending stops.
## Side effects
- Deleting a list removes only the list from your Reply account — it is a grouping, not the member records.
- Revoking a share removes the team's access to the list without touching its members.
- Blacklisting a contact from any list view suppresses all further sending to them, independent of list membership.
## Limits
| Limit | Value |
| --- | --- |
| Lists a contact can belong to | Multiple — no documented cap |
| Import split | Contacts can be split between **2, 3, or 4** lists during CSV import |
| Blacklist CSV | One column without a header, domains in `domain.com` format (no `http://` or `www.`), up to **10k** rows |
| Sharing | Public mode of Team Edition only |
The support sources do not document a cap on the number of lists or on members per list.
## Deletion behavior
**Delete** in the list's three-dots menu removes the list from your Reply account. The
member contacts or accounts remain as records on the People page — only the grouping
goes.
## Edge cases
- A paused Realtime B2B Data search may still add its last batch of 10-20 contacts to the target list before stopping.
- The account-list filter conditions **Is not** and **Is not set** include contacts that have no account at all.
- Blacklisted contacts remain visible in lists — marked with a black dot — but are excluded from sending.
## FAQ
### Does adding a contact to a list start outreach?
No. Lists organize contacts; moving contacts to a sequence is a separate action with its
own rules — see [Contact enrollment](/behavior/contact-enrollment).
### Can one contact be on several lists?
Yes. Unlike filters or sequences, lists allow the same contact in multiple lists, which
is what makes them useful for layered segmentation.
### How do I share a list with my team?
On the Public mode of Team Edition, open the list's three-dots menu and choose
**Share**. The list appears in the **Shared** section for teammates; revoke access with
the dedicated icon when needed.
### How is the blacklist different from a list?
A list groups contacts and never affects sending. The blacklist suppresses sending: a
blacklisted contact receives no emails even while moved to a sequence, and blacklisted
domains block every address under them.
## Related
- [Build a prospect list](/workflows/build-a-prospect-list)
- [Import contacts](/how-to/import-contacts)
- [Contacts](/specifications/contacts) · [Companies](/specifications/companies)
- [Prospect data](/specifications/prospect-data)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — lists endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
---
# Prospect data
> The specification of Reply's data services — Realtime B2B Data search, contact enrichment, AI custom field enrichment, and email validation, with the Reply credit cost of each.
**Reply Data spans Realtime B2B Data search over live LinkedIn data, contact and AI-field enrichment, and email validation with Valid, Risky, and Invalid statuses. Search and enrichment consume Reply credits — 1 per LinkedIn URL, 2 per email, 3 per phone number. Every user receives 50 basic credits; Email Volume and Multichannel plans include 50 per month.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | Reply's data services — Realtime B2B Data (Live Data) search over live LinkedIn data, contact enrichment, AI custom field enrichment, and the email validation service |
| **Belongs to / Contains** | Produces and updates [contacts](/specifications/contacts), saved to [lists](/specifications/lists), a [sequence](/specifications/sequences), or the account directly; enrichment can create and update [companies](/specifications/companies) |
| **Surfaces** | UI (Data and People pages, CSV import) · MCP · REST API availability varies by operation — check [docs.reply.io](https://docs.reply.io/api-reference/introduction) |
| **Key limit** | Reply credits: **1** per LinkedIn URL, **2** per email, **3** per phone number; every user receives **50** basic credits |
| **Lifecycle** | A search runs through Running → Finished, No new contacts, or Paused |
| **Does not** | Duplicate contacts already saved to your account, overwrite existing emails or phones during background LinkedIn enrichment, or charge Reply credits when enrichment fails with a system error |
| **Plans** | **50** Reply credits during the trial; Email Volume and Multichannel plans include **50** Reply credits per month, whether monthly or annual |
## Definition
Reply's prospect data services answer "where do contacts come from" and "how complete
are they". **Realtime B2B Data** (also called Live Data) provides live contact
information from LinkedIn based on your chosen filters. **Contact enrichment** fills in
missing LinkedIn URLs, emails, and phone numbers on existing contacts. **AI custom
fields** generate per-contact values from a prompt. The **email validation service**
classifies each address as Valid, Risky, or Invalid before you send.
## Purpose
Prospect data is the input side of outreach: build a list without bringing your own CSV,
complete the records you already have, and keep bounce rates down by validating
addresses before they enter a sequence.
## Relationships
| Relationship | Object |
| --- | --- |
| Produces | [Contacts](/specifications/contacts), saved to a specific [list](/specifications/lists), a [sequence](/specifications/sequences), both, or directly to your Reply account |
| Updates | Contact profile fields; [company](/specifications/companies) records during LinkedIn URL enrichment |
| Consumes | Reply credits (search, enrichment, AI fields) and separate email validation credits (validation) |
| Targeted by | Account [lists](/specifications/lists) — upload company domains and the search finds contacts at those companies |
## Creation
A search starts on the Data page: apply filters, check the preview of 5-7 matching
contacts, then click **Launch Live Search** and choose where to save the results — a
specific list, a sequence, both, or neither (saved directly to your account). Available
filters include a Sales Navigator search URL (unsupported filters such as Changed Jobs,
Posted on LinkedIn, or Shared Experiences are skipped with a note), an accounts list of
company domains, keywords, job title, department, locations, industry, Hiring on Social
Media, and exclusion variants of several of these. Two options widen the pool: **Add
contacts without email addresses** (such contacts cost 1 credit each) and **Find phone
numbers** (3 credits per number found). A **Contacts only** mode searches people without
linking them to a company; some filters, like Industry, are unavailable there.
## Lifecycle and states
The Search History tab tracks each search with its date, destination, status, used
credits, contacts found, and owner. A search's status is **Finished**, **No new
contacts**, **Running**, or **Paused**; per-search actions are View contacts, Use this
search again, Pause or Resume, and Delete.
Email validation assigns one of three statuses. **Valid** — verification completed with
no high-risk factors; safe to put into sequences. **Risky** — the recipient's mail
server stated the recipient exists but the address may still bounce: the domain is a
well-known disposable e-mail address provider, a catch-all, or hides a honeypot. Reply
recommends treating Risky as Valid, with the best practice of adding up to 20% Risky
emails to avoid high bounce rates. **Invalid** — a syntax, DNS, or mailbox error;
contacts with Invalid addresses do not receive sequence emails.
AI custom field enrichment leaves each field in one of four states: **Enriched**,
**Missing variables**, **No results found** (the AI processed the request but found
nothing — credits are charged), or **Failed** (a system error — credits are not
charged). All four are filterable on the People page and in sequence Condition steps.
## Configuration
- **Automatic email validation** (Settings → Emails): once the toggle is on, contacts added to a sequence are validated first, using your email validation credits. If a conditional sequence checks the validation status, allow at least 10 minutes of step delay per 1,000 contacts; the condition **Email Validation is set to Valid** with an empty No branch finishes invalid and risky contacts automatically.
- **Automatic LinkedIn URL enrichment** (Settings → Emails → LinkedIn URL enrichment): on by default — sequences with LinkedIn steps enrich contacts that are missing LinkedIn URLs. Toggle **Auto-enrich missing URLs** off to disable.
- **Enrichment modes**: **Keep existing data** only fills missing values; **Override with new data** also updates the job title and company name when more recent information is found.
## Processing behavior
Reply credits are the currency for search and enrichment:
| Operation | Cost |
| --- | --- |
| Live Data search — contact with a LinkedIn profile link but no email | **1 credit** |
| Live Data search — contact with a LinkedIn profile link and an email | **2 credits** |
| Live Data search — contact with a phone number | **3 credits** |
| Enrichment — LinkedIn URL | **1 Reply credit** |
| Enrichment — email address | **2 Reply credits** |
| Enrichment — phone number | **3 Reply credits** |
AI custom field enrichment also consumes Reply credits; the exact cost for a selection
is shown in the confirmation dialog before you confirm. To find emails, the contact's
full name and company name are required; LinkedIn enrichment also tries to find the
contact's job title and company name.
Contacts already saved to your account are not duplicated by default when a search
saves its results — see [Contact deduplication](/behavior/contact-deduplication).
During LinkedIn sequence steps, Reply collects contact data in the background at no
credit cost. Connect and View Profile steps always scrape the profile; Message, Voice
Message, AI Voice Message, Like Recent Posts, Follow Profile, and InMail scrape only if
the contact has not previously gone through any LinkedIn step; Endorse Skills never
scrapes. Collected data — email and phone (only into empty fields) plus the badge labels
Open to Work, Hiring, Creator mode, and Top Voice. An email that already belongs to
another contact is skipped.
Where the LinkedIn URL clean-up option is available, Reply can refresh a contact from
its existing LinkedIn URL: 1 credit per contact for the profile, plus 2 for an email
search and 3 for a phone search. Credits are charged per attempt rather than per result,
but contacts skipped before the lookup — no LinkedIn URL, a malformed URL, or a private
or non-existent profile — are not charged. The refreshed job title comes from the
current work experience entry, not the LinkedIn headline.
## Side effects
- Enrichment writes into the contact profile; saved LinkedIn URLs are normalized to the canonical format — see [Contacts](/specifications/contacts).
- With Accounts enabled, LinkedIn URL clean-up creates an account when none exists for the enriched company, relinks the contact if the company changed, and always overwrites account fields with enriched values — there is no keep-existing option at the account level. See [Companies](/specifications/companies).
- Completion is reported in the Notification Center: validation results, enrichment counts, and an AI-fields enrichment summary that links to a CSV of per-contact results.
- A search saved to a sequence puts its contacts directly into that sequence.
## Limits
| Limit | Value |
| --- | --- |
| Reply credits — every user | **50** basic credits |
| Reply credits — trial | **50** Reply credits for Live Data search |
| Reply credits — Email Volume and Multichannel plans | **50** per month, monthly or annual |
| Contacts without email addresses (option enabled) | **1 credit** each |
| Phone number found (option enabled) | **3 Reply credits** each |
| Email validation | One batch at a time; uses separate email validation credits bought as an add-on |
| Risky-share guideline | Up to **20%** Risky emails in an audience |
| Automatic validation timing guideline | At least **10 minutes** per 1,000 contacts before a condition checks the result |
More platform-wide values: [Limits](/reference/limits).
## Deletion behavior
Deleting a search from the Search History tab removes the search entry from your
history. The contacts it saved are ordinary contact records, managed from the People
page like any others.
## Edge cases
- Pausing a search does not stop it instantly — the system may still add the last batch of 10-20 contacts before stopping.
- With **Find phone numbers** enabled, contacts are still added even when no valid number can be found.
- A prospect with an Invalid validation status can still be moved to a sequence if the sequence has no email steps at the moment — this covers the API as well.
- AI field enrichment charges credits on **No results found** but not on **Failed** — the two statuses are distinct and separately filterable.
- Background LinkedIn enrichment never overwrites existing values, with one exception: a system-generated placeholder email can be replaced by a real email found on LinkedIn.
## FAQ
### What do Reply credits pay for?
Live Data search reveals (1, 2, or 3 credits per contact depending on whether it comes
with a LinkedIn link, an email, or a phone number), contact enrichment lookups (1 per
LinkedIn URL, 2 per email, 3 per phone), and AI custom field enrichment. Email
validation uses separate email validation credits, purchased as an add-on.
### Does re-running a search import duplicates?
No. Contacts already saved to your account are not duplicated by default, and the **Use
this search again** action applies the same filters to find a new batch of contacts.
### Why did enrichment not overwrite a contact's email?
Background enrichment during LinkedIn steps adds email and phone only into empty fields,
and the **Keep existing data** mode fills blanks without touching populated fields. Use
**Override with new data** (or **Replace all**, where the clean-up flow is available)
when you want newer values to win.
### What is the difference between Risky and Invalid?
Risky means the recipient's server said the address exists but delivery may still fail —
a disposable-address domain, a catch-all, or a honeypot; treat it as Valid and keep such
addresses to at most 20% of an audience. Invalid means a syntax, DNS, or mailbox error;
Reply does not send sequence emails to Invalid addresses.
## Related
- [Prospect search](/capabilities/prospect-search) · [Data enrichment](/capabilities/data-enrichment)
- [Find prospects from an ICP](/workflows/find-prospects-from-an-icp)
- [Contacts](/specifications/contacts) · [Lists](/specifications/lists) · [Companies](/specifications/companies)
- [Bounce handling](/behavior/bounce-handling) · [Limits](/reference/limits)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — check per-operation status for data endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · Agent surfaces: [agents.reply.io/apis](https://agents.reply.io/apis)
---
# Sequences
> The authoritative specification of the Reply sequence — ordered outreach steps, enrolled contacts, up to 100 sending accounts, the General and Replies settings, and the six toggle states. Formerly called a campaign.
**A sequence is Reply's unit of outreach execution: ordered steps, enrolled contacts, up to 100 assigned email accounts, a schedule, and settings such as Max new daily contacts and Max number of emails per day (up to 10,000). Its toggle shows six states, from green Active to blue Completed. Replies either finish the contact or sending continues.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
> **Sequence vs Campaign.** One object, two names — "campaign" is the legacy name still used
> in older articles and API payloads. Current product and API say
> [Sequence](/specifications/sequences); the [Campaigns page](/specifications/campaigns)
> explains the history.
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | Ordered outreach steps plus enrolled contacts, assigned accounts, a schedule, and settings — Reply's unit of execution |
| **Belongs to / Contains** | Contains [sequence steps](/specifications/sequence-steps) (Email, LinkedIn, Call, WhatsApp, SMS, Zapier, Task, Condition); enrolls [contacts](/specifications/contacts); sends through up to 100 [email accounts](/specifications/email-accounts); timed by a [schedule](/specifications/schedules) |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Up to **100** email accounts per sequence; *Max number of emails per day* configurable up to **10,000** first-step emails |
| **Lifecycle** | New → Active → Paused → Archived; the toggle shows six colors, from green (Active) to blue (Completed) |
| **Does not** | Copy contacts or metrics when duplicated, restore after Delete, or come back from Archived — archiving is permanent |
| **Plans** | All plans; Team Edition adds Public/Private ownership rules |
## Definition
A sequence is an ordered set of outreach steps plus the contacts enrolled into it, the email
and LinkedIn accounts that execute it, the schedule that times it, and the settings that
constrain it. **"Campaign" is the former name of the same object** — see
[Campaigns](/specifications/campaigns).
## Purpose
The sequence is Reply's unit of execution. Everything that sends, waits, follows up, or stops
happens inside a sequence: a contact is enrolled, moves through steps on a schedule, and exits
when the sequence finishes, a reply arrives, or a stopping rule fires.
## Relationships
| Relationship | Object |
| --- | --- |
| Contains | [Sequence steps](/specifications/sequence-steps) — Email, LinkedIn, Call, WhatsApp, SMS, Zapier, Task, plus Condition steps that branch the flow into Yes and No paths |
| Enrolls | [Contacts](/specifications/contacts), managed on the **People** tab with preset filters (All, Opened, Replied, Bounced, Opted Out, Calls, Clicked) and a Lead's Progress vs History view per step |
| Executes through | Up to 100 [email accounts](/specifications/email-accounts), assigned to contacts round-robin, and LinkedIn accounts |
| Timed by | A [schedule](/specifications/schedules) — sending windows, timezone, holiday calendars |
| Owned by | The team member who created it; in Team Edition only the Owner can change sequence settings such as email accounts or schedules |
| Organized in | Folders on the **Sequences** page |
| Reported by | Sequence statistics and [campaign analytics](/capabilities/campaign-analytics) |
## Creation
Create a sequence from the **Sequences** page, duplicate an existing one, or save one as a
template for reuse. Sequences can also be generated by [Jason AI](/capabilities/ai-sdr).
Contacts are added through *Import from CSV*, *Add from existing*, or *Create manually*.
**Duplicate** copies all steps, settings, and templates — but not contacts or metrics; the
copy is named *original name + "- Copy"* and starts with the *Paused* status. Over the API,
sequences are managed through the v3 sequences endpoints — see the
[API reference](https://docs.reply.io/api-reference/introduction).
## Lifecycle and states
The **Sequences** page filters sequences by status: **New**, **Active**, **Paused**, and
**Archived**. The toggle next to each sequence starts or pauses it, and its color reports
execution health — hover over it for a tooltip with details:
| Toggle color | State | Meaning |
| --- | --- | --- |
| **Green** | Active | The sequence is running — launched, restarted, or working through its steps (planning, checking conditions, sending emails, generating tasks, executing LinkedIn actions) |
| **Gray** | Inactive | Newly created and not launched, paused, or archived |
| **Red** | Action required | Missing or invalid settings block the run: sending email account removed or disconnected, LinkedIn account removed, sending errors, no contacts, missing schedule, or suspension at an 8% bounce rate — see [Bounce handling](/behavior/bounce-handling) |
| **Orange** | Issues detected / Warnings | Some contacts lack a sending email or LinkedIn account, contacts are missing required data, a provider blocked some accounts, the sequence reached a 4% bounce rate, or a voice profile is missing |
| **Yellow** | Limits reached | Temporarily paused by a limit: email account daily limit, active contacts limit for the billing period, sequence daily limit, LinkedIn's weekly connection-request limit, or a provider's daily sending quota |
| **Blue** | Completed | All contacts finished the sequence; no active contacts are left |
Archiving requires the sequence to be *Paused* first. Archived sequences keep their metrics
and sit in the *Archived* list at the bottom of the **Sequences** page, but the only action
still available on them is deletion — **you cannot unarchive a sequence**. Move prospects to
a separate list before archiving if you plan to reuse them.
## Configuration
Settings live on the sequence's **Settings** tab. General settings (labels as they appear in
the product):
| Setting | Controls |
| --- | --- |
| Plain text sending mode (text-only) | Removes HTML code, link tracking, and pictures to improve deliverability |
| Opens tracking | Adds an open-tracking pixel; disabled by default |
| Link tracking | Tracks clicks on links; disabled by default |
| Enable List-Unsubscribe header for all emails from this sequence | Adds the unsubscribe header as an extra opt-out route |
| Max same-domain contacts per day | Caps contacts sharing one company domain contacted per day, excluding common free domains such as gmail.com and yahoo.com |
| Matching email providers | Pairs contacts with sending addresses on the same email provider |
| Max new daily contacts | How many new contacts start the sequence each day; new contacts wait in the **Throttled** state while the system prepares them for Step 1 |
| New daily contact addition mode | *Add full amount* adds the full number daily regardless of the Step 1 backlog or the schedule; *Add until capacity* (default) only tops up to the limit and does not add contacts on days the schedule is closed |
| No limit on new daily contacts | Skips throttling entirely — new contacts move straight into Step 1 |
| Max number of emails per day | Cap on first-step emails, up to **10,000** |
| Delay between each email sent (seconds) | Pause between individual sends; **120–180 seconds** recommended, and the system adds roughly **10–15 seconds** of its own |
*Max new daily contacts* overrides *Max number of emails per day*: the system prepares
contacts for Step 1 every day, **including weekends**. With *Max number of emails per day*
at 400 and *Max new daily contacts* at 100, the sequence sends 100 first-step emails per day
and distributes the remaining 300 across follow-up steps. The capacity snapshot for *Add
until capacity* is recalculated once per day at UTC midnight, and blacklisted contacts on
Step 1 do not consume daily slots.
**Replies handling** decides what a reply to a sequence email does: **Mark as finished**
stops further follow-ups for that prospect, **Continue sending emails** sends the remaining
sequence. A separate option, *Switch contact to 'Finished' state if the last step email is
sent and no reply is received*, closes out unresponsive contacts. A reply to a **direct**
email (not a sequence email) sets the *Replied* status but not *Finished* — it does not stop
the contact in the sequence.
**Tasks handling** controls Call and Task steps: in manual mode a contact does not advance
until the task is completed; in automatic mode the contact moves on after the step delay even
if the task was not finished. In Team Edition Public mode, generated tasks can be assigned to
the sequence owner or to each contact's owner.
## Processing behavior
When active, the sequence walks each enrolled contact through the steps in order, inside the
schedule's windows and daily limits. Contacts are assigned to the sequence's email accounts
one by one (round-robin), and all follow-ups for a contact are sent from the same account as
the first email unless that account is removed from the sequence. Condition steps route each
contact into a Yes or No branch; a monitored condition is re-checked every **10 minutes** for
its set duration. The full selection and ordering logic is specified in
[Sequence execution](/behavior/sequence-execution) and
[Mailbox selection](/behavior/mailbox-selection).
## Side effects
Starting a sequence schedules and sends messages, creates tasks for manual steps, updates
per-contact statuses, and updates statistics. The **People** tab shows a counter of emails
sent in the past 24 hours. Pausing stops future sends but does not retract state — see
[Sequence stopping](/behavior/sequence-stopping).
The **Sequences** page reports PEOPLE, OPEN RATE, REPLY RATE (red at 0–3%, yellow at 3–10%,
green above 10%), PROGRESS (the ratio of Active to Finished prospects), OWNER, and DELIVERED
per sequence.
## Limits
| Limit | Value |
| --- | --- |
| Email accounts per sequence | Up to **100** |
| Max number of emails per day | Up to **10,000** first-step emails; effective sending is also bounded by each account's own daily limit |
| Delay between each email sent | Recommended **120–180 seconds**, plus roughly **10–15 seconds** of system overhead |
| Bounce-rate thresholds | Warning at **4%**, suspension at **8%** — see [Bounce handling](/behavior/bounce-handling) |
Account-level and plan-level caps stack on top — see [Limits](/reference/limits).
## Deletion behavior
**Delete** permanently removes the sequence — there is no way to restore it. Enrolled
contacts themselves are not deleted. **Archive** is the alternative for old sequences whose
metrics you still need: pause the sequence first, then archive. Apart from deleting, no
action can be performed on an archived sequence, and archiving cannot be undone.
## Edge cases
- Once a contact finishes a step, that step can no longer be changed for them in the original sequence — duplicate the sequence and move contacts over to edit completed steps or send contacts back to a completed step.
- When moving contacts into a sequence, the *Ignore step delay* option applies only to the first step they are moved to; later steps follow their scheduled delays.
- In a duplicated sequence, a follow-up step with a blank subject line sends without a subject — there is no previous email in the thread to inherit one from.
- A reply to a direct email sets *Replied* but does not stop the contact — only replies to sequence emails trigger the *Finished* handling.
- In Team Edition, changing a sequence's owner fails when some enrolled contacts belong to a team member who already uses them in their own sequences — remove those contacts or change their ownership first.
## FAQ
### Can a contact be enrolled in two sequences?
Yes. When moving contacts between sequences you can choose to keep them in both, and Team
Edition explicitly supports pushing the same prospect into sequences of different team
members. Cross-sequence conflicts are governed by
[Contact enrollment](/behavior/contact-enrollment).
### What happens when a prospect replies?
That depends on the *Replies handling* setting: **Mark as finished** stops further follow-ups,
**Continue sending emails** keeps the sequence going. Replies to direct emails set *Replied*
without stopping the contact. See [Reply detection](/behavior/reply-detection).
### Does duplicating a sequence copy contacts?
No. Duplicate copies all steps, settings, and templates only; the copy is named
*"- Copy"* and starts *Paused*. Move contacts over with **Move to sequence** on the
**People** tab.
### Why is my sequence's toggle red?
Red means action required: a sending email account was removed or disconnected, a LinkedIn
account was removed, there are sending errors, the sequence has no contacts, the schedule is
missing, or the sequence was suspended at an 8% bounce rate. See
[Why is a campaign not running?](/troubleshooting/campaign-is-not-running).
### Can I unarchive an archived sequence?
No. Archiving is permanent — the archived sequence keeps its metrics for comparison but only
deletion remains available. Move prospects to a separate list before archiving if you plan to
reuse them.
## Related
- [Campaigns (legacy name)](/specifications/campaigns)
- [Sequence steps](/specifications/sequence-steps)
- [Sequence execution](/behavior/sequence-execution)
- [Sequence stopping](/behavior/sequence-stopping)
- [Create a sequence](/how-to/create-a-sequence)
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign)
- [Statuses](/reference/statuses)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequences endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — operate sequences from an agent
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — `reply` command over the v3 API
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the `campaign-launch` skill
---
# Sequence steps
> The specification of sequence steps — email, LinkedIn, call, SMS, WhatsApp, task, condition, and Zapier actions, with A/B variants, step delays, and manual or automatic task handling.
**A step is one action inside a sequence: email, LinkedIn, call, SMS, WhatsApp, task, Zapier, or a Yes/No condition. Automatic email steps send themselves; most other channels create tasks completed from the Chrome Extension. Each step defines a delay from the previous one (weekends included), and email steps support A/B variants distributed randomly.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | One action inside a [sequence](/specifications/sequences) — channel, content, and the delay from the previous step |
| **Belongs to / Contains** | Belongs to exactly one sequence; email steps contain A/B variants; condition steps contain Yes and No branches |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | One Zapier step per sequence; conditions on LinkedIn statuses need a step delay of at least **2 hours** |
| **Lifecycle** | Steps run in order; a condition splits its position into numbered sub-steps (Step 4 → **4.1 (Yes)** and **4.2 (No)**) |
| **Does not** | Advance a contact past an unfinished task in Manual mode, send manual emails anywhere except the Reply Chrome Extension, or send manual emails to blacklisted or opted-out contacts |
| **Plans** | All plans; assigning generated tasks to contact owners requires Team Edition Public mode |
## Definition
A step is one action inside a [sequence](/specifications/sequences): what to do, over which
channel, after what delay from the previous step. Steps are added on the **Steps** tab or in
the Sequence Wizard, and support templates and variables in their editors.
## Step types
| Type | Channel | Automated or task-creating | Notes |
| --- | --- | --- | --- |
| Email (automatic) | Email | Automated send | Sent from the contact's assigned [email account](/specifications/email-accounts); supports A/B variants |
| Email (manual) | Email | Creates a *Manual email* task | Labeled **Send manual email** in the step editor; completed only from the Reply Chrome Extension; exempt from the daily sending limits |
| LinkedIn | LinkedIn | Manual types create tasks; automatic LinkedIn steps also exist | Manual task types: **Message**, **Connect**, **InMail**, **View profile**; InMail requires a Sales Navigator account |
| Call | Phone | Creates a *Call* task | Handled from the **Tasks** page or the extension, with optional Cloud Calls; supports *Automatically call on opens* (recommended trigger: 4–7 opens) and *Pause on successful call* |
| SMS | SMS | Automated or manual | Automated SMS sends from the step template; the manual type creates a task |
| WhatsApp | WhatsApp | Semi-automated — creates a task | The contact moves to the next step once the task is sent or completed |
| Task | Manual to-do | Creates a task | *To-do* or *Meeting*; a reminder with notes, handled in the extension |
| Condition | — | Automated check | Splits the flow into **Yes** and **No** branches based on contact data or behavior |
| Action | — | Automated | Available action: *Move to Sequence* |
| Zapier | External apps | Automated trigger | Connects the sequence to 7,000+ apps on Zapier; one Zapier step per sequence |
**Conditions.** When a contact reaches a condition step, Reply checks the selected rules and
routes them into the Yes or No branch. A condition can *Monitor for* a duration — the system
re-checks every **10 minutes**, moves the contact on as soon as the condition is met, and
sends them down the No branch when the duration expires. Available conditions include Email,
Email Validation Status, LinkedIn URL, LinkedIn Connection Status, InMail Status, Phone
Number, Opens, Clicks, Views, ICP Score, and many contact-field and status filters. The
*LinkedIn Connection Status* and *InMail Status* conditions require the preceding step delay
to be at least **2 hours** (values below 2h are blocked; the default is pre-set to 2h) so the
system has time to detect the status from LinkedIn.
**Zapier steps** offer two behaviors: *Move to the next step immediately*, or *Wait for
action from Zapier to move to the next step*, where the contact pauses until Zapier signals
the sequence to continue.
## Variants
An email step can hold multiple **variants** (A/B) added with the **Add Variant** button.
Distribution is random — you cannot predict who receives variant A or B, and a contact who
received variant A in Step 1 may get variant B in Step 2. Variants can be cloned, edited,
paused, resumed, or removed, and per-variant metrics appear on the **Stats** tab under the
Brief/Detailed view with the A/B toggle turned on. Copying a step copies all of its variants
with the same content.
## Delays and ordering
Each step defines its delay from the previous one in days, hours, and minutes. **Weekends
are included** in the day count, and one day of delay equals 24 hours. Contacts already on a
step ignore a newly edited delay. Actual send time also depends on the
[schedule](/specifications/schedules) and daily limits — see
[When Reply sends](/behavior/sending-schedules).
When you add a new step, the system pre-fills a recommended default delay based on the
insertion position:
| Insertion position | Default delay |
| --- | --- |
| 1 (first step) | 0 days |
| 2 | 2 days |
| 3 | 4 days |
| 4 | 7 days |
| 5 | 9 days |
| 6 or later | 11 days |
In conditional sequences, two branches created from the same parent step receive the same
default delay. In an active sequence that already has contacts in progress, a step cannot be
inserted before Step 1 — steps can only be appended at the end.
## Processing behavior
Task-creating steps follow the sequence's **Tasks handling** setting. In **Manual** mode the
system does not finish the task or move the contact further until you complete the task. In
**Automatic** mode the contact is moved to the next step either when you finish the task or
automatically after the step delay, finishing the current task. When a Call or Task step is
the last step, the contact gets the *Finished* status after a specified number of days
(5 by default for Call steps). In Team Edition Public mode, generated tasks can be assigned
to the sequence owner or to each contact's owner.
## Side effects
Task-creating steps produce tasks on the **Tasks** page and in the Reply Chrome Extension.
The **Complete** button on the Tasks page marks a task as completed and moves the contact on
**without sending anything** — manual emails are actually sent only from the extension, where
the task's due date is the date and time of the sequence's next step. SMS replies are synced
into Reply and appear in the contact's activity log.
## Limits
| Limit | Value |
| --- | --- |
| Zapier steps per sequence | **1** |
| Minimum step delay before *LinkedIn Connection Status* or *InMail Status* conditions | **2 hours** — lower values are blocked; the default is pre-set to 2h |
| Default delay for a newly added step | 0 / 2 / 4 / 7 / 9 / 11 days by insertion position |
| Daily email volume | Bounded by the sequence and account limits — see [Limits](/reference/limits); manual email steps are exempt from the daily sending limits |
## Edge cases
- A contact without a phone number who reaches an automated SMS step stops on the step when tasks handling is manual, and moves further along the steps when it is automatic.
- Manual emails are never sent to blacklisted or opted-out contacts — the system reports an error for blacklisted contacts and does not generate the task at all for opted-out ones.
- Bounced contacts are automatically marked *Finished*; remove the *Bounced* status manually if you want them to continue to the next steps.
- A LinkedIn **View profile** task is not completed automatically by the extension — Message, Connect, and InMail tasks are, as soon as the action is done on LinkedIn.
- The *Last Touch* condition applies to email steps only, not LinkedIn steps.
## FAQ
### Which steps run automatically and which create tasks?
Automatic email, SMS (automated type), condition, action, and Zapier steps execute on their
own. Manual email, LinkedIn (manual types), call, manual SMS, WhatsApp, and task steps create
tasks, completed from the **Tasks** page or the Reply Chrome Extension. See
[Multichannel outreach](/capabilities/multichannel-outreach).
### How are A/B variants distributed?
Randomly. You cannot predict which contact gets which variant, and a contact who received
variant A in Step 1 may get variant B in Step 2. Compare per-variant metrics on the Stats
tab — see [How statistics are calculated](/behavior/statistics-calculation).
### What happens if I never complete a task in Automatic mode?
The sequence moves the contact to the next step after the step delay and finishes the current
task. In Manual mode the contact waits on the step until the task is completed.
### Why must a LinkedIn status condition wait 2 hours?
The system needs at least 2 hours to detect the connection or InMail status from LinkedIn, so
the step delay before *LinkedIn Connection Status* and *InMail Status* conditions cannot be
set below 2 hours.
### Can I add a step before Step 1 of an active sequence?
Not while contacts are in progress — the insert-at-top control is hidden and steps can only
be appended at the end. To restructure earlier steps, duplicate the sequence and move
contacts over — see [Sequences](/specifications/sequences).
## Related
- [Sequences](/specifications/sequences)
- [How a sequence executes](/behavior/sequence-execution)
- [Multichannel outreach](/capabilities/multichannel-outreach)
- [Create a sequence](/how-to/create-a-sequence)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence step and variant endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) · CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
---
# Campaigns
> Campaign is the former name of what Reply now calls a sequence. This page explains where the old name survives and routes to the sequence specification.
**A campaign is a sequence: the former product name for the same object. The old name survives in the legacy v1 API, in older support content and URLs, and in everyday speech; Reply's own help articles still say campaign when they mean sequence. New builds should use the v3 sequences endpoints on docs.reply.io.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
> **Campaign vs Sequence.** One object, two names — "campaign" is the legacy name for what
> the current product and API call a [Sequence](/specifications/sequences). This page covers
> where the old name survives; the full specification lives on the
> [Sequences page](/specifications/sequences).
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | The former name of the [sequence](/specifications/sequences) — one object, two names |
| **Belongs to / Contains** | Maps one-to-one onto a sequence; there is no separate campaign object model |
| **Surfaces** | Legacy v1 REST API and older help content — the current UI, v3 API, and MCP say sequence |
| **Key limit** | Sequence limits apply — see [Limits](/reference/limits) |
| **Lifecycle** | Sequence statuses apply: New / Active / Paused / Archived |
| **Does not** | Exist as a separate object — creating a "campaign" creates a sequence |
| **Plans** | All plans |
## One fact
**A campaign is a sequence.** "Campaign" is the former product name for the same object;
Reply renamed it, and this site uses **sequence** everywhere. The full specification lives
at [Sequences](/specifications/sequences).
## Where the old name survives
| Place | What you'll see |
| --- | --- |
| Legacy v1 API | Campaign-named endpoints returning sequence data; the v1 representation differs from v3 (for example, status is reported as a numeric code) — [docs.reply.io](https://docs.reply.io/api-reference/introduction) is the source of truth for both |
| Reply's own help content | Older support articles use the two words interchangeably — "your campaign" for a sequence, "the campaigns will resume", "campaigns still using this schedule" — and older article URLs still live under campaigns paths |
| Common speech and search | "Launch a campaign", "campaign analytics" — this site keeps those phrases in workflow titles because that is what people search for |
| Older integrations | References to campaigns that map one-to-one onto sequences |
## Mapping legacy to current
| Legacy (v1) | Current (v3) |
| --- | --- |
| Campaign | [Sequence](/specifications/sequences) |
| Campaign status (numeric code) | Sequence status — New / Active / Paused / Archived; see [Statuses](/reference/statuses) |
| Campaign statistics fields | Sequence counters — see [Calculations](/reference/calculations) |
## Limits
A campaign is a [sequence](/specifications/sequences), so sequence limits apply: daily
sending volume, per-account caps, and throttling. See [Limits](/reference/limits).
## FAQ
### Is a campaign different from a sequence in Reply?
No. They are the same object — "campaign" is the former name, "sequence" the current one.
The full specification, including lifecycle, settings, and execution behavior, lives at
[Sequences](/specifications/sequences).
### Should new integrations use the v1 campaigns endpoints?
No. Build against the v3 sequences endpoints — the v1 campaigns endpoints are legacy and
return sequence data in the older representation. Consult
[docs.reply.io](https://docs.reply.io/api-reference/introduction) for both versions and
[Terminology](/reference/terminology) for the name mapping.
### Why do workflow titles on this site still say campaign?
Because that is what people search for. Pages like
[Launch an outbound campaign](/workflows/launch-an-outbound-campaign) keep the familiar
phrase in the title while the content uses sequence throughout — the same way Reply's own
help articles still say "campaign" when they mean a sequence.
## Related
- [Sequences](/specifications/sequences) — the real specification
- [Terminology](/reference/terminology) — every synonym mapping
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — v3 sequences endpoints (use these, not v1 campaigns, for new builds)
---
# Email accounts
> The specification of Reply email accounts (mailboxes) — plan-based allowances, connection methods from single-click to CSV bulk import, per-account delays, DNS health checks, opt-out settings, and MailToaster warm-up.
**An email account is a connected sending identity Reply sends and receives through; mailbox is the everyday synonym. Trial includes 2 accounts, Multichannel 5 (monthly) or 10 (annual), Agency plans unlimited; extra mailboxes cost $29/month. Generic domains such as gmail.com are rejected. Each account carries a daily limit, delay, signature, opt-out settings, and MailToaster warm-up.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
> **Email account vs mailbox.** Same thing — the app and many pages say "mailbox"; the
> canonical object name is Email account.
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | A connected email identity — address, sender name, domain — that Reply sends and receives through |
| **Belongs to / Contains** | Assigned to [sequences](/specifications/sequences) (up to 100 accounts per sequence, one account can serve many sequences); receives messages that become [conversations](/specifications/conversations) |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | **400** emails per day per account on paid plans, **200** on trial; included account counts are plan-based |
| **Lifecycle** | Connected (green dot) ⇄ disconnected — a disconnected account blocks sending for its sequences until reconnected |
| **Does not** | Accept generic domains such as gmail.com or yahoo.com for sending, warm itself up (warm-up runs through MailToaster), or detect bounces automatically on Mailgun and other plain SMTP relays |
| **Plans** | All plans — the number of included accounts differs by plan (see Limits) |
## Definition
An email account is a connected email identity — address, sender name, domain — that Reply
sends and receives through. "Mailbox" is the common synonym. Sequences execute email steps
through the accounts assigned to them, and one account always serves as the **default** —
the main account used to send emails.
## Purpose
Email accounts are the execution layer of email outreach: they hold the connection to the
provider, the daily sending limit, the sender name and signature, the opt-out settings, and
the safety settings that protect sender reputation.
## Relationships
| Relationship | Object |
| --- | --- |
| Assigned to | [Sequences](/specifications/sequences) — up to 100 accounts per sequence, contacts distributed round-robin |
| Receives | Incoming messages that become [conversations](/specifications/conversations); replies are matched by [reply detection](/behavior/reply-detection) |
| Protected by | MailToaster warm-up, safety settings, and the Email Health Checker's DNS checks — see [Deliverability](/capabilities/deliverability) |
## Creation
New accounts are added under **Settings → Email Accounts → New email account**. Connection
methods:
| Method | Use for |
| --- | --- |
| Single click — Gmail | Google mailboxes with IMAP enabled; with two-factor authentication, connect via Single Click or generate an app password for manual setup (imap.gmail.com port 993, smtp.gmail.com port 465, SSL enabled) |
| Single click — Outlook | Outlook/Office 365 accounts with IMAP enabled — it will not work with IMAP disabled |
| Single click — Exchange | EWS mailboxes on the Microsoft server; the API receives emails instead of IMAP |
| Exchange (on-premises) | EWS on private servers — the **Autodiscover** button finds the EWS endpoint from your email and password |
| Other Provider | Manual SMTP/IMAP settings; also used for aliases and for split sending/receiving servers (SendGrid, Mailgun) via the *I want to use different email servers for sending and receiving emails* toggle |
| Import from CSV | Bulk connection from a sample file with the columns Email, Daily Limit, Sender Name, SMTP Host, SMTP Port, SMTP Password, SMTP SSL, IMAP Host, IMAP Port, IMAP Password, IMAP SSL |
**Generic domains are rejected.** Addresses on generic domains like gmail.com and yahoo.com
cannot be added as sending accounts — Reply accepts only business or corporate domains, for
deliverability, reputation, compliance, and sending-limit reasons. A generic domain is still
fine as your Reply **login**.
A successful connection shows a green dot next to the email address.
## Lifecycle and states
An account is either connected or disconnected. A disconnected account cannot send, which is
the most common cause of a stalled sequence — see
[Why was a mailbox disconnected?](/troubleshooting/mailbox-was-disconnected). To reconnect a
single-click account, hover over it and click the **Reconnect** icon; a manually connected
account has no Reconnect icon and must be removed and added back. After reconnecting,
restart affected sequences by turning the toggle off and back on — they resume within
**15–20 minutes** according to the schedule, and historical reports and statistics are
unaffected.
One account is always the **default** sender; hover and click **Make default** to change it.
## Configuration
| Setting area | What it controls |
| --- | --- |
| Daily Limit | Maximum emails sent per day from this account — platform ceiling **400** on paid plans, **200** on trial |
| Safety settings → Delay between each email sent | Seconds between individual sends from this mailbox; the higher the delay, the slower the sending. A sequence-level delay also exists in sequence settings |
| Opt-out tab | The unsubscribe text or link appended to every sequence email sent from this mailbox (see Side effects) |
| Warm-up tab | MailToaster warm-up: pause/activate, profile, daily goal |
| Domain Setup tab | The Email Health Checker — verifies SPF, DKIM, DMARC, Domain age, MX records, Address records, and rDNS |
**Warm-up** is powered by MailToaster and managed from the account's Warm-up tab. Profiles:
**New email account** (brand-new inboxes), **Reputation protect** (existing inboxes), and
**Custom profile** (your own limits and behavior). The **Daily goal** and **Daily increment**
control volume, in **Ramp-up mode** (gradual increase to the goal) or **Random mode** (a
random number within a min–max range each day). **Sent folder cleanup** removes warm-up
emails older than 3 days. Activation fails with an error when no warm-up seats are available
on your MailToaster subscription. See [Email warm-up](/learn/email-warm-up).
**Unsubscribe options** come in three forms: an opt-out link or text at the end of each
sequence email (set per mailbox on the Opt-out tab), a custom opt-out link inserted into a
step with `{opt-out}` as the URL, and the List-Unsubscribe header (enabled per sequence).
All fields left blank removes the opt-out text entirely.
**Domain health** is checked by the Email Health Checker on the Domain Setup tab. Once a
domain passes cleanly, Reply stops re-checking it automatically — re-run the check yourself
after changing DNS records. See [SPF, DKIM, DMARC](/learn/spf-dkim-dmarc).
## Processing behavior
When several accounts are assigned to one sequence, contacts are distributed across them
round-robin, and all follow-ups for a contact are sent from the same account as the first
email unless that account is removed — the selection logic is specified in
[How Reply selects a sending mailbox](/behavior/mailbox-selection). The account's own daily
limit always beats a higher sequence limit. The **Reassign email accounts** setting
(Settings → Emails → Sequence email accounts) auto-assigns contacts that lack a sending
account and redistributes contacts when an account is removed from a sequence.
For split-server setups, sending through SendGrid can report bounces to Reply via a SendGrid
Event Webhook (Settings → Emails → SendGrid bounce webhooks): Bounce and Spam report events
are recorded as bounces, recipient-caused Dropped events likewise, and Deferred events are
treated as temporary. Detection covers only emails sent after the webhook was connected. For
Mailgun and other SMTP servers, bounces are not detected automatically — export them from
the ESP as CSV and mark the prospects in Reply. See
[Bounce handling](/behavior/bounce-handling).
## Side effects
Connecting an account lets Reply send and receive through it — incoming replies are matched
to contacts by [reply detection](/behavior/reply-detection). When the opt-out **text**
variant is on and a contact replies with that text, Reply sorts the reply into the *Do Not
Contact* inbox category and assigns the *Opted Out* status; no further emails are sent
unless the status is removed manually. The opt-out text or link is not added to test emails
or direct messages sent from a prospect's profile.
## Limits
| Limit | Value |
| --- | --- |
| Emails per day per account | **400** (paid plans) / **200** (trial) |
| Included accounts — trial | **2** |
| Included accounts — Multichannel plan | **5** (monthly) / **10** (annual) |
| Included accounts — Email Volume plan | Scales with the active-contact tier — see [Limits](/reference/limits) |
| Included accounts — Agency plans | Unlimited |
| Additional mailboxes | **$29/month** each (annual subscriptions are charged through the next billing date) |
| SendGrid Event Webhooks | Up to **5** per SendGrid account (a SendGrid-side limit shared with other tools) |
## Deletion behavior
Remove an account by hovering over it in **Settings → Email Accounts** and clicking the
**Remove** icon. Deleting the default account makes the first mailbox in the list the new
default. Deleting an active sending account automatically unassigns its contacts, and the
affected sequence's toggle shows a notification to add a new account — after adding one,
prospects must be assigned to it manually unless *Reassign email accounts* is enabled.
Sequences without email steps continue as usual.
## FAQ
### What happens when an email account disconnects?
Its sequences cannot send through it. Reconnect single-click accounts with the **Reconnect**
icon; manually connected accounts must be removed and added back. Restart affected sequences
with the toggle — they resume within 15–20 minutes on schedule, with historical data intact.
See [Why was a mailbox disconnected?](/troubleshooting/mailbox-was-disconnected).
### Can I connect a gmail.com or yahoo.com address?
Not as a sending account — generic domains are rejected at connection, and only business or
corporate domains are accepted. A generic domain still works as your Reply login. See
[Sender reputation](/learn/sender-reputation).
### How many email accounts does my plan include?
Trial: 2. Multichannel plan: 5 on monthly, 10 on annual. Email Volume plans: a fair-usage
number tied to your active-contact tier. Agency plans: unlimited. Any plan can add more at
$29/month each — see [Limits](/reference/limits).
### How do I connect many mailboxes at once?
Use **New Email Account → Import from CSV** with the sample file (Email, Daily Limit, Sender
Name, and the SMTP/IMAP columns). The same CSV also works for uploading mailboxes to
MailToaster warm-up, and several mailbox providers export in this format.
### What happens when an account is deleted?
Sending and receiving through it stop, its contacts are unassigned, and the sequence toggle
prompts for a replacement account. The first mailbox in the list becomes the new default if
the default was deleted. See [Connect a mailbox](/how-to/connect-a-mailbox).
## Related
- [Connect a mailbox](/how-to/connect-a-mailbox)
- [Configure sending limits](/how-to/configure-sending-limits)
- [Mailbox selection](/behavior/mailbox-selection)
- [Deliverability](/capabilities/deliverability)
- [Limits](/reference/limits)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email-accounts endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents manage accounts, limits, and signatures
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
---
# Schedules
> The specification of Reply schedules — weekly sending windows in UTC with no DST adjustment, contact-timezone sending, national holiday calendars, defaults, and changing the schedule of an active sequence.
**A schedule defines when sequences may send: weekdays, time ranges, and a sending timezone, evaluated in UTC with no Daylight Saving Time adjustment. Follow-ups can use a separate schedule, sending can follow the contact's time zone, and holiday calendars skip nationally recognized holidays. Reply recommends a delivery window of at least 2.5-4 hours.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | The weekly sending windows, timezone, and holiday calendars that time a sequence's messages |
| **Belongs to / Contains** | Used by any number of [sequences](/specifications/sequences); one schedule can be the default for new sequences; holiday calendars (system or custom) attach to it |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Reply recommends a delivery window of at least **2.5–4 hours** so emails have enough time to send |
| **Lifecycle** | Created → optionally made default → deleted, but only once no sequence uses it |
| **Does not** | Adjust for Daylight Saving Time (Reply uses UTC), include regional or state-level holidays in system calendars, or speed sending up — it only opens and closes time windows |
| **Plans** | All plans; Team Edition members can view and manage teammates' schedules via the All Owners dropdown |
## Definition
A schedule defines *when* a sequence is allowed to send: the weekdays and time ranges when
messages go out, evaluated in a chosen sending timezone, with an optional separate schedule
for follow-ups and optional holiday calendars that block whole days. Reply uses **UTC time
and does not account for Daylight Saving Time** — use an external time zone converter if you
need to compensate.
## Purpose
Schedules keep outreach inside working hours and the right time zone without per-sequence
manual timing — including, when enabled, each contact's own local time.
## Relationships
| Relationship | Object |
| --- | --- |
| Used by | Any number of [sequences](/specifications/sequences); a sequence's schedule is picked from the existing list via the **Schedule** button on its Steps tab |
| Default | One schedule can be made default (**Make default**) — it automatically applies to new sequences |
| Extended by | Holiday calendars — a system calendar per selected country, or a custom calendar of specific days |
| Managed in | **Settings → Schedules**; Team Edition shows teammates' schedules under **All Owners** |
## Creation
A schedule is created from **Settings → Schedules → New schedule**: enter a name, select the
sending timezone, select the days when messages should go out, and set the sending time
range by dragging the time block or using the **+** icon. Reply recommends a delivery window
of at least **2.5–4 hours**. Turning on **Separate schedule for follow-ups** gives follow-up
messages their own days and hours.
A custom holiday calendar can be created from scratch (**Create custom calendar**) or from
an existing one: the **Start from existing calendar** selector pre-fills the new calendar
with all holidays from the chosen source (system or custom), each removable individually.
The calendar name is never pre-filled. Every calendar in the dropdown has a download icon
that exports its holidays to a CSV file with the columns **Holiday name**, **Start date**,
**End date**.
## Configuration
| Setting | Controls |
| --- | --- |
| Sending timezone | The timezone the windows are evaluated in — UTC-based, with no Daylight Saving Time adjustment |
| Days and time ranges | The weekdays and hours when messages may go out |
| Separate schedule for follow-ups | Different days and sending hours for follow-up messages |
| Use contact's specific time-zone if set | Under Advanced settings — sends at each contact's local time when their time zone is known |
| Skip public holidays | Blocks sending on the selected country's public holidays, or on the days in a custom calendar |
| Make default | Applies this schedule automatically to new sequences |
A contact's time zone can be determined automatically during import when the **Country**
column is filled and either the **State** column is filled or a **City** column is present.
System holiday calendars include **only nationally recognized public holidays** — regional
or state-level holidays are excluded (audited: United States, United Kingdom, Canada,
Australia, Germany, France). Use a custom calendar to skip additional days.
## Processing behavior
Sending happens only inside the schedule's open windows; the interaction with step delays
and daily limits is specified in [When Reply sends](/behavior/sending-schedules). Launching
a sequence outside its sending hours shows a warning that the sequence is inactive — sending
starts on the next open day unless the schedule is opened.
To change the schedule of an active sequence, open its **Steps** tab and click the
**Schedule** button: pick another schedule from the existing list (a new one must be created
first in Settings), or click **Customize** to edit timezones, sending hours, and open days.
After updating the schedule, restart the sequence by turning its toggle off and back on so
the changes apply right away.
## Limits
| Limit | Value |
| --- | --- |
| Minimum recommended delivery window | **2.5–4 hours** |
| Time basis | UTC; Daylight Saving Time is not applied |
| System holiday calendars | Nationally recognized public holidays only (audited: United States, United Kingdom, Canada, Australia, Germany, France) |
| Holiday CSV export columns | Holiday name, Start date, End date |
## Deletion behavior
A schedule is deleted with the bin icon in **Settings → Schedules** — but only when no
sequence is still using it. While sequences reference the schedule, the bin icon is
inactive; switch those sequences to another schedule first.
## Edge cases
- Reply evaluates all schedules in UTC and does not account for Daylight Saving Time — after a DST switch, adjust the sending hours yourself or use an external time zone converter when setting them.
- With *Use contact's specific time-zone if set* enabled, contacts without a detected time zone follow the schedule's own timezone; detection on import needs Country plus State or City.
- An active sequence can only switch to a schedule that already exists — the Schedule button offers no way to create one inline.
- When starting a custom calendar from an existing one, holidays are pre-filled but the calendar name never is.
## FAQ
### Can I change the schedule for an active sequence?
Yes. Use the **Schedule** button on the sequence's Steps tab to pick another existing
schedule or **Customize** the current one, then restart the sequence by turning the toggle
off and back on so the changes apply right away.
### Does Reply adjust schedules for Daylight Saving Time?
No. Reply uses UTC time and does not account for Daylight Saving Time — if needed, use an
external time zone converter to set your sending hours correctly.
### What happens when a sequence launches outside sending hours?
A warning says the sequence is inactive. Either open the schedule, or sending starts
automatically on the next open day. See
[Why was an email not sent?](/troubleshooting/email-was-not-sent).
### Can sending follow the contact's local time?
Yes — turn on **Use contact's specific time-zone if set** under Advanced settings. The
contact's time zone is detected during import when the Country column is filled and either
State is filled or a City column is present.
### Do holiday calendars cover regional holidays?
No. System calendars include only nationally recognized public holidays (audited: United
States, United Kingdom, Canada, Australia, Germany, France). Create a custom calendar —
optionally starting from an existing one — to skip regional days.
## Related
- [When Reply sends](/behavior/sending-schedules)
- [Sequences](/specifications/sequences)
- [Why was an email not sent?](/troubleshooting/email-was-not-sent)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — schedules and holiday-calendar endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents create and assign schedules
---
# Tasks
> The specification of Reply tasks — task types and subtypes, sequence-generated vs manually created tasks, manual and automatic handling modes, Tasks page filters and bulk actions, Chrome Extension execution, and what the task object leaves undocumented.
**A task is a unit of manual work in Reply: a to-do, call, manual email, SMS, WhatsApp, LinkedIn action, or meeting. Sequences generate tasks from manual steps; users create them on the Tasks page or in the Chrome Extension. Tasks are completed in the extension, which advances the contact to the next step.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | A scheduled unit of manual work — to-do, call, manual email, manual SMS, WhatsApp, LinkedIn action, or meeting — with an owner, a start date, and a due date |
| **Belongs to / Contains** | Owned by a user; every type except To Do references a contact; sequence-generated tasks link back to their [sequence](/specifications/sequences) |
| **Surfaces** | UI (Tasks page) · Reply Chrome Extension · MCP |
| **Key limit** | No task-specific numeric limits are documented; due-date urgency colors switch at 1 hour and 8 hours before due |
| **Lifecycle** | Created (by a sequence step or manually) → New → Due → Completed, or Removed at any point |
| **Does not** | Send anything by itself — completing a manual email task from the Tasks page marks it complete and advances the contact *without sending the email*; does not get generated for opted-out contacts (manual email tasks); does not advance the contact in Manual mode until completed in the extension |
| **Visibility** | Team Edition off — everyone sees and manages only their own tasks; Team Edition (Public or Private) — team owners see and manage everyone's tasks, other members only tasks assigned to them |
## Definition
A task is a reminder to perform a manual outreach action. Reply creates tasks automatically
when a contact reaches a step that needs human work — a Task step, Call step, Manual email
step, or WhatsApp step — and users create them manually on the **Tasks** page or in the
Reply Chrome Extension. Tasks are primarily executed in the Chrome Extension; the Tasks
page is where they are filtered, reassigned, completed, and removed in bulk.
> The task object is one of the least-specified objects in Reply's documentation. The
> documented surface is the Tasks page, the Chrome Extension, and the sequence settings that
> generate tasks. A task data model beyond the creation-dialog fields, a formal state
> machine, and task REST endpoints are **not documented** — for the current API surface,
> check [docs.reply.io](https://docs.reply.io/api-reference/introduction).
## Purpose
Tasks bring human touches — calls, personally written emails, LinkedIn actions, WhatsApp
messages, meetings — into otherwise automated sequences, and give teams one queue to see,
assign, and execute that work.
## Relationships
| Relationship | Object |
| --- | --- |
| Owner | A user; for sequence-generated tasks, either the **sequence owner** or the **contact owner** (contact-owner assignment is available only in Team Edition Public mode) |
| Contact | Every task type except To Do takes a contact; adding a contact to a Call, Email, WhatsApp, SMS, or Manual Email task lets you call or email them directly from the task |
| Sequence | Tasks created by a sequence show the sequence name in the grid — clicking it opens that sequence's Steps tab |
| Execution surface | The Reply Chrome Extension — the **Launch** action opens platform tasks in the extension |
## Creation
Tasks are created three ways.
**From sequence steps.** When a contact reaches a manual step, Reply generates the matching
task: a Task step (To-do or Meeting variant) creates a to-do or meeting task, a Call step
creates a call task, a Manual email step creates a manual email task, and a WhatsApp step
creates a WhatsApp task. Call notes and manual step content support Contact, Team, and
Advanced [variables](/specifications/templates-and-variables). See
[Sequence steps](/specifications/sequence-steps) for the step catalog.
**On the Tasks page.** Click **New task** and fill in the dialog: a Task Type — To Do
(default), Call, LinkedIn (with a subtype: Message, Connect, InMail, View Profile), Manual
Email, Manual SMS, WhatsApp, or Meeting — a Start Date and Due Date, a Contact (except for
To Do tasks), an optional Description, and, for an email, a Subject.
**In the Chrome Extension.** Click **Create → New Task**, select the type, the start and
due dates (optional — by default the due date is set within 30 minutes of creation time),
optionally add a contact and, for emails, the sending email address, then fill the
description or message (templates supported) and click **Create task**. After logging a
call in the extension, **Log the call & follow up** creates a follow-up task (Call, To do,
LinkedIn, or Meeting) in the same flow — this also works for call tasks generated by a
sequence.
### Task types
| Type | Use |
| --- | --- |
| To Do | A memo for any planned activity — the only type without a contact |
| Call | A direct call to the prospect |
| LinkedIn — Message / Connect / InMail / View Profile | Reminders for the matching LinkedIn action |
| Manual Email | A personal email to send during a given period |
| Manual SMS | An SMS to send during a given period |
| WhatsApp | A WhatsApp message to the prospect |
| Meeting | A meeting with the prospect |
## Lifecycle and states
The documentation defines task states operationally, through the Tasks page filters — a
formal state machine is not documented:
| State (status filter) | Meaning |
| --- | --- |
| New | Not deleted, not yet due, not completed |
| Due | Not deleted, not completed, past its due time |
| Completed | Not deleted and completed |
| (deleted) | Removed tasks are excluded from every filter |
The grid is sorted by due date/time from oldest to newest by default, and start and due
times display in the timezone from the Reply user settings. The **Due in** column is
color-coded: **red** when due in 0–59 minutes, **yellow** in 1–8 hours, **green** at 8+
hours. A separate date filter groups tasks by due date: All, New (due date in the future),
Due (due today), Overdue (due yesterday or earlier), or a Custom range.
## Configuration
Task handling is configured per sequence under **Settings → Tasks handling**:
| Setting | Options |
| --- | --- |
| Completion mode | **Manually** — the system does not finish the task or move the contact until you complete it in the extension. **Automatically** — the contact moves to the next step once the delay between the current and next step is over |
| Task ownership | **Sequence owner** (default) or **contact owner** — per-contact assignment to each contact's owner; available only in Team Edition Public mode |
Step-level behavior refines this:
| Step | Manual mode | Automatic mode |
| --- | --- | --- |
| Task step | Contact is not moved until you finish the task; the task is not finished until you manually complete it | Contact moves after the step delay; if it is the last step, the contact gets Finished status after the specified number of days |
| Call step | Contact is not moved until you finish the task manually; if last step, Finished after a specified number of days (5 by default) | Contact moves when you finish the task manually, or automatically after the step delay if you do not; same last-step rule |
| Manual email step | The task's due date is the date/time of the next step in the sequence; complete it any time before then | Not documented as a separate mode — the Tasks-handling completion mode applies |
| WhatsApp step | Semi-automated by design: Reply creates the task and moves the contact to the next step once the task is sent or completed | Same |
Call steps add two options: **Automatically call on opens** triggers a call task once the
contact has opened your email a specified number of times (Reply recommends setting the
trigger between 4 and 7 opens), and **Pause on successful call** stops the contact's
sequence after a successfully completed call.
## Processing behavior
On the **Tasks** page, quick filters combine with AND logic: Task Status (All, New, Due,
Completed) × Task Type (All Types, LinkedIn, Calls, Manual Emails, Manual SMS, WhatsApp,
To Do, Meetings) × the due-date filter. Selected tasks support four actions — **Launch**
(execute in the Chrome Extension), **Change owner**, **Complete**, and **Remove** — each
individually or in bulk via the **All** checkbox.
In the Chrome Extension, the Tasks tab filters by interval (Overdue tasks is the default —
plus today, today and forward, this week, last week, this month, last month), by sequence,
and by task type, also with AND logic. **Launch all tasks** opens tasks one by one; a
manual email task is finished with **Send and Complete**. Applied filters persist after
closing and reopening the extension until the cache is cleared.
## Side effects
- Completing a task moves its contact to the next sequence step.
- Clicking **Complete** on a manual email task on the Tasks page marks the task completed and moves the contact forward, but the email is **not sent**. Manual emails can only be completed and sent through the Chrome Extension.
- If a Task or Call step is the last step in a sequence, the contact gets the **Finished** status after the specified number of days (5 by default for Call steps) — see [Statuses](/reference/statuses).
- **Pause on successful call** stops the contact's sequence after a successful call, preventing further automated steps.
- Reply refuses to send manual emails to blacklisted contacts (an error is shown; unblacklist the contact and send again) and does not generate manual email tasks for opted-out contacts at all.
## Limits
No task-specific numeric limits (per user, per sequence, or per day) are documented. The
documented numbers are:
| Value | Detail |
| --- | --- |
| Default due date (extension-created tasks) | Within **30 minutes** of the task creation time |
| Due-in color thresholds | Red **0–59 min** · yellow **1–8 hours** · green **8+ hours** |
| Last-step Finished delay (Call step) | **5 days** by default |
| Recommended auto-call trigger | **4–7** email opens |
## Deletion behavior
Tasks are removed with the **Remove** action on the Tasks page, individually or in bulk,
with a confirmation prompt. Removed tasks are excluded from every status filter. Whether
removal is reversible is not documented.
## Edge cases
- **Complete** on the Tasks page never sends a manual email — only **Send and Complete** in the Chrome Extension does. The contact still advances to the next step either way.
- Opted-out contacts get no manual email task; removing the Opted Out and Finished statuses makes the task visible and completable in the extension.
- A blacklisted contact makes the manual email task fail with an error until the contact is unblacklisted.
- Manual email tasks can currently be processed only from the Chrome Extension, not the main Reply application.
- The contact-owner task assignment option exists only in Team Edition Public mode; everywhere else tasks go to the sequence owner.
- Chrome Extension task filters survive closing the extension — they reset to defaults only after the cache is cleared.
## FAQ
### What happens when I click Complete on a manual email task?
The task is marked completed and the contact moves to the next step, but the email is not
sent. To actually send it, open the task in the Reply Chrome Extension and click **Send
and Complete**.
### Do tasks block a sequence?
In Manual mode, yes — the contact is not moved to the next step until the task is
finished. In Automatic mode the contact moves on once the delay before the next step is
over, whether or not the task was done. The mode is set per sequence under **Settings →
Tasks handling** and per Task/Call step.
### Who can see and manage tasks?
With Team Edition off, everyone sees only their own tasks. In Team Edition (Public or
Private), team owners see and manage everyone's tasks; other members see only tasks
assigned to them. See [Workspaces and roles](/specifications/workspaces-and-roles).
### Can tasks be assigned to the contact's owner instead of the sequence owner?
Yes, via the Tasks handling ownership setting — but only in Team Edition Public mode. Each
contact's task then goes to that contact's owner and appears on their Tasks page and in
their Chrome Extension.
### Where is the task API documented?
Reply's product documentation does not specify task REST endpoints or a task data model
beyond the creation-dialog fields.
[docs.reply.io](https://docs.reply.io/api-reference/introduction) is the source of truth
for the current API surface.
## Related
- [Sequence steps](/specifications/sequence-steps)
- [Sequences](/specifications/sequences)
- [How sequences execute](/behavior/sequence-execution)
- [Statuses](/reference/statuses)
- [Calls and SMS](/capabilities/calls-and-sms)
- [Multichannel outreach](/capabilities/multichannel-outreach)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the source of truth for the current API surface
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents list their tasks, create tasks, and complete them
---
# Templates and variables
> The specification of Reply message templates and personalization variables — the contact, team, custom, advanced, and AI variable types with their syntax, Spintax randomization, template folders and sharing, and the HTML-editor rules for images, fonts, and hyperlinked custom fields.
**Variables are placeholders in double curly braces that personalize email, LinkedIn, SMS, WhatsApp, and Call step content per contact. Reply supports basic contact, team, custom, advanced (fallback, conditional, date), and AI variables, plus Spintax randomization. Templates live in Personal, Team, and Library folders and can be shared; sequences can be saved as templates.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | The personalization layer of Reply messaging: reusable templates plus `{{ }}` variables resolved per contact when each message goes out |
| **Belongs to / Contains** | Variables are used in email, LinkedIn, SMS, and WhatsApp steps and in Call step notes; templates live in **Personal**, **Team**, and **Library** folders under Sequences → Templates |
| **Surfaces** | UI (template editor, sequence step editor, Chrome Extension task templates) |
| **Key limit** | An AI variable with live web search costs **1 Reply credit per variable per contact**; without live search it is free |
| **Lifecycle** | Template created → optionally shared to the Team folder → removed (still visible on the stats page until the sequence is removed or archived) |
| **Does not** | Show AI variable output on the Preview page (it is generated just before sending), allow variables inside a Spintax block, or accept spaces in variable names |
| **Sharing** | Templates can be shared in both Team Edition Private and Public modes; saved AI prompts stay private to your account |
## Definition
Variables are placeholders you use in email, LinkedIn, SMS, and WhatsApp templates, as
well as in Call steps, to automatically pull data from your contacts and team. Instead of
typing each recipient's name, you write `{{FirstName}}` or `{{Company}}` and Reply fills
in the right value for every contact. Templates are saved message bodies — with
formatting, links, variables, files, and images — organized in folders and reusable across
sequences.
## Purpose
Variables personalize messages at scale without editing each one manually; varying the
wording per recipient (fallbacks, conditions, Spintax, AI snippets) also keeps templates
from being identical, which helps [deliverability](/learn/email-deliverability). Templates
save the best-performing copy for reuse and share it with the team.
## Relationships
| Relationship | Object |
| --- | --- |
| Contact variables pull from | The contact card on the People page — see [Contacts](/specifications/contacts) |
| Team variables pull from | The contact owner, the logged-in Reply account, and the connected sending email or LinkedIn account |
| Custom variables pull from | Custom contact fields, including AI custom fields |
| AI variables pull from | A prompt processed by OpenAI per recipient, optionally with live web search |
| Used by | [Sequence steps](/specifications/sequence-steps) of every channel; step notes on Call steps |
| Preview data | The contact card; if the sequence has no contacts yet, the first contact from the People page (alphabetically) |
## Creation
**Inserting a variable.** Open or add the step you want to edit, click the **Variables**
icon in the top-left corner of the editor, pick the tab — **Contact** (basic and custom
fields), **Team**, or **Advanced** — and select the variable. AI variables have their own
**AI variables** entry point in the email body or subject line. Preview the result on the
right side of the email editor (the eye icon for LinkedIn, SMS, and WhatsApp) or send a
test email.
**Creating a template.** Hover over **Sequences** in the header and click **Templates**.
The tab shows three folders — Personal (only you), Team (shared), and Library (Reply's own
templates). Click **New Template**, name it, and click **Create**; the editor supports
text formatting, links, variables, and attached files and images.
**Saving a sequence as a template.** On the Sequences page, hover over a sequence, click
the three dots, choose **Save as template**, and edit the name and description. Reuse it
via **New Sequence → From template → Team templates**.
## Variable types
| Type | Pulls from | Syntax example |
| --- | --- | --- |
| Basic contact | Basic contact-card fields: name, company, title, location, engagement counts | `{{FirstName}}`, `{{Company}}` |
| Team | Contact owner, Reply account, sending email or LinkedIn account | `{{ContactOwner.FirstName}}`, `{{SendingEmail.SenderName}}` |
| Custom | Custom contact fields (including AI custom fields) | `{{Programming_Language}}` |
| Advanced — fallback | A default value used when the contact's data is missing | See the fenced examples below — the syntax uses a pipe |
| Advanced — conditional | If/else logic on contact data or the sending day | `{{#if Opens > 5}} … {{else}} … {{/if}}` |
| Advanced — date | The day, date, month, quarter, or time when the message is sent | `{{today}}`, `{{days_from_now 2}}` |
| AI | A prompt sent to OpenAI, generated per recipient just before sending | Prompt-based; inserted from the AI variables panel |
| Spintax | One option picked at random from a list, per message | See the fenced examples below |
Fallback and Spintax syntax (both use the pipe character):
```
{{Title | 'sales leader'}} fallback when Title is empty
{{Company | 'your company'}} fallback when Company is empty
{{Random | 'quick call' | 'short chat' | 'brief conversation'}} Spintax: one option per message
```
### Basic contact variables
| Variable | Inserts |
| --- | --- |
| `{{FirstName}}` / `{{LastName}}` / `{{FullName}}` | The contact's first, last, or full name |
| `{{Title}}` / `{{Company}}` / `{{CompanySize}}` / `{{Industry}}` | Job title, company name, company size, company industry |
| `{{Email}}` / `{{Domain}}` / `{{Phone}}` | Email address, email domain, phone number |
| `{{LinkedIn}}` / `{{SalesNavigator}}` | LinkedIn profile URL, Sales Navigator profile link |
| `{{City}}` / `{{State}}` / `{{Country}}` | The contact's location fields |
| `{{Opens}}` / `{{Replies}}` / `{{Views}}` | How many times the contact opened your emails, replied, and total email views including repeat opens |
| `{{last_touch}}` | The day, week, month, or year of the last email sent or reply received — works only for email steps and only for emails sent within the current sequence |
### Team variables
| Prefix | Pulls from | Fields |
| --- | --- | --- |
| `{{Sender.Calendar}}` | The sequence owner's account | The calendar link |
| `{{ContactOwner.*}}` | The contact's owner | FirstName, LastName, FullName, Company, Phone, Email, Title |
| `{{ReplyAccount.*}}` | The logged-in Reply user | FirstName, LastName, FullName, Company, Phone, Email, Title |
| `{{SendingEmail.*}}` | The sending email account | SenderName, SenderFirstName, SenderLastName, Email |
| `{{SendingLinkedIn.*}}` | The LinkedIn account used to send | SenderFirstName, SenderName |
### Custom variables
Custom variables insert text or numeric values from custom fields on the contact card and
appear in the **Custom fields** section of the Contact tab. If a custom field name
contains spaces or special characters (such as `<`, `>`, `"`, `'`, `\`, `=`), Reply
replaces them with underscores when generating the variable name. Custom variables can be
used on their own or inside conditional variables. AI custom fields behave the same in the
panel; in preview, an enriched field shows its value, and an unenriched one is highlighted
in red as *Missing Data* — enrich AI fields before launching a sequence.
### Advanced variables
Conditional variables use an if/else structure with the operators `==`, `!=`, and `>`;
multi-word comparison values must be wrapped in quotes:
```
{{#if Title == 'Marketing Director' }} We have an offer for you! {{else}} It may be interesting for you. {{/if}}
{{#if Opens > 5 }} I see you are interested in our product. {{else}} Check out our new product! {{/if}}
{{#if Phone}} Can I call you on this phone number {{Phone}}? {{else}} What is your phone number? {{/if}}
```
Date variables key off the moment the email is sent:
| Variable | Inserts |
| --- | --- |
| `{{#if is_monday}} … {{/if}}` (and `is_tuesday` … `is_sunday`, `is_weekday`, `is_weekend`) | The wrapped text only when the email is sent on that day |
| `{{today}}` / `{{tomorrow}}` / `{{day_of_week}}` | The current or next day of the week |
| `{{now_date}}` / `{{now_month}}` / `{{now_quarter}}` / `{{now_year}}` | The sending date, month, quarter, or year |
| `{{days_from_now N}}` / `{{days_before_now N}}` | The day of the week N days after/before sending, counting weekends |
| `{{weekdays_from_now N}}` / `{{weekdays_before_now N}}` | The same, counting business days only |
| `{{month_from_now N}}` / `{{quarter_from_now N}}` | The month or quarter N periods ahead |
| `{{time_of_the_day}}` | A greeting word by send time: night (00:00–5:59), morning (6:00–11:59), afternoon (12:00–17:59), evening (18:00–23:59) |
### AI variables
An AI variable holds a prompt — your own or one from the library, such as *Randomize Any
Text*, *Find 3 Pain Points*, *Clean First Name*, or *Job Title Standardization* — that is
sent to OpenAI and returns customized content for each recipient. AI variables work in the
email body and the subject line; **Generate Preview** tests the prompt, and **Save to
library** stores it (saved prompts are private to your account and not visible to the
team). The content is generated just before the email is sent, so it never appears on the
Preview page. The **Use live web search** toggle switches between the free mode (the
model's own knowledge) and a research mode using an advanced OpenAI model with live
internet access.
### Spintax
Spintax is implemented with the `{{Random}}` variable: list the alternatives separated by
pipes and Reply picks one at random each time a message is sent. A space is required
before and after each pipe — incorrect spacing breaks the Spintax. Variables cannot be
placed inside a Spintax block (Reply does not support variable chaining within Spintax);
add them before or after the block instead:
```
{{Random | 'Hi' | 'Hello' | 'Hey'}}{{FirstName}} correct
{{Random | 'Hi' | 'Hello' | 'Hey'{{FirstName}}}} incorrect — variable inside the block
```
Conditional logic can be combined with Spintax by nesting `{{#if}} … {{else}} … {{/if}}`
blocks, with the final `{{else}}` acting as the default option.
## Processing behavior
Variables resolve when each message is generated: preview and test emails use real contact
data, Spintax picks one option per message, fallbacks substitute the default when the
field is empty, and AI variables are generated just before sending. In **Playbooks**,
using `{{ }}` around anything that is not a valid variable blocks saving with an
*Unrecognized variables found* banner — typos, names with spaces, if-conditions with
unquoted multi-word values, and unclosed `{{` expressions all trigger it; other editors
(sequence steps, Offers, AI Assistant settings) have their own validation behavior. For
literal placeholders that Reply should not replace, use square brackets, like
`[placeholder]`.
## Template management
| Action | Behavior |
| --- | --- |
| Move to folder | Personal — visible only to you; Team — visible to the whole team |
| Copy template | Copies the email text to paste into a sequence |
| Remove | Deletes the template; it stays visible on the stats page until the sequence is removed or archived |
| Search by title | Finds a template by name |
| Share a folder | Hover the personal folder → three dots → **Share**; the folder moves to the Team section |
| Create / edit / delete folders | The **+** icon creates a personal or team folder; deletion is permanent |
For email steps specifically: images are added by link (**Insert/Edit image**, with a
Source field, name, and dimensions), by upload, or through the HTML editor; fonts can be
changed **only** through the HTML editor (Source code icon) — for example
`…`; and a URL
stored in a custom field is hyperlinked either in the HTML editor with
`Link text` or by selecting text, clicking the hyperlink
icon, and entering the custom field's name exactly as it appears in the Variables section.
The HTML editor accepts only basic attributes, and may need to be enabled for the account
on request. Managing the steps that carry these templates — variants, cloning, copying,
reordering — is specified in [Sequence steps](/specifications/sequence-steps).
## Side effects
- Turning on live web search makes each send consume 1 Reply credit per AI variable per contact — 50 contacts means 50 credits for one variable.
- Sharing a personal folder moves it to the Team section and makes it visible to the whole team.
- A removed template remains visible on the stats page until the sequence is removed or archived.
## Limits
| Limit | Value |
| --- | --- |
| AI variable with live web search | **1 Reply credit** per variable per contact |
| AI variable previews with live web search | **100** free per day; each additional preview consumes 1 credit |
| AI variable without live web search | Free |
| Variable names | No spaces; special characters in custom field names become underscores |
| `{{last_touch}}` scope | Email steps only, and only emails sent within the current sequence |
No limits on the number of templates, folders, or variables per message are documented.
## Deletion behavior
Templates are deleted with **Remove** — completely, though they stay visible on the stats
page until the sequence is removed or archived. Folders are deleted permanently via the
folder menu. Deletion of individual saved AI prompts is not documented.
## Edge cases
- Spintax breaks without a space before and after each pipe — the text may not render in the email body or preview.
- A variable inside a Spintax block does not work; place `{{FirstName}}` and similar outside the `{{Random}}` block.
- AI variable output is absent from the Preview page by design — use **Generate Preview** in the AI variables panel instead.
- Preview data falls back to the alphabetically first contact on the People page when the sequence has no contacts, so the preview may show an unrelated contact's data.
- For contacts missing a first name, a common pattern is storing "there" as the first name so `{{FirstName}}` renders "Hi there" — or use a fallback variable.
- Fonts can be changed only through the HTML editor — there is no documented way to change them elsewhere in the step editor.
## FAQ
### What happens when a contact is missing data for a variable?
Use a fallback: `{{Title | 'sales leader'}}` renders the default text when the field is
empty. Conditional variables (`{{#if}} … {{else}} … {{/if}}`) handle the same case with
different full sentences.
### Why doesn't my AI variable appear in the preview?
AI variable content is generated just before the email is sent, so it will not show on the
Preview page. Click **Generate Preview** inside the AI variables panel to test the prompt.
### Can I put a variable inside a Spintax block?
No. Reply does not support variable chaining within Spintax. Close the `{{Random}}` block
first and add the variable after it.
### How do I share templates with my team?
Move the template to the Team folder, or share a whole personal folder (three dots →
**Share**), which moves it to the Team section. Sharing works in both Team Edition Private
and Public modes.
### How do I change the font of my emails?
Only through the HTML editor: open the step, click the Source code icon, and wrap the body
in a styled `span` — Reply documents no other way to change the font.
## Related
- [Sequence steps](/specifications/sequence-steps)
- [Sequences](/specifications/sequences)
- [Email outreach](/capabilities/email-outreach)
- [Sequence design](/learn/sequence-design)
- [Playbooks](/specifications/playbooks)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the source of truth for the current API surface, including template endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents read and edit sequence step content and variants
---
# Conversations
> The specification of Reply conversations — message threads with one contact across email and LinkedIn, their participants, CC handling, threading rules, and outside-email sync.
**A conversation is the thread of messages between your workspace and one contact — automatic and manual emails plus LinkedIn messages, connection requests, and InMails. Follow-up emails with an empty subject line send in the same thread. Replies always go out from the email account the thread is connected to, and emails sent outside Reply can sync in.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | The message history between your workspace and one [contact](/specifications/contacts) — automatic and manual emails, LinkedIn messages, connection requests, and InMails |
| **Belongs to / Contains** | Belongs to one contact; references the [sequence](/specifications/sequences) where it was initiated; shown in the [Inbox](/specifications/inbox) |
| **Key rule** | Follow-up emails with an empty subject line send in the same thread as the opener |
| **Sending account** | A reply always goes out from the email account the thread is connected to — the From row is read-only |
| **Key limit** | LinkedIn messages are capped at 8,000 characters |
| **Does not** | Show emails sent outside Reply until the contact has received at least one email from Reply; thread follow-ups when the opener's subject carries a "Re:"-style prefix; thread test emails |
| **Team access** | History covers responses to you and to other team members; viewing a contact's full email history as a team requires the Team Edition |
## Definition
A conversation (thread) is the message history between your workspace and one
[contact](/specifications/contacts). It spans automatic and manual emails as well as
LinkedIn messages, connection requests, and InMails, displayed chronologically with all
related details — the contact's profile, contact information, and email address.
## Purpose
Conversations bring every exchange with a contact into one place, so you can read the full
history, respond, forward, and save new participants as contacts without switching between
mailboxes or parts of the platform. They are the unit the [Inbox](/specifications/inbox)
lists, filters, and categorizes.
## Relationships
| Relationship | Object |
| --- | --- |
| Belongs to | One [contact](/specifications/contacts) — clicking a participant's name or address opens the contact sidebar |
| References | The [sequence](/specifications/sequences) where the thread was initiated; empty for conversations started via direct LinkedIn actions from the contact card |
| Sent from | The [email account](/specifications/email-accounts) or LinkedIn account connected to the thread |
| Shown in | The [Inbox](/specifications/inbox), at both the consolidated and the sequence level |
| Feeds | The contact's Activity log — synced emails appear under its Emails tab |
## Creation
Threads become visible once contacts reply — with no replies yet, the inbox is empty. The
system stores the history of emails, LinkedIn messages, connection requests, and InMails
from the point a contact responds, whether to you or to other team members, as part of
sequences.
Conversations can also start from direct LinkedIn actions taken on the contact card
outside any sequence; those threads show no originating sequence.
## Lifecycle and states
- **Unread → read.** Unread threads appear in bold with a small blue circle next to the contact name; opening a thread marks it read and decreases the unread counter.
- **LinkedIn message states.** After you click Send, a message shows the **Sending** status. Messages queued behind it carry the **Planned** status, and the thread keeps Planned in the list view while its latest message is pending. Once a message is sent, the status is replaced with the date and time it was dispatched.
- **LinkedIn errors.** If sending fails, an error tooltip appears next to the message with **Retry** and **Delete** options. An errored message keeps its error status unless acted upon and does not block sending new messages.
- **Category.** Each thread carries one inbox category, assigned by AI or manually — see [Inbox](/specifications/inbox).
## Configuration
### Email threading
To send sequence emails in the same thread, give the Step 1 email a subject and leave the
subject line of follow-up emails empty — the new emails are grouped with the original
message, forming the thread. If the Step 1 subject contains symbols or prefixes such as
"Re:", the follow-ups are not sent in the same thread and have no subject line. Via the
API, a follow-up variant with an empty (null) subject is accepted by the sequence
endpoints and delivers in the opener's thread; the message body remains required.
### Replying on behalf of teammates
By default, you can reply only to threads that you initiated. Support can enable replying
on behalf of teammates; with the feature on, you switch between team members in the Inbox
to view their threads and respond. The reply is still sent from the email account the
thread is connected to and stays in the same thread, regardless of who opens the composer.
### AI-generated draft replies
When a sequence's AI Replies are set to save a draft, the draft opens automatically when
you open the thread. If the inbound message has CC recipients, the draft's CC is pre-filled
by merging the inbound message's CC recipients with the CC addresses configured in the
sequence's AI Replies settings, de-duplicated case-insensitively. You can review and edit
the merged list before sending.
## Processing behavior
### How messages attach
Clicking a thread shows the chronological history of all messages with the contact.
Clicking a message reveals its sender and recipients; a small down arrow near the sender's
address expands the exact CC and BCC addresses on that message.
Emails sent outside Reply — directly from Gmail, Outlook, and similar clients — sync into
the Reply inbox and the contact's Activity, provided the contact has already been sent at
least one email from your Reply account. Data syncs for all contacts in the organization
database from the moment they received their first email from Reply; for existing users,
20 days of email history back is synced when the feature is enabled, and direct emails are
detected for the same 20 days after the last email touch from Reply.
### Replying
There are two ways to respond: the **Reply** button at the bottom of the thread answers
the entire thread, and the arrow button in front of a particular message attaches your
response as a comment on that message. The composer supports templates, variables, a
preview (the eye icon), and text formatting such as pictures, videos, and links.
When the message you are replying to has CC recipients, the composer also shows **Reply
all**. **Reply** sets To to the sender and leaves CC empty; **Reply all** sets To to the
sender and carries the original message's CC recipients, editable before sending. Either
way the reply stays in the same thread. Before sending, the CC list is cleaned: the
sender's own mailbox address is removed, the To recipient is removed from CC, blacklisted
addresses are removed, and duplicates are removed case-insensitively. If every CC address
is filtered out, the reply still sends with an empty CC — filtration never blocks sending.
The composer shows a read-only **From** row with the sending email account — always the
account the thread is connected to. A connection status dot is green when the account's
IMAP and SMTP settings are valid and red when they are not; it also turns red the moment a
reply fails to send on a connection error (that instant state resets on page reload). For
Gmail, Office 365, and Exchange accounts in an unhealthy state, a **Reconnect** button
opens the provider's sign-in flow in a new tab; accounts connected manually over SMTP/IMAP
are reconnected in Settings → Email Accounts instead.
### Forwarding
You can forward the whole thread with the Forward control at the end of the conversation,
or forward one specific reply with the Forward control next to that message.
## Side effects
- Opening a thread marks it as read; unread counters update simultaneously in the consolidated and sequence-level inboxes.
- Clicking a participant opens the contact sidebar. Existing contacts show their saved card; a new participant shows only an email address, and you can create the contact right from the thread.
- Emails synced from outside Reply also appear in the contact's Activity log under the Emails tab.
## Limits
| Limit | Value |
| --- | --- |
| LinkedIn message length | 8,000 characters — above that, the Send button is unclickable |
| Historical sync depth for existing accounts | 20 days back from when inbox sync is enabled |
| Direct-email detection window | 20 days after the last email touch from Reply |
| Replying to teammates' threads | Off by default for email (support can enable it); not possible for LinkedIn threads |
## Deletion behavior
Desktop inbox bulk actions do not include deleting threads; the mobile app offers Delete
as a bulk action. An unsent LinkedIn message in an error state can be removed with its
**Delete** option. The sources do not document thread retention or a way to delete a whole
conversation from the desktop Inbox.
## Edge cases
- An opener subject with symbols or a "Re:"-style prefix breaks threading — follow-ups arrive as separate emails with no subject line.
- Test emails of sequence steps arrive separately, not in one thread: Reply considers tests unlinked. To preview the real threading, add yourself as a contact to the sequence.
- Emails a prospect exchanged with your team before their first Reply email are not synced into the thread.
- If the email account behind a thread has been deleted, the composer still opens, but the From row is greyed out showing the address recorded in the thread, a warning is displayed, and Send is disabled.
- Participants not saved in Reply appear as a bare email address; after you save them as contacts, their full names show in the thread as well.
- LinkedIn sends can fail when the LinkedIn account is disconnected or its cookie is invalid, when either LinkedIn profile was deleted, when the recipient's privacy settings block incoming messages, on a teammate's thread, when the Sales Navigator subscription behind InMail has expired, when daily safety limits are exceeded, while a previous message is still pending, or when message variables are formatted incorrectly.
## FAQ
### How do I send sequence emails in the same thread?
Give the Step 1 email a subject and leave the follow-up subject lines empty — the
follow-ups group into the opener's thread. Avoid symbols or prefixes like "Re:" in the
opener subject, or threading breaks. See [Sequence steps](/specifications/sequence-steps).
### Do emails sent outside Reply appear in the conversation?
Yes — emails sent directly from Gmail, Outlook, and similar clients sync into the Reply
inbox and the contact's Activity, as long as the contact has already received at least one
email from your Reply account. Direct emails are detected for 20 days after the last email
touch from Reply.
### Can I reply to a thread a teammate started?
By default, no — you can reply only to threads you initiated. For email threads, support
can enable replying on behalf of teammates; the reply is then sent from the email account
the thread is connected to and stays in the same thread. For LinkedIn threads, replying to
a teammate's thread is blocked.
### Can I save someone from CC or BCC as a contact?
Yes. Expand a message's recipients with the down arrow near the sender's address, click
the email address, and the contact profile card opens so you can fill in the details and
create the contact without leaving the Inbox.
### Why can't I change the From address when replying?
A reply always goes out from the email account the thread is connected to — the account
that sent the original step. The composer shows that account in a read-only From row; it
is not a selector. See [Email accounts](/specifications/email-accounts).
## Related
- [Inbox](/specifications/inbox) — where conversations are listed, filtered, and categorized
- [Reply detection](/behavior/reply-detection) — how inbound messages are recognized
- [Sequence steps](/specifications/sequence-steps) — where threading is configured
- [Email accounts](/specifications/email-accounts) — the sending account behind each thread
- [Process replies](/how-to/process-replies)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence endpoints accept an empty subject on follow-up variants to send in the same thread
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents read threads and send replies
---
# Inbox
> The specification of the Reply Inbox — the consolidated view over all threads, with main and inbox categories, filters, search, unread state, and auto-reply handling.
**The Inbox is Reply's consolidated view of all threads from all sequences and team members, covering automatic and manual emails and LinkedIn messages. Threads carry one inbox category — Interested, Not interested, Do not contact, Not now, Forwarded, with Meeting intent as a subcategory — assigned by AI or manually, and filters, search, and bulk actions organize triage.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | The Consolidated Inbox — all threads from all sequences initiated by all team members, in one place |
| **Contains** | [Conversations](/specifications/conversations) from automatic and manual emails and LinkedIn messages |
| **Organized by** | Main categories (Inbox, Unread, AI draft) and inbox categories, each with an unread counter |
| **Key rule** | Only one inbox category can be assigned per thread — *Meeting intent*, a subcategory, is the exception |
| **Levels** | Consolidated (Inbox button in the main header) and sequence level (the Inbox tab of a sequence); both are synced and updated simultaneously |
| **Does not** | Display auto-replies, out-of-office messages, or bounced emails by default; allow multiple inbox categories on one thread; offer Delete as a bulk action on desktop |
## Definition
The Inbox — also known as the Consolidated Inbox — gathers all threads from all sequences
initiated by all team members in one place. It opens from the **Inbox** button in the main
header menu, which carries a counter of unread messages.
## Purpose
With more than one active sequence, responses would otherwise be checked in a different
inbox per sequence. The Consolidated Inbox manages all threads from all sequences in one
place: reading replies from automatic and manual emails and LinkedIn, filtering and
grouping them, responding quickly, and performing bulk actions.
## Relationships
| Relationship | Object |
| --- | --- |
| Contains | [Conversations](/specifications/conversations) from every sequence and team member |
| Mirrored at | The sequence level — the Inbox tab of a [sequence](/specifications/sequences) shows only that sequence's threads |
| Categorizes with | Main categories and inbox categories, including custom ones |
| Filters over | Sequences, sending emails, LinkedIn accounts, categories, timeframes, channels, and team members |
## Creation
Threads appear once contacts reply — if you have not received any replies yet, the inbox
is empty. Replies arrive from automatic and manual emails and from LinkedIn, including
conversations started via direct LinkedIn actions on the contact card. Auto-replies,
out-of-office messages, and bounced emails are not displayed by default. Emails sent
outside Reply can also sync in — see [Conversations](/specifications/conversations).
## Lifecycle and states
- **Unread.** Unread threads show in bold with a small blue circle to the left of the contact name. The left panel shows the number of unread messages in front of each category.
- **Read.** Opening a thread automatically marks it as read and decreases the unread counter. Threads can also be marked read or unread manually, one by one or in bulk.
- **Synced levels.** The consolidated and sequence-level inboxes update simultaneously: unread counters increment and decrement synchronously, and reading messages, answering, or creating categories in one inbox is reflected in the other.
## Configuration
### Inbox categories
Reply provides this default list of inbox categories: **Interested**, **Not interested**,
**Do not contact**, **Not now**, **Forwarded**, and **Meeting intent**. Categories reflect
the contact's interest and are assigned automatically by the AI algorithm, which
classifies them based on the tone of email replies. Only one inbox category can be
assigned per thread — the exception is *Meeting intent*, which is a subcategory.
### Custom categories
Custom categories are created from the Inbox tab of a sequence: open the Categories
section, click the "+" button, enter the category name, pick the color for its label, and
click Create. The new category is automatically pinned. Custom categories are created at
the team level, so team members can view each other's categories, and one category cannot
be created twice. The Settings icon in the Categories section pins and unpins categories
from the visible list.
### Auto-reply handling
By default, auto-replies, out-of-office messages, and bounced emails are not displayed in
the Inbox. The handling is set in Settings → Emails → Email Safety, separately for your
email client and for the Reply inbox.
| Email client action | Effect |
| --- | --- |
| Do nothing (default) | Detected auto-replies, OOO, and bounced emails are displayed |
| Delete | Detected auto-replies, OOO, and bounced emails are deleted |
| Mark as read | Detected auto-replies, OOO, and bounced emails are displayed and marked read on receipt |
| Reply inbox action | Effect |
| --- | --- |
| Do not display (default) | Detected auto-replies are shown neither in the inbox nor on the contact card |
| Display | Auto-replies, OOO, and bounced emails appear in the inbox and contact card, marked unread; the Inbox counter increments |
| Display & mark as read | Same as Display, but the emails are marked read right after receiving |
### Notifications
Inbox notifications announce new replies, whether email or LinkedIn messages, and are
managed in Settings → Notifications.
| Setting | Options |
| --- | --- |
| Receive notifications from | My threads only; All team members' threads; Specific team members' threads |
| When to show notifications | When any page is open; Only when Inbox page is open |
| Visibility | Automatically hide after 5 seconds, or stay until dismissed |
| Sound | Play sound for notification |
| Notification filters | Relevant replies only — no notifications for auto-replies or bounced emails |
| Channels | Email; LinkedIn |
## Processing behavior
### Viewing threads
Messages are displayed chronologically with the most recent replies on top. One page
holds up to 50 threads, with pagination buttons in the upper left corner; the mobile app
uses infinite scroll instead. A Split pane icon switches between **Standard mode** (the
list of all threads) and **Half-opened mode** (the list plus a panel with the opened
thread). Each thread row shows the channel (a light blue icon for manual emails, dark
blue for automatic), the contact's full name, categories, the subject and body preview,
the sequence where the thread was initiated, and the date and time of the last received
message.
### Assigning categories
The AI assigns inbox categories automatically. To change one, select the thread, click
the Manually assign/reassign category icon, pick the category from the drop-down list,
and click Apply; in bulk, the same flow applies to multiple selected threads, including
the *Meeting intent* subcategory. A category is removed with the x icon next to it on the
thread or with Clear assigned category in the same drop-down.
### Filtering
Main categories on the left panel are **Inbox** (all threads — the default filter),
**Unread** (threads with unread messages only), and **AI draft** (threads with replies
generated by Jason AI). Inbox categories sit below them, and the two blocks combine — for
example, Unread and Interested together filter Interested threads among the unread ones.
The team-member filter in the upper left switches between **All** (threads started by all
team members), **My** (only your threads), and a particular team member; the filters,
categories, and message counts change accordingly. The channel filter offers **All
channels**, **Email channel**, and **LinkedIn channel**.
Filters at the top of the page can be combined: **All sequences** (one or more
sequences), **All emails** (sending email addresses), **All accounts** (sending LinkedIn
accounts, connected or disconnected), **All categories** (standard and custom), and **All
time** (All time, Older than 1 month, Older than 3 months, Older than 6 months, Custom).
### Search
The search bar finds threads by the first or last name of the contact, the subject line
of an email, or the contact's email address. A fragment is enough — matches are found at
the beginning, middle, or end of the name, address, or subject. Search by subject line
works only for the visible part of the subject.
### Bulk actions
Checkmark the needed threads or select all with the All button, then use the icons on
top: mark as read, mark as unread, or manually assign/reassign a category. Selected
replies can also be exported with **Export contacts to CSV with replies** — the file
covers both email and LinkedIn replies and includes contact information, engagement
details, and reply details such as Reply Subject, Reply Body, Reply Text Body, Reply
Date, Replies by SMS, and Replies by LinkedIn.
### Canned responses
To save a canned (snippet) response, type the response in the Inbox, right-click it,
select Save as Canned Response, name it, and click Save. Insert a saved response from the
Note icon in the text editor, by typing "/" in the reply field, or with the keyboard
shortcut CTRL + S on Windows or Command + S on Mac.
## Side effects
- Opening a thread marks it read and decreases the unread counters — in both the consolidated and the sequence-level inbox.
- Filtering by a team member changes the filters, categories, and message counts shown.
- Setting auto-replies to Display marks them unread and increments the counter near the Inbox title. Auto-replies are never treated as real replies, so the contact is not finished in the sequence.
- Category changes, read states, and new custom categories made in one inbox level appear in the other as well.
## Limits
| Limit | Value |
| --- | --- |
| Threads per page (desktop) | 50 |
| Inbox categories per thread | 1 — the *Meeting intent* subcategory is the only exception |
| Default inbox categories | Interested, Not interested, Do not contact, Not now, Forwarded, Meeting intent |
| Duplicate custom categories | Not allowed — one category cannot be created twice |
| CSV export of replies | Only the latest reply per contact is included |
| Search by subject line | Matches only the visible part of the subject |
## Deletion behavior
Desktop bulk actions include mark as read, mark as unread, and category assignment —
Delete is a bulk action in the mobile app only. Clearing an assigned category removes the
label, not the thread. For custom categories, the sources describe unpinning them from
the visible list rather than deleting them.
## Edge cases
- A thread that contains an auto-reply plus real messages is still displayed when auto-replies are hidden — just without the auto-reply — and appears on the contact card's Emails tab. With Display & mark as read, threads that contain other real replies are not marked as read.
- Displayed auto-replies carry an "automatic reply" or "Delivery Status Notification (Failure)" prefix at the beginning of the subject.
- The sequence-level Inbox has the same functionality as the Consolidated Inbox except filtering by sequence and by team member, which it does not need.
- The sequence-level Inbox shows threads from all sending email addresses linked to the sequence, including threads with contacts whose owner is not the sequence owner.
- The "Relevant replies only" notification filter suppresses notifications for auto-replies and bounced emails.
## FAQ
### What are the default inbox categories?
Interested, Not interested, Do not contact, Not now, Forwarded, and Meeting intent. You
can also create custom categories with their own name and label color — they are shared
at the team level.
### Can a thread have more than one inbox category?
No — only one inbox category can be assigned per thread. The exception is *Meeting
intent*, which is a subcategory and can be applied alongside a category.
### Why don't I see out-of-office replies and bounces in the Inbox?
They are hidden by default. Change the behavior in Settings → Emails → Email Safety:
Do not display, Display, or Display & mark as read. Displayed auto-replies are never
treated as real replies, so they do not finish the contact in the
[sequence](/specifications/sequences).
### How do I export replies from the Inbox?
Select the replies and click Export contacts to CSV with replies. The export covers both
email and LinkedIn replies; when a contact replied several times, only the latest reply
is included.
### Does the sequence-level Inbox behave differently?
It has the same functionality as the Consolidated Inbox, minus the sequence and
team-member filters, which it does not need. Both levels are synced and updated
simultaneously, including unread counters.
## Related
- [Conversations](/specifications/conversations) — the threads the Inbox lists
- [Reply detection](/behavior/reply-detection) — how inbound messages are recognized
- [Reply management](/capabilities/reply-management) — AI classification of replies
- [Process replies](/how-to/process-replies)
- [Process positive replies](/workflows/process-positive-replies)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — inbox and reply endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents triage the inbox, change categories, and send replies
---
# Knowledge bases
> The specification of the Jason AI knowledge base — product information added as text, documents (100 MB per file), and links, plus Reply Handling with Auto, Draft, and Stop & notify modes and Re-engagement follow-ups.
**A knowledge base stores product information — text entries, uploaded documents, and links — that Jason AI draws on when handling replies. Its Reply Handling tab defines per-question handlers with Auto, Draft, or Stop & notify delivery modes; its Re-engagement section schedules follow-ups to silent leads. Linking it to an AI SDR sequence activates it.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
> **Jason AI knowledge base vs the in-app assistant's knowledge source.** This page specifies
> the AI SDR knowledge base you build for your own outreach. Reply's in-app chat assistant
> answers product questions from its own bundled help-center source — a separate mechanism,
> not configured here.
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | Key information about your product — features, guides, FAQs, benefits, pricing — that [Jason AI](/capabilities/ai-sdr) uses when handling replies |
| **Belongs to / Contains** | Contains sources (text, documents, links), Reply Handling handlers, and Re-engagement follow-ups; linked to AI SDR [sequences](/specifications/sequences) |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | **100 MB** per uploaded document file; only PDF, DOC, and DOCX documents are accepted |
| **Lifecycle** | Created and named on the **AI SDR → Knowledge Bases** page → content added → handlers and re-engagement configured → linked to a sequence |
| **Does not** | Write the outbound sequence steps — its content is used when Jason handles replies and re-engages silent leads, not to build the sequence itself |
## Definition
The knowledge base gives [Jason AI](/capabilities/ai-sdr) key information about your product
so it can respond to prospects accurately and handle different types of questions — product
features, guides, FAQs, benefits, pricing, and more. Two configuration layers live inside
it: **Reply Handling** (custom answers for common questions) and **Re-engagement**
(follow-up messages to leads who stop responding).
## Purpose
The knowledge base gives Jason the core information about your product; Reply Handling adds
an extra layer by letting you decide how Jason should answer certain types of questions —
more control over reply scenarios and over the tone and structure of answers.
Re-engagement keeps conversations going without tracking every lead manually.
## Relationships
| Relationship | Object |
| --- | --- |
| Linked to | AI SDR [sequences](/specifications/sequences) — click **New AI SDR Sequence** right after creating the knowledge base, or select it from the library when setting up a sequence |
| Contains | Sources (text, documents, links), reply handlers, and re-engagement follow-ups |
| Works with | [Offers](/specifications/offers) and [playbooks](/specifications/playbooks), which drive outbound generation — the knowledge base covers what happens after a prospect replies |
| Governed by | The Jason AI reply settings — whether AI-generated replies are sent automatically, saved as drafts, or **Mixed** when handlers use different modes |
## Creation
1. Go to the **AI SDR → Knowledge Bases** page.
2. Click **New Knowledge Base** and name it.
3. Upload product guides, FAQs, PDFs, or links with key details.
4. Add commonly asked questions on the **Reply Handling** tab.
5. Set up **Re-engagement** follow-ups for leads who stop responding.
6. Link the knowledge base to a sequence — click **New AI SDR Sequence**, or select the knowledge base from the library when setting up a new AI SDR sequence.
## Configuration
### Sources
Content is added in three ways:
| Method | Detail |
| --- | --- |
| **Text** | Enter details directly — product descriptions, FAQs, instructions |
| **Documents** | Upload PDF, DOC, or DOCX files, max **100 MB** per file; other file types are rejected |
| **Links** | Add direct links to helpful resources; each link is added individually |
### Reply handlers
A reply handler describes a common prospect question (for example, *"Do you offer a free
trial?"*) and how Jason should answer it:
| Field | Detail |
| --- | --- |
| Question | The common question type this handler covers |
| Delivery mode | **Auto**, **Draft**, or **Stop & notify** — each question type can use a different mode |
| Instructions | What the AI should include in its answer, with any prompts or guidance to shape the response |
| Sample answer | Optional example of a well-written reply to set tone and structure |
| Tone of voice | Confident, persuasive, witty, straightforward, or empathetic |
| Response length | Super short, short, medium, or long |
| Resources | Links the AI can share — pricing pages, documentation, onboarding guides |
| Media | Attachments the AI sends when this question is asked |
The three delivery modes:
- **Auto** — the AI sends the reply immediately without human review. Suited to low-stakes, well-defined scenarios such as unsubscribe confirmations, meeting links, or FAQ answers.
- **Draft** — the AI composes the reply and saves it as a draft for human review before sending. Suited to sensitive but repeatable replies where a rep may want to adjust the wording.
- **Stop & notify** — no AI response is generated or sent. All further sending to the contact pauses, the conversation is flagged, and the assigned rep is notified to take over. Suited to high-stakes question types such as legal review.
If some handlers use Auto and others Draft, select **Mixed** under *What would you like to
do with the AI-generated reply?* in the Jason AI settings.
### Re-engagement
Re-engagement follow-ups reach leads who stopped responding. Each follow-up defines:
| Field | Detail |
| --- | --- |
| Send after (days) | How many days after the last reply Jason should follow up |
| Delivery mode | **Auto** (send automatically) or **Draft** (generate for review); mixing modes requires **Mixed** under *What would you like to do with AI-generated re-engagement follow-ups?* in the Jason AI settings |
| Instructions | A short guideline — tone of voice and key points to include |
| Sample answer | An example message to set the style |
| Tone of voice | Confident, persuasive, witty, straightforward, or empathetic |
| Response length | From super short to long |
| Resources | Helpful links to support the follow-up |
| Media | A PDF or DOC file that could help re-engage the lead |
You can create multiple follow-ups — for example, one after 2 days and another after 5 —
and pause any of them with the toggle next to it.
## Processing behavior
Once the knowledge base is attached to a sequence, Jason draws on its content when handling
replies. When a prospect's message matches a reply handler, the handler's instructions,
tone, length, resources, and media shape the response, and its delivery mode decides
whether the reply is sent automatically, saved as a draft, or stops sending and notifies
the rep. Re-engagement messages go out (or are drafted) the configured number of days after
the last reply, as an email or LinkedIn message that refers to the previous conversation.
Rating or editing AI-suggested replies in the Inbox also feeds Jason's self-learning. Those
inferred writing-style rules are separate from reply handlers, which are answers you author.
## Limits
| Limit | Value |
| --- | --- |
| Document upload size | **100 MB** per file |
| Document formats | PDF, DOC, DOCX — other file types are rejected |
| Links | Added one at a time |
The product documentation does not state caps on the number of knowledge bases, sources per
knowledge base, reply handlers, or re-engagement follow-ups.
## Edge cases
- A **Stop & notify** match produces no AI response at all — sending to that contact pauses and the assigned rep takes over.
- Handlers can mix Auto and Draft delivery modes, but only when **Mixed** is selected in the Jason AI settings — the documentation calls this out for both reply handlers and re-engagement follow-ups.
- Each link source needs to be added individually.
- A re-engagement follow-up can be paused with its toggle without deleting it.
## FAQ
### Are AI-generated answers sent automatically?
Per handler: **Auto** sends immediately, **Draft** queues the reply for your review, and
**Stop & notify** sends nothing and hands the conversation to the assigned rep. Whether
Jason drafts or sends also depends on the AI Replies settings — select **Mixed** there when
handlers use different modes.
### What does Stop & notify do?
It pauses all further sending to the contact, flags the conversation, and notifies the
assigned rep to take over; no AI response is generated or sent. It is meant for high-stakes
question types such as legal review.
### What are re-engagement follow-ups?
Messages Jason sends (or drafts) when a lead stops responding — a set number of days after
the last reply, as an email or LinkedIn message that refers to the previous conversation.
Several can be chained, for example one after 2 days and another after 5. See
[Process positive replies](/workflows/process-positive-replies) for the wider reply
workflow.
### What content can a knowledge base hold?
Text entered directly, links added individually, and PDF, DOC, or DOCX documents up to
100 MB per file. Other document file types are rejected.
### How do I connect a knowledge base to a sequence?
Click **New AI SDR Sequence** right after creating the knowledge base, or select it from
the library when setting up a new AI SDR sequence — see
[Build an AI SDR](/workflows/build-an-ai-sdr).
## Related
- [Offers](/specifications/offers) · [Playbook (Jason AI object)](/specifications/playbooks)
- [AI SDR](/capabilities/ai-sdr) · [Reply management](/capabilities/reply-management)
- [Reply detection](/behavior/reply-detection) · [Reply classification](/learn/reply-classification)
- [Process positive replies](/workflows/process-positive-replies)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — knowledge-base operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — create knowledge bases, add sources, and configure reply handlers and re-engagement from an agent
---
# Offers
> The specification of Jason AI offers — audience-specific positioning built from an ICP, pain points, value propositions, proof points, and case studies; five are generated per new sequence, with an Update original vs Keep separate edit flow.
**An offer presents your product to a specific audience segment: an ICP plus the pain points, value propositions, proof points, and case studies that matter to it. Jason AI generates five offers per new sequence as different selling angles, draws on offer data for every personalized message, and asks whether edits update the original or create a separate copy.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | A way to present your product (or part of it) to a specific audience — the ICP plus the pain points, value propositions, proof points, and case studies that matter to that segment |
| **Belongs to / Contains** | Selected into AI SDR [sequences](/specifications/sequences); its data feeds message generation and AI-generated [playbooks](/specifications/playbooks) |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | **5** offers are generated automatically per new AI SDR sequence — one in the wizard, four in the background |
| **Lifecycle** | Created manually, generated from a website URL, or auto-generated during sequence creation; edits prompt **Update original** vs **Keep separate** |
| **Does not** | Control message structure, tone, or channels — that is the [playbook](/specifications/playbooks)'s job; the offer defines who you're reaching out to and what you're offering them |
| **Plans** | AI SDR plans; the 30-day AI SDR trial includes full access to Offers |
## Definition
An offer is a way to present your product (or part of it) to a specific audience, based on
what matters most to them. Each offer speaks to one segment of your audience by focusing on
its unique pain points, needs, and priorities — offers are about **who you're reaching out
to, and what you're offering them**.
## Purpose
Offers segment your audience and make messaging targeted: tailor the message to each
group's pain points, test how different segments respond to your offer, and learn which
segment is most engaged so you can focus on what works. The same product can be packaged
differently for a sales manager, a VP of sales, or a recruiter. You can build personalized
sequences for each group and even A/B test them to improve performance over time.
## Relationships
| Relationship | Object |
| --- | --- |
| Selected into | AI SDR [sequences](/specifications/sequences) — start a **New AI SDR sequence** with the offer, or pick one from the dropdown during sequence setup |
| Feeds | Message generation — Jason selects one pain point, one value proposition, one case study, and one CTA from your business inputs for each message, so no two emails are exactly the same |
| Feeds | AI-generated [playbooks](/specifications/playbooks) — the meta playbook takes the offer's pain points, value propositions, and ICP and generates a playbook tailored to that selling context |
| Regenerates | Autopilot contact filters — when an offer's ICP changes, the filters that target it are regenerated |
| Created by | AI Strategist runs — each of its generated sequences includes its own offers, pain points, value propositions, CTAs, goals, and reasons for outreach |
| Traced by | The **Original Sequence** column of the Offers table — the sequence the offer was created from |
## Creation
Offers live on the **AI SDR → Offers** page. An offer comes to exist in three ways:
- **Manually** — click **New Offer** and create one yourself.
- **From a website URL** — paste your website URL and AI SDR analyzes it and generates an offer based on your product or service.
- **Automatically during sequence creation** — when you create an AI SDR sequence, Jason generates **5 offers** in total from your website and business inputs. One appears immediately in the sequence wizard and is pre-selected; the other four are generated in the background and appear on the Offers page. The five differ mainly by **ICP** and the **pain points** tied to that ICP — different angles to sell the same product.
AI Strategist also produces offers: it studies your website in depth and generates up to
15 sequences, each tailored to a specific audience or approach, with its own offers, pain
points, value propositions, CTAs, goals, and reasons for outreach.
An existing offer — custom or default — can also be **duplicated** from the Offers page.
The documentation does not state how the copy is named or what it carries over.
## Configuration
An offer bundles the positioning data Jason generates from your website and business
inputs:
- Offer name
- ICP (Ideal Customer Profile) — the audience segment
- Pain points
- Value proposition
- Proof points
- Case studies
- Company description — present on offers created with enough source context
The Offers table shows each offer's name and its **Original Sequence** — the sequence the
offer was created from. Clicking the sequence name opens that sequence's Steps page; the
column is empty for offers created manually or from a website URL.
## Editing and updates
**During sequence creation.** If you select an offer and then modify the generation
inputs — add, remove, or adjust pain points, update value propositions, include or remove
case studies, modify the ICP, or make other changes — clicking **Next** prompts a choice:
- **Update original** — updates the existing offer; the changes apply to all sequences where this offer is currently used.
- **Keep separate** — creates a new offer and keeps the original unchanged; the modified version applies only to the current sequence. Use it to test variations without affecting other active sequences.
If the ICP changed, the prompt additionally warns that **contact filters will be
regenerated based on the new ICP** — for all sequences using the offer with *Update
original*, or for the new offer and current sequence only with *Keep separate*.
**From the Offers page.** Editing an offer directly shows a confirmation modal warning that
the edit affects all sequences using this offer. When the offer is used in up to five
sequences, the modal lists them by name; beyond that it shows only the total count of
affected sequences. Cancel returns to the edit form without saving.
**Regenerating after an ICP edit.** Editing the ICP field — on the Offers page or on
Step 1 of the sequence wizard — can surface a **Regenerate** option that rebuilds the pain
points, value proposition, proof points, and case studies, plus the Autopilot contact
filters, from the new ICP. Regenerate appears only for offers created with a company
description; offers without one — typically older offers — do not support it.
## Processing behavior
Jason AI draws on offer and business-input data every time it writes a message. With, for
example, 5 pain points, 6 value propositions, 4 case studies, and 3 CTAs, the system
selects one of each when generating a message — one email might use the 2nd pain point,
3rd value proposition, 1st case study, and 2nd CTA; another a different mix. This keeps
messaging consistent while making each email feel different, which also makes it less
likely to be flagged as spam.
The offer also seeds the **meta playbook**: a system-level meta prompt takes the offer's
pain points, value propositions, and ICP — plus your uploaded outreach examples — and
generates a playbook tailored to that product and selling context. See
[Playbook (Jason AI object)](/specifications/playbooks).
## Limits
| Limit | Value |
| --- | --- |
| Offers generated per new AI SDR sequence | **5** — one shown in the wizard, four generated in the background |
| Sequences listed by name in the edit-confirmation modal | Up to **5**; above that, only the total count is shown |
The documentation does not state a cap on the number of offers per workspace.
## Edge cases
- The **Original Sequence** column is empty for offers created manually or from a website URL.
- Renaming the source sequence updates the Original Sequence column automatically; deleting the source sequence leaves the column empty without breaking the Offers table.
- The first auto-generated offer is pre-selected in the sequence wizard — no manual selection needed.
- Offers created without a company description — typically older offers — do not show the Regenerate option after an ICP edit.
- Duplication is available for both custom and default offers; the naming of the copy is not documented.
## FAQ
### Does editing an offer change the sequences that use it?
Editing during sequence creation asks you to choose: **Update original** applies the
changes to every sequence using the offer, while **Keep separate** creates a new offer for
the current sequence only. Editing from the Offers page always affects all sequences using
the offer and requires confirmation. The documentation does not state whether messages
already generated for contacts are rewritten.
### How many offers does Jason AI generate?
Five per new AI SDR sequence — one shown immediately in the wizard and pre-selected, four
generated in the background and added to the Offers page. They differ mainly by ICP and
the pain points tied to that ICP.
### What happens when I change an offer's ICP?
The edit prompt warns that contact filters will be regenerated based on the new ICP. On
offers that support it, a **Regenerate** option can also rebuild the pain points, value
proposition, proof points, and case studies from the new ICP.
### How is an offer different from a playbook?
The offer defines who you're reaching out to and what you're offering them; the
[playbook](/specifications/playbooks) instructs how Jason writes the messages; the
[knowledge base](/specifications/knowledge-bases) supplies what Jason uses when handling
replies. An AI SDR sequence combines all three — see [AI SDR](/capabilities/ai-sdr).
### Can I A/B test offers?
Yes — offers exist to test how different audience segments respond. Build personalized
sequences for each group and A/B test them to learn which segment is most engaged.
## Related
- [Playbook (Jason AI object)](/specifications/playbooks) · [Knowledge bases](/specifications/knowledge-bases)
- [AI SDR](/capabilities/ai-sdr) · [The AI SDR model](/learn/ai-sdr-model)
- [Build an AI SDR](/workflows/build-an-ai-sdr)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — offer operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — create, update, and list offers from an agent, including generating one from a website
---
# Playbook (Jason AI object)
> The specification of the Jason AI playbook — the message-generation prompt with Do and Don't instructions, step-specific sections, step attachments, and the AI-generated playbook Jason builds from your offer.
**A playbook is a prompt document of instructions — Do and Don't lists, subject-line rules, and step-specific sections — that controls how Jason AI writes sequence messages. It shapes tone, style, length, and structure but cannot build sequences, pick audiences, or manage replies. Jason can also generate a playbook from your offer, tagged AI Generated.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
> **Playbook (Jason AI object) vs Playbooks (site section).** This page specifies the Jason
> AI configuration object. For human-readable outreach recipes, see
> [Playbooks](/playbooks).
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | Your guide for how AI SDR generates sequence messages — custom prompt instructions so the content matches your style, sales goals, and strategy |
| **Belongs to / Contains** | Attached to AI SDR [sequences](/specifications/sequences); organized under the **Library** (ready-made examples) and **Team** folder tabs; can carry step attachments |
| **Surfaces** | UI · REST API · MCP |
| **Key limit** | Step attachments: **3 MB** per file, **4 MB** total per email step type, **1** file per LinkedIn step |
| **Lifecycle** | Written manually or generated by Jason from your offer (tagged **AI Generated**); your own playbooks are editable any time, Library defaults are not; both can be duplicated |
| **Does not** | Create sequences, control LinkedIn actions, research contacts, or filter who to reach out to — and once a prospect replies, playbook instructions no longer apply |
## Definition
A playbook is your own guide for how AI SDR generates sequence messages. Its custom
prompts — what to highlight, what to leave out, do's and don'ts, and how to organize the
messaging — give you control over how the AI creates outreach messages, so the content
matches your style, sales goals, and strategy. A playbook does not have to be long: it can
be as simple as one sentence, such as *"Don't mention the competitors' names — be polite
and avoid hard selling."*
## Purpose
Playbooks are for message creation, not sequence setup. They let you control tone, style,
and length, set subject-line rules, apply variables and personalization points, guide the
structure of specific steps, specify when to include links, and keep shaping follow-ups in
the right tone until a prospect responds. The best way to control Jason's tone of voice is
via a playbook.
## Relationships
| Relationship | Object |
| --- | --- |
| Attached to | AI SDR [sequences](/specifications/sequences) — click **New AI SDR Sequence** above the playbook, or **Add playbook** while setting up a sequence |
| Generated from | [Offers](/specifications/offers) — the meta playbook turns the offer's pain points, value propositions, and ICP, plus your uploaded examples, into a tailored playbook |
| Complemented by | [Knowledge bases](/specifications/knowledge-bases) — once a prospect replies, playbook instructions no longer apply; reply handling is configured separately |
| Organized in | The Playbooks list folder tabs: **Library** (ready-made examples) and **Team** (your team's playbooks, including AI-generated ones) |
## Creation
### Writing a playbook manually
1. Go to the **AI SDR** page and open the **Playbooks** tab.
2. Click **New Playbook** in the top-right corner.
3. Structure it with the section buttons for key outreach steps: *Do, Don't, First email, First email follow-up, Second email follow-up, Subject Lines, LinkedIn Connect, First LinkedIn Message, Voice Message, LinkedIn InMail, Call script, Variables*. The default template includes pre-filled text showing how to structure a playbook.
The **Library** tab holds ready-made playbooks to use or refer to as examples — review and
adjust them to fit your audience, goals, and sequence before using. Library defaults cannot
be modified; your own playbooks can be edited at any time.
### AI-generated playbooks (meta playbook)
Jason can generate a playbook for you. A system-level meta prompt — the meta playbook —
takes your offer's data (pain points, value propositions, ICP, and the wizard's step
structure) plus your own outreach examples and generates a custom playbook tailored to that
product and selling context:
- Generation runs in the background while you complete the earlier wizard steps — when you reach the Playbook step, the playbook is already present (or loading). If generation is not ready or fails, you can generate one or browse the library instead; the wizard offers two view modes, **AI Generated** and **Browse Library**.
- Clicking **Continue** saves the result: the playbook is persisted to your library under the **Team** tab, tagged **AI Generated**, named after the company, and attached to the sequence.
- On a return visit, the existing AI-generated playbook is pre-selected; you can accept it, pick another from the library, or generate a new one — the old version is not deleted.
- Feedback chips and a free-text field drive **Regenerate**; manual edits to the Do / Don't columns are preserved, and regeneration builds on top of them. Like and dislike reactions are stored to improve future generations.
- To train style, upload past outreach examples: up to **20** files of **100 MB** each, in `.txt`, `.html`, `.csv`, `.md`, or `.pdf` format. The AI-generated playbook's title is capped at **120** characters.
### Duplicating
Both custom and default (Community) playbooks can be duplicated from the Playbooks list;
the copy opens in a saved state.
## Configuration
### What a playbook controls
- **Tone, style, and length** — friendly, formal, short, or detailed.
- **Subject line rules** — length, style, and personalization across the sequence.
- **Personalization** — standard or custom variables like `{{FirstName}}` or `{{Company}}`, plus personalization points relevant to your audience.
- **Step templates** — a preferred structure for specific steps (for example, Email #1 or a follow-up email).
- **Links** — when and how to include hyperlinks to calendars, websites, or resources.
- **Follow-ups** — the AI keeps shaping follow-ups in the right tone until a prospect responds.
### What a playbook cannot do
- Create entire outreach sequences — it controls message content, not sequence structure.
- Control LinkedIn actions — the AI cannot open profiles, send connection requests, or automate other LinkedIn actions; LinkedIn steps belong to the sequence.
- Research contacts — include variables and personalization points instead.
- Filter who to reach out to — audience selection happens beforehand; a playbook cannot exclude prospects by job title or location.
- Manage replies — once a prospect replies, playbook instructions no longer apply; set up reply handling separately in the [knowledge base](/specifications/knowledge-bases).
### Structure of a well-built playbook
A playbook has two main parts:
- **General instructions for all steps** — overall guidelines (tone, style, length, approach), Do / Don't lists, and subject-line rules. Put anything that is not a template into the Do's and Don'ts sections, keep lists under 10 items, and start Don'ts with "Don't".
- **Step-specific instructions** — AI-friendly step names ("first email", "email follow-up #1" — not "2nd email"), step-specific Do / Don't lists, frameworks and examples with variables, and per-step subject-line instructions where needed.
### Variables and hyperlinks
Use `{{double braces}}` for standard Reply contact variables and `[brackets]` for longer
instructions, like `[Your Value Proposition]`. Add hyperlinks with the **Insert link**
button in the editor's tools panel, by pasting a URL directly into the editor, or with a
manual HTML anchor tag — the AI shapes it as a clickable link and keeps hyperlinks intact
in generated emails.
### Multi-language
Playbooks support multiple languages: write the instructions in English or another
language, then tell the AI which language the messages should be generated in. For best
results, include message examples in the target language.
### Step attachments
Files — lead magnets, case studies, documents — can be attached to playbook steps and sent
as part of the AI SDR sequence. One file can be assigned to multiple steps at once, and
attachments are included in AI-generated personalized messages automatically.
| Step | Attachments |
| --- | --- |
| First Email | Supported |
| First Email Follow-Up | Supported |
| Second Email Follow-Up | Supported |
| First LinkedIn Message | Supported |
| LinkedIn Connect | Not available |
| Voice Message | Not available |
| LinkedIn InMail | Not available |
| LinkedIn Voice Message | Not available |
Supported file types: `.pdf`, `.doc`, `.docx`, `.txt`, `.ppt`, `.pptx`, `.xls`, `.xlsx`,
`.csv`, `.mp3`, `.wav`, `.m4a`, `.ogg`, `.aac`, `.webm`, `.jpg`, `.jpeg`, `.png`, `.gif`,
`.bmp`, `.webp`.
## Processing behavior
Jason applies the playbook's instructions each time it generates a message, and keeps
generating follow-ups in the configured tone until the prospect replies. In an
already-running sequence, changes to the playbook and other Jason AI settings apply only to
contacts who haven't yet received any steps. When a sequence has multiple playbooks
assigned, only the first playbook's attachments are used.
## Editing a saved playbook
Editing a playbook that is attached to one or more sequences first asks how to apply the
changes:
- **Update for all sequences** — updates the playbook in place; every sequence using it gets the new version.
- **Save as a new playbook for this sequence only** — creates a copy, attaches it to the current sequence, and leaves the original (and the other sequences using it) unchanged.
A playbook not attached to any sequence opens straight in the editor. Your own playbooks
are editable at any time; Library defaults are not.
## Limits
| Limit | Value |
| --- | --- |
| Attachment upload | **3 MB** per file |
| Attachments per email step type | **4 MB** total across all files on that step |
| Attachments per LinkedIn step | **1** file |
| Example files for AI generation | Up to **20** files, **100 MB** each (`.txt`, `.html`, `.csv`, `.md`, `.pdf`) |
| AI-generated playbook title | **120** characters |
Attachment limits are enforced per step type, not per email provider. The documentation
does not state a cap on the number of playbooks.
## Edge cases
- Some playbook features — step attachments and editor buttons such as Insert link — are rolled out per workspace and may not appear in every account.
- When a sequence has several playbooks assigned, only the first playbook's attachments are used.
- Only the first LinkedIn Message step receives attachments — a second LinkedIn Message step in the same sequence does not.
- LinkedIn Connect, InMail, and voice-message steps cannot carry attachments — LinkedIn supports attachments only on regular LinkedIn Message steps.
- Use AI-friendly step names in instructions: "email follow-up #1" applies correctly, "2nd email" may not.
- After several regenerations of an AI-generated playbook, navigating back in the wizard shows the last generated version, not the original.
## FAQ
### Can Jason AI generate a playbook for me?
Yes. During sequence creation, a playbook is generated in the background from your offer's
pain points, value propositions, and ICP, plus any outreach examples you upload. It is
saved to your library under the **Team** tab, tagged **AI Generated**, and named after the
company. You can regenerate it with feedback or swap it for a library playbook.
### Does editing a playbook change sequences already using it?
You choose: **Update for all sequences** applies the edit everywhere the playbook is used,
while **Save as a new playbook for this sequence only** isolates the change to the current
sequence. In a running sequence, changes apply only to contacts who haven't yet received
any steps.
### Can a playbook control who gets contacted?
No. Audience selection happens before generation — a playbook cannot filter prospects by
job title or location, and it cannot control LinkedIn actions or research contacts. See
[Build an AI SDR](/workflows/build-an-ai-sdr) for where audience selection happens.
### Can I attach files for Jason to send?
Yes — attach lead magnets, case studies, or documents to email steps and the first
LinkedIn Message step: 3 MB per file, 4 MB total per email step type, one file per
LinkedIn step. Connection requests, InMail, and voice messages cannot carry attachments.
### Do playbooks work in languages other than English?
Yes. Write the instructions in English or another language and tell the AI which language
the messages should be generated in; include example messages in the target language for
best results.
## Related
- [Offers](/specifications/offers) · [Knowledge bases](/specifications/knowledge-bases)
- [AI SDR](/capabilities/ai-sdr) · [Build an AI SDR](/workflows/build-an-ai-sdr)
- [Playbooks (site section)](/playbooks)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — playbook operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — create, duplicate, and attach playbooks from an agent
---
# Workspaces and roles
> The specification of Reply's organization structure — how an organization contains workspaces and users, the permanent organization-owner rules, the three role levels, Team Edition Public and Private modes, and the seat types that gate access to mailboxes, LinkedIn, and calls.
**Every Reply account is an organization containing workspaces — isolated groups with their own users, data, and roles. The organization owner is permanent, belongs to every workspace, and cannot be removed. Roles exist at organization, team-wide, and workspace levels. Team Edition adds shared prospects and sequences in Public or Private mode.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it is** | The containment and access model of a Reply account: an organization holds workspaces; workspaces hold users, each with a role |
| **Belongs to / Contains** | Organization → workspaces (clients, teams, projects) → users with roles; contacts, sequences, and email accounts are isolated per workspace |
| **Surfaces** | UI — profile photo → **Organization** (tabs: Workspaces, Users, Roles & Permissions) |
| **Key rule** | Exactly **one** organization owner per organization — automatically part of every workspace, cannot be removed, reassigned, or transferred |
| **Lifecycle** | Organization created with a Default Team → workspaces added → users invited (*Pending* until accepted) → workspaces deleted only after all users except the owner are removed |
| **Does not** | Share data between workspaces, allow transferring the organization-owner role (deleting the whole organization is the only way to remove it), or allow reverting Team Edition once enabled |
| **Availability** | Organizations are available by default for all new accounts |
## Definition
An organization is the top-level container of a Reply account. It holds workspaces —
separate groups for individual clients, teams, or projects, each with its own users,
roles, settings, and data — and the users invited into them. Roles define what actions
users can take; permissions determine which features and data they can access. Team
Edition is the collaboration layer inside a team: it merges prospects, sequences,
schedules, and templates across members, in either Public or Private mode.
## Purpose
Organizations are designed for teams and agencies that manage outreach for multiple
clients: separate workspaces keep each client's prospects, sequences, and templates
independent, while roles and permissions control visibility and access from a single
account.
## Relationships
| Relationship | Object |
| --- | --- |
| Organization contains | Workspaces, users, and three levels of roles; opened via profile photo → **Organization** |
| Workspace contains | Its own users, roles, and settings; data (contacts, sequences, email accounts) does not cross workspaces |
| User | Invited by email; must be assigned a workspace and a role; can belong to several workspaces with a different role in each, and to several organizations with one set of credentials |
| Role | Organization Role, Team-wide Role, or Workspace Role — full permission tables: [Permissions](/reference/permissions) |
| Seat | Access to one resource at a time: team member, mailbox, LinkedIn automation, or Cloud Calls |
## Creation
**Workspaces.** Click **New workspace** in the Workspaces tab, enter a name, and click
**Create**; a logo can be added and the workspace renamed later. Before the first
non-default workspace is created, a one-time **Choose Your Billing Model** modal appears:
**Organization Billing** (all workspaces billed under a single organization plan) or
**Per Workspace Billing** (each workspace billed individually). The choice is permanent,
applies to all future workspaces — including ones created after deleting all previous
ones — and the prompt appears only once. Agency accounts are pre-assigned Organization
Billing and never see the modal.
**Users.** Click **Invite user** (Users tab) or **+ Invite** next to a workspace, enter
one or more email addresses separated by commas, and assign a workspace and role — both
are required. Invitees show a *Pending* status until they accept; an invite can be
withdrawn with **Cancel invite**. A user with a standalone solo trial account cannot be
invited until Reply support deletes that trial account.
**Cross-organization invitations.** Inviting an email address that already belongs to a
user in another organization triggers a joining flow instead of registration: the user
logs in with their existing credentials and chooses **Accept & Join** or **Decline**.
After accepting, they belong to both organizations simultaneously, permissions apply
independently per organization, data stays isolated per workspace, and the workspace
switcher in the Profile menu groups workspaces by organization.
**Roles.** In the Roles & Permissions tab, click the **+** icon next to the section
(Organization Roles, Team-wide Roles, or a workspace under Workspace Roles), name the
role, click **Create**, then enable or disable permissions and click **Save**. Roles are
assigned to users from the Users tab.
## Lifecycle and states
Each organization starts with a **Default Team** and three roles: **Organization Owner**
(full access to everything, including team creation, role management, and billing),
**Team Lead** (manages team activities and members per assigned permissions), and **Team
Member** (limited access focused on operational tasks). Users move from *Pending* to
active on accepting an invitation. The organization-owner role is permanent: it is
assigned automatically to the account creator, there is only one per organization, and
the only way to remove it is to delete the organization with all teams and members.
## Configuration
### Role levels
| Level | Scope | Typical use |
| --- | --- | --- |
| Organization Roles | The entire organization: billing, inviting and removing users, workspace management, logging in as other users, and organization-wide objects (templates, playbooks, custom fields) | Administrators |
| Team-wide Roles | The same permission set applied across multiple workspaces at once; a change propagates to every workspace using the role | Account managers, senior SDRs working with several client teams |
| Workspace Roles | A single workspace; changes in one workspace never affect others; some permissions carry *Workspace* / *My* scopes | Per-team access, one-off adjustments, Reports-only client access |
The full permission catalogs for each level are maintained on one page —
[Permissions](/reference/permissions) — and are not duplicated here. Workspace roles
cannot manage organization-level permissions unless the user also holds an Organization
Role.
### Team Edition
Team Edition merges contacts, sequences, schedules, and templates of all team members
into unified lists, merges duplicate prospects and duplicate blacklists (the blacklist
then works across the team), and enables collaboration at the prospect level. Enabling it
requires being the Team owner: **Team Management → Permissions → Enable management**,
choose **Public** or **Private** mode, then **Next**. Reply recommends starting with
Public and switching to Private later if needed. Once enabled, Team Edition cannot be
reverted.
| Mode | Who sees what |
| --- | --- |
| Public | Prospects and sequences are shared: members can create, update, and delete prospects, add and remove them from sequences, change sequence settings, remove sequences, and view each prospect's communication history. Only the team owner or the record's owner can change ownership; any member can change the status of prospects in other owners' sequences; only the sequence owner can add or remove mailboxes in a sequence (the team owner can sign in as that member to do it) |
| Private | Sequences and contacts are visible only to team owners, who can reassign ownership; templates, schedules, and reports are accessible to every member; contact lists, folders, filters, integrations, and settings are visible only to the users who created them. When a prospect is reassigned, the full communication history — past sequences, replies, statuses — is preserved |
With Team Edition on, **account-based sales** becomes available: turning on **Pause all
contacts from the same organization on reply** (Settings → Contacts → Contact handling)
automatically pauses all contacts sharing the business domain of a contact who replied.
### Seats
| Seat type | Grants |
| --- | --- |
| Team member | A user who can log into their Reply account |
| Mailbox | An email account connected to send messages |
| LinkedIn automation | A connected LinkedIn account used for outreach |
| Cloud calls | Renting a phone number and making calls in sequences |
Each seat covers one connected account or feature at a time; accounts can be disconnected
and reconnected without affecting billing as long as the seat limit is respected, and
multiple team members can share the same mailbox seat. Changing the number of team
members automatically adjusts the included mailbox, LinkedIn, and warm-up seats per the
plan — except on the Email Volume plan, where the mailbox count follows the active
contacts tier, not the user count. Pre-warmed mailboxes do not occupy mailbox seats but
do count against the plan's email account limit. Seat and account numbers per plan:
[Limits](/reference/limits).
Under Roles & Permissions billing models, seat limits scope differently:
| Billing model | Seat limit scope |
| --- | --- |
| Organization Billing | Limits are shared across the entire organization |
| Per Workspace Billing | Limits apply per workspace independently; seat charges for an added member go to the target workspace, not the inviter's active one |
## Processing behavior
The Users tab lists everyone in the organization with search, a workspace filter, and an
organization-role filter (multi-select, including a **None** option for users without an
organization role; roles combine with OR, and the role filter combines with the workspace
filter with AND). Pending invitations appear only in the fully unfiltered view — applying
any role filter, including None, hides them. Quick copy actions support tickets and API
calls: **Copy team ID** from the workspace menu, **Copy user ID** from a member's menu
(not available for pending invites), and a copy icon next to each member's email. A
user's role is changed by clicking their current role and picking a new one.
## Side effects
- Removing a user from a workspace transfers their contacts, sequences, schedules, unfinished tasks, and templates to the organization owner in the same team; their connected email accounts and completed tasks are deleted permanently. The process cannot be undone, and for large accounts it can take several days (shown as a *Pending* status).
- Enabling Team Edition merges the contacts, sequences, schedules, and templates of all team members — and cannot be reverted.
- The billing model chosen at the first non-default workspace binds every future workspace.
- Deleting a workspace deletes all of its data — sequences, contacts, templates.
## Limits
| Limit | Value |
| --- | --- |
| Organization owners per organization | **1** — cannot be transferred or removed |
| Removing workspace members | One at a time |
| Billing model selection | One-time and permanent |
| Workspaces per organization / users per workspace | Not documented |
| Seat | One connected account or feature at a time |
## Deletion behavior
A workspace is deleted from its three-dot menu (**Delete workspace**, then typing
`DELETE` to confirm) — but only after every user except the organization owner has been
removed from it; until then the Delete button is unavailable. Deletion is permanent and
removes all related data. Users cannot be deleted from the Users tab; they are removed
per workspace from the Workspaces tab (**Remove from the client**, confirmed by typing
`DELETE`), with the data-transfer side effects described above. The organization itself
can be deleted, which is also the only way to remove the organization-owner role.
## Edge cases
- A user can hold different roles in different workspaces, and belong to multiple organizations with a single username and password — an Owner in one can be a regular member in another.
- Declining a cross-organization invitation explicitly rejects it, preventing accidental cross-organization access from an unintended click.
- Pending invitations disappear from the Users tab as soon as any role filter is applied, even the None filter.
- On the Email Volume plan, adding team members does not increase the mailbox limit — only a higher active contacts tier does.
- The organization owner appears in every workspace and cannot be removed from any of them.
## FAQ
### Can the organization owner be changed?
No. Each organization has exactly one owner, assigned automatically at account creation.
The role cannot be transferred or removed — the only way to remove it is deleting the
organization along with all teams and members.
### Can Team Edition be turned off after enabling it?
No. Enabling Team Edition merges contacts, sequences, schedules, and templates across the
team and cannot be reverted. Reply recommends starting in Public mode and switching to
Private later if more control is needed.
### What is the difference between Team-wide and Workspace roles?
A Team-wide Role applies one permission set across multiple workspaces at once — editing
it updates every workspace using it. A Workspace Role exists in a single workspace and
changes there never affect others. Both share the same permission categories — see
[Permissions](/reference/permissions).
### What happens to a user's data when they are removed from a workspace?
Their contacts, sequences, schedules, unfinished tasks, and templates transfer to the
organization owner in the same team; connected email accounts and completed tasks are
deleted permanently. This cannot be undone and can take several days for large accounts.
### Do workspaces share any data?
No — contacts, sequences, and email accounts are isolated per workspace, including for
users who belong to several workspaces or organizations. Within a single team, Team
Edition shares data according to its mode, and the team blacklist works across the team.
## Related
- [Permissions](/reference/permissions)
- [Limits](/reference/limits)
- [Tasks](/specifications/tasks)
- [Contact management](/capabilities/contact-management)
- [Contact deduplication](/behavior/contact-deduplication)
- [Email accounts](/specifications/email-accounts)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the source of truth for the current API surface
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents look up team members and reassign contact ownership within a workspace
---
# Behavior
> The deterministic logic Reply applies — what triggers each behavior, what changes as a result, and which exceptions exist. Each behavior is one page.
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Behavior pages answer the questions agents and operators actually ask mid-build: *what
stops a sequence? which mailbox sends this email? what happens after a bounce?* Every
behavior page states its trigger, decision logic, result, state changes, and exceptions —
grounded in Reply's product documentation, with exact thresholds, setting names, and
status enums — so behavior is predictable before you rely on it.
## Enrollment and data
- [How contacts enter a sequence](/behavior/contact-enrollment) — enrollment paths, checks, and conflicts
- [How Reply detects duplicate contacts](/behavior/contact-deduplication) — the identifier key, and import handling
## Execution and sending
- [How a sequence executes](/behavior/sequence-execution) — step order, delays, limits, health
- [When Reply sends](/behavior/sending-schedules) — schedule windows meet delays and budgets
- [How Reply selects a sending mailbox](/behavior/mailbox-selection) — distribution across assigned accounts
## Replies and state
- [How Reply detects replies](/behavior/reply-detection) — matching, classification, stopping
- [What happens when an email bounces](/behavior/bounce-handling) — bounce state and protection
- [When Reply stops a sequence](/behavior/sequence-stopping) — every stop condition in one place
- [How statuses change](/behavior/status-transitions) — the transition matrix
- [How statistics are calculated](/behavior/statistics-calculation) — counters and denominators
## Planned
| Page | Status |
| --- | --- |
| Step execution detail | Not written |
| Daily sending limits (cross-object precedence) | Not written |
| Automatic-reply detection | Not written |
| Unsubscribe handling | Not written |
| Conversation matching | Not written |
| Task generation | Not written |
| Credit consumption | Not written |
## Related
- [Specifications](/specifications) — the objects these rules move
- [Troubleshooting](/troubleshooting) — when observed behavior doesn't match a rule
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the operations that trigger these rules
---
# How contacts enter a sequence
> The enrollment rule — the three add paths and their keep-in-sequence options, start-date scheduling, import requirements, and the pause-on-reply team settings.
**Contacts enter a sequence by CSV import, adding from existing contacts, or moving between sequences — each path offers a keep-in-current-sequences choice, and a start date can defer processing. Contact handling settings can pause a replying contact in all sequences, or pause every contact from the same organization, on business domains only.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | Every path a contact takes into a sequence, what happens when they are already enrolled elsewhere, and when processing starts |
| **Trigger** | A CSV import into a sequence, Add from existing, or Move to sequence |
| **Inputs** | The CSV file (format, mandatory fields), the contact's current sequence membership, the chosen start date, contact handling settings |
| **Result** | The contact joins the sequence — kept in or removed from other sequences per the chosen option — and starts on the schedule |
| **Configurable** | Keep-in-sequence options per path, start date, matched-records handling, contact handling (pause-on-reply) settings |
| **Does not** | Merge duplicate records ([Contact deduplication](/behavior/contact-deduplication)) or start processing on a day the schedule is closed |
| **Plans** | The pause-on-reply contact handling settings require Team Edition or an Organization-type (white-label) account, and only the Team Owner can enable them |
## Rule summary
A prospect can be part of several sequences for the same user at the same time. Each of
the three enrollment paths — CSV import, Add from existing, and Move to sequence — has an
explicit option that keeps the contact in their current sequences while adding them to the
new one. Enrollment can be scheduled: when moving contacts to a sequence you can pick the
exact date processing starts. Imported prospects are added both to the sequence and to
Reply's contact list.
## Trigger
One of the enrollment paths fires:
- **Import from CSV** in the sequence's People tab
- **Add from existing** in the People tab
- **Move to sequence** from the People page, with a target sequence and step
## Decision logic
1. Validate the import (CSV path): the file must be **CSV UTF-8** with up to **10,000 rows**, and **First Name** is mandatory. Numeric fields accept digits only — symbols or spaces produce import errors.
2. Handle records without emails: **Add Generated Emails** assigns a placeholder genmail.com address — these contacts are skipped for email sequences but work for SMS, WhatsApp, calls, and LinkedIn steps — or **Skip** leaves them out.
3. Resolve contacts already in another sequence, per path.
4. Apply the start date, if one was picked: hover over the Current Step column to see the date the contact will be processed. The schedule must be open on that day — a Tuesday start date needs Tuesday enabled in the sequence settings.
**The disposition options per path:**
| Path | Option for contacts already in a sequence |
| --- | --- |
| Import from CSV | Choose **Add to this one and keep in current** |
| Add from existing | Enable **Show contacts who are in a sequence**, then choose **Keep contacts in their current sequences and add to new one** |
| Move to sequence | Pick the sequence and step, then enable the **Keep in other sequences** toggle |
## Result
The contact is enrolled in the target sequence — and stays in their other sequences when
the keep option was chosen. Processing begins at the next open schedule window, or on the
selected start date.
## State changes
| Field | Change |
| --- | --- |
| Sequence membership | The new sequence is added; other memberships persist or end per the chosen option |
| Contact list | Imported prospects are added to both the sequence and Reply's list |
| Start of processing | Immediate (next window) or the selected start date |
## Exceptions
- **Pause contact in all sequences on reply** — when enabled, a contact who replies in any sequence is paused in all other sequences. It applies **only to paid (business) domains; free or generic domains such as gmail.com and yahoo.com are excluded**.
- **Pause all contacts from the same organization on reply** — when enabled, a reply from any one contact pauses all other contacts from the same organization. Reply matches organizations by the **Company** field, falling back to the **Domain** field when Company is blank. Turning this on also switches on the per-contact setting and locks it while this stays on.
- **Notification mode** — both settings offer **Pause automatically** (immediate, no notification) or **Ask by Email** (the Team Owner gets an email before the pause). On Organization-type (white-label) accounts the pause is always automatic — Ask by Email is not available there.
- **Contacts that fail import validation** are not enrolled — see [Contact was not enrolled](/troubleshooting/contact-was-not-enrolled).
## Configuration that changes this rule
The keep-in-sequence options are chosen per enrollment action. The pause-on-reply
behavior lives in Settings > Contact handling; both options are **disabled by default**
and only the **Team Owner** can enable them. Import options — matched-records handling,
generated emails, and automatic timezone detection — are set in the import dialog. See
[Import contacts](/how-to/import-contacts).
## Limits
| Limit | Value |
| --- | --- |
| Rows per CSV file | Up to 10,000 (one row per contact) |
| File format | CSV UTF-8 only — xlsx and other formats are not accepted |
| Mandatory field | First Name |
| Automatic timezone detection | May extend the import by up to 30 minutes |
| Pause-on-reply scope | Paid (business) domains only |
## FAQ
### Can a contact be in two sequences at once?
Yes — a prospect can be part of several sequences for the same user at the same time.
Each path in has its own keep option: *Add to this one and keep in current* (CSV), *Keep
contacts in their current sequences and add to new one* (Add from existing), or the *Keep
in other sequences* toggle (Move to sequence). See [Sequences](/specifications/sequences).
### What happens across sequences when a shared contact replies?
With *Pause contact in all sequences on reply* enabled, the contact is paused everywhere
else — immediately, or after the Team Owner confirms by email in Ask by Email mode. With
the organization-level setting, everyone from the same Company (or Domain, when Company is
blank) is paused. See [Reply detection](/behavior/reply-detection).
### Why did gmail.com contacts keep sending after a reply?
The pause-on-reply settings apply only to paid (business) domains — free or generic
domains such as gmail.com and yahoo.com are excluded by design.
### Can I make enrolled contacts start on a specific date?
Yes — when moving contacts to a sequence, pick the start date in the calendar. Make sure
the sequence schedule is open on that day, and verify the date by hovering over the
Current Step column. See [Launch a sequence](/how-to/launch-a-sequence).
## Related
- [Contact deduplication](/behavior/contact-deduplication)
- [Sequence execution](/behavior/sequence-execution) — throttling into Step 1
- [Import contacts](/how-to/import-contacts)
- [Contact was not enrolled](/troubleshooting/contact-was-not-enrolled)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — push-to-sequence operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents enroll contacts with the same options
---
# How Reply detects duplicate contacts
> The deduplication rule — the contact identifier chosen at import, update-vs-skip handling for matched records, and LinkedIn URL normalization across every source.
**The contact identifier chosen at import — Email, Last Name, or Phone — becomes the distinguishing key that prevents duplicates; rows matching an existing record are updated or skipped, never doubled. LinkedIn URLs are normalized to a canonical form on every ingestion source, so URL variants of one profile do not create duplicates.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | Whether an incoming contact row creates a new record, updates an existing one, or is skipped as a duplicate |
| **Trigger** | A contact-creating operation: CSV import, API import, integrations, enrichment, CRM sync, or manual editing |
| **Inputs** | The contact identifier chosen at import (Email, Last Name, or Phone), the matched-records option, the LinkedIn profile URL |
| **Result** | Matches become updates or skips; import results report Imported, Updated, Skipped, and Import Errors counts |
| **Configurable** | The identifier field, Update Missing Fields vs. Skip for matched records, enrichment Keep-vs-Override, account import modes |
| **Does not** | Merge records that differ on the identifier, or normalize LinkedIn company-page URLs — those are stored as-is |
| **Plans** | Plan-specific differences are not documented for this rule |
## Rule summary
During a CSV import you choose the **contact identifier** in a drop-down menu. When you
choose a unique identifier — such as **Email, Last Name, or Phone** — it becomes the
**distinguishing key for each contact and prevents duplicates**; once chosen, the other
fields become optional. Rows that match an existing record are handled per your
matched-records option (update or skip) instead of creating a second record. Separately,
Reply normalizes every **LinkedIn profile URL** to one canonical format, so different URL
variants of the same profile are recognized as the same person.
## Trigger
Any contact-creating operation: a CSV import, a V3 API import, Website Visitors or RB2B
events, email-based or LinkedIn URL enrichment, a CRM integration sync, or manual editing
of the LinkedIn field in the contact card.
## Decision logic
1. Match the incoming row against existing contacts using the chosen identifier (Email, Last Name, or Phone).
2. On a match, apply the **Matched Records** option: **Update Missing Fields** writes new data from the CSV into the existing contact's fields, while **Skip** leaves the existing record untouched.
3. On no match, create a new contact.
4. Normalize the LinkedIn profile URL to the canonical form `https://www.linkedin.com/in/username` whenever a contact is created or updated. Duplicate detection by LinkedIn URL is **format-agnostic**: trailing slashes, query parameters, `http://` vs. `https://`, and a missing `www` are all recognized as the same profile and will not create duplicates.
**Import results report the outcome:**
| Import status | Meaning |
| --- | --- |
| Imported | New contacts added to the account |
| Updated | Existing contacts whose profiles were updated |
| Skipped | Duplicates the system removed during the import |
| Import Errors | Rows that failed — missing mandatory fields or incorrect formats (for example, symbols in the Phone field) |
## Result
One record per identifier value. Re-importing a list does not double contacts — matching
rows update or skip, and the notification after import breaks down exactly what happened.
If the reason is unclear, download the full import result file for details.
## State changes
| Field | Change |
| --- | --- |
| Matched contact | Fields updated per Update Missing Fields, or untouched per Skip |
| LinkedIn profile field | Stored in canonical `https://www.linkedin.com/in/username` form; automatic LinkedIn steps (Connect, Message) save the resolved profile URL back to the contact in the same form |
| Import summary | Imported / Updated / Skipped / Import Errors counts |
## Exceptions
- **Normalization is best-effort** — URLs that cannot be parsed, such as company pages (`linkedin.com/company/acme`) or a plain username without a URL, are stored as-is without an error.
- **CRM background sync historically skipped normalization** — this has been fixed, but contacts synced from a CRM (Salesforce, HubSpot, Pipedrive, Copper) before the fix may still hold non-normalized URLs until they are next updated.
- **RB2B leads arrive pre-normalized** — the LinkedIn URL received from RB2B is saved in the canonical format, so variants of the same profile from that source do not create duplicates either.
- **Two identifier values are two records** — deduplication keys on the chosen identifier, so a person appearing under two email addresses is not merged automatically.
- **Accounts have their own import modes** — including a deliberate **Duplicate** mode that creates a copy with the new data instead of touching the original.
## Configuration that changes this rule
At contact import: the identifier drop-down and the Matched Records choice (Update Missing
Fields vs. Skip). In Settings > Contact handling, the **enrichment settings** decide what
an update writes when new information is found: **Keep existing data** preserves current
information and skips conflicting new data; **Override with new data** replaces existing
fields. For account (company) imports from CSV, four modes exist: **Overwrite existing
fields**, **Update missing fields**, **Skip**, and **Duplicate** — with Account name
mandatory for mapping. See [Manage duplicate contacts](/how-to/manage-duplicates).
## Limits
| Limit | Value |
| --- | --- |
| Rows per contact CSV | Up to 10,000 |
| Rows per account CSV | Up to 10,000 |
| Identifier choices | A unique field such as Email, Last Name, or Phone |
| Canonical LinkedIn form | `https://www.linkedin.com/in/username` |
| Normalization coverage | CSV import, V3 API import, Website Visitors, RB2B, email-based enrichment, LinkedIn URL enrichment, CRM sync, manual edits, and automatic LinkedIn steps |
## FAQ
### What does "Skipped" mean in my import results?
Skipped rows are duplicates the system removed during the import — the identifier matched
an existing contact and your matched-records choice did not update it. Updated rows, by
contrast, are existing contacts whose profiles were changed. See
[Import contacts](/how-to/import-contacts).
### Do LinkedIn URL variants create duplicate contacts?
No. Duplicate detection by LinkedIn URL is format-agnostic — trailing slash, query
parameters, `http://` vs. `https://`, and missing `www` all resolve to the same canonical
`https://www.linkedin.com/in/username` form. The exception is unparseable values like
company-page URLs, which are stored as-is.
### What happens when the same person has two email addresses?
With Email as the identifier, each address is its own key, so the person gets two records
— automatic merging across different identifier values is not documented. Pick the record
whose address you actually contact, and see [Manage duplicate contacts](/how-to/manage-duplicates)
for cleanup.
### Are accounts deduplicated the same way as contacts?
Accounts imported from CSV offer four explicit modes — Overwrite existing fields, Update
missing fields, Skip, and Duplicate (which intentionally creates a copy while leaving the
original unchanged). Account name is the mandatory mapped field. See
[Companies](/specifications/companies).
## Related
- [Contacts](/specifications/contacts)
- [Contact enrollment](/behavior/contact-enrollment)
- [Manage duplicate contacts](/how-to/manage-duplicates)
- [Import contacts](/how-to/import-contacts)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — create/update contact semantics
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp)
---
# How email validation works
> How Reply classifies addresses as Valid, Risky, or Invalid — the disposable, catch-all, and honeypot signals, the syntax, DNS, and mailbox error taxonomy, and when validation runs.
**Reply validates each address and assigns Valid, Risky, or Invalid. Risky covers disposable domains, catch-all servers, and honeypots; Invalid covers syntax, DNS, and mailbox errors. Contacts with Invalid addresses receive no sequence emails. Validation runs on demand from the People page or automatically when contacts enter a sequence, consuming email validation credits.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | How Reply classifies an email address's deliverability and which classifications block sending |
| **Trigger** | Manual validation from the People page, or — with automatic validation enabled — every time contacts are added to a sequence |
| **Inputs** | The email address, checked by different parameters: syntax, DNS records, and the mailbox's response |
| **Result** | Status `Valid`, `Risky`, or `Invalid`; contacts with `Invalid` addresses do not receive sequence emails |
| **Configurable** | Yes — automatic validation is a toggle (Settings → Emails); manual validation runs on demand; both use email validation credits |
| **Does not** | Guarantee delivery for Valid addresses, block sending to Risky addresses, repair a bad address, or produce the `Missing data` status (that comes from missing variables, LinkedIn URLs, or phone numbers) |
## Rule summary
Reply checks each email address by different parameters and classifies it into one of
three groups: **Valid**, **Risky**, or **Invalid**. Valid means verification completed
with no high-risk factors detected — safe to put into sequences. Risky means the
recipient's mail server stated the recipient exists, but the address may still bounce or
is of low value; Reply recommends treating Risky as Valid, with up to 20% of Risky
addresses in a send to avoid high bounce rates. Invalid means the address failed a
syntax, DNS, or mailbox check — Reply does not send sequence emails to it, which keeps
the [bounce rate](/behavior/bounce-handling) down.
## Trigger
**Manual validation.** On the **People** page, select the prospects (at least 1 contact)
and click **Validate emails**. Only one batch can be validated at a time — wait for the
first batch to finish before starting another. When validation completes you get a
notification in the Notification Center, and status icons appear next to each contact's
email address.
**Automatic validation.** Turn on the **Automatic email validation** toggle under
**Settings → Emails**. Once enabled, any time contacts are added to a sequence their
emails are validated first, using your email validation credits as needed.
Both paths consume email validation credits; validation packages are bought as an
add-on in the Plans & Billing section of Settings.
## Decision logic
Each address is classified into one of three statuses:
| Status | Meaning | Receives sequence emails? |
| --- | --- | --- |
| `Valid` | Verification completed; no high-risk factors detected | Yes — safe for sequences |
| `Risky` | The mail server stated the recipient exists, but the address may still bounce or is of low value | Yes — treated as Valid; keep Risky to up to 20% of a send |
| `Invalid` | The address failed a syntax, DNS, or mailbox check | No |
An address is marked **Risky** for one of these reasons:
| Reason | Description |
| --- | --- |
| Well-known DEA domain | The domain is a well-known disposable e-mail address provider |
| Catch-all | The external mail exchanger accepts fake and non-existent e-mail addresses, so the email may not exist and its existence cannot be verified |
| Honeypot | The external mail exchanger hides a honeypot/spam trap |
An address is marked **Invalid** when the response contains one of the following errors.
Syntax errors:
| Error |
| --- |
| A quoted-pair within a quoted word is not closed properly |
| An unexpected quoted-pair sequence has been found within a quoted word |
| A new word boundary start has been detected at an invalid position |
| An invalid character has been detected in the provided sequence |
| The number of parentheses used to open comments is not equal to the one used to close them |
| An invalid sequence of two adjacent dots has been found |
| The local part of the e-mail address has an invalid length |
| An invalid folding white space (FWS) sequence has been found |
| The at-sign symbol (@), used to separate the local part from the domain part of the address, has not been found |
| An invalid quoted word with no content has been found |
| The email address has an invalid total length |
| The domain part of the email address is not compliant with the IETF standards |
DNS errors:
| Error |
| --- |
| The domain of the e-mail address does not exist |
| The email address's domain does not have any valid DNS records and couldn't accept messages from another host on the Internet |
Mailbox errors:
| Error |
| --- |
| The mailbox for the e-mail address does not exist |
| The external mail exchanger refused to accept messages |
| The external mail exchanger does not support international mailbox names, while the supplied address pretends to have one |
## Result
Each contact gets a status icon next to its email address — green for Valid, with
distinct icons for Risky and Invalid. Reply does not send emails to prospects with
Invalid addresses; this is done to reduce the bounce rate. Validating a list before
launching is the main pre-send lever against the 4% and 8% bounce-rate thresholds
described in [What happens when an email bounces](/behavior/bounce-handling).
## State changes
| Field | Change |
| --- | --- |
| Email validation status | → `Valid`, `Risky`, or `Invalid`; shown as an icon next to the address |
| Sending eligibility | `Invalid` → excluded from sequence emails, including contacts added via the API |
| Notification Center | A notification arrives when the validation batch completes |
| Credits | Validation consumes email validation credits |
## Exceptions
- **Risky is not blocked.** Risky contacts do receive sequence emails; the recommendation is to keep them to up to 20% of a send.
- **Invalid contacts can still enter a sequence** if the sequence has no email steps at the moment. This helps handle large contact volumes, limits, and deliverability, and it covers the API as well.
- **Missing data is a different status.** It comes from missing variable data, missing or invalid LinkedIn URLs, or invalid phone numbers — not from email validation.
- **Validation takes time.** If a conditional sequence checks the validation status, add enough step delay for validation to finish first — at least 10 minutes for every 1,000 contacts.
## Configuration that changes this rule
- **Automatic email validation** — Settings → Emails → Automatic email validation toggle. With it on, contacts are validated whenever they are added to a sequence.
- **Conditional-sequence filtering** — add a condition that checks *Email Validation is set to Valid* and leave the No branch empty; contacts marked Invalid or Risky are automatically finished once their status is checked.
- **Credits** — buy an email validation package as an add-on in Settings → Plans & Billing.
## Limits
| Limit | Value |
| --- | --- |
| Concurrent validation batches | 1 — wait for the current batch to finish before validating more |
| Minimum selection for manual validation | 1 contact |
| Time to allow before a conditional step checks the result | At least 10 minutes per 1,000 contacts |
| Recommended share of Risky addresses in a send | Up to 20% |
| Credits | Validation consumes email validation credits, bought as an add-on |
## FAQ
### Does Reply send emails to Risky addresses?
Yes. Risky means the server confirmed the recipient exists but the address may still
bounce, so Reply recommends treating Risky as Valid while keeping such addresses to up to
20% of a send. If a Risky address does bounce, the normal
[bounce handling](/behavior/bounce-handling) applies.
### Why is a contact with an Invalid email still in my sequence?
A prospect with an Invalid status can be moved to a sequence if there are no email steps
at the moment — a deliberate allowance for handling large volumes, limits, and
deliverability, and it applies via the API too. The contact will still not receive
sequence emails at that address.
### What is the difference between Invalid and Missing data?
Invalid is an email validation verdict: the address failed a syntax, DNS, or mailbox
check. Missing data is unrelated to validation — it appears when a template variable has
no value, a LinkedIn URL is missing or broken, or a phone number is invalid. See
[Statuses](/reference/statuses).
### When should I validate?
Before launching: check contact lists with the validation service before starting the
sequence — the higher the bounce rate, the greater the risk to your domain reputation.
With automatic validation on, every contact added to a sequence is validated on entry,
so new additions are covered without a manual step.
## Related
- [What happens when an email bounces](/behavior/bounce-handling) — validation is the pre-send lever against the bounce thresholds
- [Contacts](/specifications/contacts)
- [Statuses](/reference/statuses)
- [Data enrichment](/capabilities/data-enrichment) — fixing or replacing bad addresses
- [Deliverability](/capabilities/deliverability)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact and validation-status operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — contact search and filtering by validation status
---
# How a sequence executes
> The execution rule — daily contact throttling, the 10,000-email cap, step delays that count weekends, task handling modes, and the same-domain limit.
**An active sequence advances each contact step by step. Max new daily contacts throttles how many start Step 1 daily and overrides Max emails per day (up to 10,000). Step delays count weekends, one day equals 24 hours, and Calls and Tasks steps advance manually or automatically after the step delay.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | How each contact advances through sequence steps — throttling into Step 1, delays between steps, and task handling |
| **Trigger** | A sequence is launched, or a contact's step delay elapses |
| **Inputs** | Max new daily contacts and addition mode, Max number of emails per day, step delays, tasks handling mode, same-domain limit |
| **Result** | The contact moves to the next step: an email sends, a task is generated, or a LinkedIn action executes |
| **Configurable** | Every setting above, in Sequence > Settings (General settings, Replies handling, Calls and tasks handling) |
| **Does not** | Pick the send moment inside a window ([When Reply sends](/behavior/sending-schedules)) or the sending account ([Mailbox selection](/behavior/mailbox-selection)) |
| **Plans** | Task ownership by contact owner requires Team Edition in Public mode |
## Rule summary
When contacts are added or a sequence launches, Reply runs a **throttling process**:
contacts are temporarily marked **Throttled** while the system prepares them for Step 1,
at the pace set by **Max new daily contacts**. Each subsequent step fires after its
configured delay — **weekends are included in the day count, and one day of delay equals
24 hours**. Email steps respect the sequence's daily email cap (up to **10,000** first-step
emails per day) and the per-email delay; Call and Task steps advance manually or
automatically depending on the handling mode.
## Trigger
The sequence is launched with contacts in it, new contacts are added, or a contact's step
delay elapses.
## Decision logic
1. **Throttle new contacts into Step 1.** Reply starts at most **Max new daily contacts** per day. With **Add full amount**, the full configured number is added every day, regardless of contacts still in Step 1 or a closed schedule. With **Add until capacity** (the default), only enough contacts are added to reach the limit — 50 already in Step 1 against a limit of 100 means only 50 more — and no contacts are added while the schedule is closed. **No limit on new daily contacts** skips throttling entirely: contacts move straight to Step 1.
2. **Balance first steps against follow-ups.** Max new daily contacts overrides Max number of emails per day. With Max emails per day at 400 and Max new daily contacts at 100, the sequence sends 100 first-step emails per day and distributes the remaining 300 across follow-up steps.
3. **Wait out the step delay.** Delays are set per step in days, hours, and minutes. A 3-day delay after a Monday step means Thursday — 72 hours, weekends counted.
4. **Check the same-domain limit.** With **Max same-domain contacts per day** enabled, Reply reaches at most that number of contacts sharing one domain per day — free domains such as gmail.com, outlook.com, and yahoo.com are excluded from the limit.
5. **Execute the step.** Email steps send (spaced by the configured per-email delay); Call and Task steps generate tasks; LinkedIn steps execute their action.
6. **Advance per the handling mode.** In **Manual** mode, the contact does not move on until you complete the task. In **Automatic** mode, completing the task moves the contact on; if you do not complete it, the sequence moves the contact to the next step after the step delay and finishes the current task.
## Result
The contact progresses step by step. The **Current step** column in the sequence's People
tab shows the step each contact is waiting for — hover to see when the step delay ends.
The Steps tab shows how many contacts sit in each step, and the History view in the People
tab shows how many completed each step.
## State changes
| Field | Change |
| --- | --- |
| New contact | → **Throttled** while prepared for Step 1 (skipped when No limit on new daily contacts is on) |
| Contact's current step | Advances when the step executes and the next delay starts |
| Missing-data contacts | A red badge on the step shows their count; the **Skip** button moves them to the next step |
| Task steps | A task is generated, assigned to the sequence owner or the contact owner (Team Edition Public mode) |
## Exceptions
- **Contacts already on a step ignore an edited delay** — changing a step's delay applies only to contacts that have not reached it yet.
- **Blacklisted contacts on Step 1 are excluded from the capacity count** and do not consume daily slots; the capacity snapshot is recalculated once per day at UTC midnight, so blacklist changes take effect the next day.
- **Active sequences with contacts in progress cannot take a new first step** — the button to insert before Step 1 is hidden; steps can only be appended at the end.
- **Conditional branches share defaults** — two branches created from the same parent step receive the same default delay.
- **A reply stops further steps for the contact** under Mark as finished — see [Sequence stopping](/behavior/sequence-stopping).
## Configuration that changes this rule
All of it lives in Sequence > Settings. **General settings**: plain text sending mode,
opens tracking (disabled by default), link tracking (disabled by default), the
List-Unsubscribe header, Max same-domain contacts per day, Matching email providers, Max
new daily contacts with its addition mode, Max number of emails per day, and the delay
between each email sent (120-180 seconds recommended; the system needs an additional
10-15 seconds per email — include that when sizing the daily cap). **Replies handling**
decides what a reply stops. **Calls and tasks handling** sets manual vs. automatic
advancement and task ownership, and can call a prospect automatically after several email
opens or set **Paused** after a successful call.
When adding a new step, the delay is pre-filled by insertion position:
| Insertion position | Default delay |
| --- | --- |
| 1 (first step) | 0 days |
| 2 | 2 days |
| 3 | 4 days |
| 4 | 7 days |
| 5 | 9 days |
| 6 or later | 11 days |
## Limits
| Limit | Value |
| --- | --- |
| Max first-step emails per sequence per day | Up to 10,000 |
| Recommended delay between individual emails | 120-180 seconds, plus 10-15 seconds of system processing |
| Day count in step delays | Weekends included; 1 day = 24 hours |
| Capacity snapshot recalculation | Once per day at UTC midnight |
| Same-domain limit scope | Paid domains only — free domains (gmail.com, outlook.com, yahoo.com, and similar) are excluded |
## FAQ
### What does the Throttled status mean?
The contact is queued for Step 1 under Max new daily contacts — the system is pacing how
many contacts start each day, which also caps how many Call or Task steps land on your
team daily (a limit of 25 means no more than 25 Call tasks created per day). Enable No
limit on new daily contacts to skip throttling.
### Can I add a step before Step 1 in a running sequence?
Not once the sequence is active with contacts in progress — the insert-at-top button is
hidden and steps can only be appended at the end. See [Sequence steps](/specifications/sequence-steps).
### What happens to a Call or Task step I never complete?
In Manual mode, nothing — the contact waits until you complete the task. In Automatic
mode, the sequence moves the contact to the next step after the step delay and finishes
the current task on its own.
### How do I see where each contact is?
Use the Current step column in the sequence People tab (hover for the delay end time), the
per-step counts in the Steps tab, the Lead's progress filter, and the History view for
completed steps. Contacts flagged by the red missing-data badge can be fixed or skipped to
the next step.
## Related
- [Sequence steps](/specifications/sequence-steps)
- [When Reply sends](/behavior/sending-schedules)
- [Mailbox selection](/behavior/mailbox-selection)
- [Sequence stopping](/behavior/sequence-stopping)
- [Why is a campaign not running?](/troubleshooting/campaign-is-not-running)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence settings and start/pause operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents start, pause, and monitor sequences
---
# When Reply sends
> The timing rule — schedule windows in UTC without DST, contact-timezone override, holiday calendars, daily contact capacity, and per-email delays.
**A message sends when its schedule window is open. Schedules run on UTC and do not adjust for Daylight Saving Time; a contact's own timezone applies when set and enabled. Max new daily contacts overrides Max emails per day and applies every day, including weekends; holiday calendars skip nationally recognized public holidays.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | The days, hours, and pace at which sequence messages go out |
| **Trigger** | A sequence step becomes due for a contact |
| **Inputs** | Schedule days and time ranges, schedule timezone (UTC-based), contact timezone, holiday calendars, Max new daily contacts, Max number of emails per day, per-email delay |
| **Result** | The message sends inside the open window, spaced by the configured delay |
| **Configurable** | Everything — the schedule, follow-up schedule, timezone handling, holiday calendars, and every limit |
| **Does not** | Adjust for Daylight Saving Time, choose the sending mailbox ([Mailbox selection](/behavior/mailbox-selection)), or reorder steps |
| **Plans** | Team Edition users can also view and manage teammates' schedules |
## Rule summary
A [schedule](/specifications/schedules) defines which weekdays and time ranges messages
can go out, in a chosen sending timezone. **Reply uses UTC time and does not account for
Daylight Saving Time** — adjust sending hours manually when clocks change. A delivery
window of at least **2.5-4 hours** is recommended so all emails have time to send.
Follow-ups can use a separate schedule. On top of the window, daily capacity applies:
**Max new daily contacts overrides Max number of emails per day** and prepares contacts
for Step 1 **every day, including weekends**.
## Trigger
A sequence step becomes due for an enrolled contact, and the sequence's schedule window
opens.
## Decision logic
1. Evaluate the schedule: selected days and time ranges in the schedule's sending timezone. If the **Separate schedule for follow-ups** toggle is on, first-touch and follow-up messages use their own days and hours.
2. If **Use contact's specific time-zone if set** is on (Advanced settings) and the contact has a timezone, sending times follow the contact's local time instead.
3. If **Skip public holidays** is on, days in the selected holiday calendar are skipped. System calendars include only nationally recognized public holidays — regional or state-level holidays are excluded (audited: United States, United Kingdom, Canada, Australia, Germany, France). Custom calendars can mark any days, optionally pre-filled from an existing calendar.
4. Apply daily capacity: the sequence starts at most **Max new daily contacts** per day, and sends at most **Max number of emails per day** first-step emails (up to 10,000). The contacts limit wins over the emails limit.
5. Space individual sends by the **Delay between each email sent** — at least 120-180 seconds is recommended, and the system needs an additional 10-15 seconds to process each send.
**How a contact's timezone is set automatically:** during import, Reply detects the
timezone when the **Country** column is filled (full name or ISO 3166-1 alpha-2 code) and
either the **State** or the **City** column is filled, all meeting ISO 3166 standards. If
the timezone cannot be determined, the user's own timezone is applied to the prospect.
## Result
The message sends inside the open window, in the schedule's timezone (or the contact's,
when enabled and set), spaced from the previous send by the configured delay.
## State changes
| Field | Change |
| --- | --- |
| Daily capacity snapshot | Recalculated once per day at UTC midnight |
| New contacts | Prepared for Step 1 daily per Max new daily contacts, including weekends |
| Send queue | Emails go out only during open windows, spaced by the per-email delay |
## Exceptions
- **Daylight Saving Time is not applied** — schedules stay on UTC, so local send times shift by an hour when clocks change unless you adjust the schedule.
- **Add until capacity vs. Add full amount** — the default *Add until capacity* mode only tops contacts up to the daily limit and respects the schedule: when the schedule is closed (for example, weekends), it does not add new contacts. *Add full amount* adds the full configured number every day regardless of the schedule or of contacts still waiting in Step 1.
- **Max new daily contacts overrides Max number of emails per day** — the system prepares contacts for Step 1 every day, including weekends, based on the contacts limit.
- **A schedule in use cannot be deleted** — change the sequences using it first.
## Configuration that changes this rule
Schedules are created and managed in Settings > Schedules: pick the days, drag the time
range, set the sending timezone, and optionally enable a separate follow-up schedule, the
contact-timezone override, and a holiday calendar. One schedule can be made the default
for new sequences. Per-sequence capacity — Max new daily contacts, the addition mode, Max
number of emails per day, and the per-email delay — lives in Sequence > Settings > General
settings. See [Configure sending limits](/how-to/configure-sending-limits).
## Limits
| Limit | Value |
| --- | --- |
| Recommended delivery window | At least 2.5-4 hours |
| Max first-step emails per sequence per day | Up to 10,000 |
| Recommended delay between individual emails | 120-180 seconds |
| System processing overhead per email | An additional 10-15 seconds |
| Capacity snapshot recalculation | Once per day at UTC midnight |
| Timezone base | UTC, no Daylight Saving Time adjustment |
| System holiday calendars | Nationally recognized public holidays only |
## FAQ
### Why did my send times shift by an hour?
Reply uses UTC and does not account for Daylight Saving Time. When your region changes
clocks, the schedule's UTC hours stay put — adjust the sending hours manually or use an
external timezone converter to set them.
### Does Reply send on weekends?
Only if the schedule includes weekend days. Note the asymmetry: Max new daily contacts
prepares contacts for Step 1 every day including weekends, but in the default *Add until
capacity* mode no new contacts are added while the schedule is closed. Actual sending
always waits for an open window.
### How does Reply know a contact's timezone?
It is detected during import when the Country column is filled and either State or City is
filled, following ISO 3166 naming. Otherwise the user's timezone is applied. Combined with
the **Use contact's specific time-zone if set** toggle, sends then follow each contact's
local time.
### Which holidays does Skip public holidays cover?
System calendars carry only nationally recognized public holidays for the selected country
— regional and state-level holidays are excluded. For anything else, create a custom
calendar and mark the exact days to skip.
## Related
- [Schedules](/specifications/schedules)
- [Sequence execution](/behavior/sequence-execution)
- [Mailbox selection](/behavior/mailbox-selection)
- [Why was an email not sent?](/troubleshooting/email-was-not-sent)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — schedules endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents create and assign schedules
---
# How Reply selects a sending mailbox
> The mailbox assignment rule — round-robin distribution across up to 100 accounts, follow-up thread continuity, provider matching, and reassignment on removal.
**Reply assigns each new contact to one of up to 100 sequence email accounts using round-robin logic, from any source. All follow-ups send from the same account as the first email unless that account is removed. Matching email providers, when enabled, pairs contacts with same-provider senders; the Reassign email accounts setting redistributes contacts automatically.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | Which of a sequence's email accounts is assigned to each contact, and which account each email sends from |
| **Trigger** | A contact is added to a sequence with connected email accounts (manually, via CSV, API, or integrations) |
| **Inputs** | Email accounts added to the sequence, contact's detected email provider, Matching email providers toggle, Reassign email accounts setting |
| **Result** | The contact gets a sending email account; the first email and all follow-ups go from it, in one thread |
| **Configurable** | Sequence email accounts, Matching email providers (per sequence), Reassign email accounts (account-level setting) |
| **Does not** | Decide when the send happens — that is [When Reply sends](/behavior/sending-schedules) — or reassign contacts already assigned to an active account |
| **Plans** | Adding teammates' email accounts to one sequence requires Team Edition |
## Rule summary
A sequence can send from **up to 100 email accounts**. New contacts — added manually, via
CSV, API, or integrations — are assigned to the connected accounts **one by one using
round-robin logic**: the first contact to the first account, the second to the second, and
so on, cycling back to the first. If the sequence has multiple email steps, **all
follow-up emails for a contact are sent from the same email account as the first email**,
unless that account is removed from the sequence.
## Trigger
A contact is added to a sequence that has one or more email accounts connected, or the
sequence's email accounts change (an account is added or removed).
## Decision logic
1. When a new contact enters the sequence, Reply picks the next email account in round-robin order, spreading sending evenly across all connected accounts.
2. If the **Matching email providers** toggle is on for the sequence, Reply first pairs the contact with a sending account whose email provider matches the contact's (Outlook to Outlook, Gmail to Gmail). Unmatched contacts are distributed among the available accounts using round-robin logic.
3. The assigned account sends the contact's first email, and every follow-up sends from that same account — the conversation stays in one thread.
4. If the contact's account is removed from the sequence, follow-ups send from the account the contact is reassigned to, still in the same email thread.
**Assignment when accounts change:**
| Action | Condition | Assignment behavior |
| --- | --- | --- |
| Connect a new email account | No other account connected, or contacts have never had accounts assigned | Reply assigns the new sending email automatically |
| Connect a new email account | Active accounts exist and contacts are assigned to them | Nothing changes for assigned contacts; newly added contacts are assigned across all accounts, including the new one |
| Upload contacts to a sequence | One or more accounts connected | New contacts are assigned automatically across all connected accounts |
## Result
Each contact shows a sending email account (the **Sending email** column in the People
tab). The first-step email and all follow-ups for that contact go out from it.
## State changes
| Field | Change |
| --- | --- |
| Contact's sending email | Set on assignment; changes only on removal, reassignment, or a manual change |
| Email thread | Preserved — even after switching accounts, new emails arrive in the same thread |
| Sequence toggle | An error notification appears over the toggle when contacts are left unassigned |
## Exceptions
- **Removing an account leaves its contacts unassigned** — you must assign them manually (filter People by Unassigned, then link a sending email) unless the **Reassign email accounts** setting is enabled.
- **Manual assignment is also needed** when you add a new account to replace a deleted one, or when contacts are already assigned to existing accounts and you expect them to move — Reply does not change existing assignments automatically.
- **Provider detection happens only in sequences** — a contact merely uploaded to Reply but not added to a sequence gets no provider detection; undetected providers show as `Unknown`.
- **Toggling Matching email providers** on or off does not touch existing assignments — only newly added contacts follow the new logic.
- **Teammate signatures** — if a removed account's contacts are reassigned to a teammate's account with a different signature, update the follow-up templates so the thread reads consistently.
## Configuration that changes this rule
**Matching email providers** (Sequence > Settings > General settings, off by default)
switches assignment from pure round-robin to provider-matched first. **Reassign email
accounts** (Settings > Emails > Sequence email accounts) changes removal behavior: only
contacts without a sending account are auto-assigned, contacts added before any account
was connected get assigned once mailboxes are added, and contacts of a removed account are
redistributed among the remaining accounts without touching other assignments. You can
also change a contact's sending email manually from the sequence People tab — sequence
owners only, and the new account must already be in the sequence's Settings tab. Also
raise **Max new daily contacts** and **Max number of emails per day** to match the number
of accounts added — see [Configure sending limits](/how-to/configure-sending-limits).
## Limits
| Limit | Value |
| --- | --- |
| Email accounts per sequence | Up to 100 |
| Assignment order | Round-robin, one contact per account in turn |
| Follow-up account | Same as the first email's account, unless that account is removed |
| Who can change a contact's sending email | Sequence owners only |
## FAQ
### Does a contact always hear from the same mailbox?
Yes — all follow-ups send from the same account as the first email. The only exception is
removing that account from the sequence: the contact's follow-ups then send from the
reassigned account, still in the same thread. See [Email accounts](/specifications/email-accounts).
### Why are contacts not assigned to my email?
Three common causes: an active sending email was deleted (its contacts are not reassigned
automatically), a new account was added to replace a deleted one, or a new mailbox was
added while contacts were already assigned to existing ones. Filter the sequence People
tab for Unassigned contacts and link a sending email, or enable Reassign email accounts.
See [Why is a campaign not running?](/troubleshooting/campaign-is-not-running).
### What happens if I switch Matching email providers mid-sequence?
Nothing for contacts already assigned — the toggle affects only newly added contacts.
Matched contacts get a same-provider sender; unmatched ones fall back to round-robin.
### Can I send one sequence from my teammates' mailboxes?
Yes — with Team Edition enabled you can add both your own and teammates' email accounts to
the same sequence.
## Related
- [Email accounts](/specifications/email-accounts)
- [Sequence execution](/behavior/sequence-execution)
- [When Reply sends](/behavior/sending-schedules)
- [Configure sending limits](/how-to/configure-sending-limits)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence account assignment endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents assign accounts to sequences
---
# How LinkedIn action limits work
> The daily caps Reply applies to automatic LinkedIn steps — dynamic ranges vs a static maximum, the nine action types, the 100-per-action ceiling, and what happens when a cap is hit.
**Reply caps each automatic LinkedIn action type per day, across nine action types. Dynamic limit ranges pick a random number each day (suggested 25-35 for most actions, 35-50 for messages); the static mode uses one fixed number, 30 by default. Any limit can be raised to 100. A hit limit pauses that action until the next day.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | How many automatic LinkedIn actions Reply performs per day, per connected LinkedIn account and per action type |
| **Trigger** | Each executed automatic LinkedIn step counts toward its action type's daily limit |
| **Inputs** | Limit mode (limit ranges or max amount), the per-action values, and the number of actions completed today |
| **Result** | When a cap is reached, that action pauses for the rest of the day and resumes the next day |
| **Configurable** | Yes — per action type, up to 100 per day; edits take effect starting the next day |
| **Does not** | Count manual LinkedIn actions, raise LinkedIn's own platform caps (such as its weekly connection-request limit), or pause other action types when one hits its cap |
## Rule summary
Reply's algorithm monitors the connected [LinkedIn account](/how-to/connect-linkedin) and
sets recommended safe limits for each action type. There are two limit modes. **Limit
ranges (dynamic limits)** let you set a range for daily actions, and Reply picks a random
number from that range each day — for example, with a 20–30 range Reply might send 22
requests on day 1, 28 on day 2, 25 on day 3. Varying the daily count makes activity look
more natural to LinkedIn and reduces the risk of the account being flagged. **Max amount
(static limit)** is one fixed daily number per action; the default is **30** for each
LinkedIn action. Every limit can be set up to **100** per action. When a daily cap is
reached, Reply pauses that action, notifies you in the sequence **Log** tab, and resets
everything the next day.
## Trigger
Every automatic LinkedIn step a sequence executes — a connection request, message,
profile view, and so on — increments the daily counter for its action type. The number of
actions completed today appears in the top right corner of each action on the LinkedIn
account's settings page. Manual actions are not included.
The nine action types you can set limits for:
| Action type | What it covers | Suggested dynamic range |
| --- | --- | --- |
| Connections | Connection requests, including the short note sent with them | 25–35 |
| View Profile | Automatic profile views for contacts | 25–35 |
| Like Recent Posts | Liking posts from your targeted contacts | 25–35 |
| Messages | Direct messages to LinkedIn contacts | 35–50 |
| InMail | Private messages to LinkedIn users without a prior connection | 25–35 |
| Detections | The number of times daily Reply checks LinkedIn threads for prospects' replies | 25–35 |
| Revoke Connections | Cancelling unaccepted connection requests | 25–35 |
| Endorse Skills | Endorsing contacts' skills automatically | 25–35 |
| Follow Profile | Following targeted LinkedIn profiles | 25–35 |
## Decision logic
1. Determine today's cap for each action type — a random number from the configured range in dynamic mode, or the fixed value in static mode.
2. Each executed automatic action increments its action type's daily counter.
3. When a counter reaches the cap, Reply pauses that action type. Other action types keep running.
4. A notification is posted in the **Sequence → Log** tab.
5. The next day, counters reset and the sequence automatically attempts the postponed LinkedIn steps again. Limit counters reset according to the UTC time zone.
LinkedIn's own limits apply in parallel: a sequence can pause connection steps because of
LinkedIn's weekly connection-request cap even when the Reply limit has not been reached,
and free LinkedIn accounts can send only **3** personalized connection requests (with a
note) per month.
## Result
Hitting a Reply limit is routine, not an error. The affected action is postponed until
the next day, you get a Log-tab notification, and everything resets — no contacts are
lost and no steps are cancelled. If you saved automatic LinkedIn steps and ran the
sequence but hit the daily limits, execution is simply postponed until the next day.
## State changes
| Field | Change |
| --- | --- |
| Daily action counter | Increments per executed automatic action; visible in the top right corner of each action |
| On reaching a cap | That action type pauses until the next day |
| Sequence Log | A notification records that the limit was reached |
| Next day | Counters reset (UTC); postponed steps are attempted again automatically |
## Exceptions
- **Manual actions never count.** The limits apply only to LinkedIn automatic steps.
- **LinkedIn platform caps are independent.** LinkedIn enforces its own weekly connection-request limit, allows free accounts only 3 personalized requests (with a note) per month, and caps every account at 30,000 first-degree connections — after which the Connect button becomes a Follow button.
- **Detections are themselves limited.** Reply's daily checks of LinkedIn threads for prospects' replies count against the Detections limit.
- **Endorse Skills endorses no more than 3 skills per contact** in Reply.
- **Connection acceptance can be detected across accounts.** With multiple LinkedIn accounts connected in a Team, an accepted request can be detected from any of them, based on the Team's connected accounts and the prospect's profile URL.
## Configuration that changes this rule
View and edit limits under **Settings → LinkedIn Accounts** — click the connected
account, pick a mode (Limit ranges or Max amount), move the slider for each action, and
save. Changes take effect starting the next day; for the rest of the current day, actions
follow the previously set limits.
The **Revoke connection requests** setting adds an automatic clean-up rule: when enabled,
all sent requests are checked every day, and any request still unaccepted after the
configured timeframe is revoked. The default timeframe is 7 days; the minimum is 1 day
and the maximum is 180. Automatic revokes are governed by the Revoke Connections daily
limit. A revoked request cannot be re-sent to the same person for up to 3 weeks.
LinkedIn does not publicly disclose its own limits; the figures below are Reply's
recommendations based on testing and experience, and they vary by LinkedIn plan and by
your Social Selling Index (SSI) — LinkedIn's score for how credibly you use the platform:
| Action | Free account | Sales Navigator | Premium |
| --- | --- | --- | --- |
| Connection requests | Up to 100 per week | 100–150 weekly; up to 200 with a higher SSI | 100–150 weekly; up to 200 with a higher SSI |
| Messages | 20–30 per day | 50–70 per day | 30–50 per day |
| InMails | Not available | Typically 50 InMail credits per month | Not supported in Reply |
| Profile views | 50–100 per day | 100 per day | 100 per day |
| Likes | 50–100 per day | 100 per day | 100 per day |
| Endorsements | 20–30 per day | 50–70 per day | 30–50 per day |
| Profile follows | Up to 200 per day | 300–500 per day | 200–300 per day |
| Revoking connections | 20–30 per day | 50–70 per day | 30–50 per day |
Reply's per-action ceiling of 100 per day applies regardless, so recommendations above
100 (for example, profile follows) are capped at 100 in practice.
> To raise limits safely: warm up slowly (start with 10–15 connection requests per day and
> increase to 20–30 after a week or two), personalize requests, and alternate automated
> steps with manual activity. An acceptance rate below 30–40% signals irrelevant outreach
> to LinkedIn and increases the risk of restrictions — track it in sequence stats or
> LinkedIn reports.
## Limits
| Limit | Value |
| --- | --- |
| Suggested dynamic range — connections, views, likes, InMails, detections, revokes, endorsements, follows | 25–35 per day |
| Suggested dynamic range — messages | 35–50 per day |
| Static (max amount) default | 30 per action per day |
| Maximum configurable limit | 100 per action type per day |
| When limit edits apply | The next day |
| Counter reset | Daily, per the UTC time zone |
| Free accounts — personalized connection requests (with a note) | 3 per month |
| First-degree connections per LinkedIn account | 30,000 (LinkedIn platform cap) |
| Connection-request note | 200 characters (free), 300 characters (Premium and Sales Navigator) |
| LinkedIn message | 8000 characters |
| InMail | 200-character subject line, 1900-character body |
| Skills endorsed per contact | Up to 3 |
| Revoke window for unaccepted requests | 1–180 days, default 7 |
## FAQ
### What happens when a daily limit is reached?
Reply pauses that action type and posts a notification in the **Sequence → Log** tab.
Nothing is lost — counters reset the next day and the sequence attempts the postponed
steps automatically during its schedule. See
[Why LinkedIn steps fail](/troubleshooting/linkedin-steps-fail) for the other reasons a
LinkedIn step can stop.
### Do manual LinkedIn actions count toward the limits?
No. The limits apply only to LinkedIn automatic steps and do not include any manual
actions you perform yourself.
### Why did connection requests stop before my Reply limit was reached?
LinkedIn enforces its own limits alongside Reply's — most notably a weekly
connection-request cap — and free accounts can send only 3 personalized requests (with a
note) per month. Compare your account limits with today's action count in LinkedIn
reports, and see [Why LinkedIn steps fail](/troubleshooting/linkedin-steps-fail).
### Should I set every limit to 100?
Not recommended. Dynamic ranges mimic natural behavior better than a maxed-out static
cap, and exceeding what LinkedIn tolerates can lead to account restrictions. Warm up
gradually and keep the acceptance rate healthy — below 30–40% increases restriction risk.
## Related
- [Why LinkedIn steps fail](/troubleshooting/linkedin-steps-fail) — the full error taxonomy when steps stop
- [LinkedIn outreach](/capabilities/linkedin-outreach)
- [Connect LinkedIn](/how-to/connect-linkedin)
- [Sending schedules](/behavior/sending-schedules) — automatic LinkedIn steps follow the sequence schedule
- [Limits](/reference/limits)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence and account operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — LinkedIn safety-limit and account management for agents
---
# How Reply detects replies
> The reply-detection rule — the IMAP-monitored mailbox, the 3-4 hour detection window, same-address matching, forwarded emails, and which statuses a reply sets.
**Reply checks the mailbox connected via IMAP and matches incoming messages to contacts with Active or Active plus Contacted statuses. Detection takes up to 3-4 hours; replies must stay in the main inbox folder at least 3 hours. A sequence-email reply sets Replied and Finished and stops the sequence unless Continue processing steps is enabled.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | Matching an incoming message to a contact in a sequence and recording it as a reply |
| **Trigger** | An incoming message arrives in the mailbox connected to Reply via IMAP |
| **Inputs** | Sender address, contact status (`Active` or `Active` + `Contacted`), inbox folder location, message classification |
| **Result** | Contact becomes `Replied`; a reply to a sequence email also sets `Finished` and stops the sequence for that contact by default |
| **Configurable** | Sequence > Settings > Replies handling (Mark as finished vs. Continue processing steps); automatic out-of-office handling in Settings > Emails |
| **Does not** | Detect replies for `Finished` contacts, detect forwards composed as new emails, or classify reply intent — categorization is [reply management](/capabilities/reply-management) |
| **Plans** | Plan-specific differences are not documented for this rule |
## Rule summary
Reply connects an email account via IMAP (receiving) and SMTP (sending); the address in
the **IMAP section** is the one checked for contact replies. Detection usually takes up to
**3-4 hours**. A reply is matched when it comes from the **same email address** the email
was sent to, and the contact's status is **Active or Active + Contacted** — not Finished.
A reply to a sequence email sets `Replied` and `Finished`; a reply to a direct email sets
`Replied` only, and the contact continues in the sequence.
## Trigger
An incoming message arrives in the connected mailbox monitored via IMAP. SMS replies to a
manually or automatically sent SMS related to a sequence are also detected.
## Decision logic
1. Reply checks the mailbox whose address is specified in the IMAP section of the [email account](/specifications/email-accounts) connection. The account must be connected properly (green dot next to it).
2. Match the sender: the prospect must respond from the **same email address** the email was sent to, or forward **from within the original email** — a forward composed as a new email is not detected, and the forwarded message must contain the prospect's email address from your system.
3. Check the contact's status: detection runs only for contacts with **Active or Active + Contacted** statuses. Replies detection is not performed for `Finished` contacts, and tracking stops once a contact is `Replied` (whether set automatically or manually).
4. Classify the message and apply the sequence's Replies handling setting.
**Classification and outcome:**
| Incoming message | Outcome |
| --- | --- |
| Reply to a **sequence email** | `Replied` + `Finished`; the sequence stops for the contact unless **Continue processing steps** is selected in Sequence > Settings > Replies handling |
| Reply to a **direct email** | `Replied` only — no `Finished`; the contact continues in the sequence as planned |
| **SMS reply** to a sequence-related SMS | `Replied`; the Activity log records whether the reply was by email or by SMS |
| Auto-reply with **out of office** keywords | `Out of office`; further steps stop until the status is removed manually or by automatic handling |
| Other **automatic reply** | `Auto-replied` + `Finished`; sending stops until you manually change Finished to Active |
## Result
The matched contact is marked `Replied`, and for sequence-email replies also `Finished` —
so no further automated steps go out under the default setting. The thread lands in the
[inbox](/specifications/inbox), where AI categorization sorts it into a category
(Interested, Not interested, Not now, Do not contact, Forwarded) plus an optional
Meeting intent sub-category. Categorization works for email, LinkedIn, and LinkedIn voice
message replies; each response gets exactly one category and one sub-category.
## State changes
| Field | Change |
| --- | --- |
| Contact status | → `Replied` (+ `Finished` for sequence-email replies; `Out of office` or `Auto-replied` per classification) |
| Reply tracking | Stops for the contact once `Replied` is set |
| Inbox | Thread appears with an AI-assigned category; triggers can act on the category (move to sequence, lists, pause) |
| Statistics | Reply counters move — see [Statistics calculation](/behavior/statistics-calculation) |
## Exceptions
- **Moved messages** — keep all replies in the main inbox folder for **at least 3 hours** and do not move them to another folder; a moved reply can go undetected.
- **Different sender address** — a reply from an address other than the contacted one is not matched; mark the contact as replied manually. See [Reply was not detected](/troubleshooting/reply-was-not-detected).
- **Out-of-office contact replies** — when a contact with `Out of office` status later responds, Reply detects it and applies the Replies handling setting (Mark person as finished or Continue sending emails).
- **Non-English replies** — the AI that assigns inbox categories understands English only; set the category manually for replies in other languages.
- **Bounces** are not replies — they follow [Bounce handling](/behavior/bounce-handling).
## Configuration that changes this rule
Sequence > Settings > **Replies handling** decides whether a reply finishes the contact or
sending continues. Automatic **out-of-office handling** (Settings > Emails, enabled by
default) resumes all `Out of office` contacts after the number of days you set — the
system cannot read the return date mentioned in the email, so the one setting applies to
every case. You can also resume them manually by changing the status to Active.
## Limits
| Limit | Value |
| --- | --- |
| Detection and sync window | Up to 3-4 hours |
| Minimum time a reply must stay in the main inbox folder | At least 3 hours |
| Eligible contact statuses | Active or Active + Contacted (not Finished) |
| Forward detection | Only forwards made from within the original email |
| Inbox AI language coverage | English only — other languages need manual categorization |
## FAQ
### Why was a reply not detected?
Check the usual causes: the reply was moved out of the main inbox folder within 3 hours,
the sender used a different address, the forward was composed as a new email, the sending
account is not properly connected (no green dot), or the contact is `Finished`. The full
checklist is in [Reply was not detected](/troubleshooting/reply-was-not-detected).
### Do out-of-office replies stop the sequence?
They pause it: the contact gets `Out of office` and further steps stop until the status is
removed. Automatic handling (on by default) resumes all such contacts after the configured
number of days. When the contact later replies for real, the Replies handling setting
decides whether they finish or continue — see [Sequence stopping](/behavior/sequence-stopping).
### Does a reply to a direct email stop the sequence?
No. Direct-email replies set `Replied` but not `Finished` — both statuses are assigned
only for replies to sequence emails. The contact continues through the sequence as
planned.
### Can a contact keep receiving steps after replying?
Yes — select **Continue processing steps** in Sequence > Settings > Replies handling. By
default a `Replied` contact stops. See [Sequences](/specifications/sequences).
## Related
- [Sequence stopping](/behavior/sequence-stopping)
- [Status transitions](/behavior/status-transitions)
- [Bounce handling](/behavior/bounce-handling)
- [Process positive replies](/workflows/process-positive-replies)
- [Reply was not detected](/troubleshooting/reply-was-not-detected)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — inbox and contact status endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — read the inbox and mark contacts as replied from an agent
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
---
# What happens when an email bounces
> The bounce rule — hard vs soft bounces, the 4% and 8% bounce-rate thresholds, the 200-email floor, and how a stopped step resumes the next day.
**A bounce marks the contact Bounced and feeds the sequence bounce rate, recalculated once an hour. At a 4% rate the sequence toggle turns orange; at 8% Reply stops the sending step until the end of the day — but only once 200 or more emails have gone out. Follow-ups keep sending, and the step resumes next day.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | What a failed delivery changes — contact state, step execution, and sequence health |
| **Trigger** | The receiving server rejects a sent email (reported via Delivery Status Notification, or directly by the ESP when using SendGrid with bounce webhooks) |
| **Inputs** | Bounce type (hard or soft), sequence bounce rate, emails sent today |
| **Result** | Contact becomes `Bounced`; at 8% bounce rate with ≥200 emails sent, the step stops until end of day |
| **Configurable** | No — thresholds are fixed. Pre-send [email validation](/specifications/prospect-data) reduces bounces up front |
| **Does not** | Stop follow-up emails (they send even past the threshold), permanently suspend the sequence, or repair the bad address |
| **Plans** | All plans |
## Rule summary
A bounced email marks the contact `Bounced` and counts into the sequence's bounce rate.
The bounce rate is recalculated **once an hour** over a **24-hour window**. Crossing **4%**
turns the sequence toggle orange as a warning; crossing **8%** stops the sending step for
the rest of the day — provided at least **200 emails** were sent — and the step resumes
automatically the next day with the counter reset to zero.
## Trigger
The receiving mail server rejects a sent email. Reply learns about it from the Delivery
Status Notification (DSN) that arrives in the sending mailbox — or, when you send through
SendGrid with bounce webhooks connected, directly from SendGrid with no DSN involved.
## Decision logic
1. Classify the failure — **hard bounce** (permanently rejected: invalid or nonexistent address) or **soft bounce** (temporarily undeliverable, for example a full inbox).
2. Set the contact's status to `Bounced`. No further automated sends go to that address.
3. Recalculate the sequence bounce rate (hourly, across **all email steps and all sending
email accounts** in the sequence):
```
Bounce rate in % = Bounced emails x 100 / Total people
```
**Then apply the thresholds:**
| Condition | Effect |
| --- | --- |
| Bounce rate reaches **4%** | Sequence toggle turns **orange** — warning only, sending continues |
| Bounce rate reaches **8%**, fewer than 200 emails sent today | Nothing stops — the 200-email floor protects small sends from statistical noise |
| Bounce rate reaches **8%**, 200 or more emails sent today | The sending step **stops until the end of the current day**; you are notified; the toggle turns **red** |
The next day, the stopped step resumes during your sending-window hours and the bounce
threshold resets to 0.
## Result
The bounced contact stops receiving sequence email. The sequence itself is never
permanently suspended by bounces: the stopped step resumes automatically the next day.
(Under the legacy rule the limit was 15% and suspension was permanent — that behavior was
replaced by this daily-reset model.)
## State changes
| Field | Change |
| --- | --- |
| Contact status | → `Bounced` |
| Sequence toggle | Orange at 4%, red at 8% (with the 200-email floor) |
| Statistics | Bounce counts into bounce rate (`Bounced emails × 100 / Total people`); a bounce is never a delivery |
## Exceptions
- **Follow-up emails are sent even when the 8% threshold is reached** — only the sending
step stops.
- If **199 or fewer** emails were sent in the current window, no step stops regardless of
the rate.
- With SendGrid bounce webhooks, there is no DSN in the mailbox; Reply records the bounce
with the reason SendGrid provides.
## Configuration that changes this rule
The thresholds themselves are not configurable. What you can control is the input:
validate addresses before sending with the email validation service (see
[Prospect data](/specifications/prospect-data)), and check the DSN error codes in the
sending mailbox to understand individual failures — see
[Why was an email not sent](/troubleshooting/email-was-not-sent).
## Limits
| Limit | Value |
| --- | --- |
| Warning threshold (orange toggle) | 4% bounce rate |
| Stop threshold (red toggle, step stops until end of day) | 8% bounce rate |
| Daily email floor before the stop rule applies | 200 emails per sequence per sending window |
| Recalculation frequency | Once an hour |
| Rate window | 24 hours; resets to 0 each new day |
## FAQ
### Does an 8% bounce rate kill the sequence permanently?
No. The sending step stops until the end of the current day and resumes the next day
during your sending window, with the bounce counter reset to 0. Permanent suspension was
the legacy behavior at 15% and no longer applies.
### Do follow-ups stop when the threshold is reached?
No. Follow-up emails continue sending even after the 8% threshold stops the step. Only
new sends from the affected step wait for the next day.
### Can I send to a contact again after a bounce?
Not at the bounced address — fix or [enrich](/capabilities/data-enrichment) the address on
the contact record first. See [Contacts](/specifications/contacts) and
[Statuses](/reference/statuses).
### How do I see why a specific email bounced?
Open the Delivery Status Notification in the sending mailbox's inbox — it carries the
bounce error code and explanation. Sequence-level errors also surface in the sequence Log
tab; see [Why was an email not sent](/troubleshooting/email-was-not-sent).
## Related
- [Statistics calculation](/behavior/statistics-calculation) — bounce rate uses the Total-people denominator
- [Sequence stopping](/behavior/sequence-stopping) — all the ways a sequence stops
- [Reply detection](/behavior/reply-detection) — bounces are classified apart from replies
- [Deliverability](/capabilities/deliverability)
- [Statuses](/reference/statuses)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact status and validation endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — sequence health and contact operations
---
# When Reply stops a sequence
> Every condition that stops automated outreach — the six sequence toggle states, replies handling, blocked-account auto-stop, and the 8% bounce suspension.
**A sequence's toggle shows six states — Green Active, Gray Inactive, Red Action required, Orange Issues, Yellow Limits reached, Blue Completed. Contacts stop on reply under Mark as finished, and sending pauses when an email account gets blocked or the 8% bounce rate is reached; first-step sending resumes automatically after 24 hours.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | Every condition that halts automated outreach — for one contact or for the whole sequence |
| **Trigger** | A reply, all steps sent, a blocked email account, the 8% bounce rate, a reached limit, or a manual pause |
| **Inputs** | Replies handling setting, bounce rate per 24 hours, email account state, daily and billing-period limits |
| **Result** | The contact becomes `Finished`, or sending pauses at the sequence level; the toggle color reports which |
| **Configurable** | Replies handling (Mark as finished vs. Continue sending emails); the Finished-after-last-step switch |
| **Does not** | Retract sent messages, stop follow-ups during an 8% bounce suspension, or keep a contact stopped after you set them back to Active |
| **Plans** | Plan-specific differences are not documented for this rule |
## Rule summary
Outreach stops at two levels. **Per contact**: a reply to a sequence email marks the
contact `Finished` under the default **Mark as finished** setting, and a contact whose
last step was sent with no reply can also be switched to `Finished`. **Per sequence**:
sending halts when an email account gets blocked by its provider (auto-stop for 24 hours),
when the sequence reaches an **8% bounce rate per 24 hours** (first step stops, follow-ups
continue), when a limit is reached, or when you pause it. The sequence toggle's color
tells you which state applies.
## Trigger
A contact replies, finishes all steps, or bounces; an email account gets blocked; the
bounce rate crosses 8%; a daily or billing-period limit is reached; or a user pauses or
archives the sequence.
## Decision logic
1. **Reply received** — under **Mark as finished** (Sequence > Settings > Replies handling), no further follow-up emails are sent to the prospect; under **Continue sending emails**, the remaining follow-ups still go out. A reply to a direct email sets `Replied` without `Finished` and does not stop the contact.
2. **Steps exhausted** — with *Switch contact to 'Finished' state if the last step email is sent and no reply is received* enabled, the contact finishes after the last step. A contact can reach `Finished` through a response, a bounced email, an opt-out, or no reply after a certain number of days.
3. **Email account blocked** — providers like Office 365 or Google Workspace may block a sending account for suspicious activity. As soon as Reply detects the first bounces indicating a block, it immediately stops sending from that account for the next 24 hours or until you manually resume it. A pop-up appears on the toggle of every sequence sending from the suspended account, and the sequence logs name the blocked account.
4. **8% bounce rate reached** — per Reply's Usage Policy, when a sequence reaches an 8% bounce rate per 24 hours, Reply stops sending the **first step** but **continues sending follow-ups**. After 24 hours first-step sending resumes automatically and the bounce rate resets; reaching the threshold again repeats the cycle. Reply notifies you at half and at full bounce quota.
5. **Limit reached or manual stop** — the sequence waits (yellow toggle) or stays off (gray toggle) until the limit window passes or you restart it.
## Result
The affected contact stops receiving steps, or the affected sequence (or its first step,
or one of its accounts) stops sending. Nothing already sent is retracted. Auto-stopped
accounts resume automatically 24 hours after the first block bounce was detected, and the
system automatically re-sends the bounced steps once the account is resumed.
## State changes
The sequence toggle is the visible state machine. Its six states and their exact triggers:
| Toggle | State | Triggers |
| --- | --- | --- |
| **Green** | Active | The sequence is running: just launched, restarted after a pause, or actively working through steps — planning, checking conditions, sending emails, generating tasks, or executing LinkedIn actions |
| **Gray** | Inactive | The sequence is not running: newly created and not yet launched, paused, or archived |
| **Red** | Action required | Missing or invalid settings block the run: sending email account removed or disconnected; connected LinkedIn account removed; sending errors; no contacts in the sequence; sending schedule missing; sequence under review and suspended after reaching an 8% bounce rate |
| **Orange** | Issues detected / Warnings | Attention needed: some contacts have no sending email account assigned; some contacts have no LinkedIn account assigned; contacts are missing required data; sending from some email accounts stopped due to a provider block; the sequence reached a 4% bounce rate; a voice profile is missing |
| **Yellow** | Limits reached | Temporarily paused by limits: daily sending limit for the email account reached; active contacts limit for the current billing period reached; sequence daily limit reached; LinkedIn's weekly limit for connection requests reached; the email provider blocked sending (daily sending quota exceeded) |
| **Blue** | Completed | All contacts finished the sequence — no active contacts left |
## Exceptions
- **Follow-ups keep sending during an 8% bounce suspension** — only the first step stops, and it resumes automatically after 24 hours.
- **Direct-email replies do not stop the contact** — `Replied` and `Finished` are both assigned only for replies to sequence emails.
- **A blocked account still produces some bounces** — Reply can only stop after detecting the first block bounces. Find affected prospects with the *Bounce: sender's provider block* filter, remove the `Bounced` status, and confirm the re-send — or let the system re-send them automatically when the account resumes.
- **Blue Completed is not an error** — it simply means no active contacts remain.
## Configuration that changes this rule
Sequence > Settings > **Replies handling** holds both switches: Mark as finished vs.
Continue sending emails, and the option to switch a contact to `Finished` when the last
step email is sent with no reply. The blocked-account auto-stop and the 8% bounce
threshold are platform rules and are not configurable; what you control is input quality —
validate contact lists before launching to keep the bounce rate down. See
[Bounce handling](/behavior/bounce-handling) and [Deliverability](/capabilities/deliverability).
## Limits
| Limit | Value |
| --- | --- |
| Bounce-rate suspension threshold | 8% per 24 hours — first step stops, follow-ups continue |
| Bounce-rate warning (orange toggle) | 4% |
| First-step auto-resume after bounce suspension | After 24 hours, with the bounce rate reset |
| Blocked-account auto-resume | 24 hours after the first block bounce, unless resumed manually earlier |
| Bounce-quota notifications | At half and at full quota |
## FAQ
### Why is my sequence suspended?
Most often the sequence reached the 8% bounce rate per 24 hours — usually a sign of
outdated or invalid addresses. First-step sending stops, follow-ups continue, and sending
resumes automatically after 24 hours. Validate your lists before launching to prevent the
cycle from repeating. See [Bounce handling](/behavior/bounce-handling).
### How do I change a contact from Finished back to Active?
There are two scenarios behind `Finished`: the contact replied to a sequence email, or
they went through all sequence steps. To reactivate, open the sequence's People tab,
select the contacts, click the Change Status icon, and add **Active**. See
[Status transitions](/behavior/status-transitions).
### What does a yellow toggle mean?
A limit was reached — the account's daily sending limit, the active contacts limit for the
billing period, the sequence daily limit, LinkedIn's weekly connection request limit, or a
provider's daily sending quota. The sequence resumes when the limit window passes; see
[Limits](/reference/limits).
### Does a blocked email account stop my other sequences?
It stops sending from that account everywhere: every sequence sending from the suspended
account shows the pop-up on its toggle. Other accounts in those sequences are not
mentioned as affected. Unblock the account with the provider, then resume it in Reply — or
wait for the 24-hour auto-resume.
## Related
- [Bounce handling](/behavior/bounce-handling) — the 4% and 8% thresholds in detail
- [Reply detection](/behavior/reply-detection) — what counts as a reply
- [Status transitions](/behavior/status-transitions) — Finished and how to leave it
- [Sequence execution](/behavior/sequence-execution)
- [Why is a campaign not running?](/troubleshooting/campaign-is-not-running)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — pause, status, and sequence operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents pause sequences and change contact statuses
---
# How statuses change
> The 14 contact statuses — when Reply assigns each one, which are user-settable, and the reconstructed transition rules including one-way and retained statuses.
**Reply assigns 14 contact statuses automatically as outreach events occur — Active, Paused, Missing Data, Bounced, Out of office, Finished, Contacted, Opted Out, Replied, Opened, Clicked, Auto-replied, To call, and Called. Some are user-settable; Contacted, Opened, Clicked, and Auto-replied are not, and Opted Out is retained outside sequences.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | Which of the 14 contact statuses Reply assigns, when, and which transitions are allowed |
| **Trigger** | An outreach event (send, open, click, reply, bounce, auto-reply, opt-out, call) or a manual status change |
| **Inputs** | The event, the contact's current statuses, whether at least one email was received, sequence ownership under Team Edition |
| **Result** | The status set updates; incompatible combinations fail with no resulting transition |
| **Configurable** | Replies handling determines the reply outcome; opens and link tracking gate Opened and Clicked |
| **Does not** | Track engagement across the whole outreach process — statuses are per-sequence state; that is what contact stages cover |
| **Plans** | With Team Edition in public mode, only the sequence owner can change contact statuses — except Opted Out, which any team member can assign |
## Rule summary
Contact statuses represent the current state of processing a contact within a sequence.
Reply assigns them automatically based on interaction, and most — not all — can also be
managed manually from the People page (Change status, then add or remove with the + and -
buttons). Not all statuses are compatible with each other: if a requested combination is
not allowed, the change **fails and no transition occurs**. Statuses are not
[contact stages](/reference/statuses), which describe engagement across the entire
outreach process rather than one sequence.
## Trigger
An outreach event arrives (delivery, open, click, reply, auto-reply, bounce, opt-out,
call activity), a contact reaches a specific step type, or a user changes the status
manually.
## The 14 contact statuses
| Status | Assigned when | User-settable | Removal and transition rules |
| --- | --- | --- | --- |
| **Active** | The contact is added to an active sequence | Yes | Can be changed to Paused, Finished, Out of office, or Opted Out at any time; to Bounced or Replied only after the contact received at least one email in the current sequence |
| **Paused** | Set manually to temporarily halt email sends and reply tracking | Yes | Only for contacts in a sequence — setting it on a contact in no sequence produces an error; revert to Active manually to resume |
| **Missing Data** | A template variable has no matching value in the contact's profile | No — system-assigned | Must be removed manually; no emails send while it is set; fix by filling the variable or removing it from the template |
| **Bounced** | An email is returned undelivered; can also be set manually after at least one email was sent | Partially | Update the address, uncheck Bounced, set Active to resend within the same sequence; **not retained** when the contact moves to a different sequence |
| **Out of office** | An auto-reply with out-of-office keywords is detected | Yes | Stops further steps until removed manually or resumed by automatic out-of-office handling; a later real reply is handled per Replies handling |
| **Finished** | The prospect replies to a sequence email, or all steps have been sent | Yes | Change to Active only if the prospect did not complete all steps or extra steps were added; reply detection and sending stop while set |
| **Contacted** | The contact received at least one email from the current sequence | No | Cannot be changed manually |
| **Opted Out** | The prospect clicks the opt-out link, or a text unsubscribe reply is sorted into the Do Not Contact inbox category by AI | Yes | Can be set and removed manually; the **only status retained outside sequences**; a contact with it **cannot be moved to a different sequence**; any team member can assign it |
| **Replied** | The prospect responds from the same address the email was sent to (or forwarded from the thread), or replies by SMS to a sequence-related SMS | Yes | Sequence stops by default unless Continue processing steps is selected; usually comes together with Finished; reply tracking stops once set |
| **Opened** | The prospect opens an email (opens tracking on) | No | Cannot be changed manually; opens tracking can be disabled in Sequence > Settings > General Settings |
| **Clicked** | The contact clicks a link with link tracking enabled | No | Cannot be changed manually |
| **Auto-replied** | An automatic reply is detected | No | Cannot be assigned or removed manually; comes along with Finished, which stops further steps until Finished is changed to Active |
| **To call** | The contact is moved to a Call step in a sequence | Yes | Can also be set manually from the Contact sidebar |
| **Called** | Any call action: completing a Call-type task, making a Cloud Call, or logging a call via the Contact sidebar | Set by call actions | Permanent — removable only manually via the Contact sidebar |
## Transition rules
The original transition matrix is documented as a rule set rather than a diagram; the
table below reconstructs it from the per-status rules.
| From | To | Condition |
| --- | --- | --- |
| Active | Paused, Finished, Out of office, Opted Out | Manual, any time |
| Active | Bounced, Replied | Manual, only after at least one email was received in the current sequence |
| Paused | Active | Manual resume |
| Out of office | Active | Manual, or automatic after the configured number of days |
| Out of office | Finished or continue in sequence | The contact replies; outcome follows Replies handling (Mark person as finished vs. Continue sending emails) |
| Finished | Active | Only when steps remain uncompleted or extra steps were added to the finished sequence |
| Bounced | Active | After correcting the email address and unchecking Bounced; the email can be resent within the same sequence |
| Opted Out | (removed) | Manual only |
| Missing Data | (removed) | Manual only, after fixing the data or the template |
| Any disallowed combination | — | Fails: no resulting transition occurs |
| Any, under Team Edition | — | Fails if the sequence does not belong to the user changing the status (Opted Out excepted) |
## Result
The contact's status set updates and sending, tracking, and detection behavior follow the
new statuses — for example, no sends to `Missing Data`, `Finished`, or `Bounced` contacts,
and no reply detection for `Finished` or `Replied` contacts.
## Exceptions
- **Bounced + Opened together** is possible: the recipient provider's email checker may register an open (the address is likely invalid but the domain exists), or the open reflects your own view of the bounce-back message, which contains your original email.
- **Bounced is not retained across sequences** — moving the prospect to a different sequence drops it. **Opted Out is the opposite**: it is the only status retained even outside sequences, and it blocks moving the contact to another sequence.
- **The inbox AI that assigns Do Not Contact (feeding Opted Out) understands English only** — replies in other languages need the inbox category set manually, and the AI is not 100% accurate even in English.
- **Called is permanent** until removed manually via the Contact sidebar.
## Configuration that changes this rule
Sequence > Settings > **Replies handling** decides whether `Replied` comes with `Finished`
(Mark as finished) or the contact continues (Continue processing steps). **Opens
tracking** and **link tracking** in General Settings gate whether `Opened` and `Clicked`
can ever be assigned. Automatic **out-of-office handling** controls when `Out of office`
contacts resume — see [Reply detection](/behavior/reply-detection).
## Limits
| Limit | Value |
| --- | --- |
| Statuses in the enum | 14 |
| Never user-settable | Contacted, Opened, Clicked, Auto-replied |
| Removable only manually | Missing Data, Called, Auto-replied comes with Finished (Auto-replied itself cannot be removed) |
| Retained outside sequences | Opted Out only |
| Team Edition (public mode) | Status changes restricted to the sequence owner, except Opted Out |
## FAQ
### Which statuses can I set manually?
Paused, Finished, Out of office, Opted Out, and To call at any time (Paused requires the
contact to be in a sequence); Bounced and Replied only after the contact received at least
one email in the current sequence. Contacted, Opened, Clicked, and Auto-replied are
assigned by the system only.
### Why does a bounced contact show as Opened?
Either the recipient provider's email checker opened the message — suggesting the address
is invalid but the domain exists — or the open is your own view of the bounce-back
message, which contains your original email. See [Bounce handling](/behavior/bounce-handling).
### Why can't I change a contact's status?
Two common causes: the status combination is not allowed (the change fails with no
transition — for example, Replied before any email was received), or Team Edition in
public mode is enabled and you are not the sequence owner. Any team member can still
assign Opted Out.
### What is the difference between statuses and stages?
Statuses are per-sequence processing state — the 14 values on this page. Stages describe
the level of interaction and engagement across your entire outreach process. See
[Statuses](/reference/statuses).
## Related
- [Statuses](/reference/statuses) — the reference list
- [Sequence stopping](/behavior/sequence-stopping) — which statuses stop outreach
- [Reply detection](/behavior/reply-detection) — how Replied and Out of office get set
- [Lifecycle diagrams](/reference/lifecycle-diagrams)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact status operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents change contact statuses with the same rules
---
# How statistics are calculated
> Every email-metric formula — Total people, Contacted, and the denominator split that puts delivery and bounce rates over Total but open and reply rates over Contacted.
**Every rate divides one counter by a defined denominator. Delivery rate and bounce rate divide by Total people — Contacted plus Out of Office, Bounced, and Auto Replied — while open, reply, interested, meetings, and opt-out rates divide by Contacted only. A LinkedIn connection request without a note does not count as contacted.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## At a glance
| Aspect | Detail |
| --- | --- |
| **What it governs** | The formula behind every key email metric in the Sequence Stats tab and the Email dashboard in Reports |
| **Trigger** | An outreach event: delivery, open, reply, bounce, auto-reply, opt-out, booked meeting |
| **Inputs** | Contact counts by status, delivered and opened emails, replies across channels, inbox categories |
| **Result** | Counters and rates update; opt-out rate updates in real time |
| **Configurable** | Opens and link tracking gate the open and click counters — see [Sequence execution](/behavior/sequence-execution) |
| **Does not** | Count a LinkedIn connection request without a note as contacted, count auto-replies or bounces as contacted, or judge message quality |
| **Plans** | The metrics are the same across the Sequence Stats tab and the Email dashboard in Reports |
## Rule summary
Every reported rate is one counter divided by one of two denominators. **Total people** —
the overall number of contacts in the sequence — is the denominator for delivery rate and
bounce rate. **Contacted** — contacts who received at least one email, excluding Out of
Office, Bounced, and Auto Replied — is the denominator for open, reply, interested,
meetings-booked, and opt-out rates. The two are linked by one identity:
```
Total = Contacted + Out of Office + Bounced + Auto Replied contacts
```
## Trigger
An outreach event arrives and the matching counter moves: a delivery, a tracked open or
click, a reply on any channel, a bounce, an auto-reply, an opt-out, or a booked meeting.
## What counts as Contacted
For the reply rate, **Contacted** counts all distinct contacts who received at least one
of the following: an email step, a LinkedIn connection request **with** a note or message,
or a LinkedIn message or InMail. Two boundaries matter:
- A LinkedIn connection request **without** a note or message is **not** counted as contacted.
- A contact reached via multiple channels is counted **once** (distinct).
**Replies** counts all distinct contacts who replied via at least one of: email, a
LinkedIn message or InMail, or a LinkedIn connection request (with a note/message). The
reply rate is based on historical data and may change over time.
## The formulas
Each formula below is verbatim from the metric definitions:
| Metric | Formula | Denominator |
| --- | --- | --- |
| Total people | Total = Contacted + Out of Office + Bounced + Auto Replied contacts | — |
| Delivery rate | Delivered emails × 100 ÷ Total people | Total people |
| Open rate | Opened emails × 100 ÷ Contacted | Contacted |
| Reply rate | Replies × 100 ÷ Contacted | Contacted |
| Interested | Interested × 100 ÷ Contacted | Contacted |
| Meetings booked | Meetings booked × 100 ÷ Contacted | Contacted |
| Opt-out rate | Opted out × 100 ÷ Contacted | Contacted |
| Bounce rate | Bounced emails × 100 ÷ Total people | Total people |
| Not reached | Out of Office + Bounced + Auto Replied contacts; rate = Not reached × 100 ÷ Total people | Total people |
The denominator split is deliberate: **delivery and bounce rates use Total people**, so
they measure list quality across everyone enrolled; **open, reply, interested, meetings,
and opt-out rates use Contacted**, so they measure engagement only among people who
actually received something. Delivery rate excludes Bounced contacts but **includes Out of
Office and Auto replies**; open and reply rates include neither. Interested counts come
from the Inbox category. Total accounts is the number of companies involved, based on
Total people.
## Result
Counters and rates update as events arrive. The opt-out rate updates in real time; update
timing for the other metrics is not documented. Hovering over Not reached on the Reports
page breaks it down into Out of Office, Bounced, and Auto Replied contacts.
## Deleting contacts and metrics
| Action | Effect on metrics |
| --- | --- |
| Delete a contact | Total people decreases |
| Delete a team member (team reports) | Metrics do not change |
| Remove the Opted Out status from a contact | The opt-out value changes |
| Delete a contact that has the Opted Out status | The opt-out metric does not change |
| Delete the contact from the sequence and remove the Opted Out status | The contact is not included in the stats |
## Exceptions
- **Totals across multiple time ranges can exceed the overall total** for a sequence — that is expected, not a bug.
- **CSV sequence reports use their own denominators**: Click through rate = Clicked count ÷ Delivered count × 100 (Delivered, not Contacted), while Open rate % and Reply rate % divide by Contacted count and Bounce rate % divides by Prospects count. Deleted email accounts are still included in report stats.
- **Opens and clicks require tracking to be enabled** — with opens or link tracking off, those counters stay at zero without meaning nobody opened. See [Statistics do not match](/troubleshooting/statistics-do-not-match).
## Configuration that changes this rule
The formulas themselves are fixed. Opens tracking and link tracking (Sequence > Settings >
General Settings, both off by default) determine whether open and click data exists at
all. Inbox categorization feeds the Interested metric — see
[Reply management](/capabilities/reply-management).
## Limits
| Limit | Value |
| --- | --- |
| Opt-out rate refresh | Real time |
| Reply rate stability | Based on historical data; may change over time |
| Time-range totals | The sum across ranges may be higher than the overall total |
| Update timing for other metrics | Not documented |
## FAQ
### Why is my delivery rate high while my open rate looks low?
Different denominators. Delivery rate divides by Total people and includes Out of Office
and Auto replies as delivered; open rate divides by the smaller Contacted count and
excludes them. The two rates are not directly comparable.
### Does an out-of-office reply count as a reply?
No. Out of Office and Auto Replied contacts are excluded from both Contacted and the
reply-rate numerator. They appear in Not reached instead — see
[Reply detection](/behavior/reply-detection) for how classification happens.
### Why did my reply rate change for a past period?
The reply rate is based on historical data and may change over time — for example, as
late replies arrive and distinct-contact counts update. Compare like for like before
treating it as an error; see [Statistics do not match](/troubleshooting/statistics-do-not-match).
### Does deleting a contact clean them out of my stats?
Deleting a contact decreases Total people, but an Opted Out contact's opt-out metric stays
unless you remove the status and delete them from the sequence. Deleting a team member
from team reports changes nothing.
## Related
- [Calculations](/reference/calculations) — the counter tables
- [Campaign analytics](/capabilities/campaign-analytics)
- [Analyze campaign performance](/workflows/analyze-campaign-performance)
- [Statistics do not match](/troubleshooting/statistics-do-not-match)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — statistics and reporting endpoints
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — the reports commands
---
# How-to guides
> Product-interface instructions — connect accounts, import contacts, build and launch sequences, process replies. Steps describe actions, not button positions.
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
How-to pages explain how a person configures Reply in the product interface. Each states
its goal, preconditions, steps, expected result, and verification — grounded in the
product's documented behavior — and links to the API and agent equivalent so the same
operation can be automated.
## Set up
- [Connect a mailbox](/how-to/connect-a-mailbox) — add a sending email account safely
- [Configure sending limits](/how-to/configure-sending-limits) — daily caps, throttling, delays
- [Import contacts](/how-to/import-contacts) — CSV in, deduplicated records out
## Run
- [Create a sequence](/how-to/create-a-sequence) — steps, accounts, schedule
- [Launch a sequence](/how-to/launch-a-sequence) — enroll and go live
- [Manage duplicate contacts](/how-to/manage-duplicates) — import options and cleanup
- [Process replies](/how-to/process-replies) — daily inbox triage
- [Read sequence reports](/how-to/read-sequence-reports) — where each number lives
## Planned
| Page | Status |
| --- | --- |
| Create a list | Not written |
| Configure a sending schedule | Not written |
| Pause a campaign · Stop outreach | Not written |
| Configure webhooks | Not written |
## Related
- [Workflows](/workflows) — the complete outcomes these steps serve
- [Troubleshooting](/troubleshooting) — when a step doesn't produce the expected result
## Build with Reply
- Every guide's API equivalent: [docs.reply.io](https://docs.reply.io/api-reference/introduction)
- Agent equivalents: [agents.reply.io/mcp](https://agents.reply.io/mcp) · [agents.reply.io/skills](https://agents.reply.io/skills)
---
# Connect a mailbox
> Add a sending email account in Settings — single-click Gmail, Outlook, and Exchange connections, Autodiscover for on-premises Exchange, manual IMAP and SMTP setup, aliases, and the corporate-domain rule.
**Open Settings, go to the Email Accounts tab, and click New email account. Choose your provider: Gmail, Outlook, or Exchange single-click, Exchange (on-premises) via Autodiscover, or Other Provider with manual IMAP and SMTP settings. Sign in or test the connection; a green dot next to the address confirms the mailbox is connected. Generic domains like gmail.com are not accepted.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
An [email account](/specifications/email-accounts) connected with a green status dot — ready to
assign to sequences.
## Preconditions
- Access to the mailbox being connected. Connecting a mailbox is recommended as the first setup step, but you can add it later — it becomes mandatory only when you launch email campaigns.
- The address uses a business (corporate) domain. Generic domains such as gmail.com and yahoo.com work as your Reply login but cannot be added as sending accounts.
- For Gmail: IMAP enabled (in Gmail Settings, open **Forwarding & POP/IMAP** and check **Enable IMAP**) and 2-factor verification enabled.
- For Outlook/Office 365 single-click: IMAP enabled — ask your administrator if you cannot access the setting.
- If your plan's included mailboxes are already in use, the **New email account** flow shows a payment confirmation before continuing; the number of included emails is listed in the **Plans & Billing** tab under **Subscription**.
## Steps
1. Open **Settings** and go to the **Email Accounts** tab.
2. Click **New email account**.
3. Select your email provider and click **Continue**.
4. Complete the provider-specific flow (see the options below).
5. Confirm the dot next to the account is green — the sign of a successful connection. A red dot indicates an issue; hover over it for troubleshooting tips.
### Gmail (single-click)
Select **Gmail**, choose the mailbox, sign in, and accept Reply's Privacy Policy and Terms
of Service. Accounts connected this way send through the Gmail API instead of SMTP by
default — to switch, open the account in **Email Accounts**, expand the **Sending and
receiving** section, and select the option you need. If single-click fails, connect via
**Other Provider** with imap.gmail.com (port 993) and smtp.gmail.com (port 465), SSL
enabled for both; with 2-factor authentication on, use an app-generated password instead
of the mailbox password.
### Outlook/Office 365 and Exchange (single-click)
**Outlook** is recommended for Outlook/Office 365 accounts with IMAP enabled — it will not
work while IMAP is disabled. **Exchange** is recommended for EWS mailboxes on Microsoft
servers; it uses API for receiving emails instead of IMAP, and also fits Office 365
accounts you want connected via EWS. Either way, select the option and sign in to the
mailbox. To set up an Outlook account for IMAP/SMTP sending instead: choose **Other
Provider**, enable **I want to use different email servers for sending and receiving
emails**, enter the SMTP settings (smtp-mail.outlook.com, port 587, SSL off), save the
changes, then click **Connect Office 365** and sign in — the IMAP settings for receiving
populate automatically.
### Exchange (on-premises)
Recommended for EWS on private servers. Choose **Exchange (on-premises)** and click
**Continue**, enter the email address and mailbox password, click **Autodiscover** next to
the EWS Endpoint field, then test the connection and save. If the endpoint is not
discovered, paste the EWS URL you see when logging in through a browser.
### Other Provider (manual setup)
The provider must support IMAP, SMTP, and third-party app connections, and IMAP must be
enabled. Enter the host names and port numbers listed on the provider's side and the
Sender Name recipients will see, then click **Test** next to Sending and Receiving and
make sure both dots are green.
### Email alias
Choose **Other Provider** and enable **I want to use different email servers for sending
and receiving emails**. In the IMAP section, use the primary mailbox as the user name with
its password. In the SMTP section, put the alias address in the Email field, keep the
primary mailbox as the user name and in the Reply to field, and set the Sender Name.
Click **Test** and confirm both dots are green.
## Expected result
The account is listed in **Email Accounts** with a green dot and can be assigned to
sequences.
## Verification
The dot next to the account is green for both sending and receiving. Once the account is
assigned to a sequence, send yourself a test email from a step editor — see
[Launch a sequence](/how-to/launch-a-sequence).
## What happens next
Assign the account to sequences — [mailbox selection](/behavior/mailbox-selection)
distributes contacts across assigned accounts. Set the account's daily limit and send
delay before real volume — see [Configure sending limits](/how-to/configure-sending-limits) —
and review [deliverability](/capabilities/deliverability) and
[email warm-up](/learn/email-warm-up) guidance for a new or cold mailbox.
## Common mistakes
- Trying to add a generic-domain address (gmail.com, yahoo.com) — Reply accepts only business domains for sending.
- Connecting Gmail manually with 2-factor authentication using the mailbox password — an app-generated password is required.
- Choosing the **Outlook** single-click option while IMAP is disabled — it will not work; enable IMAP or use the **Exchange** option.
- Confusing **Exchange** (EWS on Microsoft servers) with **Exchange (on-premises)** (EWS on private servers).
## Related
- [Email accounts](/specifications/email-accounts)
- [Configure sending limits](/how-to/configure-sending-limits)
- [Deliverability](/capabilities/deliverability)
- [Why was a mailbox disconnected?](/troubleshooting/mailbox-was-disconnected)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email-accounts endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents manage account settings and check warmup status
---
# Configure sending limits
> Set the limit stack — the account's daily total and send delay, the sequence's Max number of emails per day and Max new daily contacts with its addition modes, and the same-domain cap.
**Set the account limit first in Settings under Email Accounts, then open the sequence Settings tab and configure Max number of emails per day, Max new daily contacts, Delay between each email sent, and Max same-domain contacts per day. The account daily cap is 400 emails on paid plans, and Max new daily contacts overrides the emails limit.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
A limit configuration that protects deliverability while meeting your volume target — with
no surprise about which cap binds first.
## Preconditions
Connected [email accounts](/specifications/email-accounts) — see
[Connect a mailbox](/how-to/connect-a-mailbox) — and a sequence to configure.
## Steps
1. Start with the account. One email account can send at most 400 emails per day on paid plans (200 during the trial). In **Settings**, open the **Email Accounts** tab, click the mailbox, choose the **Safety settings** part, turn the **Delay between each email sent** toggle on, and select the time in seconds — the higher the delay, the slower the sending. If one mailbox serves several Reply accounts, the limit is separate for each.
2. Open the sequence's **Settings** tab and expand the **General settings** section.
3. Set **Max number of emails per day** — the maximum first-step emails the sequence sends daily (up to 10,000). It cannot exceed the email account's daily limit.
4. Set **Max new daily contacts** — how many new contacts the sequence starts each day. Contacts above the limit wait in the Throttled state until the system prepares them for Step 1. This limit overrides **Max number of emails per day** and prepares contacts for Step 1 every day, including weekends.
5. Choose the **New daily contact addition mode**: **Add until capacity** (the default) only adds the contacts needed to reach the daily limit and does not add new contacts on days the schedule is closed; **Add full amount** adds the full configured number every day regardless. To skip throttling entirely, enable **No limit on new daily contacts** — new contacts then move straight into Step 1.
6. Set **Delay between each email sent (seconds)** for the sequence — at least 120-180 seconds is recommended to avoid the account being blocked for spam activity, and the system needs an additional 10-15 seconds per email, so include that when sizing the daily maximum.
7. Turn on **Max same-domain contacts per day** and set the number to cap how many people at one company you reach per day. The limit does not work with free domains (gmail.com, outlook.com, yahoo.com, and similar).
8. To send more than one email to the same contact per day, raise **Max daily emails per contact** (the default is 1). It does not apply to emails sent within a Manual email step.
9. Click **Save settings** and review the sequence [schedule](/specifications/schedules) — limits apply inside its sending windows.
> How the limits combine: with **Max number of emails per day** at 400 and **Max new daily
> contacts** at 100, the sequence sends 100 first-step emails per day and distributes the
> remaining 300 evenly across follow-up steps.
## Expected result
Sends distribute across accounts and days exactly as capped — the account limit binds
first, then the sequence's daily email and contact limits.
## Verification
After the first sending window, per-account counts stay at or under the account limit and
the sequence total stays under **Max number of emails per day**. Contacts beyond the daily
contact limit show as Throttled instead of sending.
## What happens next
Sending follows [When Reply sends](/behavior/sending-schedules). When a daily limit is
reached, the sequence toggle turns yellow until the next window — see
[Sequence stopping](/behavior/sequence-stopping) — so check the toggle before raising any
cap.
## Common mistakes
- Raising the sequence limit while the account limit binds — nothing changes; raise the right cap.
- Confusing **Max new daily contacts** (contacts starting Step 1) with **Max number of emails per day** (messages) — and forgetting the contacts limit overrides the emails limit.
- Setting the per-email delay too low — 120-180 seconds is the recommended floor to avoid provider blocks.
## Related
- [Limits](/reference/limits) — the full limits table
- [Mailbox selection](/behavior/mailbox-selection)
- [When Reply sends](/behavior/sending-schedules)
- [Why was an email not sent?](/troubleshooting/email-was-not-sent)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence settings and account limits
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents read and set limits
---
# Import contacts
> Bring a CSV into Reply — file requirements, field mapping, the contact identifier, matched-records and no-email options, and the Imported, Updated, Skipped, and Import Errors results.
**Upload a CSV UTF-8 file of up to 10,000 rows in the People tab of a sequence or on the People page, map columns to Reply fields, choose the contact identifier that prevents duplicates, and set matched-records and no-email options. Reply then reports Imported, Updated, Skipped, and Import Errors counts, with a downloadable result file.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
CSV rows become deduplicated [contacts](/specifications/contacts) in a sequence or on a
[list](/specifications/lists), with a clear report of what was created, updated, skipped,
and rejected.
## Preconditions
A **CSV UTF-8** (comma-separated) file — xlsx or any other format will not work — with up
to 10,000 rows. The First Name field must not be empty, and numeric fields such as Phone
must contain only digits (no symbols, no spaces).
## Steps
1. Open the sequence's **People** tab and click **Import from CSV** (or **Add Contacts**). Imported prospects are added both to the sequence and to Reply's contact list. To import outside a sequence, run the import into a list from the People page.
2. Upload the file from your computer or drag it into the window.
3. Map the columns in the file to Reply fields; map extras to custom fields rather than dropping them. Columns whose name contains "linkedin" or "LI", or whose values look like LinkedIn URLs, are auto-mapped to the **LinkedIn profile** field — you can override the mapping from the dropdown.
4. Choose the contact identifier in the drop-down menu. A unique identifier (such as Email, Last Name, or Phone) becomes the distinguishing key for each contact and prevents duplicates; once it is chosen, other fields become optional.
5. Select the import options: the destination contact list; **Matched Records** — **Update Missing Fields** (write new CSV data into existing contacts) or **Skip** (leave existing contacts untouched); **Records Without Emails** — **Add Generated Emails** (a placeholder genmail.com address; these contacts are skipped for email sequences but work with SMS, WhatsApp, calls, and LinkedIn steps) or **Skip**; and optionally **Detect contact time zone automatically**, which uses city/state and country data and may extend the import by up to 30 minutes.
6. Start the import and keep working — a notification reports the results when it finishes.
> To add a single person instead, open the People page, click **New Contact**, choose
> **Create manually**, and fill in the fields — Email and First Name are mandatory.
> Accounts (companies) have their own CSV import under People → Accounts → **New account**,
> with the same 10,000-row cap and the Account name mandatory for mapping.
## Expected result
The import notification breaks down four statuses:
- **Imported** — new contacts added to your account.
- **Updated** — existing contacts whose profiles were updated.
- **Skipped** — duplicates the system removed during the import.
- **Import Errors** — rows that failed due to missing mandatory fields or incorrect formats (for example, symbols in the Phone field).
If the reason is unclear, download the full import result file and check the details.
## Verification
The list or sequence holds roughly the CSV row count minus skips and errors; spot-check a
few records for correct field mapping. Re-running the same import should report Updated or
Skipped rows, not new Imported ones — that is the
[deduplication rule](/behavior/contact-deduplication) working.
## What happens next
Not every imported contact necessarily lands in the sequence — contacts already in one of
your current sequences may stay out. To move all of them: import into a dedicated list,
open it, select **All in list**, and click **Move to sequence**; or filter the People page
by the Import File Name smart filter and move the results. Then
[launch the sequence](/how-to/launch-a-sequence) — enrollment runs its own checks per
[contact enrollment](/behavior/contact-enrollment).
## Common mistakes
- Uploading xlsx or another non-CSV format — only CSV UTF-8 imports.
- Leaving First Name empty or putting symbols in numeric fields — those rows become Import Errors.
- Expecting every CSV row in the sequence when some contacts already sit in other sequences — move them explicitly via a list or the Import File Name smart filter.
## Related
- [Contacts](/specifications/contacts) · [Lists](/specifications/lists)
- [Manage duplicate contacts](/how-to/manage-duplicates)
- [Contact deduplication](/behavior/contact-deduplication)
- [Build a prospect list](/workflows/build-a-prospect-list)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact and import endpoints
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted imports
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the `audience-building` skill
---
# Connect a LinkedIn account
> Connect LinkedIn to Reply by session cookie via the Findy extension, by credentials with an optional 2FA shared secret, or by an invite link for profiles you cannot log into.
**Add the account under Settings → LinkedIn Accounts using one of three methods, a session cookie captured by the Findy Chrome extension, your LinkedIn credentials with an optional 2FA shared secret that also enables automatic reconnection, or an invite link the profile owner authorizes. A LinkedIn seat on the subscription is required; the toggle turns green when connected.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
A LinkedIn account listed under Settings → LinkedIn Accounts with a green toggle — ready
to be assigned to [sequences](/specifications/sequences) and to run automatic LinkedIn
steps. What the channel can do once connected is covered in
[LinkedIn outreach](/capabilities/linkedin-outreach).
## Before you start
- Check your LinkedIn seat. Some Reply plans include LinkedIn accounts; on others, LinkedIn automation is added per account for an additional charge. Settings → Plans & Billing → Subscription shows included and used seats. A new LinkedIn account is added after successful payment, and for team members the charge goes to the Team Owner's payment method.
- For the cookie method: be logged into LinkedIn in the same browser you use for Reply, and install the Findy Chrome extension.
- Use the LinkedIn account from one device and location — switching devices or locations interrupts automation. If you run multiple LinkedIn accounts, keep each signed in from its own Chrome browser profile.
- Set LinkedIn's site language to English — Reply's LinkedIn automation is fully supported only in English (LinkedIn Settings & Privacy → Site Preferences → Site Language).
## Steps
### Add with cookies
1. Go to Settings → LinkedIn Accounts → New LinkedIn account and select Add with cookies.
2. Install the Findy extension and let it initialize, then sign in to it.
3. Log in to LinkedIn in a separate tab if you are not already.
4. Return to Reply — the extension adds the session cookie automatically.
5. Click Connect.
### Add with credentials
1. Go to Settings → LinkedIn Accounts → New LinkedIn account and select Add with credentials.
2. Enter the email address and password of the LinkedIn account.
3. Where the option is offered, add your 2FA shared secret — the setup key LinkedIn shows when you enable two-step verification with an authenticator app. With it saved, Reply passes authenticator checks for you and can reconnect the account automatically later.
4. Click Login and complete any verification LinkedIn requests — a code by SMS or email, an authenticator code, an in-app confirmation, or a CAPTCHA.
### Add with an invite link
1. Go to Settings → LinkedIn Accounts → New LinkedIn account and select Add with invite link. This suits organization accounts or client profiles you cannot log into — no passwords change hands.
2. Enter a name for the account and click Create.
3. Copy the link and send it to the person who owns the profile.
4. They enter their login details (optionally including the 2FA shared secret) on the connection page and complete any LinkedIn verification. The link is valid for 7 days; the account shows Pending until authorized.
## Expected result
The account appears on the LinkedIn Accounts page with a green toggle. Green means
connected, red means disconnected. For cookie connections, Reply refreshes the session
cookie automatically — the cookie field staying empty is expected.
## Verify
Open a sequence's settings and assign the LinkedIn account, then add an automatic
LinkedIn step — for example a Connect step (a note up to 300 characters) or a Message
step (up to 8,000 characters, delivered only to 1st-degree connections). If the account is
selectable in sequence settings and the step saves, the connection works. Step-by-step
rules and per-action caps live in [LinkedIn limits](/behavior/linkedin-limits).
## If it doesn't work
- Toggle gray or red: turn it on and refresh the page; for cookie accounts click Refresh to update the session cookie manually.
- Frequent disconnects usually trace to a logged-out LinkedIn session (including cleared browser cache or cookies), several LinkedIn accounts sharing one browser profile, or sign-ins from multiple devices or locations. For a more stable connection, reconnect via credentials or an invite link instead of a cookie.
- To reconnect a cookie account: open Findy settings → Automatic session cookie → Go to Reply → Refresh, then make sure the toggle turns green. For credential or invite-link accounts: LinkedIn Accounts page → the three dots next to the account → Reconnect, and re-enter credentials. Reconnecting updates the existing connection — statistics and sequence assignments are kept. Afterward, relaunch the sequence by turning its toggle off and on.
- With a saved 2FA shared secret, Reply reconnects a dropped session automatically (including Sales Navigator) — you are not asked for a code. Without it, the account is marked disconnected and you get a notification to reconnect manually. The same happens when LinkedIn demands a verification Reply cannot pass, such as an in-app confirmation.
- Removing an account: hover it on the LinkedIn Accounts tab and hit the Remove icon. Contacts sitting on a LinkedIn step of a sequence that used this account skip that step and move on automatically. Check Plans & Billing afterward to confirm the seat change.
- Steps failing after a successful connection is a different problem — see [Why do LinkedIn steps fail](/troubleshooting/linkedin-steps-fail).
## Related
- [LinkedIn outreach](/capabilities/linkedin-outreach) — the nine automated action types
- [LinkedIn limits](/behavior/linkedin-limits) — per-account safety caps
- [Run multichannel outreach](/workflows/run-multichannel-outreach) — combining LinkedIn with email
- [Why do LinkedIn steps fail](/troubleshooting/linkedin-steps-fail)
## Do this via API instead
Connecting a LinkedIn account is interactive by design — it needs a live browser session,
credentials, or the profile owner's authorization, so the connection itself happens in the
product UI. Once connected, agents can work with the account over MCP at the capability
level: list connected accounts with status and health, enable or disable an account,
remove one, adjust its safety limits, and assign it to sequences. Entry points:
[agents.reply.io/mcp](https://agents.reply.io/mcp).
---
# Set up DNS for sending
> Configure MX, SPF, DKIM, and DMARC at your DNS host for any mail provider and registrar combination, then confirm the records with Reply's domain Health Checker.
**Test the domain first, then add the records at your DNS host, MX values from your mail provider, one SPF TXT record within 10 DNS lookups listing every sending server, the DKIM key your mail provider issues, and a DMARC policy starting at p=none. Reply's Health Checker then verifies SPF, DKIM, DMARC, domain age, MX, A records, and rDNS.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
A sending domain that passes authentication: MX records that receive mail, one valid SPF
record, a DKIM signature, and a DMARC policy — all green in Reply's Email Health Checker.
Authentication is mandatory territory: mail providers reject or spam-folder
unauthenticated email, and the Gmail and Yahoo sender requirements introduced in 2024 make
it explicit. What each record proves is explained in
[SPF, DKIM, DMARC](/learn/spf-dkim-dmarc).
## Before you start
- Know your two providers apart: the **mail provider** runs the mailboxes (Google Workspace, Office 365, Zoho, GoDaddy Mail, Namecheap Mail); the **hosting provider / registrar** holds the DNS (Namecheap, GoDaddy, IONOS, OVH, Cloudflare). Some companies do both. Records are always *added* at the DNS host, but the *values* come from the mail provider.
- Reply is not an email service provider — it does not issue SPF or DKIM values. Get them from your mail provider.
- These are domain-level settings: they propagate to every mailbox on the domain.
- If you lack DNS access or confidence, hand this page to your IT person, or ask your hosting or mail provider's support — they configure these records routinely.
## Where the records live: provider × registrar
| Mail provider (where the values come from) | GoDaddy | Namecheap | Any other DNS host |
| --- | --- | --- | --- |
| **Google Workspace** — DKIM from the Admin Panel's Gmail authenticate-email page; SPF include for Google's servers | Domain Portfolio → My Products → select the domain → DNS | Domain → Advanced settings / Advanced DNS; MX under Mail settings → Custom MX | Domains → select the domain → Manage DNS / DNS zone editor |
| **Office 365** — MX, SPF, and DKIM values from the Microsoft 365 admin center (Show all → Settings → Domains); the admin center can identify your hosting provider and walk the verification step-by-step | Domain Portfolio → My Products → select the domain → DNS | Advanced settings → Mail settings → Custom MX; TXT records under Advanced DNS | Domains → select the domain → Manage DNS / DNS zone editor |
| **Any other mail provider** — request SPF and DKIM values from the provider's support; published guides exist for Zoho, IONOS, Namecheap, Rackspace, and Fastmail | Domain Portfolio → My Products → select the domain → DNS | Advanced settings / Advanced DNS | Domains → select the domain → Manage DNS / DNS zone editor |
Most hosting sites follow the same structure — Domains → select a domain → Manage DNS or
DNS zone editor → add the record — so the generic path covers registrars not named here.
## Steps
1. Test the domain before touching anything: Mail-tester (the "You are (not) fully authenticated" section), EmailStuff, or Dmarcian show what already passes. In Reply, the Domain Setup tab of the email account shows the same picture.
2. Set the MX records with the values your mail provider publishes. The common failures: records absent, records still pointing at an old mail provider after a switch, or records mixing two providers. When switching providers, delete the old MX records — otherwise incoming mail breaks. If you use a spam-filtering service such as Proofpoint or Mimecast, your MX records point to it by design.
3. Add the SPF record as one TXT record. The rules: correct syntax, exactly one SPF record per domain, no more than 10 DNS lookups, and every server or tool that sends on behalf of the domain included. Multiple SPF records cause checks to fail — consolidate into one line.
4. Add the DKIM record. DKIM is a key pair: the private half stays with your mail provider, the public half goes into your DNS as a TXT record. Google Workspace issues it in the Admin Panel; Office 365 in the admin center; other providers via their support.
5. Add a DMARC record. Start soft and tighten as you validate your sending sources: `p=none`, then `p=quarantine`, then `p=reject`. Do not jump to a strict policy until every legitimate sending server is covered by SPF and DKIM — otherwise mail from unauthenticated servers gets quarantined or rejected.
6. A and rDNS records: Google Workspace, Office 365, and other major providers have these preset. Only self-hosted mail servers need to verify them.
7. Re-test with the same tools, then re-run Reply's Health Checker.
Reference shapes for the three authentication records:
```text
SPF v=spf1 mx include:_spf.google.com ip4:65.254.224.19 -all
DKIM v=DKIM1; k=rsa; p=
DMARC v=DMARC1; p=none; pct=100; rua=mailto:reports@yourdomain.com
```
DMARC policy options:
| Policy | Type | Effect on mail that fails SPF/DKIM |
| --- | --- | --- |
| `p=none` | Soft | Delivered anyway — monitoring only, no spoofing protection |
| `p=quarantine` | Strict | Sent to spam |
| `p=reject` | Strict | Rejected outright |
## Expected result
MX lookups resolve to the current mail provider, one SPF record passes within the lookup
budget, DKIM verifies, and DMARC publishes a policy. A test email from an outside address
arrives in the domain's inbox (proving MX), and authentication testers report the domain
fully authenticated.
## Verify
Reply verifies the domain itself: open Settings → Email Accounts, click the domain, and
check the **Domain Setup** tab. The Email Health Checker tests SPF, DKIM, DMARC, domain
age, MX records, A records, and rDNS; every failing check expands into details and a fix
path. After fixing records, re-run the check — fixed several domains at once, retest them
in bulk. Once a domain passes cleanly, Reply stops re-checking it automatically, so re-run
the check yourself after any later DNS change.
## If it doesn't work
- Multiple SPF records — merge them into a single TXT record; more than one fails the check.
- SPF exceeds 10 DNS lookups — flatten includes or remove tools that no longer send for the domain.
- No incoming mail — MX records absent or still routing to the previous provider; remove stale records and add the current provider's values.
- DKIM missing — Reply cannot issue it; get the public key from the mail provider (Admin Panel for Google Workspace, admin center for Office 365, support for others).
- Deliverability dropped after tightening DMARC — a strict policy is punishing senders not covered by SPF and DKIM; fall back to `p=none`, authenticate every source, then tighten again.
- Domain age is red — it cannot be fixed by DNS; a young domain needs warm-up time instead — see [Warm up new mailboxes and domains](/workflows/warm-up-new-mailboxes).
- Still stuck — your hosting or mail provider's support configures these records daily; that escalation is the documented path.
## Related
- [SPF, DKIM, DMARC](/learn/spf-dkim-dmarc) — the mechanism behind each record
- [Email deliverability](/learn/email-deliverability) — where authentication fits among filtering signals
- [Deliverability](/capabilities/deliverability) — the Health Checker in the full protective stack
- [Warm up new mailboxes and domains](/workflows/warm-up-new-mailboxes) — the step that follows DNS
- [Connect a mailbox](/how-to/connect-a-mailbox)
## Do this via API instead
DNS records are edited at your domain host, outside Reply — there is no Reply API that
writes them. What agents can do is read the Reply side: email account details, settings,
and connection state over the REST API and MCP, to confirm which accounts and domains need
attention. Entry points: [docs.reply.io](https://docs.reply.io/api-reference/introduction)
and [agents.reply.io/mcp](https://agents.reply.io/mcp).
---
# Create a sequence
> Build a sequence in the Reply app — creation options, step types, delays, variables, A/B variants, and the Settings tab with accounts, schedule, and replies handling.
**On the Sequences page choose From Template, From Scratch, From Magic, or Jason AI SDR. Add contacts, then build steps: email, call, SMS, WhatsApp, LinkedIn, Zapier, task, or condition, each with its own delay. Finish in the Settings tab with email accounts, general limits, a schedule, and replies handling, then save or launch.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
A sequence with steps, delays, an assigned email account, and a schedule — ready to
launch.
## Preconditions
- A connected email account is mandatory for launching email campaigns, though not for creating the sequence — see [Connect a mailbox](/how-to/connect-a-mailbox).
- Contacts to enroll, or a plan to add them later — see [Import contacts](/how-to/import-contacts). Call and SMS steps need valid phone numbers; LinkedIn steps need the contact's LinkedIn URL.
## Required permission
A workspace user who can create sequences. Exact roles: [Permissions](/reference/permissions).
## Steps
1. Open the **Sequences** tab and create a new sequence. Four options: **From Template** (Reply's and your team's templates), **From Scratch** (complete control), **From Magic** (AI shapes the sequence from your prompt), or **Jason AI SDR** (AI builds the campaign from your business and offer — available on AI SDR plans; see [AI SDR](/capabilities/ai-sdr)).
2. Add contacts: **Import from CSV**, **Add from existing**, **Create manually**, or **Set up integration** to bring contacts in from your CRM or other tools.
3. Add steps in any combination: Email (automatic and manual), Call, SMS, WhatsApp, LinkedIn (automatic and manual), Zapier, Task, or Condition — plus **Action (Move to sequence)** to route contacts to another sequence and **Merge** to join a branch back to a chosen step. Steps can be reordered by drag-and-drop, cloned, or deleted.
4. For Email steps, set a subject line on Step 1 and leave the subject empty from Step 2 onward to keep all emails in the same thread.
5. Set step delays: on the **Steps** tab, click the arrow near the step, edit the Days/hours/minutes values, and save. One day of delay equals 24 hours, and weekends are included in the count. New steps come pre-filled with a default delay based on their position — 0, 2, 4, 7, 9, then 11 days.
6. Personalize with variables such as {{FirstName}} or {{Company}}: click the Variables icon in the step editor, choose the variable type, and insert it. If the sequence has no contacts yet, the preview is populated with the first contact from the People page (alphabetically).
7. Add A/B variants where useful: on the **Steps** tab, click **Add Variant**, paste the alternative subject or body, and save. Distribution between variants is random, and variants can be cloned, edited, paused, resumed, or removed.
8. Finish in the **Settings** tab: connect mailboxes (and a LinkedIn account) in the Account section, set the general limits — see [Configure sending limits](/how-to/configure-sending-limits) — pick or create a [schedule](/specifications/schedules), and choose replies handling: **Mark as finished** stops follow-ups after a reply, **Continue sending emails** sends the remaining follow-ups.
9. Save the changes, or launch the campaign right away. A saved, unlaunched sequence shows a gray (Inactive) toggle and sends nothing.
> Deliverability defaults for new sequences: plain text mode is enabled, removing HTML
> formatting, images, and tracking links; opens tracking and link tracking are disabled
> until you turn them on.
## Expected result
The sequence appears in the sequence list with a gray Inactive toggle and the configured
steps, delays, and settings.
## Verification
Open the sequence: every step shows its content and delay, the email account is attached
in Settings, and the schedule is selected. Preview a message to confirm variables resolve
with real contact data.
## What happens next
Enroll contacts and launch — see [Launch a sequence](/how-to/launch-a-sequence); sending
follows [Sequence execution](/behavior/sequence-execution). If the sequence performs well,
save it for reuse: on the Sequences page, open the sequence's three-dot menu, click
**Save as template**, and name it — it appears later under **From Template** in Team
templates.
## Common mistakes
- Filling in the subject line on follow-up steps — that starts a new thread; leave it empty from Step 2 onward.
- Editing a step delay and expecting contacts already on that step to pick it up — they ignore the new delay.
- On an active sequence with contacts in progress, trying to add a step before Step 1 — only appending steps at the end is available.
## Related
- [Sequences](/specifications/sequences)
- [Sequence steps](/specifications/sequence-steps)
- [Launch a sequence](/how-to/launch-a-sequence)
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — create sequences programmatically
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents create and configure sequences
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the `campaign-launch` skill covers this flow end to end
---
# Launch a sequence
> Go live — check messages in Preview, send a test email, start the sequence with its toggle, read the toggle colors, and watch progress and logs in the first window.
**Check every step in Preview, send a test email to yourself from the step editor, then start the sequence with its toggle. The toggle turns green while the sequence runs; red, orange, or yellow flag problems and limits. Watch contact progress in the People and Steps tabs and check the Logs tab for errors.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
The sequence toggle turns green (Active), contacts start moving through Step 1, and you
know where to watch for problems.
## Preconditions
A [created sequence](/how-to/create-a-sequence) with steps, a connected email account, an
attached schedule, and enrolled contacts — a missing account, schedule, or contact list
turns the toggle red and blocks sending.
## Steps
1. Review messages in the **Preview** tab — it shows exactly how each template renders per recipient, and you can edit the text for individual contacts without changing the main sequence template. Preview works only for automatic email and LinkedIn steps; CC is not supported in customized emails, and if you customize one A/B variant, only the edited variant is sent.
2. Send a test email: open the step in the **Steps** tab, expand the drop-down list next to **Save**, choose **Send Test email**, and pick the email to send To and From. The opt-out link does not work in test emails — they carry no sequence or contact details.
3. Start the sequence with its toggle. The same toggle pauses it at any time, and hovering over it shows a tooltip with details on the current state.
4. Give it time: after "Sequence started" appears in the logs, wait around 30 minutes before checking results.
5. Watch progress: in the sequence's **People** tab, the Current step column shows the step each contact is waiting for (hover to see when the step delay ends); the **Steps** tab shows how many contacts are on each step, and a red badge counts contacts with missing data — click it to view them or use **Skip** to move them to the next step. Select **History** in the People tab to see how many contacts completed each step.
6. Watch the **Logs** tab. Before sending, Reply checks that the email account is linked and set up correctly, all prospects are active, the LinkedIn account is linked, and the selected schedule and follow-up schedule are valid — if a check fails, the sequence does not start and writes an error log.
### What the toggle colors mean
- **Green — Active**: the sequence is running (planning, checking conditions, sending emails, generating tasks, or executing LinkedIn actions).
- **Gray — Inactive**: newly created and not yet launched, paused, or archived.
- **Red — Action required**: missing or invalid settings — a removed or disconnected email or LinkedIn account, sending errors, no contacts, a missing schedule, or suspension at an 8% bounce rate. See [Bounce handling](/behavior/bounce-handling).
- **Orange — Issues detected**: some contacts lack an assigned sending or LinkedIn account, contacts are missing required data, a provider blocked sending from some accounts, or the sequence reached a 4% bounce rate.
- **Yellow — Limits reached**: the email account's daily limit, the sequence daily limit, the active contacts limit for the billing period, LinkedIn's weekly connection limit, or the provider's daily sending quota.
- **Blue — Completed**: all contacts finished the sequence; no active contacts left.
## Expected result
The toggle is green, the log records "Sequence started", and contact counts appear
against Step 1 in the Steps tab.
## Verification
Your test email arrived with variables filled; contact counts on the Steps tab advance
during the sending window; there is no red missing-data badge and no error entries in the
Logs tab.
## What happens next
Execution proceeds per [sequence execution](/behavior/sequence-execution) inside the
[schedule windows](/behavior/sending-schedules). Replies start flowing per
[reply detection](/behavior/reply-detection) — set up your
[reply routine](/how-to/process-replies) now, and read results in
[sequence reports](/how-to/read-sequence-reports).
## Common mistakes
- Launching outside the schedule window and concluding sending is broken — see [When Reply sends](/behavior/sending-schedules).
- Checking results seconds after launch — allow around 30 minutes after "Sequence started".
- Customizing one A/B variant in Preview without realizing the other variant will not be sent to that contact.
## Related
- [Create a sequence](/how-to/create-a-sequence)
- [Sequence stopping](/behavior/sequence-stopping) — every state the toggle can show
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign) — the full workflow
- [Why is a campaign not running?](/troubleshooting/campaign-is-not-running)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — push-to-sequence and start operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents enroll and start sequences
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — launch with confirmation guardrails
---
# Manage duplicate contacts
> Prevent and clean up duplicates — the contact identifier key at import, matched-records choices, account import modes including Duplicate, and the contact handling settings.
**Duplicates are prevented at import: the contact identifier you choose, such as Email, Last Name, or Phone, becomes the key, and matched rows are updated or skipped instead of doubled. Review Imported, Updated, Skipped, and Import Errors counts after each import, and use the account import modes and contact handling settings to control overwrites.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
One record per person, and imports that update rather than multiply.
## Preconditions
Understanding of the [deduplication rule](/behavior/contact-deduplication): the contact
identifier chosen at import — a unique field such as Email, Last Name, or Phone — is the
distinguishing key that prevents duplicates.
## Steps
1. At import, choose the contact identifier deliberately in the drop-down menu. Once a unique identifier is chosen, it keys every row against existing records and the other fields become optional.
2. Choose the **Matched Records** option: **Update Missing Fields** writes new data from the CSV into the existing contact's fields; **Skip** leaves the existing record untouched. Either way, a matched row never creates a second record.
3. After each import, read the result counts: **Skipped** rows are duplicates the system removed during the import; **Updated** rows are existing contacts whose profiles were refreshed. Download the full import result file when a count looks wrong.
4. For account (company) imports, pick one of four modes: **Overwrite existing fields**, **Update missing fields**, **Skip**, or **Duplicate** — the last one deliberately creates a copy of the account with the new data and leaves the original unchanged.
5. In **Settings**, open the **Contact handling** tab (Team Owner only) and set the enrichment behavior for when new information is found: **Keep existing data** preserves current information and skips conflicting new data; **Override with new data** replaces existing fields.
6. On team accounts, decide how shared people are handled: **Pause contact in all sequences on reply** pauses a replying contact everywhere, and **Pause all contacts from the same organization on reply** extends the pause to colleagues — Reply matches the organization by the Company field, falling back to Domain when Company is blank. Both apply to business domains only.
## Expected result
Searches for a person return one record; re-imports report updates and skips, not
creations, for known people. LinkedIn URL variants of one profile do not create duplicates
either — Reply normalizes them to one canonical form; see
[contact deduplication](/behavior/contact-deduplication).
## Verification
Re-run the same import: the summary shows **Updated** and **Skipped** rows and zero new
**Imported** ones.
## Common mistakes
- Expecting records with two different identifier values to merge — a person under two email addresses stays two records; automatic merging is not documented.
- Choosing the account **Duplicate** import mode when you meant **Update missing fields** — Duplicate creates a copy on purpose.
- Treating **Skipped** as an error — it is the dedup rule declining to double a known contact.
## Related
- [Contact deduplication](/behavior/contact-deduplication)
- [Import contacts](/how-to/import-contacts)
- [Contacts](/specifications/contacts)
- [Companies](/specifications/companies)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — create/update semantics and contact lookup
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents search and reconcile records
---
# Process replies
> The inbox routine — filter and correct AI-assigned categories, handle AI drafts, answer with canned responses, forward threads, and reply on behalf of teammates from one consolidated inbox.
**Open the Inbox from the main header, filter by Unread and by category, and work through threads: correct AI-assigned categories, review AI drafts, answer with canned responses or templates, and forward threads that belong to teammates. Replies always send from the email account that started the thread, and auto-replies stay hidden unless you display them.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
Every new reply triaged: categories accurate, questions answered, interested threads acted
on.
## Preconditions
Running sequences and the [inbox](/specifications/inbox) receiving threads. The
consolidated Inbox gathers threads from all sequences by all team members; it shows
replies that came from automatic and manual emails, and notifications also cover LinkedIn
messages.
## Steps
1. Open the **Inbox** from the main header menu — the counter next to the button shows unread messages. Threads list chronologically with the most recent replies on top.
2. Narrow the view: the main categories **Inbox**, **Unread**, and **AI draft** on the left panel combine with inbox categories, and the top filters cut by sequence, sending email, category, and time. The **All** switch in the upper left filters threads by the team member who started them (**All**, **My**, or a specific teammate).
3. Check the AI-assigned inbox categories — Interested, Not interested, Do not contact, Not now, Forwarded, and the Meeting intent subcategory — and correct mistakes: select the thread, click **Manually assign/reassign category**, pick the category, and click **Apply**. Only one inbox category can be assigned per thread (plus Meeting intent), and you can bulk-assign across selected threads.
4. Work the **AI draft** category — threads with replies generated by Jason AI. When a sequence's AI replies are set to save a draft, the draft opens with the thread so you can review and edit it before sending.
5. Answer each thread: click **Reply** (or **Reply all** when the message has CC recipients — the CC list is shown and editable before sending), write the response using templates and variables if useful, preview, and send. The reply always goes out from the email account that sent the original step and stays in the same thread — including when you answer on a teammate's behalf via the team-member switch.
6. Reuse good answers: type the response, right-click it, select **Save as Canned Response**, and name it. Insert saved responses from the note icon, by typing "/" in the reply field, or with CTRL + S on Windows / Command + S on Mac.
7. Forward when someone else should own the conversation: **Forward** at the end of the thread sends the entire conversation; **Forward** next to an individual reply sends only that message.
8. Find anything with the search bar — first or last name, the subject line, or the email address of the contact; fragments match at the beginning, middle, or end of the value.
> Auto-replies, out-of-office messages, and bounced emails are not displayed in the Inbox by
> default. To change that, open **Settings**, go to the **Emails** tab, and in the
> **Email Safety** section pick **Do not display**, **Display**, or **Display & mark as read**.
> Displayed auto-replies are not treated as real replies — the contact is not finished in
> the sequence.
## Expected result
Zero unread threads in the categories you act on; every Interested thread has an answer or
an owner; category labels match the conversations.
## Verification
The unread counters next to each category read zero, and spot-checked threads carry the
right category label.
## What happens next
Interested threads flow into your pipeline —
[Process positive replies](/workflows/process-positive-replies) covers routing;
[CRM sync](/workflows/sync-reply-with-a-crm) carries outcomes out. Replies also set
contact statuses per [reply detection](/behavior/reply-detection).
## Common mistakes
- Treating a displayed auto-reply or out-of-office as a real reply — Reply classifies them separately and the contact continues in the sequence; see [Reply detection](/behavior/reply-detection).
- Trying to stack several inbox categories on one thread — only one applies, plus the Meeting intent subcategory.
- Searching by a truncated subject — search matches only the visible part of the subject line.
## Related
- [Inbox](/specifications/inbox) · [Conversations](/specifications/conversations)
- [Reply management](/capabilities/reply-management)
- [Why was a reply not detected?](/troubleshooting/reply-was-not-detected)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — inbox endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents run this routine end to end
- Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — the `inbox-triage` skill
---
# Read sequence reports
> Where each number lives — the sequence Stats tab and its Brief and Detailed views, the Reports Emails dashboard, smart filters, and the CSV export options.
**Open a sequence's Stats tab for key metrics, the performance chart, and the Brief or Detailed step view with A/B variants, then use the Reports Emails dashboard for team, sequence, template, email account, and provider breakdowns. Filter with smart filters and export contact-based or sequence-based CSV files from the Export button.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Goal
Find the right report for the question you're asking — and click straight to it. This page
is the interface map; the decision workflow on top of these reports is
[Analyze campaign performance](/workflows/analyze-campaign-performance).
## Preconditions
Running sequences with some volume, and knowledge of which tracking is enabled — opens
tracking is disabled by default for new sequences, so zero opens can be by design.
## Steps
1. Open a sequence and go to the **Stats** tab. It shows the last 7 days by default; use the Time filter for Last Week, Last Month, Last Year, All Time, or a Custom date range.
2. Read the Key Metrics — Total people, Contacted, Delivery rate, Open rate, Reply rate, Interested, Opt-outs rate, and Not reached. Key metrics are prospect metrics: multiple emails to one contact count only once. Hover the info icon on a counter for its definition, and hover Not reached for the Out of Office, Bounced, and Auto reply breakdown.
3. Check the performance chart — Deliveries, Opens, Replies, Interested, and Meetings booked over time. Click **Opt outs** or **Bounced** in the chart legend to reveal those hidden series; their bars group by the date the email was sent, not the date the bounce or opt-out happened.
4. Switch the Detail View between **Brief** and **Detailed** for per-step metrics, and turn on the variants toggle to compare A/B performance per step. A step type icon next to each step row shows the step type on hover.
5. For account-wide analysis, open **Reports** and click the **Emails** dashboard. Filter by email accounts, domains, sequences (**No sequence** shows direct emails sent outside sequences), owners (Team Edition), and time. The data follows the timezone set in your account settings, and all metrics are tied to the date the emails were sent.
6. Add smart filters for narrow questions — country, state, city, industry, company, title, contact list, contact CSV file, email validation status, sequence step, email template, and more. Click **Save** in the smart filters panel to reuse the pattern later.
7. Read the detailed breakdown in five views — **Team**, **Sequences**, **Templates**, **Email accounts**, and **Contacts by providers** — sort by any column, and use the settings icon to reorder or hide columns. Click a sequence name to jump straight to its Stats tab.
8. Export: click **Export** and choose **Export contact CSV** (data per contact), **Export sequence CSV** (general stats per sequence), or **Export sequences with Trends CSV** (enable Trends in the smart filters first). Download the file from the notification once the report is ready.
## Expected result
You can answer: is delivery healthy, which step loses people, which variant and template
win, which email account and provider deliver — each from the view built for that
question.
## Verification
Before comparing any two numbers, check their definitions — the counter tooltips,
[How statistics are calculated](/behavior/statistics-calculation), and
[Calculations](/reference/calculations). Delivery rate is calculated against Total people,
while open and reply rates are calculated against Contacted.
## What happens next
Turn readings into changes with
[Analyze campaign performance](/workflows/analyze-campaign-performance) — the decision
workflow on top of these reports.
## Common mistakes
- Comparing rates with different denominators — delivery rate is over Total people while reply rate is over Contacted; see [Statistics calculation](/behavior/statistics-calculation).
- Reading opens with opens tracking disabled — zero is by design, not a result.
- Expecting bounce and opt-out bars on the day the event happened — the chart groups them by the send date.
## Related
- [Campaign analytics](/capabilities/campaign-analytics)
- [How statistics are calculated](/behavior/statistics-calculation)
- [Why do statistics not match?](/troubleshooting/statistics-do-not-match)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — statistics and reporting endpoints
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — reports for scripts and agents
---
# Troubleshooting
> Symptom-first diagnosis — why an email did not send, a contact was not enrolled, a campaign is not running, a reply was not detected, and more.
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Each page starts from the symptom you observe, lists the likely causes in order of
frequency, and gives a diagnostic checklist that identifies the exact one — grounded in
Reply's product documentation, with the rule that explains the behavior linked at every
step.
## Sending
- [Why was an email not sent?](/troubleshooting/email-was-not-sent) — account, limits, schedule, contact state; the Log tab as the error surface
- [Why is a campaign not running?](/troubleshooting/campaign-is-not-running) — the toggle colors, provider blocks, the 8% bounce suspension
- [Why was a mailbox disconnected?](/troubleshooting/mailbox-was-disconnected) — expired tokens, revoked access, provider suspensions
## Contacts and replies
- [Why was a contact not enrolled?](/troubleshooting/contact-was-not-enrolled) — import skips, Opted Out, keep-in-sequence options
- [Why was a reply not detected?](/troubleshooting/reply-was-not-detected) — the 3-4 hour window, folder and address matching
- [Why do statistics not match?](/troubleshooting/statistics-do-not-match) — denominators, time filters, tracking gaps
## Planned
| Page | Status |
| --- | --- |
| Automatic reply was counted | Not written |
| Contact was duplicated | Not written |
| Contact remained active after reply | Not written |
| Daily limit was not reached | Not written |
| Webhook was not received | Not written |
## Related
- [Behavior](/behavior) — the intended behavior behind each symptom
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the state-inspection endpoints used in these checklists
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents run the same diagnostics
---
# Why was an email not sent?
> A due email did not go out — the four cause groups (account, limits, schedule, contact state), the Log tab as the error surface, and how to confirm the fix.
**Most non-sends trace to four cause groups: a disconnected email account, a reached limit (account daily, sequence daily, or the trial's 300 unique contacts), a closed schedule window, or a contact who is not Active. Check the sequence Logs tab first — it names the exact error — then the connection dot, today's limits, and the schedule.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Symptom
A step you expected to send has not. The contact sits on the step, the stats do not move,
and there is no obvious error in sight. Most of these causes are temporary, and each one
leaves a trace you can find.
## Most likely causes
| # | Cause | Where it shows |
| --- | --- | --- |
| 1 | The email account is disconnected — sending needs a well-connected mailbox (green dot next to the email) | Red dot in the sequence settings tab; `Email account disconnected` in the Log tab — see [Why was a mailbox disconnected?](/troubleshooting/mailbox-was-disconnected) |
| 2 | A limit is reached — the account's **Total number of emails** (400 per day on paid plans, 200 on trial), the sequence's **Max number of emails per day**, or the trial's 300-unique-contact limit | `Processing error: Max emails per account` or `Processing error: Max unique contacts per month` in the Log tab; a notification when you hover over the toggle — [Limits](/reference/limits) |
| 3 | The schedule window is closed — the sequence sends only within working schedule hours, and schedules run on UTC without Daylight Saving Time | The schedule linked to the sequence — [When Reply sends](/behavior/sending-schedules) |
| 4 | The contact is excluded — the system sends only to **Active contacts with valid emails**; Paused and Finished contacts get nothing, and contacts can also sit in a step delay or throttling | The contact's status and current step in the People tab — [Statuses](/reference/statuses) |
| 5 | Contacts have no sending email assigned — after deleting an active sending email or swapping accounts, its contacts are not reassigned automatically | An error notification over the sequence toggle — [Mailbox selection](/behavior/mailbox-selection) |
| 6 | The sending step stopped because the sequence reached an 8% bounce rate with 200 or more emails sent that day | Red toggle; the step resumes the next day — [Bounce handling](/behavior/bounce-handling) |
## Diagnostic checklist
1. Open the sequence's **Logs** tab first. Before sending, Reply checks that the email account is linked and set up correctly, prospects are active, the LinkedIn account is linked, and the selected and follow-up schedules are valid — if any check fails, the sequence does not start and writes an error log naming the problem.
2. Check the connection dot next to each sending mailbox in the sequence settings tab: green means connected, red means reconnect.
3. Compare today's counts against every limit: the account's **Total number of emails** (Settings, Email Accounts, mailbox, Safety), the sequence limit shown in sequence settings and next to the toggle, and — on trial — the 300 unique contacts cap shown when you hover over the toggle.
4. Confirm the schedule linked to the sequence is open right now, in its sending timezone. If it is closed, sending waits until it opens the next day.
5. Open the specific contact: status must be Active with a valid email, an assigned sending email, and no pending step delay or throttling.
6. Mind the timing: after a first launch it can take 20-40 minutes to start sending even when everything is set. Reply processes sequences every 10 minutes; if a processing run hits errors, emails wait for the next run.
## Resolution
Disconnected account — [reconnect it](/troubleshooting/mailbox-was-disconnected), then
restart the sequence. Limit reached — raise the cap deliberately (account Safety settings
or sequence settings) or wait for the daily reset; see
[Configure sending limits](/how-to/configure-sending-limits). Closed schedule — update it
or wait until it opens the next day. Excluded contact — usually correct behavior, not a
bug; reactivate only if you mean to (People tab, Change Status, add Active). Unassigned
contacts — filter the People tab for Unassigned and link a sending email. Bounce-rate
stop — the step resumes automatically the next day; validate your list to keep it from
repeating.
## Verification
After the fix, let the next processing run pick the sequence up — runs happen every 10
minutes, and a first launch can take 20-40 minutes before emails go out. Then check the
Log tab for a fresh `Sequence started` entry (the log itself advises waiting about 30
minutes before checking results) and confirm the send in the contact's activity.
## Prevention
Turn on **Send reports on sequence errors** (Settings, Emails, Email notifications): Reply
then emails you about errors such as "Daily limit per sequence reached", "Daily limit per
email account reached", "Monthly limit for unique contacts reached", "No email account
connected to an active sequence", "Invalid email account credentials", "SMTP/IMAP errors",
and empty contact fields used as template variables. Keep a delivery window of at least
2.5-4 hours so all emails have time to send, and validate lists before launch to stay
clear of the bounce thresholds.
## FAQ
### How long after launch should the first email go out?
Allow 20-40 minutes after a first launch. Reply processes sequences every 10 minutes in
two stages — a checkup of settings and inbox replies (up to 20 minutes), then the actual
sending (around 20 minutes). If the checkup finds errors, sending waits for the next
processing run.
### The step sent for some contacts but not others — why?
Per-contact state is the usual reason: the system sends only to Active contacts with valid
emails, so Paused, Finished, or bounced contacts are excluded while the rest proceed. Some
contacts may also still be in a step delay or throttling. Check each missing contact
against [Statuses](/reference/statuses).
### The email shows sent but never arrived — same problem?
No — that is delivery, not sending. Check the spam folder, the recipient address, and the
Delivery Status Notification in the sending mailbox, and confirm your authentication setup
([SPF, DKIM, DMARC](/learn/spf-dkim-dmarc)). See [Deliverability](/capabilities/deliverability).
## Related
- [Why is a campaign not running?](/troubleshooting/campaign-is-not-running) — the sequence-level variant
- [When Reply sends](/behavior/sending-schedules) — schedule windows and timezones
- [Sequence execution](/behavior/sequence-execution) — throttling and step delays
- [Bounce handling](/behavior/bounce-handling) — the 4% and 8% thresholds
- [Limits](/reference/limits)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — inspect sequence, account, and contact state
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — includes a diagnose operation for exactly this class of question
---
# Why is a campaign not running?
> The sequence toggle is the diagnosis — what gray, red, orange, yellow, and blue mean, the 24-hour auto-stop for blocked accounts, and the 8% bounce suspension.
**Read the sequence toggle first: gray means never launched, paused, or archived; red means action required; orange means warnings; yellow means a limit was reached; blue means every contact finished. Then check for a provider block on a sending account — a 24-hour auto-stop — and for the 8% bounce-rate suspension.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Symptom
The sequence ("campaign" — the [former name](/specifications/campaigns)) looks like it
should be running, but deliveries are flat and contacts do not advance. The fastest
diagnosis is the sequence toggle: its color reports the current state, and hovering over
it shows a tooltip with details.
## Most likely causes
| Toggle | State | What it means |
| --- | --- | --- |
| **Gray** | Inactive | The sequence is not running: newly created and never launched, paused, or archived |
| **Red** | Action required | Missing or invalid settings block the run: the sending email account was removed or disconnected, the connected LinkedIn account was removed, there are sending errors, there are no contacts in the sequence, the sending schedule is missing, or the sequence is under review and suspended after reaching an 8% bounce rate |
| **Orange** | Issues detected | Attention needed: some contacts have no sending email account assigned, some have no LinkedIn account assigned, contacts are missing required data, sending from some email accounts stopped due to a provider block, the sequence reached a 4% bounce rate, or a voice profile is missing |
| **Yellow** | Limits reached | Temporarily paused: the email account's daily sending limit, the active contacts limit for the billing period, the sequence daily limit, LinkedIn's weekly connection request limit, or the provider's daily sending quota was reached |
| **Blue** | Completed | All contacts finished the sequence — there are no active contacts left. Completion, not failure |
| **Green** | Active | The sequence is running — planning, checking conditions, sending emails, generating tasks, or executing LinkedIn actions |
Two sequence-wide stops sit behind the colors. If a mail provider (Office 365 or Google
Workspace) blocks a sending account, Reply detects the first block bounces and immediately
pauses sending from that account for 24 hours or until you resume it manually — every
sequence sending from the suspended account shows a pop-up on its toggle. And per Reply's
Usage Policy, a sequence that reaches an **8% bounce rate per 24 hours** stops sending its
first step while follow-ups continue; see [Sequence stopping](/behavior/sequence-stopping).
## Diagnostic checklist
1. Hover over the toggle and read the tooltip — it names the state and the reason.
2. Gray toggle: the sequence was never launched, was paused, or was archived. Nothing is wrong; it is simply off.
3. Blue toggle: everyone finished, replied, or otherwise left the active pool. Add contacts or reactivate finished ones to continue.
4. Red or orange toggle: work through the causes in the table above, and open the **Logs** tab — an `Email account block` entry names the blocked account, and other error logs name the failing check.
5. Yellow toggle: identify which limit bound today — account daily, sequence daily, active contacts for the billing period, or a provider quota — and see [Limits](/reference/limits).
6. If bounces spiked, check the bounce rate: the toggle turns orange at 4% and red at 8% — see [Bounce handling](/behavior/bounce-handling).
## Resolution
Gray — launch or resume the sequence. Red — fix the named blocker: reconnect or re-add the
email account ([reconnect guide](/troubleshooting/mailbox-was-disconnected)), add
contacts, or attach a schedule. Orange with unassigned contacts — filter the People tab
and link a sending email. Yellow — wait for the limit window to pass or raise the cap
deliberately. Provider block — unblock the account with the provider first, then click
**Resume** on the email account page in Reply, or wait for the automatic resume 24 hours
after the first block bounce; the system re-sends the bounced steps automatically once the
account resumes (or find them with the *Bounce: sender's provider block* filter and remove
the Bounced status manually). Finished contacts you want to re-run — open the People tab,
select them, click **Change Status**, add **Active**, and save; this works when steps
remain or you added new ones. The 8% bounce suspension clears itself: first-step sending
resumes automatically after 24 hours with the bounce rate reset.
## Verification
The toggle returns to green, and the Logs tab shows a fresh `Sequence started
(manual/auto)` entry — the log advises waiting about 30 minutes before checking results.
Confirm contacts advance in the People tab and deliveries resume in the Stats tab.
## Prevention
Validate contact lists before launching — the 8% bounce suspension is almost always a
list-quality problem, and Reply notifies you at half and at full bounce quota so you can
act early. Glance at toggle colors regularly rather than discovering a flat week later,
and keep sending volumes gradual so providers do not block the account; see
[Sender reputation](/learn/sender-reputation).
## FAQ
### The toggle is blue — is something broken?
No. Blue means all contacts finished the sequence and no active contacts remain. To
continue, add new contacts or reactivate finished ones via Change Status in the People
tab — possible when the contact did not complete all steps or you added extra steps.
### One mailbox stopped sending but the others continue — why?
The provider blocked that account, and Reply's auto-stop paused sending from it to prevent
a wave of bounces. It resumes automatically 24 hours after the first block bounce, or
manually via the Resume button once you unblock it with the provider. See
[Why was a mailbox disconnected?](/troubleshooting/mailbox-was-disconnected).
### My sequence was suspended for bounces — will it restart on its own?
Yes. At an 8% bounce rate per 24 hours, only the first step stops — follow-ups keep
sending — and first-step sending resumes automatically after 24 hours with the rate reset.
Validate your list, or the same suspension will repeat. See
[Bounce handling](/behavior/bounce-handling).
## Related
- [Why was an email not sent?](/troubleshooting/email-was-not-sent) — the per-message variant
- [Sequence stopping](/behavior/sequence-stopping) — every stop condition and toggle state
- [Sequence execution](/behavior/sequence-execution)
- [Statuses](/reference/statuses)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence status and account state
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents diagnose and fix (reconnect, resume, enroll)
---
# Why was a mailbox disconnected?
> An email account dropped its connection — expired connection tokens, revoked access, missing Gmail sending permission, and provider suspensions, with the reconnect path for each.
**A mailbox disconnects when its connection token expires — after security updates, account-setting changes, or a provider forcing re-authorization — when Reply's access is revoked at the provider, or when the provider blocks the account. Check the dot next to the account in Settings, then reconnect; manual SMTP/IMAP accounts must be removed and added back.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Symptom
An [email account](/specifications/email-accounts) no longer shows a green dot, sequences
sending from it stall, and Reply cannot send emails or check the mailbox for replies.
Reply notifies you in three places: an email with the steps to fix it, an entry in the
sequence log, and a changed color on the sequence toggle.
## Most likely causes
| # | Cause |
| --- | --- |
| 1 | The connection token expired — the token that links Reply to your email account can expire after security updates, changes in your email account settings, or when the email provider requires a re-authorization |
| 2 | Reply's access was revoked at the provider — for Google accounts, removing Reply under **Your connections to third-party apps & services** disconnects the mailbox and pauses your outreach |
| 3 | A Gmail account was reconnected without sending permission — Google no longer pre-selects it, so the sending checkbox must be ticked manually during the reconnect |
| 4 | The provider suspended the account — Google Workspace and Office 365 block accounts for activity they consider suspicious: unusual sending volumes, recipients marking emails as spam, or your emails being categorized as spam |
## Diagnostic checklist
1. Open Settings, Email Accounts, and check the dot next to the mailbox: green means well-connected, red means it needs reconnecting.
2. Hover over the mailbox. A **Reconnect** icon means a single-click (provider-authorized) connection; no Reconnect icon means the mailbox was connected manually and must be removed and added back.
3. Check the provider side: can you log into the mailbox directly? For a Google account, open Manage your Google account, Security, **Your connections to third-party apps & services**, and confirm Reply still has access.
4. Look for bounce-back messages that indicate a block. Office 365's block bounce reads: *"Your message couldn't be delivered because you weren't recognized as a valid sender."* Google Workspace may instead lower your sending capacity to the minimum, which also bounces third-party sends.
5. Read the sequence Logs tab: `Email account disconnected` means the connection failed — check server settings, SSL, and ports in the email account settings — while `Email account block` names a provider-blocked account.
## Resolution
Single-click connections — hover over the mailbox in Settings, Email Accounts, click the
**Reconnect** icon, re-confirm the email, sign in, and grant Reply access to the mailbox.
Manually connected mailboxes (the Other Provider option) — remove the mailbox and add it
back from scratch; see [Connect a mailbox](/how-to/connect-a-mailbox).
Gmail — during the reconnect, tick the box next to **"Read, compose, send, and permanently
delete all your email from Gmail."** before continuing. If the permission was skipped
earlier, remove all connections for the Reply app in your Google account first, then
reconnect from the Email Accounts page.
Google Workspace suspension — a fully blocked account must be restored by your Workspace
Admin; Reply has no access until then. If the provider only limited your sending capacity,
wait at least 24 hours, then lower sending volumes to the minimum in the account's Safety
settings for the next several days before slowly increasing them.
Office 365 block — unblock the account on the Restricted Users page of the Microsoft
security portal (or contact Office support), then use Ramp up mode and email delays in the
account's Safety settings so volumes grow gradually.
After any reconnect, restart the affected sequences by turning the toggle off and back on.
## Verification
A green dot next to the email account means it is well-connected and ready for sending.
Reconnected campaigns resume within 15-20 minutes according to your schedule. Your
account's historical data is not affected — all previous reports and statistics remain
accessible. After a provider block, the system automatically re-sends the bounced steps
once the account is resumed in Reply.
## Prevention
Do not remove Reply's access in the provider's third-party app settings — that
disconnects the mailbox immediately. Keep sending volumes gradual (Ramp up mode and
delays) so providers see nothing suspicious, and act on Reply's disconnect notifications —
the email, the sequence log entry, and the toggle color — before a full outage builds up.
See [Sender reputation](/learn/sender-reputation) and
[Email deliverability](/learn/email-deliverability).
## FAQ
### Do I lose statistics or history when I reconnect?
No. The email account's historical data is not affected by reconnection — you can access
and view all previous reports and statistics. Sequences resume within 15-20 minutes of the
reconnect, following their schedule.
### There is no Reconnect icon on my mailbox — why?
The mailbox was connected manually (the Other Provider option) rather than through a
single-click provider connection. Manual connections cannot be re-authorized in place:
remove the mailbox and add it back with the current credentials. See
[Connect a mailbox](/how-to/connect-a-mailbox).
### I reconnected my Gmail account but sending still fails — what now?
The sending permission was probably not granted. Remove all connections for the Reply app
in your Google account settings, reconnect from the Email Accounts page, and tick **"Read,
compose, send, and permanently delete all your email from Gmail."** on the permissions
screen before clicking Continue.
## Related
- [Email accounts](/specifications/email-accounts)
- [Connect a mailbox](/how-to/connect-a-mailbox)
- [Why is a campaign not running?](/troubleshooting/campaign-is-not-running) — the provider-block auto-stop
- [Why was a reply not detected?](/troubleshooting/reply-was-not-detected) — a disconnected mailbox also stops reply checking
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — email account endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents monitor account connectivity
---
# Why LinkedIn steps fail
> Diagnosing stalled LinkedIn sequence steps — an expired session cookie, a lapsed Sales Navigator subscription, missing profile URLs, daily and weekly limits, unassigned contacts, and missing voice profiles.
**LinkedIn steps usually stop for one of these reasons: an expired session cookie, a lapsed Sales Navigator subscription, contacts missing valid profile URLs, a daily or weekly action limit, contacts left unassigned after an account was removed, no LinkedIn account added to the sequence, or a missing voice profile. Hover over the sequence toggle to read the exact error.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Symptom
A sequence with LinkedIn steps stops or pauses: the sequence toggle shows an error
tooltip, LinkedIn steps are not executed, or specific contacts are skipped. LinkedIn
sequences may stop for several reasons — issues with the LinkedIn account, missing
contact information, LinkedIn limits, or sequence settings.
## Most likely causes
| # | Cause | Signal |
| --- | --- | --- |
| 1 | LinkedIn account is disconnected | Error tooltip when hovering over the sequence toggle — the session cookie has expired |
| 2 | Sales Navigator subscription disconnected | InMail steps are not sent; the account owner is notified by email |
| 3 | Contacts are missing data | Error: *Some of your contacts will not be processed as they have missing data.* |
| 4 | LinkedIn action limits reached | Daily limits set in Reply, or limits imposed by LinkedIn itself — for example, its weekly connection-request cap |
| 5 | Contacts not assigned to a LinkedIn account | The sending LinkedIn account was deleted or removed from the sequence |
| 6 | LinkedIn account not added to the sequence | The sequence cannot process LinkedIn steps at all |
| 7 | Missing AI voice profile | An AI voice message step has no voice profile linked to the LinkedIn account |
## Diagnostic checklist
1. Hover over the sequence toggle and read the tooltip — it names the error.
2. Check the account's status on the LinkedIn accounts page in Settings, or in the sequence settings.
3. For missing data: apply the *LinkedIn URL is not set* filter in the People tab. If a URL is present but the status persists, open the link and confirm the profile exists, hasn't been deleted, and is a personal profile — not a company page.
4. For limits: open your LinkedIn account in Settings to see the limits, then compare with today's action count in Reports → LinkedIn. Limits reset according to the UTC time zone.
5. For unassigned contacts: in the sequence's People tab, apply the *LinkedIn account is not set* filter.
6. Check the sequence Log tab for progress notifications, and the contact's Activity tab — skipped steps carry a note with a brief explanation of the reason.
## Resolution
**Disconnected account.** Reconnect the account on the LinkedIn accounts page in
Settings — see [Connect LinkedIn](/how-to/connect-linkedin). Cookies expire when you log
out of LinkedIn (clearing browser cache or cookies also logs you out), when multiple
LinkedIn accounts share one browser without separate profiles, or when you access the
account from multiple devices or locations. Reconnecting updates the existing connection:
the account keeps its statistics and sequence assignments.
**Sales Navigator disconnected.** Make sure the Sales Navigator subscription is active,
then reconnect the LinkedIn account. Reply emails the account owner when this issue is
detected, and a webhook notification is available for the event.
**Missing data.** Reimport the contacts and map the LinkedIn profile link field during
import, or update the LinkedIn field manually on each contact card. Once the LinkedIn
links are valid, the missing-data status is removed.
**Limits reached.** No intervention is required — the sequence automatically attempts new
LinkedIn steps the next day. You can adjust the limits, but avoid increasing them too
much; see [How LinkedIn action limits work](/behavior/linkedin-limits). If the sequence
sends connection requests with a note from a free LinkedIn account, note that free
accounts can send only 3 personalized connection requests (with a note) per month —
remove the note to send requests without text, or upgrade the LinkedIn plan. If the
subscription wasn't detected correctly, reconnect the account.
**Unassigned contacts.** In the sequence's People tab, filter for *LinkedIn account is
not set*, select the contacts, click **Change sending LinkedIn account**, choose the
account, and apply. You can also enable the **Reassign LinkedIn accounts** setting
(Settings → Emails → Sequence LinkedIn accounts) so that when an account is removed, its
contacts are automatically reassigned to another available LinkedIn account.
**No account in the sequence.** Go to **Sequence settings → Add LinkedIn account** and
select the account to use.
**Missing voice profile.** Create a voice profile on the Voices tab in Settings and link
it to the LinkedIn account.
## Verification
After fixing the cause, relaunch the sequence by turning its toggle off and then on.
Then confirm:
- The sequence toggle no longer shows an error tooltip.
- The Log tab shows LinkedIn steps executing.
- The contact's Activity tab shows executed steps rather than skipped ones.
- Reports → LinkedIn counts today's actions.
- Connection requests progress through their statuses — filter the sequence's People tab by *LinkedIn Connection Status* to watch requests move from `Unchecked` to `Pending` or `Connected`.
## Prevention
- Keep each LinkedIn account signed in from its own browser or browser profile, and avoid logging out or clearing cookies.
- Map the LinkedIn profile URL field at import so contacts never enter the sequence without one.
- Use dynamic limit ranges and warm up gradually instead of maxing out limits — see [How LinkedIn action limits work](/behavior/linkedin-limits).
- Enable the Reassign LinkedIn accounts setting so removing an account does not strand its contacts.
- Expect some skips by design: a contact with the `Connection forbidden` status has restricted their account, and the system skips that connection step; a `Revoked` request cannot be re-sent to the same person for up to 3 weeks.
## FAQ
### Why were steps skipped for a contact who replied?
When a prospect responds to a LinkedIn message or connection request, they are
automatically marked as finished, subject to the sequence's replies-handling settings.
That is expected behavior, not an error — the contact's Activity tab shows each skipped
step with a note explaining the reason.
### Do other LinkedIn steps wait for the connection request to be accepted?
No. Automatic profile views, likes of recent posts, and InMail steps are carried out as
planned regardless of whether the connection request has been accepted. You can also
reply to contacts in your Inbox even if they haven't accepted your request, as long as
they responded to it.
### A connection shows as accepted by a different LinkedIn account — why?
When a Team has multiple LinkedIn accounts connected, an accepted request can be detected
from any of them: matching uses the Team's connected accounts plus the prospect's profile
URL. The same contact can therefore show multiple accepted-connection records in the
Activity Card, each labeled with the LinkedIn account it came from.
## Related
- [How LinkedIn action limits work](/behavior/linkedin-limits)
- [Connect LinkedIn](/how-to/connect-linkedin)
- [LinkedIn outreach](/capabilities/linkedin-outreach)
- [Sequence stopping](/behavior/sequence-stopping) — all the ways a sequence stops
- [Why is a campaign not running?](/troubleshooting/campaign-is-not-running)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — sequence and contact operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — LinkedIn account status, limits, and sequence health for agents
---
# Why was a contact not enrolled?
> A contact never made it into the sequence — import skips and errors, the Opted Out block, keep-in-sequence options, and the states that leave an enrolled contact idle.
**The import may have skipped the row (duplicate) or rejected it (missing First Name, bad numeric format), the contact may be Opted Out — the one status that blocks moving to another sequence — or they were left in their current sequences because no keep option was chosen. Check the import results notification first, then the contact's statuses.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Symptom
You imported, added, or moved a contact toward a sequence, but they do not appear in its
People tab — or they appear but never start. The checks that exclude contacts mostly run
silently, so the trail is in the import results, the contact's statuses, and the sequence
toggle.
## Most likely causes
| # | Cause | Where to see it |
| --- | --- | --- |
| 1 | The import skipped or rejected the row — **Skipped** are duplicates the system removed during the import; **Import Errors** are rows with missing mandatory fields (First Name is required) or incorrect formats, such as symbols in a numeric field | The import results notification and the full import result file |
| 2 | The contact has no email address and the import was set to **Skip** records without emails — or got a generated placeholder address, which email sequences skip | The import options chosen; the contact's email field |
| 3 | The contact is **Opted Out** — the only status retained outside sequences; a contact with it cannot be moved to a different sequence | The contact's statuses — [Statuses](/reference/statuses) |
| 4 | The contact stayed in their current sequence because no keep option was chosen — each add path has an explicit option for contacts already in a sequence | The add dialog — [Contact enrollment](/behavior/contact-enrollment) |
| 5 | Enrolled but idle: the contact has the **Missing data** status — an empty template variable, a missing or invalid LinkedIn URL, an invalid phone number, or an AI variable that includes an empty variable | Red toggle notification; the sequence Preview tab |
| 6 | Enrolled but idle: no sending email account is assigned to the contact | An error notification over the toggle — [Mailbox selection](/behavior/mailbox-selection) |
| 7 | Enrolled but paused: a team-level contact handling setting paused them after a reply in another sequence or from a colleague at the same organization | Settings, Contact handling — [Contact enrollment](/behavior/contact-enrollment) |
## Diagnostic checklist
1. Read the import results notification: Imported, Updated, Skipped, and Import Errors each count different outcomes. If unsure, upload the full import result file and check the per-row details.
2. Confirm the file met the requirements: CSV UTF-8 format, up to 10,000 rows, First Name filled, and digits only in numeric fields.
3. Search for the contact on the People page. If they exist, open their statuses — Opted Out blocks any move to another sequence.
4. Check whether they are in another sequence and which option was used: *Add to this one and keep in current* (CSV import), *Keep contacts in their current sequences and add to new one* (Add from existing), or the *Keep in other sequences* toggle (Move to sequence).
5. If the contact is in the sequence but idle, open the **Preview** tab and hover over the red icon to see which variable is missing; also filter the People tab for Unassigned to catch contacts without a sending email.
## Resolution
Import errors — fix the rows (fill First Name, strip symbols from numeric fields) and
re-import. Skipped duplicates — nothing to do; the contact already exists, and the
matched-records option you chose decided whether their profile was updated. Opted Out —
respect it; that is compliance working, and the status can only be removed manually and
deliberately. Wrong keep option — repeat the add with the keep-in-current option enabled;
a prospect can be part of several sequences for the same user at the same time. Missing
data — add the data to the contact's field, remove the variable from the step, fill the
field in the Preview tab, or upload a CSV with the missing data; once the fields are
filled, Reply reactivates the contacts automatically (if the status remains, change it to
Active manually). Unassigned contacts — filter the People tab for Unassigned, select them,
and link a sending email.
## Verification
The contact appears in the sequence's People tab with the Active status and a sending
email assigned, and their Current step shows where they will start. After fixing missing
data, confirm the Missing data status cleared — automatically or after your manual change
— and restart the sequence by turning the toggle off and on to apply changes faster.
## Prevention
Prepare imports to the requirements — CSV UTF-8, First Name filled, digits-only numeric
fields — and choose a unique contact identifier (Email, Last Name, or Phone) so duplicate
handling is deliberate; see [Import contacts](/how-to/import-contacts) and
[Contact deduplication](/behavior/contact-deduplication). Check the Preview tab for
missing variables before launching, and treat import skips as information rather than
noise.
## FAQ
### Are Skipped rows in the import summary errors?
No. Skipped counts duplicates the system removed during the import — the contact already
existed. Import Errors are the real failures: records with missing mandatory fields or
incorrect field formats, such as symbols in the Phone field. The full import result file
shows which is which per row.
### Why can't I add an opted-out contact to a new sequence?
Opted Out is the only status retained for a contact even outside sequences, and a contact
with this status cannot be moved to a different sequence. It can be removed manually — but
do that only when the contact has genuinely re-consented. See
[Status transitions](/behavior/status-transitions).
### The contact is enrolled but never started — same problem?
Different rule. Enrollment succeeded; execution is waiting on something — Missing data, an
unassigned sending email, a closed schedule, or a limit. Work through
[Why was an email not sent?](/troubleshooting/email-was-not-sent) and
[Sequence execution](/behavior/sequence-execution).
## Related
- [Contact enrollment](/behavior/contact-enrollment) — the three add paths and their options
- [Contact deduplication](/behavior/contact-deduplication) — why a row counts as a duplicate
- [Import contacts](/how-to/import-contacts)
- [Contacts](/specifications/contacts)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact and sequence-membership operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents check contact state before enrolling
---
# Why was a reply not detected?
> A prospect answered but the contact still shows Active — the 3-4 hour window, the main-folder rule, same-address matching, and the direct-email divergence.
**Detection takes up to 3-4 hours and only works when the reply comes from the address you contacted, stays in the main inbox folder for at least 3 hours, the account is properly connected, and the contact is Active or Active plus Contacted — not Finished. Check the sender address and the contact's status first.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Symptom
A real reply sits in the mailbox, but the contact still shows Active in the sequence and
follow-ups keep scheduling. Reply checks the email address specified in the IMAP section
of the account connection, so every gap between that monitored path and where the reply
actually went — or a status that turns detection off — produces this symptom.
## Most likely causes
| # | Cause | Rule |
| --- | --- | --- |
| 1 | Not enough time has passed — it usually takes up to **3-4 hours** for responses to be detected and synced to Reply | [Reply detection](/behavior/reply-detection) |
| 2 | The reply was moved out of the main inbox folder — replies must stay in the main inbox folder for **at least 3 hours** and must not be moved to another folder | Client-side rules and filters are a common silent culprit |
| 3 | The prospect answered from a different address than the one you contacted — matching requires the same email address | A forward counts only if it was forwarded **from within the original email** and contains the prospect's address from your system |
| 4 | The contact's status excludes detection — contacts must have **Active or Active + Contacted** statuses; replies detection is not performed for Finished contacts | [Statuses](/reference/statuses) |
| 5 | The receiving account is not connected properly (no green dot) — a disconnected mailbox is not checked for replies | [Why was a mailbox disconnected?](/troubleshooting/mailbox-was-disconnected) |
| 6 | The message was classified as an automatic reply — auto-replies, out-of-office messages, and bounces are handled apart from real replies and by default are not displayed in the Reply inbox | [Reply detection](/behavior/reply-detection) |
| 7 | Detection worked, but it was a reply to a **direct email** — the contact gets Replied without Finished and continues in the sequence as planned | Both statuses are assigned only for replies to sequence emails |
## Diagnostic checklist
1. Check the clock first: if the reply arrived less than 3-4 hours ago, wait before intervening.
2. Compare the reply's From address with the contact's email in Reply — an assistant, alias, or colleague answering breaks the match.
3. Confirm the reply is still in the main inbox folder and has been there at least 3 hours — undo any rule or filter that auto-filed it.
4. Open the contact: status must be Active or Active + Contacted. A Finished contact gets no reply detection.
5. Check the green dot on the receiving email account — the address in the IMAP section is the one Reply checks.
6. If follow-ups continued after a detected reply, check what was answered: a reply to a direct email sets Replied but not Finished, so the sequence continues by design.
## Resolution
For a mismatched sender or an already-Finished contact, set the **Replied** status
manually (possible once the contact has received at least one email in the sequence) and
continue the conversation from the thread — see [Process replies](/how-to/process-replies).
For a moved reply, return it to the main inbox folder and leave it there. For a
disconnected account, [reconnect it](/troubleshooting/mailbox-was-disconnected) and then
reconcile replies that arrived during the outage. If auto-replies are invisible and you
want to see them, change the Reply inbox handling in Settings, Emails, Email Safety from
**Do not display** to **Display** or **Display & mark as read** — displayed
auto-replies are still not treated as real replies.
## Verification
The contact's status shows Replied (and Finished, for a reply to a sequence email), the
thread is visible in the [inbox](/specifications/inbox), and no further follow-ups
schedule under the default replies handling. Reply-rate statistics recover as the statuses
are corrected — see [Statistics calculation](/behavior/statistics-calculation).
## Prevention
Keep client-side rules from touching fresh replies for at least 3 hours; keep receiving
accounts connected; and prefer contacting the address a person actually replies from. Note
that emails sent and received outside Reply are also synced into the contact's activity —
provided the contact has already received at least one email from your Reply account, with
a 20-day detection window after the last email touch from Reply — so the activity log is a
good place to spot conversations detection missed.
## FAQ
### The prospect replied from a colleague's address — will Reply catch it?
No. Matching requires the reply to come from the same email address you contacted, or to
be forwarded from within the original email with the prospect's address included. Mark the
contact as Replied manually and answer from the thread. See
[Reply detection](/behavior/reply-detection).
### Follow-ups kept sending after the prospect answered my one-off email — bug?
No. A reply to a direct email assigns the Replied status but not Finished — both statuses
are assigned only when the reply is to a sequence email. The contact therefore continues
in the sequence as planned. Stop them manually if that is not what you want.
### Where did the out-of-office and auto-replies go?
By default, auto-replies, out-of-office messages, and bounced emails are not displayed in
the Reply inbox. Change the handling in Settings, Emails, Email Safety to Display or
Display & mark as read — they will appear in the inbox and contact card but are not
treated as real replies.
## Related
- [Reply detection](/behavior/reply-detection) — the full matching rule
- [Sequence stopping](/behavior/sequence-stopping) — what a detected reply stops
- [Process replies](/how-to/process-replies)
- [Conversations](/specifications/conversations)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — mark-as-replied operations
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents reconcile missed replies
---
# Why do statistics not match?
> Two reports disagree — denominator splits, the 7-day default filter, prospect-level counting, tracking gaps, and deletions that move the numbers.
**Mismatches usually come from definitions, not lost data: delivery and bounce rates divide by Total people while open and reply rates divide by Contacted, the Stats tab defaults to the last 7 days, key metrics count each prospect once, and opens rely on a tracking pixel that is off by default. Compare time filters and denominators first.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
## Symptom
The same metric shows different values in two places — the sequence Stats tab against a
report export, Reply against your CRM, or today against yesterday. Almost always the two
numbers are computed from different definitions, windows, or tracking states rather than
from missing data.
## Most likely causes
| # | Cause | Detail |
| --- | --- | --- |
| 1 | Different denominators | Delivery rate and bounce rate divide by **Total people** (Contacted + Out of Office + Bounced + Auto Replied); open, reply, interested, meetings, and opt-out rates divide by **Contacted** only — [Statistics calculation](/behavior/statistics-calculation) |
| 2 | Different time filters | The sequence Stats tab shows the **last 7 days by default**; All time and custom ranges are separate views, and the total for multiple time ranges may be higher than the overall total |
| 3 | Prospect counting, not email counting | Key metrics are prospect metrics — multiple emails (steps) to one contact count **once**; a contact reached via several channels is also counted once |
| 4 | Tracking is off or blocked | Open and click tracking are **disabled by default** per sequence; the opens tracker is a pixel, so a prospect with images disabled — or an email delivered to spam, where images are not displayed — never shows Opened |
| 5 | Deletions changed the base | Deleting a contact decreases Total people; deleting a team member does not change team-report metrics; opt-out counts follow their own rules when statuses or contacts are removed |
| 6 | Different email populations | Direct ("one-shot") emails are tracked in the prospect card's Emails tab, apart from sequence stats; a LinkedIn connection request **without** a note is not counted as contacted |
| 7 | Chart date grouping | On the performance chart, Bounced and Opt out bars are grouped by the date the email was **sent**, not the date the bounce or opt-out happened — and both series are hidden until you click them in the legend |
## Diagnostic checklist
1. Write both numbers down with their exact source view, time filter, and any owner or account filters.
2. Align the time window: switch both views to All time, or the same custom range, before comparing — remember the Stats tab default is the last 7 days.
3. Compare definitions in [Calculations](/reference/calculations): same numerator, same denominator? Reply rate = Replies × 100 ÷ Contacted, while bounce rate = Bounced emails × 100 ÷ Total people.
4. Check what each side counts: prospect-level key metrics against per-email or per-event counts, sequence stats against one-shot emails in the prospect card.
5. Check tracking: are opens and clicks enabled for the sequence in question? Clicks are also not tracked for emails sent with the Send test button.
6. Ask what changed since the older number: deleted contacts shrink Total people, and the reply rate is based on historical data and may change over time.
## Resolution
Align the definitions and re-compare — in practice that resolves the gap. Pick one view
per metric as the team's reference, use the same time filter on both sides, and read rates
against their documented denominator. If opens look impossibly low, enable open tracking
(Sequence Settings, General) and accept that pixel blocking undercounts opens regardless.
If numbers differ from your CRM, check sync timing and each system's reply definition
before suspecting the data — see [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm).
A genuine data problem — events visibly missing after full alignment — is worth a support
ticket with both views captured.
## Verification
After aligning the time range, denominator, and population, recompute both numbers — they
should now agree within late-arriving events. Re-check after a day boundary: counters keep
updating as opens and replies arrive, and the reply rate may shift because it is based on
historical data.
## Prevention
Standardize which view your team quotes for each metric and annotate dashboards with the
denominator (Total people or Contacted). Keep tracking settings consistent across
sequences so open rates stay comparable, and avoid deleting contacts mid-analysis — the
denominators move with them. The formulas live in
[Statistics calculation](/behavior/statistics-calculation) and
[Calculations](/reference/calculations).
## FAQ
### Why is my open rate low when plenty of people reply?
Two reasons: open tracking is disabled by default per sequence, and even when enabled it
relies on a pixel — prospects with images disabled, or emails landing in spam where images
are not displayed, never register as Opened. Opens can also over-count when a provider's
email checker loads the message.
### Why did Total people decrease?
Deleting a contact decreases the Total people value, which also shifts every rate that
divides by it (delivery and bounce rates). Deleting a team member from team reports does
not change the metrics. See [Statistics calculation](/behavior/statistics-calculation).
### The chart shows bounces on days I did not send — why?
It does not: Bounced and Opt out bars are grouped by the date the email was sent, not the
date the bounce or opt-out itself happened. Both series are hidden by default — click them
in the chart legend to reveal them.
## Related
- [How statistics are calculated](/behavior/statistics-calculation) — every formula and both denominators
- [Calculations](/reference/calculations)
- [Read sequence reports](/how-to/read-sequence-reports)
- [Campaign analytics](/capabilities/campaign-analytics)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — pull raw counters and compute your own rates
- CLI: [agents.reply.io/cli](https://agents.reply.io/cli)
---
# Reference
> Exact values and lookup tables — terminology, entity relationships, statuses, permissions, limits, and calculations. Compact pages built for retrieval, not reading order.
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Reference pages hold the exact values the rest of the site points to. Each page is a set of
tables meant to be retrieved on its own — by a person checking one value or by an agent
grounding a claim.
- [Terminology](/reference/terminology) — every product noun, its synonyms, and its one canonical definition
- [Entity relationships](/reference/entity-relationships) — which object contains, uses, or references which
- [Lifecycle diagrams](/reference/lifecycle-diagrams) — contact status, sequence toggle, and email validation lifecycles as text diagrams
- [Statuses](/reference/statuses) — contact statuses, stages, toggle colors, validation results, and inbox categories
- [Permissions and roles](/reference/permissions) — organization, team-wide, and workspace roles with their permission lists
- [Limits](/reference/limits) — sending, rate, and plan limits
- [Calculations](/reference/calculations) — how each reported number is computed
## Planned
Reference pages specified but not yet written:
| Page | Status |
| --- | --- |
| Status transitions (full matrix) | Not written |
| Feature availability by plan | Not written |
| Channel availability | Not written |
| Data retention | Not written |
| Timezones and date behavior | Not written |
| Naming conventions | Not written |
## Related
- [Specifications](/specifications) — the objects these values belong to
- [Behavior](/behavior) — the logic that moves objects between these statuses
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the field-level source of truth for every value here
- Machine spec: [bundled.yaml](https://docs.reply.io/api-reference/bundled.yaml)
---
# Terminology
> The canonical name for every Reply object, the synonyms you will meet in the app and the API, and the one-line definition of each.
**Every Reply object has exactly one canonical name on this site. The most confused pair is Sequence and Campaign — one object, two names, and Sequence is the current one. This glossary is generated from the entity registry, so definitions here always match the rest of the site.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Each term has exactly one canonical definition on this site. When the app, the legacy API,
and the current API use different words for one object, the entry below is the mapping.
This glossary is generated from the site's entity registry (`_entities.yaml`), so it cannot
drift from the names the rest of the site uses.
## Glossary
### Campaign (legacy)
The former name of the Sequence object, kept because older articles, integrations, and API payloads still use it. See [Campaign (legacy)](/specifications/campaigns).
Not the same thing as **Sequence** — not a separate object — one thing, two names, and Sequence is the current one.
### Company
An organization record that groups Contacts and carries firmographic fields. The Reply app calls these Accounts; the API noun is Company. See [Company](/specifications/companies).
Also encountered as: *account*. Use "Company" in anything you write.
### Contact
A person record with email, enrichment fields, ownership, and outreach state — automatically assigned statuses per sequence plus one editable stage. The unit that sequences enroll and act on. See [Contact](/specifications/contacts).
Also encountered as: *prospect*, *lead*, *person*. Use "Contact" in anything you write.
Not the same thing as **Company** — a Contact is a person; a Company is the organization a Contact belongs to.
### Conversation
The message thread between a Contact and your team across channels, including reply classification state. See [Conversation](/specifications/conversations).
Also encountered as: *thread*. Use "Conversation" in anything you write.
### Email account
A connected mailbox Reply sends from and reads replies through, with its own daily limits, signature, and warm-up state. See [Email account](/specifications/email-accounts).
Also encountered as: *mailbox*, *sending account*, *inbox account*. Use "Email account" in anything you write.
### Inbox
The shared surface where Conversations from all connected Email accounts and channels are read, answered, and sorted into categories — one category per thread, with Meeting intent as a subcategory. See [Inbox](/specifications/inbox).
Also encountered as: *shared inbox*, *unified inbox*. Use "Inbox" in anything you write.
### Jason AI
Reply's AI SDR — the agent layer that finds prospects, writes and runs outreach, and handles replies with configurable autonomy. See [Jason AI](/capabilities/ai-sdr).
Also encountered as: *Jason*, *AI SDR agent*. Use "Jason AI" in anything you write.
### Knowledge base
A Jason AI source collection — pages, documents, and articles the AI grounds its outreach and replies in. See [Knowledge base](/specifications/knowledge-bases).
### List
A named collection of Contacts used to stage, organize, and bulk-enroll people into outreach. See [List](/specifications/lists).
Also encountered as: *contact list*, *segment*. Use "List" in anything you write.
### Offer
A Jason AI object describing what you sell — the value proposition, proof points, and target audience the AI writes from. See [Offer](/specifications/offers).
### Playbook (Jason AI object)
A Jason AI configuration object that packages targeting, messaging, and handling rules for the AI SDR to execute. See [Playbook (Jason AI object)](/specifications/playbooks).
Not the same thing as **Playbooks (site section)** — the Playbooks section of this site holds human-readable outreach recipes; this object is Jason AI configuration.
### Playbooks (site section)
The section of this site holding situation-specific outreach recipes — targeting, sequence structure, messaging, and expected results. See [Playbooks (site section)](/playbooks).
Not the same thing as **Playbook (Jason AI object)** — a documentation section, not a product object.
### Prospect data
Reply's built-in B2B contact and company database used for prospect search and enrichment. See [Prospect data](/specifications/prospect-data).
Also encountered as: *Reply Data*, *B2B database*. Use "Prospect data" in anything you write.
### Schedule
The weekly time windows and timezone rules that decide when sequence steps are allowed to execute. See [Schedule](/specifications/schedules).
Also encountered as: *sending schedule*, *sending window*. Use "Schedule" in anything you write.
### Sequence
The ordered set of outreach steps that enrolls Contacts and executes sending through assigned Email accounts on a Schedule. The central execution object in Reply. See [Sequence](/specifications/sequences).
Also encountered as: *campaign*, *cadence*. Use "Sequence" in anything you write.
Not the same thing as **Campaign (legacy)** — "Campaign" is the legacy name for the same object; current product and API say Sequence.
### Sequence step
One action inside a Sequence — an email, a LinkedIn action, a call task, or an SMS — with its delay, conditions, and variants. See [Sequence step](/specifications/sequence-steps).
Also encountered as: *touch*, *touchpoint*. Use "Sequence step" in anything you write.
### Stage
An editable label for a Contact's level of engagement across all outreach — Interested, Engaging, Not Interested, Do Not Contact, and others. Distinct from statuses, which Reply assigns automatically per sequence; stages cannot be created, only edited. See [Stage](/reference/statuses).
Also encountered as: *contact stage*, *pipeline stage*. Use "Stage" in anything you write.
### Task
A to-do generated by a sequence step or created directly — a call to make, a profile to visit, a message to approve. See [Task](/specifications/sequence-steps).
Also encountered as: *manual step*, *to-do*. Use "Task" in anything you write.
### Warm-up
The mailbox warm-up service that builds sender reputation on an Email account before it carries real outreach volume. See [Warm-up](/capabilities/deliverability).
Also encountered as: *MailToaster*, *mailbox warm-up*. Use "Warm-up" in anything you write.
## Reading rule
When two terms conflict, the **canonical term** wins everywhere on this site. Pages
mention a synonym once, on first use, then use the canonical term only.
## Related
- [A–Z index](/reference/a-z)
- [Entity relationships](/reference/entity-relationships)
- [Statuses](/reference/statuses)
- [Campaigns — why the old name persists](/specifications/campaigns)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — field names use these canonical nouns
---
# A–Z index
> Every page and every registered entity on this site, alphabetically — pages, objects, and the synonyms that point at them.
**This page lists every page and every registered product entity on how.reply.io alphabetically, including synonyms that redirect to their canonical entry. It is generated on every build, works without JavaScript, and is the fallback when search is unavailable. Entries marked "see" are aliases pointing at the canonical name.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
This index is generated from the page map and the entity registry on every build — it is
always complete. Aliases appear under their own letter and point at the canonical entry.
If you cannot use the search (⌘K), start here.
## A
- [account](/specifications/companies) — see Company
- [Agent index](/start/agent-index) — Overview
- [AI SDR](/capabilities/ai-sdr) — Capability
- [AI SDR agent](/capabilities/ai-sdr) — see Jason AI
- [AI SDR for lean teams](/playbooks/ai-sdr-for-lean-teams) — Playbook
- [Analyze campaign performance](/workflows/analyze-campaign-performance) — Workflow
- [API limits and webhooks](/reference/api-limits) — Reference
## B
- [B2B database](/specifications/prospect-data) — see Prospect data
- [Behavior](/behavior) — Behavior
- [Book meetings from inbound signals](/playbooks/book-meetings-from-inbound-signals) — Playbook
- [Build a prospect list](/workflows/build-a-prospect-list) — Workflow
- [Build an AI SDR](/workflows/build-an-ai-sdr) — Workflow
## C
- [cadence](/specifications/sequences) — see Sequence
- [Calculations](/reference/calculations) — Reference
- [Calls and SMS](/capabilities/calls-and-sms) — Capability
- [campaign](/specifications/sequences) — see Sequence
- [Campaign (legacy)](/specifications/campaigns) — Entity
- [Campaign analytics](/capabilities/campaign-analytics) — Capability
- [Campaigns](/specifications/campaigns) — Specification
- [Capabilities](/capabilities) — Capability
- [Companies](/specifications/companies) — Specification
- [Company](/specifications/companies) — Entity
- [Configure sending limits](/how-to/configure-sending-limits) — How-to
- [Connect a LinkedIn account](/how-to/connect-linkedin) — How-to
- [Connect a mailbox](/how-to/connect-a-mailbox) — How-to
- [Contact](/specifications/contacts) — Entity
- [contact list](/specifications/lists) — see List
- [Contact management](/capabilities/contact-management) — Capability
- [contact stage](/reference/statuses) — see Stage
- [Contacts](/specifications/contacts) — Specification
- [Conversation](/specifications/conversations) — Entity
- [Conversations](/specifications/conversations) — Specification
- [Create a sequence](/how-to/create-a-sequence) — How-to
- [CRM and integrations](/capabilities/integrations) — Capability
## D
- [Data enrichment](/capabilities/data-enrichment) — Capability
- [Deliverability](/capabilities/deliverability) — Capability
## E
- [Email account](/specifications/email-accounts) — Entity
- [Email accounts](/specifications/email-accounts) — Specification
- [Email deliverability](/learn/email-deliverability) — Learn
- [Email outreach](/capabilities/email-outreach) — Capability
- [Email warm-up](/learn/email-warm-up) — Learn
- [Entity relationships](/reference/entity-relationships) — Reference
## F
- [Find prospects from an ICP](/workflows/find-prospects-from-an-icp) — Workflow
## H
- [How a sequence executes](/behavior/sequence-execution) — Behavior
- [How contacts enter a sequence](/behavior/contact-enrollment) — Behavior
- [How email validation works](/behavior/email-validation) — Behavior
- [How LinkedIn action limits work](/behavior/linkedin-limits) — Behavior
- [How Reply detects duplicate contacts](/behavior/contact-deduplication) — Behavior
- [How Reply detects replies](/behavior/reply-detection) — Behavior
- [How Reply selects a sending mailbox](/behavior/mailbox-selection) — Behavior
- [How Reply works](/start/how-reply-works) — Overview
- [How statistics are calculated](/behavior/statistics-calculation) — Behavior
- [How statuses change](/behavior/status-transitions) — Behavior
- [How-to guides](/how-to) — How-to
## I
- [Import contacts](/how-to/import-contacts) — How-to
- [Inbox](/specifications/inbox) — Specification
- [Inbox](/specifications/inbox) — Entity
- [inbox account](/specifications/email-accounts) — see Email account
## J
- [Jason](/capabilities/ai-sdr) — see Jason AI
- [Jason AI](/capabilities/ai-sdr) — Entity
## K
- [Knowledge base](/specifications/knowledge-bases) — Entity
- [Knowledge bases](/specifications/knowledge-bases) — Specification
## L
- [Launch a sequence](/how-to/launch-a-sequence) — How-to
- [Launch an outbound campaign](/workflows/launch-an-outbound-campaign) — Workflow
- [lead](/specifications/contacts) — see Contact
- [Learn](/learn) — Learn
- [Lifecycle diagrams](/reference/lifecycle-diagrams) — Reference
- [Limits](/reference/limits) — Reference
- [LinkedIn outreach](/capabilities/linkedin-outreach) — Capability
- [List](/specifications/lists) — Entity
- [Lists](/specifications/lists) — Specification
## M
- [mailbox](/specifications/email-accounts) — see Email account
- [mailbox warm-up](/capabilities/deliverability) — see Warm-up
- [MailToaster](/capabilities/deliverability) — see Warm-up
- [Manage duplicate contacts](/how-to/manage-duplicates) — How-to
- [manual step](/specifications/sequence-steps) — see Task
- [Meetings](/capabilities/meetings) — Capability
- [Multichannel outreach](/capabilities/multichannel-outreach) — Capability
- [Multichannel strategy](/learn/multichannel-strategy) — Learn
## O
- [Offer](/specifications/offers) — Entity
- [Offers](/specifications/offers) — Specification
- [Outbound for seed-stage founders](/playbooks/outbound-for-seed-stage-founders) — Playbook
## P
- [Permissions and roles](/reference/permissions) — Reference
- [person](/specifications/contacts) — see Contact
- [pipeline stage](/reference/statuses) — see Stage
- [Playbook (Jason AI object)](/specifications/playbooks) — Specification
- [Playbook (Jason AI object)](/specifications/playbooks) — Entity
- [Playbooks](/playbooks) — Playbook
- [Playbooks (site section)](/playbooks) — Entity
- [Process positive replies](/workflows/process-positive-replies) — Workflow
- [Process replies](/how-to/process-replies) — How-to
- [Product map](/start/product-map) — Overview
- [prospect](/specifications/contacts) — see Contact
- [Prospect data](/specifications/prospect-data) — Specification
- [Prospect data](/specifications/prospect-data) — Entity
- [Prospect search](/capabilities/prospect-search) — Capability
## R
- [Re-engage a cold contact database](/playbooks/re-engage-cold-database) — Playbook
- [Reactivate closed-lost pipeline](/playbooks/reactivate-closed-lost-pipeline) — Playbook
- [Read sequence reports](/how-to/read-sequence-reports) — How-to
- [Reference](/reference) — Reference
- [Reply classification](/learn/reply-classification) — Learn
- [Reply Data](/specifications/prospect-data) — see Prospect data
- [Reply management](/capabilities/reply-management) — Capability
- [Run multichannel outreach](/workflows/run-multichannel-outreach) — Workflow
## S
- [Schedule](/specifications/schedules) — Entity
- [Schedules](/specifications/schedules) — Specification
- [segment](/specifications/lists) — see List
- [Sender reputation](/learn/sender-reputation) — Learn
- [sending account](/specifications/email-accounts) — see Email account
- [sending schedule](/specifications/schedules) — see Schedule
- [sending window](/specifications/schedules) — see Schedule
- [Sequence](/specifications/sequences) — Entity
- [Sequence design](/learn/sequence-design) — Learn
- [Sequence step](/specifications/sequence-steps) — Entity
- [Sequence steps](/specifications/sequence-steps) — Specification
- [Sequences](/specifications/sequences) — Specification
- [Set up DNS for sending](/how-to/set-up-dns) — How-to
- [shared inbox](/specifications/inbox) — see Inbox
- [Specifications](/specifications) — Specification
- [SPF, DKIM, DMARC](/learn/spf-dkim-dmarc) — Learn
- [Stage](/reference/statuses) — Entity
- [Start here](/start) — Overview
- [Statuses](/reference/statuses) — Reference
- [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm) — Workflow
## T
- [Task](/specifications/sequence-steps) — Entity
- [Tasks](/specifications/tasks) — Specification
- [Templates and variables](/specifications/templates-and-variables) — Specification
- [Terminology](/reference/terminology) — Reference
- [The AI SDR model](/learn/ai-sdr-model) — Learn
- [thread](/specifications/conversations) — see Conversation
- [to-do](/specifications/sequence-steps) — see Task
- [touch](/specifications/sequence-steps) — see Sequence step
- [touchpoint](/specifications/sequence-steps) — see Sequence step
- [Troubleshooting](/troubleshooting) — Troubleshooting
## U
- [unified inbox](/specifications/inbox) — see Inbox
## W
- [Warm up new mailboxes and domains](/workflows/warm-up-new-mailboxes) — Workflow
- [Warm-up](/capabilities/deliverability) — Entity
- [What can you build?](/start/what-can-you-build) — Overview
- [What happens when an email bounces](/behavior/bounce-handling) — Behavior
- [What is Reply?](/start/what-is-reply) — Overview
- [When Reply sends](/behavior/sending-schedules) — Behavior
- [When Reply stops a sequence](/behavior/sequence-stopping) — Behavior
- [When to use Reply](/start/when-to-use-reply) — Overview
- [Why do statistics not match?](/troubleshooting/statistics-do-not-match) — Troubleshooting
- [Why is a campaign not running?](/troubleshooting/campaign-is-not-running) — Troubleshooting
- [Why LinkedIn steps fail](/troubleshooting/linkedin-steps-fail) — Troubleshooting
- [Why was a contact not enrolled?](/troubleshooting/contact-was-not-enrolled) — Troubleshooting
- [Why was a mailbox disconnected?](/troubleshooting/mailbox-was-disconnected) — Troubleshooting
- [Why was a reply not detected?](/troubleshooting/reply-was-not-detected) — Troubleshooting
- [Why was an email not sent?](/troubleshooting/email-was-not-sent) — Troubleshooting
- [Workflows](/workflows) — Workflow
- [Workspaces and roles](/specifications/workspaces-and-roles) — Specification
---
# Entity relationships
> Which Reply object contains, uses, or references which — the organization containment chain, the outreach object graph, and the ownership rules that move data between them.
**An organization contains workspaces, each with its own users, roles, and data; the owner belongs to every workspace. Contacts group under accounts — one account per contact — and into lists. A sequence contains steps, enrolls contacts, sends through assigned email accounts on a schedule, and replies land as conversations in the shared inbox.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Two graphs cover the Reply object model: the organization containment chain (who can see
what) and the outreach object graph (what acts on what). Both diagrams are plain text so
they stay machine-readable.
## Organization structure
```text
Organization
├─ Workspaces (teams / client groups)
│ ├─ Users one user can join several workspaces, with a different role in each
│ ├─ Roles workspace roles are local; team-wide roles span workspaces
│ └─ Data contacts, sequences, templates — isolated per workspace
└─ Organization owner automatically a member of every workspace
```
| Subject | Relationship | Object | Rule |
| --- | --- | --- | --- |
| Organization | contains | Workspaces | Each workspace has its own users, roles, and settings |
| Workspace | contains | Users | A user can belong to several workspaces, with a different role in each |
| User | belongs to | Organizations | One set of credentials can belong to multiple organizations; permissions apply independently per organization |
| Organization owner | member of | Every workspace | Automatic; cannot be removed or reassigned |
Data does not cross workspaces: contacts, sequences, and email accounts remain isolated
per workspace even when a user works in several of them. Roles and permissions:
[Permissions and roles](/reference/permissions).
## Outreach object graph
```text
Prospect data (search)
└─ adds → Contacts ────────────────┐
│ at most one │ grouped by
▼ ▼
Account (Company) Lists
│
│ enroll
▼
Sequence ── contains → Sequence steps (email, LinkedIn, call, task)
│ │
│ └─ timed by → Sending schedule
│
└─ sends through → Email accounts (one or many per sequence)
│
replies land in
▼
Conversations → Inbox (one surface across all connected accounts)
```
| Subject | Relationship | Object | Rule |
| --- | --- | --- | --- |
| Account ([Company](/specifications/companies)) | groups | [Contacts](/specifications/contacts) | One contact can only be in one account at a time; an account can hold many contacts |
| [List](/specifications/lists) | groups | [Contacts](/specifications/contacts) | Used to stage, organize, and bulk-move contacts |
| Account list | groups | Accounts | An account can be added to several lists at once |
| [Sequence](/specifications/sequences) | contains | [Sequence steps](/specifications/sequence-steps) | Email, call, task, and LinkedIn steps with delays and settings |
| [Sequence](/specifications/sequences) | enrolls | [Contacts](/specifications/contacts) | Each enrollment carries its own per-sequence status — see [Statuses](/reference/statuses) |
| [Sequence](/specifications/sequences) | sends through | [Email accounts](/specifications/email-accounts) | Selected from the accounts connected to the Reply account; a sequence can use several |
| [Sequence](/specifications/sequences) | timed by | [Schedule](/specifications/schedules) | A sequence cannot run without a sending schedule |
| [Conversation](/specifications/conversations) | belongs to | [Contact](/specifications/contacts) | Replies are matched to the contact and tracked in their activity |
| [Inbox](/specifications/inbox) | aggregates | [Conversations](/specifications/conversations) | One surface across all connected email accounts; one inbox category per thread |
| [Prospect data](/specifications/prospect-data) search | adds | [Contacts](/specifications/contacts) | Search results become contacts you can list and enroll |
The Jason AI layer extends sequences with three more objects —
[Offers](/specifications/offers), [Playbooks](/specifications/playbooks), and
[Knowledge bases](/specifications/knowledge-bases); each is specified on its own page.
## Ownership and what moves where
- Objects have owners: contacts, accounts, and sequences can be reassigned to another team member with a change-owner action.
- When a user is removed from a workspace, their contacts, sequences, schedules, unfinished tasks, and templates transfer to the organization owner; their connected email accounts and completed tasks are deleted permanently. This cannot be undone.
- Deleting a workspace permanently deletes all related data — sequences, contacts, templates.
## Three relationships that surprise people
- A contact can be enrolled in **more than one sequence at a time**; each enrollment carries its own status. Conflicts are governed by [contact enrollment rules](/behavior/contact-enrollment).
- "Campaign" is not a separate object relating to sequences — it **is** the sequence under its former name. See [Campaigns](/specifications/campaigns).
- Moving a contact to an account is a move, not a copy: a contact belongs to at most one account, so assigning a new one replaces the old membership.
## Related
- [Terminology](/reference/terminology)
- [Lifecycle diagrams](/reference/lifecycle-diagrams)
- [Permissions and roles](/reference/permissions)
- [Product map](/start/product-map)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — each object above maps to an endpoint group
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — contact, sequence, and inbox operations across the same graph
---
# Lifecycle diagrams
> The contact status, sequence toggle, and email validation lifecycles as machine-readable text diagrams, each with a table of the events that trigger every transition.
**A contact in a sequence starts Active, gains Contacted after the first email, and moves through Opened, Clicked, Replied, Bounced, Out of office, or Opted Out toward Finished. Sequence toggles cycle from gray Inactive through green Active to blue Completed, with red, orange, and yellow flagging problems. Validation ends Valid, Risky, or Invalid.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Each diagram is plain text so it stays machine-readable. Exact values and full status
tables: [Statuses](/reference/statuses).
## Contact status lifecycle
```text
added to an active sequence
│
▼
Active ◄────────────── resume (manual) ─────────────── Paused
│ ▲
│ pause (manual) ────┘
│
├─ first email delivered ──────────► + Contacted
├─ opens a tracked email ──────────► + Opened
├─ clicks a tracked link ──────────► + Clicked
├─ template variable has no value ─► Missing data (sends stop until cleared)
├─ auto-reply with OOO keywords ───► Out of office (sends stop; manual or automatic exit)
├─ automatic reply detected ───────► Auto-replied + Finished
├─ email returned undelivered ─────► Bounced (fix address → Active → resend)
├─ clicks opt-out link ────────────► Opted out (kept even outside sequences)
├─ reaches a Call step ────────────► To call ── call logged ──► Called
├─ replies by email or SMS ────────► Replied ──► Finished by default
└─ all steps sent ─────────────────► Finished (no sends, no reply tracking)
```
*Contacted*, *Opened*, and *Clicked* are additive markers — they join the contact's other
statuses rather than replacing them.
| Status | Emails sent | Exit path |
| --- | --- | --- |
| Active | Yes | Any event above |
| Paused | No | Manual change back to Active |
| Missing data | No | Fill in the variable or remove it from the template, then clear the status manually |
| Out of office | No | Change to Active manually, or automatic out-of-office handling; a real reply from the contact is still detected and handled per the sequence's replies-handling setting |
| Bounced | No | Update the email address, remove Bounced, set Active, and resend within the same sequence; the status is not retained in a different sequence |
| Replied | Stops by default | *Continue sending emails* in replies handling keeps the remaining steps going |
| Auto-replied | No (comes with Finished) | Change the accompanying Finished status to Active manually; Auto-replied itself cannot be removed |
| Opted out | No | Manual removal only; the contact cannot be moved to another sequence while opted out |
| To call | — | A call action moves the contact to Called |
| Called | — | Permanent; removable only via the contact sidebar |
| Finished | No | Back to Active only if steps remain or new steps were added |
## Sequence toggle lifecycle
```text
created ──► Gray (Inactive)
│ launch
▼
Green (Active) ─────── all contacts finished ──────► Blue (Completed)
│
├─ missing or invalid settings ──► Red (Action required) cannot run until fixed
├─ warnings detected ────────────► Orange (Issues detected) needs attention
├─ a limit is hit ───────────────► Yellow (Limits reached) temporarily paused
└─ pause or archive ─────────────► Gray (Inactive)
```
| Toggle | State | Common triggers |
| --- | --- | --- |
| Gray | Inactive | Newly created and not launched, paused, or archived |
| Green | Active | Launched, restarted after a pause, or working through steps — planning, checking conditions, sending, generating tasks, executing LinkedIn actions |
| Red | Action required | Sending email account removed or disconnected, LinkedIn account removed, sending errors, no contacts, missing schedule, suspension at the 8% bounce-rate threshold |
| Orange | Issues detected | Contacts without an assigned email or LinkedIn account, contacts missing required data, provider block on some accounts, 4% bounce rate reached, missing voice profile |
| Yellow | Limits reached | Email account daily limit, active contacts limit for the billing period, sequence daily limit, LinkedIn weekly connection-request limit, provider daily quota exceeded |
| Blue | Completed | All contacts finished the sequence; no active contacts left |
Governing rules: [Sequence execution](/behavior/sequence-execution),
[Bounce handling](/behavior/bounce-handling), [Sequence stopping](/behavior/sequence-stopping).
## Email validation lifecycle
```text
email address checked (syntax, DNS, and mailbox checks)
│
├─ no high-risk factors ──────────────► Valid safe to enroll
├─ server accepts, may still bounce ──► Risky disposable domain, catch-all, or honeypot
└─ a check fails ─────────────────────► Invalid excluded from sequence sends
```
| Outcome | Meaning | Handling |
| --- | --- | --- |
| Valid | Verification completed with no high-risk factors | Safe to put into sequences |
| Risky | The mail server states the recipient exists, but the send may bounce or be of low value | Treat as Valid; keep Risky addresses to up to 20% of a list |
| Invalid | A syntax, DNS, or mailbox error was returned | The contact does not receive sequence emails |
The full error taxonomy behind the Invalid outcome: [Statuses](/reference/statuses).
## Related
- [Statuses](/reference/statuses)
- [How statuses change](/behavior/status-transitions)
- [Entity relationships](/reference/entity-relationships)
- [Bounce handling](/behavior/bounce-handling)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the operations that trigger each transition
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — status change, sequence start/pause, and diagnostics operations
---
# Statuses
> Every status family in Reply with exact values — the 14 contact statuses, contact and account stages, sequence toggle colors, email validation results, and inbox categories.
**Contact statuses are fourteen per-sequence labels Reply assigns automatically, from Active to Called. Stages are separate editable engagement labels you set yourself. Account stages run New through Closed-lost, sequence toggles show six colors from green Active to blue Completed, email validation returns Valid, Risky, or Invalid, and inbox threads carry one category each.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Reply labels objects with several independent status families. The two most often confused
are contact **statuses** and contact **stages**:
> **Statuses are not stages.** A contact **status** describes processing within a specific
> sequence and is assigned by Reply automatically based on the interaction (with some manual
> exceptions). A contact **stage** is an editable label for the level of interaction and
> engagement across your entire outreach — you set it yourself, and it is not tied to any
> one sequence.
## Contact statuses
Each contact in a sequence carries one or more of these 14 statuses. Statuses can combine —
*Replied* usually comes together with *Finished*, and a *Bounced* contact can also show
*Opened* (the recipient provider's email checker, or your own view of the bounce-back
message).
| Status | Meaning | Assigned when | User-settable |
| --- | --- | --- | --- |
| Active | The contact can receive emails; replies are tracked | The contact is added to an active sequence | Yes — change to Paused, Finished, Out of office, or Opted out anytime; to Bounced or Replied only after at least one email was sent |
| Paused | Sending and reply tracking stop temporarily | Set manually; only possible for contacts that are in a sequence | Yes — revert to Active to resume |
| Missing data | No emails are sent until resolved | A template variable has no matching value in the contact's profile | Removal only — fill in the variable or remove it from the template, then clear the status manually |
| Bounced | An email came back undelivered | A send is returned (invalid address or other reasons) | Yes — assignable after at least one email; not retained when the contact moves to a different sequence |
| Out of office | Further steps stop until the status is removed | An auto-reply with out-of-office keywords is detected | Yes — change to Active manually, or configure automatic out-of-office handling |
| Finished | No emails are sent; reply detection stops | The contact replies to a sequence email, or all steps have been sent | Yes — back to Active only if steps remain or new steps were added |
| Contacted | The contact received at least one email from the current sequence | The first email is delivered | No |
| Opted out | No further outreach; the only status retained outside sequences; the contact cannot be moved to another sequence | The contact clicks the opt-out link, or an unsubscribe reply is sorted into the Do not contact inbox category | Yes — set and removed manually; any team member can assign it |
| Replied | The sequence stops for the contact by default; reply tracking stops | A reply arrives from the address you emailed (including forwarded from the thread), or an SMS reply to a sequence-related SMS | Yes — assignable after at least one email |
| Opened | The contact opened a tracked email | The open-tracking pixel fires (opens tracking enabled in sequence settings) | No |
| Clicked | The contact clicked a tracked link | Link tracking is enabled and a link in the email is clicked | No |
| Auto-replied | Comes together with Finished; further steps stop | An automatic reply is detected | No — cannot be set or removed manually |
| To call | The contact is due for a call | The contact reaches a Call step in the sequence | Yes — from the contact sidebar |
| Called | A call action was logged; permanent until removed | A Call task is completed, a Cloud Calls call is made, or a call is logged via the contact sidebar | Removal only — via the contact sidebar |
With Team Edition in public mode, only the sequence owner can change a contact's status.
The exception is *Opted out*, which any team member can assign. After *Replied*, the
sequence stops by default unless replies handling is set to *Continue sending emails* —
see [Sequence stopping](/behavior/sequence-stopping).
## Contact stages
Stages label how much you are interacting with a contact throughout the entire outreach
process — labels like *Interested*, *Engaging*, *Not Interested*, *Do Not Contact*, and
others. You assign them yourself from the People page (**More → Set stage**).
| Rule | Value |
| --- | --- |
| Creating new stages | Not possible — only the existing stages can be edited |
| Editable fields | Name, label color, description |
| Name length | **21** symbols maximum |
| Description length | **512** symbols maximum |
| Where to edit | Settings → Contacts → Contact stages |
## Account stages
Accounts group contacts by company — the API noun is Company, see
[Companies](/specifications/companies). Each account can carry one stage marking its phase
in the outreach pipeline, from initial contact to deal closure.
| Stage | Description |
| --- | --- |
| New | The account is new to the outreach pipeline |
| Qualified | Sales-qualified account |
| Meeting booked | A meeting is booked with a decision-maker |
| Negotiating | Negotiations are in progress |
| Disqualified | The account is not relevant |
| On hold | Contact later |
| Closed-won | The deal was completed successfully |
| Closed-lost | The deal was lost |
The same editing rules apply as for contact stages: stages cannot be created, only edited
(name, color, description; 21-symbol names, 512-symbol descriptions). Selecting **None**
removes the stage from an account. Accounts can be filtered by stage with *Equals*, *Does
not equal*, or *None* conditions.
## Sequence toggle states
Every sequence has a toggle whose color summarizes its state; hovering shows a tooltip
with details.
| Toggle | State | Meaning |
| --- | --- | --- |
| Green | Active | The sequence is running — just launched, restarted after a pause, or working through its steps |
| Gray | Inactive | Not running — newly created and never launched, paused, or archived |
| Red | Action required | Missing or invalid settings; the sequence cannot run until fixed |
| Orange | Issues detected | Warnings that need attention |
| Yellow | Limits reached | Temporarily paused because a limit was hit |
| Blue | Completed | All contacts finished the sequence; no active contacts left |
### Red — action required triggers
- The sending email account was removed or disconnected
- The connected LinkedIn account was removed
- There are sending errors
- There are no contacts in the sequence
- The sending schedule is missing
- The sequence is under review and suspended after reaching the 8% bounce-rate threshold
### Orange — warning triggers
- Some contacts have no sending email account assigned
- Some contacts have no LinkedIn account assigned
- Contacts are missing required data
- Sending from some email accounts stopped due to a provider block
- The sequence reached a 4% bounce rate
- The voice profile is missing
### Yellow — limit triggers
- The email account's daily sending limit was reached
- The active contacts limit for the current billing period was reached
- The sequence daily limit was reached
- LinkedIn's weekly limit for connection requests was reached
- The email provider blocked sending: daily sending quota exceeded
Exact limit values: [Limits](/reference/limits).
## Email validation statuses
Reply checks each email address and classifies it into one of three groups.
| Status | Meaning | Guidance |
| --- | --- | --- |
| Valid | Verification completed; no high-risk factors detected | Safe to put into sequences |
| Risky | The recipient's mail server states the recipient exists, but the send may still bounce or be of low value | Treat as Valid; keep Risky addresses to up to 20% of a list to avoid high bounce rates |
| Invalid | The address failed validation | These contacts do not receive sequence emails |
An address is marked **Risky** for one of three reasons: the domain is a well-known
disposable email address provider (DEA), the mail exchanger is a catch-all that accepts
non-existent addresses, or the mail exchanger hides a honeypot/spam trap.
An address is marked **Invalid** when validation returns one of three error groups:
| Error group | Examples |
| --- | --- |
| Syntax errors | Missing @ separator, invalid characters, unclosed quoted words or comments, two adjacent dots, invalid local-part or total length, non-compliant domain part |
| DNS errors | The domain does not exist, or has no valid DNS records and cannot accept messages |
| Mailbox errors | The mailbox does not exist, the mail exchanger refuses to accept messages, or the address uses an international mailbox name the server does not support |
## Inbox categories
Inbox categories label email threads by the contact's interest. Reply's AI assigns them
automatically by analyzing the tone of replies; you can reassign, clear, or bulk-assign
them manually.
| Rule | Value |
| --- | --- |
| Default categories | Interested, Not interested, Do not contact, Not now, Forwarded, Meeting intent |
| Custom categories | Can be created and edited |
| Categories per thread | **One** — the exception is Meeting intent, which is a subcategory and can accompany another category |
| Assignment | Automatic by AI, with manual assign/reassign/clear, individually or in bulk |
A reply sorted into *Do not contact* triggers the *Opted out* contact status. How
classification feeds outreach: [Reply classification](/learn/reply-classification).
## FAQ
### Are contact statuses the same as contact stages?
No. Statuses are per-sequence processing labels assigned automatically by Reply; stages
are editable engagement labels you assign yourself across all outreach. They live in
different places and answer different questions.
### Can I create a new contact or account stage?
No — stages cannot be created, only edited. You can change the name (up to 21 symbols),
label color, and description (up to 512 symbols) of the existing stages.
### Does the Bounced status follow a contact into another sequence?
No. Reply does not hold onto the Bounced status when a contact is moved to a different
sequence. The only status retained outside sequences is Opted out.
## Related
- [How statuses change](/behavior/status-transitions)
- [Lifecycle diagrams](/reference/lifecycle-diagrams)
- [Reply classification](/learn/reply-classification)
- [Contacts](/specifications/contacts)
- [Sequences](/specifications/sequences)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — status fields and the operations that change them
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — contact status, stage, and inbox category operations
---
# Permissions and roles
> Reply's three-tier role model — organization, team-wide, and workspace roles — with the organization-level permission list, workspace permission categories, and the seat types behind resource access.
**A Reply organization has one permanent owner plus three role levels: Organization roles govern billing, users, and workspaces; Team-wide roles apply one permission set across several workspaces; Workspace roles control sequences, contacts, reports, and other categories inside a single workspace. Approval permissions are clamped so Approve never exceeds View.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
An **organization** is available by default for all new Reply accounts. It contains
workspaces (client groups or teams), users, and roles. **Roles** define what actions users
can take; **permissions** determine which features and data they can access. Both are
managed on the Organization page (profile icon → **Organization**), across the Workspaces,
Users, and Roles & Permissions tabs.
## Role levels
| Level | Scope | Use it for |
| --- | --- | --- |
| Organization roles | The entire organization | Billing, inviting and removing users, workspace administration, org-wide objects |
| Team-wide roles | Several workspaces at once | Giving one user identical permissions in all assigned workspaces (account managers, senior SDRs); same permission categories as workspace roles |
| Workspace roles | A single workspace | Access inside one workspace — changes in one workspace do not affect others |
Workspace roles cannot manage organization-level permissions unless the user is also
assigned an Organization role.
## Organization owner
| Rule | Value |
| --- | --- |
| Owners per organization | **One** |
| How assigned | Automatically to the person who creates the account |
| Transfer or removal | Not possible — the role is permanent; only deleting the organization removes it |
| Workspace membership | Automatically part of every workspace; cannot be removed or reassigned |
| Access | All information and any action in the system |
## Default roles
Each organization starts with a Default Team that includes two workspace roles — **Team
Lead** and **Team Member** — in addition to the **Organization Owner**.
| Role | Access |
| --- | --- |
| Organization Owner | Full access to all features, including team creation, role management, and billing |
| Team Lead | Manages team activities and members based on assigned permissions |
| Team Member | Limited access focused on operational tasks within the team |
## Organization-level permissions
Organization roles combine permissions from this list:
| Permission | Grants |
| --- | --- |
| Billing | Manage subscription, update payment methods, view payment history |
| Login as any organization user (except owner) | Sign in as any organization member; the owner's account is excluded |
| Login as any organization user | Sign in as any user, including the owner — full access to all activities and settings |
| Invite new users to Organization | Invite new members to the organization |
| Remove users from Organization | Remove users from the organization |
| Assign roles | Assign organization or workspace roles to users |
| Manage Organization and Team roles and permissions | Create, rename, and edit permission sets for Organization and Team-wide/Workspace roles; grants access to the Roles & Permissions tab on its own |
| Manage Team roles and permissions | The same, scoped to Team-wide and Workspace roles only — cannot create, rename, or edit Organization-level roles; also grants tab access on its own |
| Delete roles | Delete existing organization and workspace roles — required separately; neither manage permission includes delete rights |
| Add users to workspace | Add existing users to specific workspaces |
| Create workspaces | Create new workspaces for clients or teams |
| Edit workspaces | Change workspace names and logos |
| Delete workspaces | Permanently remove workspaces from the organization |
| View workspaces | View all workspaces in the organization, even those the user is not invited to |
| Manage Reply beta features | Enable or disable Reply beta features for the organization |
| Access Organization settings | View and manage organization members and access the Refer & Earn section |
| Access Plans and Billing page | View subscription details and manage plans and billing |
## Organization object permissions
Separate from the list above, organization roles grant access to objects shared across
the whole organization:
| Object | Permissions |
| --- | --- |
| Email templates | View, create, edit, and delete organization-wide email templates |
| Sequence templates | Create, view, and delete organization sequence templates; save AI SDR sequence step structures organization-wide (org-wide structures are read-only for everyone else — usable but not editable or deletable; on by default for existing roles, off for newly created ones) |
| AI SDR playbooks | Create, view, edit, and delete organization-level playbooks for AI SDR sequences |
| Custom fields | Create custom fields; enables publishing a contact field organization-wide |
| Approval Mode (organization) | View Approval Mode queues across all workspaces; take approval actions (approve, bulk approve, regenerate, delete) across all workspaces |
## Workspace permission categories
Workspace roles (and Team-wide roles) combine permissions from these categories:
| Category | Covers |
| --- | --- |
| Sequences | Run, pause, create, delete, archive, and manage sequences; change sequence owners; save sequence step structures to the workspace. The **Manage sequence** permission grants viewing and editing together — there is no separate read-only sequence view permission |
| Contacts | Create, delete, edit, and view contacts |
| Templates | Access, view, use, edit, and delete team templates |
| Reports | View Calls, Email, Workspace Performance, Tasks, LinkedIn, Channel Efficiency, and Agency reports |
| Tasks | View, assign, and complete tasks |
| Accounts | View, create, update, or delete accounts; view or update account settings |
| Integrations | Access Zapier, the Reply API, the Integrations page, and the Reply Marketplace |
| Inbox | Access the Inbox page |
| Data | Access the data search |
| Settings | Access and manage settings from the Team section |
| AI SDR | Access the team's offers, knowledge bases, and playbooks; view and approve messages in Approval Mode with My/Team scopes |
| Website visitors | Create/edit, view, and delete workspace trackers |
Some permissions carry scope options such as **Workspace** and **My** (or **Team** and
**My**) — for example, allowing a user to manage only their own sequences, or to see only
their own approval queue. In Approval Mode, the Approve permission **cannot exceed the
View setting** — the effective level is clamped to the narrower of the two.
To give clients or external partners limited access, create a reports-only role by
enabling only the Reports permission.
## Users and membership rules
- Every invited user must be assigned a workspace and a role; invitations stay *Pending* until accepted.
- A user can belong to more than one workspace, with a different role in each.
- A user can belong to multiple organizations with a single set of credentials; permissions apply independently per organization, and data stays isolated per workspace.
- Users are removed from a workspace via the Workspaces tab, not the Users tab, and only one by one.
- When a user is removed, their contacts, sequences, schedules, unfinished tasks, and templates transfer to the organization owner; their connected email accounts and completed tasks are deleted permanently. This cannot be undone.
## Team Edition
Team Edition adds collaboration inside a team: a unified list of prospects and sequences,
team-level schedules, and a blacklist that works across the team. It runs in **Public** or
**Private** mode depending on how much team members should see of each other's work.
- Once Team Edition is enabled, it cannot be reverted.
- In public mode, only the sequence owner can change a contact's status; any team member can assign the Opted out status — see [Statuses](/reference/statuses).
## Seats
Seats grant access to resources and are separate from role permissions. Each seat type
allows one connected account or feature at a time.
| Seat type | Grants |
| --- | --- |
| Team member | A user who can log into their Reply account |
| Mailbox | An email account connected to send messages; several team members can share one mailbox seat |
| LinkedIn automation | A connected LinkedIn account used for automated LinkedIn steps |
| Cloud calls | Renting a phone number and making calls in sequences |
For accounts with roles and permissions enabled, the billing model sets the seat scope:
with **Organization Billing**, seat limits are shared across the entire organization; with
**Per Workspace Billing**, each workspace gets its own limits independently. Seat counts
per plan: [Limits](/reference/limits).
## FAQ
### Is there a read-only sequence permission?
No. The Manage sequence permission grants access to view and edit sequences owned by the
user or team members — viewing is not split out as a separate permission.
### Can the organization owner role be transferred?
No. Each organization has exactly one owner, assigned automatically at account creation.
The role cannot be transferred or removed; the only way to remove it is to delete the
organization with all its teams and members.
### When should I use a Team-wide role instead of a Workspace role?
Use a Team-wide role when one person needs identical permissions in several workspaces —
edits to the role propagate to every workspace it is assigned in. Use Workspace roles for
one-off access adjustments in a single workspace.
## Related
- [Limits](/reference/limits)
- [Statuses](/reference/statuses)
- [Entity relationships](/reference/entity-relationships)
- [Sequences](/specifications/sequences)
- [Contacts](/specifications/contacts)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — authentication and team endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — team member and workspace-scoped operations
---
# Limits
> Every documented Reply limit in one place — sending caps, contact storage, API rate limits, LinkedIn action limits, and the fair-usage mailbox scale.
**One email account sends at most 400 emails per day on paid plans, 200 on trial. Contact storage defaults to 100,000. The API allows 15,000 requests per month with 10 seconds between calls. LinkedIn actions cap at 100 per day per action type. Sequence-level daily caps, delays, and fair-usage mailbox counts stack on top.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
Limits stack across levels: the email account's own daily cap always wins over a higher
sequence setting, and plan-level quotas (active contacts, storage, credits) sit above both.
## Email sending limits
| Limit | Value | Level |
| --- | --- | --- |
| Emails per day per email account | **400** (paid plans) / **200** (trial) | Email account |
| Max number of emails per day | Configurable up to **10,000**, cannot exceed the sum of account daily limits | Sequence |
| Max daily emails per contact | Default **1**, can be raised (for Team Edition multi-sequence cases, 2–3) | Sequence |
| Delay between emails | Recommended **120–180 seconds**; the system adds roughly 10–15 seconds of its own | Sequence / email account |
| Email accounts per sequence | Up to **100** | Sequence |
| Bounce-rate stop threshold | **8%** (orange warning at **4%**), applies after **200** emails per day — see [Bounce handling](/behavior/bounce-handling) | Sequence |
| Sending window | A schedule needs a delivery window of at least **2.5–4 hours** to send reliably — see [Schedules](/specifications/schedules) | Schedule |
The *Max daily emails per contact* and account limits do not apply to Manual email steps.
## Contact limits
| Limit | Value |
| --- | --- |
| Contact storage | **100,000** by default on Business and Agency plans; support can raise it — beyond 100,000 costs **$30/month per additional 100,000** |
| Active contacts (trial) | **300** unique contacts; follow-ups not counted |
| Active contacts (Email Volume plans) | From **1,000** scaling to 5,000 / 10,000 / 25,000 / 50,000 / 100,000+ by plan |
| Active contacts (Multichannel plan) | Unlimited |
A contact counts as **active** when they receive at least one outreach step (email,
LinkedIn connection request, LinkedIn message, or InMail) during a billing month. The
count resets on the subscription renewal date, not the calendar month. A contact reached
again in a new billing month counts again.
## Email account allowances
| Plan | Included email accounts |
| --- | --- |
| Trial | 2 |
| Multichannel plan | 5 (monthly) / 10 (annual) |
| Email Volume plan | Fair-usage scale below |
| Agency plans | Unlimited |
Additional mailboxes cost **$29/month each**.
**Fair-usage mailbox scale** (Email Volume plans — included mailboxes follow the active
contact tier):
| Active contacts in plan | Mailbox limit |
| --- | --- |
| 1,000 | 25 |
| 2,000 | 50 |
| 3,000 | 75 |
| 5,000 | 125 |
| 10,000 | 250 |
| 25,000 | 625 |
| 50,000 | 1,250 |
| 100,000 | 2,500 |
## API and integration limits
| Limit | Value |
| --- | --- |
| API requests | **15,000 per month** |
| Interval between API calls | **10 seconds** minimum |
| Contact sync via integrations | Same limit as prospects |
See [docs.reply.io](https://docs.reply.io/api-reference/introduction) for endpoint-level
detail — it is the source of truth for the API surface.
## LinkedIn automation limits
| Limit | Value |
| --- | --- |
| Default suggested range — connections, profile views, post likes, InMails, detections, revoke connections, endorse skills, follow profile | **25–35 per day** |
| Default suggested range — messages | **35–50 per day** |
| Default static limit | **30** per action type |
| Maximum per action type | **100 per day** |
| Limit changes take effect | **The next day** |
## AI SDR (Jason AI) source limits
| Limit | Value |
| --- | --- |
| New contacts per day per sequence | Up to **500**; default **10** |
| Contacts per company | **3** |
| Post-engagement sources | **50 likers + 50 commenters** per post |
| ICP fit threshold | **60%** |
## Data credits
| Credit grant | Value |
| --- | --- |
| Trial | **50** Reply credits for Live Data search |
| Email Volume and Multichannel plans | **50 credits/month** (monthly or annual) |
## Which limit wins
The narrowest applicable limit always applies: an email account never exceeds its own
daily cap regardless of the sequence's *Max number of emails per day*, and the sequence
cap never exceeds the sum of its accounts' caps. Daily capacity is snapshotted once per
day at **UTC midnight** — see [Sending schedules](/behavior/sending-schedules).
## FAQ
### Can I raise the 400/day email account limit?
No — 400 per email account per day (200 on trial) is the platform ceiling. Scale sending
by adding more email accounts to the sequence (up to 100) with
[round-robin distribution](/behavior/mailbox-selection).
### Do manual emails count against the limits?
Emails sent through Manual email steps are exempt from the *Max daily emails per contact*
and daily sending limits. See [Sequence steps](/specifications/sequence-steps).
### What happens when the API limit is hit?
Requests beyond 15,000 per month (or faster than one per 10 seconds) are rejected until
the window clears. Design integrations to batch and back off — see
[docs.reply.io](https://docs.reply.io/api-reference/introduction).
## Related
- [Bounce handling](/behavior/bounce-handling)
- [Mailbox selection](/behavior/mailbox-selection)
- [Sending schedules](/behavior/sending-schedules)
- [Configure sending limits](/how-to/configure-sending-limits)
- [Statuses](/reference/statuses)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — rate limits and account settings
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — sequence and account limit operations
---
# Calculations
> The exact formula behind every Reply email metric — Total people, Contacted, delivery, open, reply, bounce, and opt-out rates — plus tracking mechanics and both CSV export field dictionaries.
**Total people equals Contacted plus Out of Office, Bounced, and Auto Replied contacts. Delivery rate and bounce rate divide by Total people; open, reply, interested, meetings, and opt-out rates divide by Contacted — distinct contacts reached by an email step, a LinkedIn connection request with a note, or a LinkedIn message or InMail.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
The key metrics are the same across the Sequence Stats tab and the Email dashboard in
Reports. Every rate is a ratio over one of two denominators.
## The two denominators
| Denominator | Definition |
| --- | --- |
| Total people | The overall number of contacts included in the sequence: **Contacted + Out of Office + Bounced + Auto Replied** |
| Contacted | Distinct contacts who received at least one of: an **email step**, a **LinkedIn connection request with a note/message**, or a **LinkedIn message or InMail**. Excludes Out of Office, Bounced, and Auto Replied contacts |
> A LinkedIn connection request **without** a note is not counted as contacted. A contact
> reached via multiple channels is counted once (distinct). Delivery rate and bounce rate
> divide by **Total people**; open, reply, interested, meetings booked, and opt-out rates
> divide by **Contacted**.
## Metric formulas
| Metric | Formula | Notes |
| --- | --- | --- |
| Total people | Contacted + Out of Office + Bounced + Auto Replied | Deleting a contact decreases the value; totals across multiple time ranges may exceed the overall total |
| Total accounts | Number of accounts (companies) involved in the sequence, based on Total people | |
| Delivery rate | Delivered emails × 100 ÷ Total people | Excludes Bounced contacts; includes Out of Office and auto replies |
| Open rate | Opened emails × 100 ÷ Contacted | Does not include Out of Office or auto replies |
| Reply rate | Replies × 100 ÷ Contacted | Numerator: distinct contacts who replied by email, LinkedIn message or InMail, or a connection request with a note. Does not include Out of Office or auto replies. Based on historical data and may change over time |
| Interested | Interested × 100 ÷ Contacted | Contacts with the Interested inbox category |
| Meetings booked | Meetings booked × 100 ÷ Contacted | Meetings scheduled through your emails |
| Opt-out rate | Opted out × 100 ÷ Contacted | Updates in real time |
| Bounce rate | Bounced emails × 100 ÷ Total people | |
| Not reached | Out of Office + Bounced + Auto Replied; rate = Not reached × 100 ÷ Total people | Hover over the metric on the Reports page for the per-status breakdown |
## Edits and deletions that change the numbers
- Deleting a contact decreases Total people.
- Deleting a team member does not change the metrics in team reports.
- Removing the Opted out status from a contact changes the opt-out value.
- Deleting a contact who has the Opted out status does not change the metric.
- Deleting the contact from the sequence and removing the Opted out status excludes them from the stats.
## How opens and clicks are recorded
- **Opens** — Reply adds a tracking pixel to emails when opens tracking is enabled (it is disabled by default, per sequence). If the recipient has images disabled, or the email landed in spam where images are not displayed, the open is not recorded. Plain text mode must be off for open tracking.
- **Clicks** — Reply wraps hyperlinks in the template with its tracking link and redirects to the destination on click. Link tracking is disabled by default; links must be inserted as hyperlinks in the editor. Clicks in emails sent with the Send test button are not tracked. Click tracking can reduce deliverability.
- Custom (branded) tracking domains are recommended over the default tracking domains for better deliverability — see [Email deliverability](/learn/email-deliverability).
## Meeting attribution
- Meetings booked via a meeting link in a sequence are tracked by source channel: **Email, SMS, Call, WhatsApp, LinkedIn**. The per-channel details appear in Reports → Team performance and can be exported.
- The Reports page **inside a sequence** shows only meetings booked within emails.
- When a prospect books through the meeting tracking link, they receive the **Meeting booked** status (booked meetings tracking is in beta and requires a connected calendar).
## Sequence-based CSV export fields
| Field | Description |
| --- | --- |
| Sequence name | The name of the sequence |
| Sequence ID | Unique identifier of the sequence |
| Owner email | The user who owns the sequence; a sequence with more than one owner gets a separate row per owner |
| Email account | The email account used to send; a sequence with multiple accounts gets a separate row per account; deleted email accounts are included in the stats |
| Sequence status | Current status of the sequence (New, Active, Paused) |
| Prospects count | Number of contacts who were sent emails |
| Active count | Contacts currently in the sequence who received emails and have the Active status |
| Bounced count | Contacts whose emails could not be delivered |
| Bounce rate % | Bounced count ÷ Prospects count × 100 |
| Clicked count | Contacts who clicked at least one link in any email |
| Click through rate | Clicked count ÷ Delivered count × 100 |
| Contacted count | Contacts who received emails and are not in Bounced, Out of Office, or Auto Replied status |
| Delivered count | Contacts whose emails were successfully delivered (excluding bounced) |
| Interested count | Contacts with the Interested inbox category |
| NotInterested count | Contacts with the Not interested inbox category |
| NotNow count | Contacts with the Not Now inbox category |
| DoNotContact count | Contacts with the Do Not Contact inbox category |
| Opened count | Contacts who opened at least one email |
| Open rate % | Opened count ÷ Contacted count × 100 |
| Paused count | Contacts currently in the sequence who received emails and have the Paused status |
| Replied count | Contacts who replied, excluding Bounced, Out of Office, and Auto Replied contacts |
| Reply rate % | Replied count ÷ Contacted count × 100 |
| AutoReplied count | Contacts whose reply was detected as an auto reply |
| OutOfOffice count | Contacts whose reply was detected as an out-of-office reply |
| OptedOut count | Contacts who unsubscribed from receiving emails |
| Start date | Sequence launch date (UTC time) |
## Contact-based CSV export fields
Binary fields use 1 = yes, 0 = no.
| Field | Description |
| --- | --- |
| Contact ID | Unique identifier of the contact |
| Contact First name | Contact's first name |
| Contact Last name | Contact's last name |
| Contact email | Contact's email address |
| Contact country | Country associated with the contact |
| Contact company | Company name of the contact |
| Contact industry | Industry of the contact's company |
| Contact company size | Size of the contact's company |
| Email account | The email account used to send emails |
| Sequence | The name of the sequence the contact is in |
| Sequence Step | The step the contact is currently in |
| Subject | Subject line of the email |
| Template | Email template used |
| Contacted | Whether the contact received an email (1/0) |
| Do not contact | Whether the contact has the Do Not Contact inbox category |
| Delivered | Whether the email was successfully delivered |
| Delivery date | Date and time when the last email was delivered |
| Opened | Whether the email was opened |
| Opens | Number of times the email was opened |
| Replied | Whether the contact replied |
| Interested | Whether the contact has the Interested inbox category |
| Not Interested | Whether the contact has the Not Interested inbox category |
| Not now | Whether the contact has the Not Now inbox category |
| Opted Out | Whether the contact unsubscribed |
| Bounced | Whether the email could not be delivered |
| AutoReplied | Whether the contact's reply was detected as an auto reply |
| Forwarded | Whether the response was forwarded |
| OutOfOffice | Whether the contact's reply was detected as an out-of-office reply |
| Active | Whether the contact is currently active in the sequence |
| Paused | Whether the contact is paused in the sequence |
| Clicked | Whether the contact clicked a link |
| Unsorted | Whether the contact's reply has not been categorized |
| Custom fields | Any additional custom fields associated with the contact |
## FAQ
### Why was an open not recorded?
The open pixel only fires when the recipient loads images. If images are disabled in
their client, or the email was delivered to spam where images are not displayed, the
Opened status is not set. Opens tracking must also be enabled in the sequence settings —
it is off by default.
### Why did a rate change after I looked at it?
Reply rate is based on historical data and may change over time. The opt-out metric
updates in real time and reacts to status changes: removing the Opted out status changes
the value, and deleting a contact decreases Total people, which shifts every rate that
divides by it.
## Related
- [How statistics are calculated](/behavior/statistics-calculation)
- [Why statistics do not match](/troubleshooting/statistics-do-not-match)
- [Campaign analytics](/capabilities/campaign-analytics)
- [Analyze campaign performance](/workflows/analyze-campaign-performance)
- [Statuses](/reference/statuses)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — statistics and reporting endpoints
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — sequence stats and performance comparison operations
---
# API limits and webhooks
> Reference for Reply's API rate limits — the 15,000-call monthly quota, per-team-member allocation, and 10-second call interval — plus the V2 vs V3 webhook generations, event types, subscription scopes, and payload options.
**Reply's API allows 15,000 calls every 30 calendar days per team member — limits are not shared — with a 10-second minimum between calls. Zapier calls count; native integrations do not. Webhooks come in two generations: legacy V2, configured with an API key, and current V3, managed in Settings or via the web API.**
_Status: Reviewed — written against Reply's product documentation on 2026-08-03, not yet confirmed against the running product._
This page covers what the API reference itself does not state: limit semantics and the
two webhook generations. For endpoints, authentication, and schemas,
[docs.reply.io](https://docs.reply.io/api-reference/introduction) is the source of truth.
## Rate limits
| Limit | Value |
| --- | --- |
| API calls | **15,000** every **30 calendar days** |
| Minimum interval between calls | **10 seconds** |
| Scope | Per team member — in team accounts, limits are **not shared**; each member has their own 15,000 calls per month |
| Counts against the quota | Reply's Public API and Zapier integrations |
| Does not count | Calls from native integrations |
| Contact sync via integrations | Same limit as prospects |
Usage is shown on the **Plans & Billing** page, under *User shared add-ons*, in the API
limit counter. Reply's documentation describes the quota as covering every 30 calendar
days and separately states that the limit resets on the first of each month — it does not
reconcile the two statements. What happens to requests once the quota is exhausted is not
documented; to get a higher limit, contact Reply support through the product interface.
General product limits (sending, contacts, LinkedIn) are on [Limits](/reference/limits).
## Webhook generations
Webhooks send real-time data to your endpoint when an event occurs; each notification
includes the event type and the data related to it.
| Generation | Status | Managed via | Auth |
| --- | --- | --- | --- |
| V3 | Current | The Webhooks UI in Settings and the `/webhook-subscriptions` web API | Cookie session plus an `x-xsrf-token` header on write requests |
| V2 | Legacy | The public API | API key |
Users with active V2 webhooks can view them in a read-only info panel in the V3 UI; V2
subscriptions cannot be created or edited through V3 endpoints, and V3 subscriptions
never appear in the legacy listing.
## Webhook event types
| Category | Events |
| --- | --- |
| Email | `email_sent`, `email_opened`, `email_link_clicked`, `email_replied`, `contact_replied`, `reply_categorized`, `email_bounced`, `contact_opted_out`, `contact_finished`, `contact_called`, `email_account_connection_lost`, `email_account_error` |
| LinkedIn | `linkedin_connection_request_sent`, `linkedin_message_sent`, `linkedin_connection_request_accepted`, `linkedin_message_replied`, `linkedin_reply_categorized`, `linkedin_account_alerts` |
| Other | `autopilot_stopped` — fires on the first stop and includes the reason |
Behavior that differs between generations:
| Event | V2 (legacy) | V3 (current) |
| --- | --- | --- |
| `email_replied` | Fires once, on the first reply / when the status is set to Replied | Fires on **every** stored reply, including direct follow-up replies; direct replies have no sequence context, so `sent_email_id` and `sequence_fields` are omitted |
| `contact_replied` | Not available | V3 only — fires when a contact's status becomes Replied, currently for email-detected replies and manual or API "mark as replied"; LinkedIn and SMS replies do not trigger it yet |
## V3 subscription model
| Scope | Availability |
| --- | --- |
| `personal` | Always allowed — visible only to the creating user |
| `team` | Public/Organization team members and Private-team owners; solo users receive `403` |
| `organization` | Reserved — always returns `400` (not yet implemented) |
Payload options, all defaulting to `false`: `includeEmailUrl` and `includeEmailText`
(email events), `includeLinkedInMessageText` (`linkedin_reply_categorized` — currently
API-only, with no checkbox in the Webhooks UI), and `includeProspectCustomFields` (all
events).
Payload details worth knowing before parsing:
- Sequence-linked events carry a `sequence_fields` object with the sequence `id` and `name` (resolved server-side); `step_number` is included except on `contact_finished` and `linkedin_connection_request_sent`, which fire at the sequence level.
- `reply_categorized` always includes `reply_subject`; `linkedin_reply_categorized` includes `inmail_subject` only when the reply is an InMail — regular LinkedIn messages have no subject, so the field is omitted rather than sent empty.
- `email_replied` (V3) and `contact_replied` include `reply_reason`: `EmailDetected` or `StatusSetManually`.
- A subscription's `enabled` flag is toggled only through the dedicated `/enable` and `/disable` endpoints — a `PUT` on the subscription does not accept it.
- The subscription API uses a flat `eventType` field, while delivery payloads nest the type as `event.type` inside an `event` envelope.
Not yet implemented in V3: server-side list filtering, bulk enable/disable/delete, the
`organization` scope, and a pagination envelope on delivery logs (a bare array is
returned).
## FAQ
### Do team members share the API limit?
No. In team accounts each team member has their own allocation of 15,000 calls per month
— limits are not shared between members.
### What happens when the quota runs out?
Reply's documentation does not specify how over-quota requests are handled. Check your
usage on the Plans & Billing page and, if you need more, request a higher limit from
Reply support through the product interface before you hit it.
### Can I still use V2 webhooks?
Existing active V2 subscriptions keep working and are visible read-only in the V3 UI, but
they cannot be created or edited through the V3 endpoints. New subscriptions are made as
V3, in Settings → Webhooks or via the `/webhook-subscriptions` API.
## Related
- [Limits](/reference/limits)
- [Integrations](/capabilities/integrations)
- [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm)
- [Reply detection](/behavior/reply-detection)
## Build with Reply
- REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — endpoints, authentication, and schemas
- MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — an alternative surface for agents that avoids polling the REST API