# 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: 1002 KB, ≈257k tokens. 114 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 — human-edited, facts not yet confirmed against the 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 - [Core concepts](/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 how do the [underlying mechanisms](/learn) work? | | [Capabilities](/capabilities) | Can Reply do this? | | [Workflows](/workflows) | How does the complete outcome work — and [what should I do in my situation](/playbooks)? | | [How to](/how-to) | How do I configure it — and [why did it fail](/troubleshooting)? | | [Behavior](/behavior) | What deterministic logic applies? | | [Specifications](/specifications) | What is this product object? | | [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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 ## Getting an account Sign-up starts from **Try for free** on reply.io. On the account creation page you either enter a work email and create a password, or sign up with Google or Microsoft; the manual route also asks for a reCAPTCHA and acceptance of the Terms of Use and Privacy Policy. A short registration form follows and has to be finished before the platform opens: **Company → About You → Team → Outreach**, four steps on a trial account and three on a paid one, which ends on the Team step. Every field is required, **Continue** stays disabled until the current step is complete, there is no auto-save, and the form cannot be exited part-way — leaving it means starting again. The Company step is skipped when Reply already knows the company behind your domain. Finishing takes you to the Sequences page. Trial scope and limits are listed in [When to use Reply](/start/when-to-use-reply). Signing in afterwards happens at [Reply's login page](https://run.reply.io/login) with the same three methods: email and password, Google, or Microsoft. **Forgot password** emails a reset link. Organizations on Microsoft Entra SSO with a tenant lock are the exception — on those domains Microsoft sign-in is the only available method, and password and Google sign-in are unavailable. The Reply mobile app has its own login screen supporting the same three methods. ## 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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) --- # Core concepts > 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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%. - **Reputation is not one number.** Gmail, Outlook, and every other provider score you from how *their* users treat your mail, so the same sender can sit in the inbox at one provider and the spam folder at another. Knowing which providers your audience actually uses tells you where to watch. - **Open rates are directional, not exact.** Apple Mail Privacy Protection and tighter provider anti-tracking measures mean a reported open is no longer a reliable count of human attention. Open tracking still shows trends — whether mail is landing, being ignored, or drifting toward spam — which makes it most useful during domain warm-up and when diagnosing a sudden drop in performance. - **Compliance is a legal layer, not just a filtering one.** CAN-SPAM requires accurate sender information, subject lines that reflect the actual content, clear identification of promotional mail, a visible physical mailing address, and a working opt-out — processed within 10 business days, with the opt-out link kept live for at least 30 days. The sender remains accountable even when a third party sends on their behalf. ## Why messages bounce A bounce is a receiving mail server refusing the message. **Hard bounces** are permanent rejections; **soft bounces** are temporary failures. The server states its reason in a Delivery Status Notification (also called a Non-Delivery Report) that lands in the sending mailbox and carries the problem description, the date and time, the rejecting server, an error code, and usually a troubleshooting link. Reply groups the reasons into categories: | Category | What the server is saying | Documented response | | --- | --- | --- | | Undeliverable | The address does not exist or the mailbox is deactivated — `550 5.1.1`, "User unknown", "Recipient address rejected" | Validate the prospect list before sending | | Mailbox full | The recipient is over quota — `552 5.2.2`, "Mailbox size limit exceeded" | Retry later, or remove the contact from the list | | Authentication failure | SPF, DKIM, or DMARC verification failed — `550 5.7.1 DMARC policy`, "no SPF record found" | Fix the domain's authentication records | | Spam rejection | Filtering rules classified the message as spam — `550` / `554`, "Blocked by spam filter" | Change the content, remove tracking, links, or images, and retry later | | Policy violation | A local or administrative policy on the receiving server blocked it — `554` / `550 5.7.1`, "Administrative prohibition" | Reach that prospect through another channel | | Temporary failure | The recipient server timed out, was busy, or did not answer — `421` / `451` | Resend later | | Sender's block: Gsuite | The sending account exceeded Google's daily sending quota — `550 5.4.5` | Pause sending for 24–48 hours, then restart at low volume and grow slowly | | Sender's block: Office | Microsoft flagged the sender or the tenant exceeded its external-recipient rate limit — `550 5.7.708`, `550 5.7.232`, `550 5.7.233` | Pause 1–2 days or contact Microsoft support with the bounce text | | Other | Not matched to any category | Read the DSN directly | The distinction that matters: most categories are about the recipient or the message — an address that no longer exists, an authentication record that does not verify, content a filter dislikes. The two sender's-block categories are about *you*: the provider decided your sending looks abusive and throttled the account, which is a volume and reputation problem, not a list problem. When Microsoft blocks a sender this way, manual sending from the mailbox usually still works, because the block applies to third-party email automation — so "I can still send from Outlook" is not evidence that the account is healthy. The thresholds that stop a step, and what a bounce does to the contact record, are defined in [bounce handling](/behavior/bounce-handling); how a provider block shows on the sequence toggle and how blocked sends are recovered is in [sequence stopping](/behavior/sequence-stopping). ## What moves open rate Open rate is a weak measurement of a real effect: whether the message reached a human and looked worth opening. The documented levers, in the order they usually matter: 1. **Subject line.** Clear and concise — up to 6 words to express the goal of the email. Personalize it with the recipient's name, company, or something relevant to them, spark curiosity or offer value, and A/B test alternatives rather than guessing. 2. **Spam triggers.** Excessive capital letters and exclamation points ("FREE!!!") and words like "Free" or "Buy now" cost you placement before the subject line ever gets read. 3. **List quality.** Segment by industry, behavior, and other factors so the message can be customized; remove contacts with no opens in 3–6 months; keep validating addresses to reduce bounces. 4. **Send timing.** Tuesday and Thursday tend to perform best for B2B audiences, with Wednesday slightly behind; late morning (10–11 a.m.) and early afternoon (1–2 p.m.) are the common windows. Monday mornings, Friday afternoons, and late nights are the documented ones to avoid. For B2C, Saturday mornings and midweek evenings (roughly 7–9 p.m.) can outperform. None of the timing figures are guarantees — audiences, industries, and geographies behave differently, and A/B testing your own send times is the only way to know. Reply publishes no benchmark open rate to compare against. ## 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. - **Bounce diagnosis.** Bounce reasons surface in three places besides the sending mailbox: hovering the **Bounced** metric on the Reports page shows a detailed breakdown, the People tab exports the full list of bounce reasons, and a People-tab smart filter narrows contacts to a specific bounce category or provider block. - **Per-provider monitoring.** The **Contact email provider** filter segments prospects by their mailbox provider, so you can review performance against Gmail, Outlook, and the rest separately instead of averaging a number that hides one provider going bad. [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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 --- # 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 — human-edited, facts not yet confirmed against the 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) · [Capabilities](/capabilities) · [Workflows](/workflows) · [How to](/how-to) · [Behavior](/behavior) · [Specifications](/specifications) · [Reference](/reference) Group landings inside those sections: [Core concepts](/learn) (in Start) · [Playbooks](/playbooks) (in Workflows) · [Troubleshooting](/troubleshooting) (in How to) 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) --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 - Preview every automatic step before launch — the **Preview** tab renders messages, connection requests, and InMails with variables applied, highlights missing variable values in red, and warns when a message exceeds the character limit after personalization - Detect the character limit from the connected account's LinkedIn subscription — 300 characters on paid plans such as Sales Navigator and Premium, 200 on free plans — and edit the previewed text in place, including InMail subject lines - Detect LinkedIn replies to automatic steps, both text and voice, normally within 1–5 minutes, set the contact to Replied, and surface the thread in the Inbox under the LinkedIn channel - Insert expressive audio tags into an AI voice script with **Enhance with AI**, then **Keep** or **Undo** the result - 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, InMail, or voice messages — the attachment button in LinkedIn Preview appears only on automatic Message steps - Voice a URL naturally in an AI voice message — links do not sound natural read aloud and break the flow, so keep them out of the script ## 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 — 20–40 seconds is the documented target for AI voice; one attachment per message, 3 MB maximum - LinkedIn Preview reads the note limit from the connected account's subscription: 300 characters on paid LinkedIn plans, 200 on free plans - LinkedIn reply detection normally completes in 1–5 minutes and covers text and voice replies - 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. ### Where do LinkedIn replies show up? Reply detects a response to an automatic LinkedIn step — text or voice — normally within 1–5 minutes and assigns the contact the **Replied** status. Three surfaces show it: the People page filtered on the **Replied by LinkedIn** property set to True, the contact's **Activity** tab for the message body, and the [Inbox](/specifications/inbox) with the channel selector switched from **All Channels** to **LinkedIn**. ### What does LinkedIn Preview check before a step runs? The **Preview** tab, opened while you build the sequence steps, renders each automatic message, connection request, and InMail with variables applied. Missing variable values are highlighted in red, and the character limit is detected from the connected account's LinkedIn subscription — 300 characters on paid plans such as Sales Navigator and Premium, 200 on free plans — so a note that only goes over length after personalization is caught before launch. Text is editable in place, including InMail subject lines. The attachment button appears only on automatic Message steps, because connection requests, InMails, and voice messages cannot carry files. ### How do I make an AI voice message sound human? Write the script the way you speak. The documented guidance: aim for 20–40 seconds within LinkedIn's 60-second ceiling, keep sentences short, use contractions, and add breaks with "…", "–", or a `[pause]` tag. Spell out symbols and abbreviations — percent, dollars, million, thousand — instead of `%`, `$`, `m`, and `k`, and leave links out, since they do not read aloud naturally. Inline audio tags such as `[laughing]`, `[chuckles]`, `[whisper]`, `[inhales deeply]`, `[exhales sharply]`, `[slowly]`, and `[fast]` add expression; one or two per message is the documented ceiling, because overuse sounds unnatural. **Enhance with AI** inserts those tags for you, with **Keep** and **Undo** to accept or discard the result. For company or product names the voice engine keeps mispronouncing, add them to the pronunciation dictionary under **Settings → Voices** instead of respelling them in every message. ### 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 - Issue every warmed-up mailbox an **Inbox filter** — a unique ID on the account's Warm-Up page — that you paste into a Google Workspace filter or an Outlook rule so incoming peer-to-peer warm-up mail skips the inbox and files itself under a label or 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). ### How do I keep warm-up mail out of my real inbox? Warm-up is peer-to-peer: once it is enabled, the mailbox both sends and receives warm-up email with other warm-up users, and that traffic lands in the inbox alongside real replies. Each connected account gets an **Inbox filter** — a unique ID shown in the upper right corner of the account's **Warm-Up** page under **Email accounts**. Copy it, then filter on it at the provider. In Google Workspace, open Gmail **Settings → See all settings → Filters and Blocked Addresses → Create a new filter**, paste the ID into the **Has the words** field, click **Create filter**, and tick **Skip the Inbox (Archive it)**, **Apply the label** (create a new label for it), and **Also apply filter to 0 matching conversations**. In Outlook, go to **Settings → Filter → Rules → Add new rule**, choose the condition **Message body includes**, paste the ID, pick or create a folder under **Move to**, and save. From then on warm-up email bypasses the inbox, and what is left there is real mail. ### 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 — human-edited, facts not yet confirmed against the 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) --- # AI writing assistant > Jason AI as an in-editor writing assistant — generating a sequence from one prompt, writing and rewriting email steps from summaries or bullets, adjusting tone, length, and language on selected text, and drafting replies to prospects. **Jason AI writes and refines outreach copy inside Reply's editors: generate a whole sequence from one prompt with From magic, generate or improve any email step from a summary or bullets, adjust formality, tone, length, grammar, and language on selected text, and draft replies to prospects in the Inbox.** _Status: Reviewed — human-edited, facts not yet confirmed against the product._ > **AI writing assistant vs AI SDR.** This page covers Jason AI as a writing assistant — it > generates and edits the words. [AI SDR](/capabilities/ai-sdr) covers Jason AI running the > whole motion: sourcing contacts, scoring them, personalizing per prospect, and re-engaging. > Both are "Jason AI"; the difference is scope. ## At a glance | | | | --- | --- | | **What it does** | Generates a full sequence from one prompt, writes and rewrites email step copy, refines selected text for formality, tone, length, grammar, and language, and drafts replies to prospects | | **Required objects** | A [sequence](/specifications/sequences) with email steps for copy generation; an inbound reply for AI replies | | **Surfaces** | UI | | **Key limit** | Starting a new prompt without highlighting text replaces the whole message with newly generated text | | **Stops on** | Nothing sends by itself unless AI replies are set to **Send automatically**; drafts wait in the Inbox labeled **AI Draft** | | **Does not** | Choose an audience, source contacts, or decide who to write to — and it generates no reply for threads categorized **Do not contact** | | **Plans** | Available in the sequence editor and Inbox; the From magic ✨ sequence builder is documented as beta | ## Summary Jason AI is an AI writing assistant trained by Reply for outreach workflows. It works in three places: the **From magic ✨** sequence builder, where one prompt produces a first email and then the rest of the sequence; the email step editor of any sequence, where it generates or improves copy from a prompt, a summary, or bullet points; and the [Inbox](/specifications/inbox), where it drafts responses to prospect replies. In each place, generated text is editable, regenerable, and refinable with quick commands for formality, tone of voice, translation, and length. Jason analyzes your input, previous conversation context, and sequence information to shape what it produces. ## Problems it solves - A blank sequence editor — one prompt describing the offer produces a first email and a connected set of follow-ups, plus suggestions for which channels to use - Copy that is close but wrong in register — quick commands change formality, tone, length, or language without a rewrite from scratch - Slow follow-up drafting — follow-ups can be generated from the thread rather than written again per prospect - Reply backlog — inbound replies come back as drafts in the Inbox, ready to edit, regenerate, or send ## What Reply can do - Generate a full outreach sequence from a short prompt with **From magic ✨** — the first email first, then the remaining steps built on that prompt and the approved email, including suggestions for which channels to use - Fill and expose **Business case detection** and **Subject** fields alongside the generated body, both editable; the detected business case determines the category all later emails are built from - Generate or improve the text of email steps in any sequence, not only sequences created from Magic - Offer three generation routes on a first email — **Write prompt in editor and improve text with GPT** (expand, rewrite, translate, or generate a new template from scratch), **Generate from a summary**, and **Generate from bullets** - Offer two routes on follow-up emails — **Write prompt in editor and improve text with GPT** and **Generate follow-up based on thread**, so the follow-up uses the context of the previous conversation - Refine a prompt before sending it with the **Improve prompt** button — Formality level (Professional, Friendly, Neutral), Tone of Voice (confidence, persuasiveness, wit, straightforwardness, empathy, or custom), Translation, and Length Modification - Refine generated text by highlighting a fragment and picking a command from the drop-down: **Ask Jason AI** (free-text instruction), **Fix Grammar**, **Formality**, **Tone of Voice**, **Translate**, and **Change Length** - Accept prompts that specify writing style, tone of voice, and language — with a documented set of writing styles from Academic through Technical and tones from Authoritative through Warm - Generate and edit text in a long list of languages, including English, Spanish, French, German, Italian, Portuguese, Dutch, Russian, Chinese (Simplified), Japanese, Korean, Arabic, Hindi, Ukrainian, Polish, Turkish, and many more - Regenerate text and step through the variations with the **previous** and **next** arrows in the Magic sequence, and re-generate a draft in the Inbox - Draft replies to inbound messages — categorize the reply, generate a response from the message, the prior conversation, and the context you supply, then save it as an **AI Draft** or send it automatically - Book meetings from replies categorized **Meeting intent** — check availability on a connected calendar or booking link, propose the next free slot if the first is taken, and compare availability when the contact sends their own link - Refine an AI draft in the Inbox the same way as sequence copy: highlight text and apply a command, add extra instructions, rewrite in a different tone, or translate - Research each prospect before writing, in AI SDR sequences, using up to three personalization points across company, prospect, and industry categories — or your own custom contact fields - Surface the writing rules it has inferred from your likes, dislikes, and edits as editable **AI Learnings** ## What Reply cannot do - Pick your audience — contacts are added separately in the People step of the wizard, by search, CSV import, existing lists, or manual creation - Generate a reply for a thread categorized **Do not contact** - Keep an earlier draft when a new inbound reply arrives — the previous draft is discarded and a new one is generated from the latest message - Answer more than the most recent message when a prospect sends several replies in a row - Preserve your text when you start a new prompt without highlighting anything — the previous text is replaced entirely by the newly generated text - Guarantee equal quality in every language — proficiency varies by language, context, and task - Launch a sequence with missing mandatory data — the Launch step marks incomplete items in red and blocks the launch until they are green - Combine contact-field personalization with most research options — selecting Contact Fields Personalization locks every other research option except Default Research - Update or delete an AI Learning you wrote or edited yourself ## Research inputs for AI SDR copy In an AI SDR sequence, what the AI knows before it writes is configurable. Standard AI SDR personalization already uses your business context plus publicly available data; **personalization points** go a step further by telling the AI what kind of information to research about a company, prospect, or industry before generating messages. They sit under **Step 3 – Research agents** during sequence setup, and you can choose up to **3**. The AI collects the information from public sources — LinkedIn, company websites, recent news. When data is found for every selected point, it prioritizes the most relevant one for the first message and uses the others in follow-ups; when only one or two are found, it focuses on those. | Category | Points | | --- | --- | | Default Search | The company's LinkedIn profile, the prospect's LinkedIn profile, and a Google search for general background | | Company Research | Company Description, Company Mission, Company Tech Stack, 10-K Report, Recent Report for Investors, Financial Report, Fundraising Research, Company Challenges, Company Recent News, Predict Challenges and Competitors, Products/Services Deep Dive, Mergers & Acquisitions, Customer Reviews | | Prospect Research | About Section, Hobbies and Interests, Quote, Achievements, Career Summary, Job Responsibilities in Current Company, Achievements in Current Company | | Industry Research | Recent Industry News, Industry Trends, Competitors Overview & News | | Custom Research | Free-form text describing what the AI should research beyond the predefined categories | | Contact Fields Personalization | Your own custom contact fields — text or links, with the AI able to analyze the content behind a link | Selecting **Contact Fields Personalization** locks every other research option except Default Research. **Custom Research** is rolled out per account and may not appear in every workspace; where it does, the in-product guidance is to name two to four specific research areas, write in full sentences rather than keywords, name the source type ("LinkedIn posts", "job postings", "podcast interviews", "company blog"), set a timeframe, and say what to exclude. ## AI Learnings AI Learnings is a transparency layer over the writing style Jason has inferred from you. The AI watches three surfaces — approval mode, message preview, and Inbox suggested replies — for likes, dislikes, and edits, then consolidates those signals on a daily cycle into named rules written in plain English. Weak signals alone are not enough: likes and dislikes without edits are skipped while there are three or fewer of them. | Column | Meaning | | --- | --- | | Status | Toggle that enables or disables the rule without deleting it | | Learning | The rule itself, in plain English, up to **1000** characters | | Category | **Outbound**, **Reply Handling**, or both — at least one is required | | Source | **AI generated** or **Manual** | | Scope | Account, in the current iteration | | Added | When the rule was created | You can add a learning yourself with **+ Add Learning**, and edit any rule inline. Editing an AI-generated rule changes its source to Manual — and once a rule is manual or has been edited by you, the AI no longer updates or deletes it; it maintains only the AI-generated rules you have not touched. The AI Learnings tab lives under the AI SDR section and is rolled out per account, so it does not appear in every workspace. ## Required inputs A prompt describing the outreach goal, the offer or service, the target audience, and any tone, style, or language preference — the more specific, the more specific the output. For sequence generation you also need contacts, connected sending accounts, a schedule, and the sequence settings. For AI replies you need either the additional context you type into the **AI replies** tab (non-AI SDR sequences) or a connected [knowledge base](/specifications/knowledge-bases) (AI SDR sequences), plus a meeting tool or booking link if Jason should schedule meetings. For research-driven copy in an AI SDR sequence, the personalization points you select during setup — and, if you use contact-field personalization, the custom fields holding that data. ## Produced outputs A generated first email with subject line and detected business case; the remaining sequence steps, logically connected to one another and editable individually; regenerated variants you can page through; refined text at the requested formality, tone, length, and language; and AI-generated replies saved in the Inbox with an **AI Draft** label, sent from your email account with your signature. ## Use Reply when - You need a working sequence quickly from a described offer and will edit rather than write — see [Create a sequence](/how-to/create-a-sequence) - Existing copy needs a register change — more formal, shorter, translated, grammar cleaned — rather than a rewrite - Reply volume outpaces manual drafting and a reviewed draft per thread is enough; see [Process replies](/how-to/process-replies) ## Do not use Reply when - You want the AI to also find, score, and continuously feed prospects into the motion — that is [AI SDR](/capabilities/ai-sdr), with [offers](/specifications/offers), [playbooks](/specifications/playbooks), and [knowledge bases](/specifications/knowledge-bases) as its configuration - Messaging rules must apply consistently across every generated message in a sequence — encode them in a [playbook](/specifications/playbooks) instead of repeating them in ad-hoc prompts - The copy must be signed off unchanged — generated text is a starting point and the documentation assumes you review and edit it ## What you still need to build - The substance of the prompt: the offer, the audience, and the outcome you want — vague or open-ended instructions produce vague text - Your review step — decide per sequence whether AI replies save as drafts or send automatically, and who checks them - The reusable version of your style rules: prompts are per-message, [playbooks](/specifications/playbooks) are per-sequence, and AI Learnings are account-wide - The research angle worth taking — three personalization points is a choice about what makes your outreach relevant, not a setting to max out ```yaml capability: ai_writing_assistant supported: true interfaces: product_ui: live api: not-verified mcp: not-verified cli: not-verified required_objects: - sequence side_effects: - generates_sequences - generates_message_copy - drafts_replies - sends_replies - books_meetings human_approval_recommended: true ``` ## Limits - **From magic ✨** is documented as a beta feature. - Prompting without a selection is destructive: starting a new prompt without highlighting text replaces the existing text entirely. - Personalization points: up to **3** per AI SDR sequence; selecting Contact Fields Personalization locks every other research option except Default Research. - AI Learnings: rule text up to **1000** characters, at least one category per rule, and Account scope only in the current iteration. - Learnings are not formed from weak signals alone — likes and dislikes without edits are skipped while there are three or fewer of them. - Jason generates a reply only for the most recent message when several arrive in a row; a new inbound reply discards the previous draft. - No reply is generated for threads categorized **Do not contact**; replies that match no defined category are still answered, using generic prompts. - Language quality varies — the model is not equally fluent in every supported language, and capability varies with context and task. - **Also Show in Gmail Inbox** works only with Reply's Chrome extension installed — see [Chrome extension](/capabilities/chrome-extension). - Meeting booking requires a meeting tool connected first in **Settings → Meetings**, or a pasted third-party booking link. - Sequence sends still obey mailbox, schedule, and daily limits — see [Limits](/reference/limits) and [When Reply sends](/behavior/sending-schedules). ## FAQ ### How do I generate a whole sequence from a prompt? Create a sequence and select **From magic ✨**, then click **Jason AI** and enter a prompt describing your outreach goal. Review the generated first email — edit or regenerate it — and click **Next**. Jason generates the remaining steps from your prompt and the approved email, including suggestions for which channels to use. Every step stays editable before launch. The wizard then walks through People, Jason AI settings, Settings, Schedule, and Launch. ### What makes a good prompt? Decide the target audience, the message, and the desired outcome first, then write one specific prompt that states the offer and what you want back. Avoid vague or open-ended instructions. You can name a language, writing style, and tone of voice; leave them out and Jason generates default text. Documented prompt shapes include writing an email about a topic, suggesting subject lines, translating an existing email, generating several subject line variants, writing from a summary or from bullets, and capping length — for example, making an email shorter than 110 words. ### How do I change the tone or length of text that is already generated? Highlight the fragment you want to change and pick a command from the drop-down that appears: **Ask Jason AI** for a free-text instruction, **Fix Grammar**, **Formality** (Professional, Friendly, Neutral), **Tone of Voice** (confident, persuasive, witty, straightforward, empathetic, or custom), **Translate**, or **Change Length**. Highlighting matters — clicking the Jason AI button without a selection replaces the whole text with a new generation. ### How do AI-drafted replies to prospects work? When a prospect replies, the thread is categorized in the Inbox and Jason generates a response from the reply, the prior conversation, and your context — the **Provide additional context** box for regular sequences, or the connected knowledge base for AI SDR sequences. The result is saved as an **AI Draft**, where you can edit, regenerate, re-tone, translate, rate it with thumbs up or down, and send. Set **Save as a draft** or **Send automatically** per sequence; AI SDR sequences add a **Mixed** option driven by reply handling rules. See [Reply management](/capabilities/reply-management). ### Can I tell the AI what to research before it writes? In an AI SDR sequence, yes. Under **Step 3 – Research agents** you pick up to three personalization points — company facts, prospect background, industry context, a free-form custom instruction, or your own contact fields. The AI gathers them from public sources, leads the first message with the most relevant one, and saves the rest for follow-ups. ### Does Jason AI learn from my edits? Yes. Likes, dislikes, and edits in approval mode, message preview, and Inbox suggested replies are consolidated on a daily cycle into **AI Learnings** — plain-English rules you can read, edit, enable, disable, or write yourself. Each rule is tagged **Outbound**, **Reply Handling**, or both. Once you edit or author a rule, the AI stops modifying it. ### Where does this end and AI SDR begin? The writing assistant produces words on demand: a sequence from a prompt, copy for a step, a draft for a thread. [AI SDR](/capabilities/ai-sdr) is the standing motion — it derives [offers](/specifications/offers) from your business, applies a [playbook](/specifications/playbooks) to every generated message, sources and scores contacts, personalizes per prospect, answers from a [knowledge base](/specifications/knowledge-bases), and re-engages. If you are writing the strategy and want help with the sentences, this page is the right one. ## Related - [AI SDR](/capabilities/ai-sdr) — the full AI SDR motion; [The AI SDR model](/learn/ai-sdr-model) explains the model - [Build an AI SDR](/workflows/build-an-ai-sdr) — the workflow where generated copy, playbooks, and approvals come together - [Playbooks](/specifications/playbooks) — reusable message-generation instructions, the durable form of a prompt - [Knowledge bases](/specifications/knowledge-bases) — what grounds AI replies in AI SDR sequences - [Reply management](/capabilities/reply-management) · [Inbox](/specifications/inbox) · [Process replies](/how-to/process-replies) - [Create a sequence](/how-to/create-a-sequence) · [Sequence steps](/specifications/sequence-steps) · [Templates and variables](/specifications/templates-and-variables) - [Meetings](/capabilities/meetings) — the calendar side of meeting-intent handling - [Sequence design](/learn/sequence-design) — what to ask the assistant for ## Build with Reply - REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — check the reference for available AI and sequence operations - MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agent access to sequences, inbox threads, and Jason AI configuration --- # AI chat assistant > A natural-language agent inside Reply's new interface and Slack that executes account actions on request, confirms destructive and bulk changes, answers product questions from the help center, searches the web, and hands off to a human. **Reply's AI chat assistant turns plain-English requests into real actions in your account — creating contacts, starting or pausing sequences, replying from the inbox, changing settings. It runs in Reply's new interface and in Slack, confirms destructive and bulk actions before running them, logs every change to the Activity Log, and can escalate to support.** _Status: Reviewed — human-edited, facts not yet confirmed against the product._ > **Rolling out.** The AI chat assistant is available in Reply's new interface and is being > enabled progressively. If the chat entry point is not on your screen yet, it has not been > turned on for your workspace. ## At a glance | | | | --- | --- | | **What it does** | Executes account work from plain-English instructions — contacts, sequences, inbox, accounts, tasks, and settings — and answers product questions from the Reply help center or the public web | | **Required objects** | A Reply account in the new interface; for Slack, a connected Slack workspace and a per-user account link | | **Surfaces** | Web UI (new interface) · Slack (DM and channel @mention) | | **Key limit** | A daily message allowance per plan, reset at midnight in your local timezone; one message counts as one unit no matter how many actions it triggers | | **Stops on** | The confirmation gate — destructive and bulk actions pause the turn until you confirm or cancel; the composer is blocked while a confirmation is pending | | **Does not** | Run in the legacy interface or the mobile app; reveal or regenerate API keys; create or delete contact and account stages; edit per-step integration field mappings; message you proactively in Slack | | **Plans** | Daily message allowance varies by plan; AI SDR actions require the AI SDR entitlement | ## Summary The AI chat assistant is a natural-language agent embedded in Reply. You describe what you want in plain English; it maps the request to a Reply capability, runs it against your account with your own permissions and data scope, and reports back in human-readable terms — sequence and list names, never internal record numbers. It works the same way in the web panel and in Slack, and both surfaces share one message allowance. Two things separate it from a chatbot. It performs real work, so anything destructive or bulk passes a confirmation gate first and every change it makes lands in the workspace Activity Log. And it does not guess: product questions are answered from the bundled Reply help center with the source article cited, general questions go to web search with a sources footer, and when it cannot resolve something it either points you to the exact place in the app or hands the conversation to a human. ## Problems it solves - Knowing what you want but not where it lives — describe the outcome instead of navigating to the right screen - Routine multi-click work (pausing a sequence, adding a contact, reassigning a mailbox, tightening a safety limit) collapsed into one sentence - Product how-to questions answered in place, from help-center articles, with a link to the source - Bulk changes done fast without doing them by accident — narration and a confirm/cancel step before anything destructive runs - Work that has to happen where the team already is — the same assistant answers in Slack - Dead ends: an unsupported request returns a plain-English reason and a navigation path, not a silent failure ## What Reply can do - Take instructions in plain English and resolve names, not identifiers — say "pause Cold Outreach Q2" and it looks up the sequence by name, asking you to disambiguate when names collide - Create and update contacts, change their status, inbox category, or owner, blacklist them, and filter or search your database — see [Filter contacts](/how-to/filter-contacts) - Search sequences, read sequence statistics, compare performance across sequences, start or pause a sequence, add a step, add contacts, and assign email accounts, LinkedIn accounts, or schedules — see [Edit a running sequence](/how-to/edit-a-running-sequence) - Read the inbox and send a reply to a conversation - List email and LinkedIn accounts and reconnect ones that dropped - List schedules, list your tasks, and create or complete a task - Read and change settings across the workspace — sequence settings, email-account safety, signature and opt-out settings, warm-up state, LinkedIn safety limits, notifications, calls, meetings, blacklist domains, schedules, custom fields, enrichment, and integration sync control — see [Configure account settings](/how-to/configure-account-settings) - List, inspect, enable, disable, and delete [triggers](/specifications/triggers), and create or update them within a curated set of actions, conditions, and events; anything outside that set is refused with the allowed values named rather than guessed, and a newly created trigger starts switched off unless you ask otherwise - Operate [AI SDR](/capabilities/ai-sdr) objects for workspaces with that entitlement — knowledge bases, playbooks, and offers; switching a sequence between approval and automatic reply mode; and working the pending-approvals queue (approve, edit and approve, regenerate from feedback, reject, or clear the queue) - Answer product how-to questions from the bundled Reply help center, citing the source article as an inline link, and return step-by-step instructions rather than a definition plus a link - Search the public web for questions outside your account — benchmarks, public company information, news about a contact or company — and append a deduplicated Sources footer - Ask a clarifying question when a request is ambiguous instead of acting on a guess - Tell you when a change to a knowledge base, playbook, or offer will affect sequences that are already running - Hand the conversation to Reply support with a written summary when it cannot resolve the issue itself - Run in Slack with the same capabilities as the web panel — direct message the app, or @mention it in a channel it has been invited to ## What Reply cannot do - Run in the legacy interface — there is no chat panel and no entry point there — or in the mobile app - Reveal or regenerate an API key - Create or delete contact stages or account stages — the taxonomy is a fixed set of eight, so stages can only be renamed, recolored, or re-described - Report whether the [Chrome extension](/capabilities/chrome-extension) is connected for a given user — that state is not stored per user - Change a workspace name or locale, or toggle individual beta features — neither concept exists in the product - Edit per-step integration field mappings, filters, actions, or advanced sync settings — those stay on the Integrations page; the assistant only reports whether each part is configured - Handle credentials when connecting an integration — it returns the connect link and you finish the authorization yourself - Charge you off-session: connecting warm-up returns a payment-required result rather than completing a purchase - Invent an answer when no help article matches — it says so plainly and points you to the right place in the app instead of falling back to web search for product behavior - Expose implementation details, internal names, source code, or ticket numbers, even if a help article happens to mention them - Message you first in Slack — the assistant only responds to messages you send it, and there are no slash commands - Connect more than one Slack workspace to a Reply account, or act for a Slack user who has not linked their own Reply account ## Required inputs A plain-English request. Everything else comes from your session: the assistant runs with your permissions and data scope, and it knows which page you are on, so it can pre-fill context. For Slack, a user with the manage-integrations permission connects the workspace once under Settings → Integrations, then each Slack user links their own Reply account by sending the app a `connect account` message and confirming the one-time link it replies with. ## Produced outputs Real changes in the account — contacts created and updated, sequences started or paused, inbox replies sent, settings written — plus a chat transcript, an entry in the workspace Activity Log for every mutating action, and, where relevant, cited help-center links or a web-search Sources footer. Handoffs produce a support ticket by email or an in-app support chat pre-filled with the summary. ## Use Reply when - You know the outcome you want and would rather describe it than navigate to it - Someone needs to act on outreach from Slack without opening the app — see [Run multichannel outreach](/workflows/run-multichannel-outreach) for the work being managed - You want product questions answered in place, grounded in the help center - You want a written audit trail of who changed what, automatically — see [Workspaces and roles](/specifications/workspaces-and-roles) ## Do not use Reply when - You are on the legacy interface or a mobile device — use the app UI or the [REST API](https://docs.reply.io/api-reference/introduction) - You need a scripted, repeatable, unattended job — build it on the API or [MCP](/start/agent-index) instead of a chat turn - The change is a free-form structural edit the assistant deliberately refuses, such as per-step integration mappings — do it on the page that owns it ## What you still need to build - Nothing on the chat surface itself — but automation that must run on a schedule belongs on the API or MCP, not in a conversation - Your own review discipline for bulk work: the confirmation gate shows what is about to run, and reading it is the control - Slack governance — who may connect the workspace, and which channels the app is invited to ```yaml capability: ai-assistant supported: true interfaces: product_ui: partial api: not-verified mcp: partial cli: not-verified required_objects: - workspace side_effects: - executes_account_actions - creates_and_updates_contacts - starts_and_pauses_sequences - sends_inbox_replies - writes_settings - writes_activity_log_entries - escalates_to_support human_approval_recommended: true ``` ## Where it runs | Surface | Status | | --- | --- | | Web — new interface | Supported | | Web — legacy interface | Not supported; no chat panel and no entry button | | Slack — DM with the app | Supported | | Slack — @mention in a channel the app was invited to | Supported | | Mobile app | Not supported | In the web panel the chat sits either in the **Center** (default) or on the **Left**, set in its settings. The panel has expand, settings, and close controls, and a top bar showing your daily message allowance and the countdown to reset. Agent replies render as formatted markdown: external links open in a new tab, a link to a contact opens the contact sidebar in place without navigating away, and the starter prompt buttons disappear after your first message. When the allowance is exhausted, the composer is replaced with a view showing the reset countdown and how to continue. In Slack, replies render as Slack blocks. The app posts a "Working on it…" placeholder immediately and updates it in place with the result. Context in a channel is keyed to the thread; in a direct message it is a rolling 24-hour window, after which a new session starts. Every action is scoped to the Reply user that Slack account is linked to. Disconnecting the Slack workspace removes all per-user links, and deactivating a Slack user removes theirs. ## Confirmation before destructive and bulk actions Actions that delete, pause, unsubscribe, or change things in bulk pass a confirmation gate. The assistant first narrates what it is about to do in one sentence ("I'm about to pause the Cold Outreach Q2 sequence"), then presents the pending action with a confirm and a cancel choice, including up to four of the action's parameters so you can see what would run. The turn stops there. While a confirmation is outstanding the composer is blocked — sending a new message returns an error instead of queueing behind it — and confirming twice cannot run the action twice. The gate is on by default. A per-user **Allow destructive actions** preference turns it off, in which case those actions run immediately; the hint under the setting reads "When off, the chat will ask before deletes, pauses, and bulk updates". The behavior is identical in Slack, where the confirmation appears as buttons in the thread and the same preference applies. > **Advisory, not a gate.** Updating a knowledge base, playbook, or offer that an active > sequence already uses tells you the change will affect those sequences. That is an > informational notice, not a confirm-or-cancel step — the change goes through. Writes are also range-checked at the tool layer, so a settings change made through chat is held to the same product limits as the UI — the ranges are in the Limits table below. ## Daily message quota The assistant runs against a daily message allowance that varies by plan. **One user message counts as one unit**, regardless of how many actions, help-center lookups, or web searches the assistant performs while answering it. Web search consumes no additional quota and has no separate daily cap. The allowance resets at **midnight in your local timezone**. The countdown you see is anchored to a server timestamp, so changing your timezone after hitting the limit does not shift the current countdown or hide the timer — the new timezone applies from the next reset. The counter in the top bar updates live after each message, with no page refresh. Web and Slack draw on the same counter: a message sent from Slack is reflected in the web panel's top bar. When the allowance runs out, the composer is replaced with a dedicated out-of-limit view carrying the reset countdown and the options for continuing. Reply Credits can be spent on messages beyond the daily limit; that mechanic is still being finalized. ## Settings and preferences | Setting | Values | Default | | --- | --- | --- | | Chat position | Left / Center | Center | | Allow destructive actions | ON / OFF | OFF | | Sound notifications | ON / OFF | OFF | Preferences are personal — stored per user, not per team. The settings modal also carries a Slack section that shows your own link status: connected as a named Slack user with an unlink action, an invitation to link your account, or a pointer to Settings → Integrations when the workspace itself is not connected yet. ## Auditing what the assistant did Every mutating action the assistant performs is written to the workspace Activity Log under Settings → Activity Log, attributed to the Reply user who asked for it, and tagged with the surface it came from — `Agentic Chat (Web)` or `Agentic Chat (Slack)`. Each entry records what was done, the entity it was done to, and a timestamp. Read-only work — searches, lookups, statistics — is deliberately not logged, so the log stays a record of change rather than of conversation. Handoffs to support are not in the Activity Log either; they are captured in AI chat analytics for administrators. ## Knowledge base and web search Product questions are answered from a bundled copy of the English Reply help center — 592 articles in the first version. Search is keyword-based and returns up to 8 matching articles; the assistant then opens the best match before answering and cites its source URL as an inline link. The marketing website, blog, and legal pages are not indexed. Content is refreshed by shipping an updated bundle, not continuously, so a very recent help-center edit may not be reflected yet. Routing is deliberate. Questions about how Reply works go to the help center first. Questions about your own data — counts, statuses, record contents — go to the account tools instead. General and external questions go to web search, which may include details from your contacts (a name, a company) in the query when you ask something like "find news about this contact". Every web-grounded answer ends with a **Sources** footer: a deduplicated bulleted list of links that open in a new tab, and that footer is stripped from context on later turns so citations do not accumulate. If nothing matches in the help center, the assistant says so and points to the place in the app that handles it. It does not silently fall back to web search for product behavior, and it does not invent an answer. If a web search times out (roughly 30 seconds) it retries once on a transient failure, then tells you in plain text that search is unavailable. ## Handing off to a human The assistant offers to bring in a person on the Reply support team when any one of four things is true: you ask for a human in any phrasing; the same issue has run about three messages with no real progress; your tone signals frustration; or you need an account or support action neither the assistant nor the app can perform but a person can — extending a trial, granting test reply credits, sending the SOC 2 certificate. Missing product features are not a handoff trigger; those are logged for the product team through the unsupported-request path. If the thing exists in the app, you get pointed there instead. In the web app the assistant asks which channel you prefer — the in-app support chat, where a support agent replies inside Reply, or email, which reaches support@reply.io with you in CC and reply-to set to your address. It waits for your answer and never picks for you; if you tell it to decide, it uses email and says so. In Slack only email is available, so it does not ask. On handoff it sends one consolidated summary: what you were trying to do, what has already been tried so support does not repeat it, and why it is being escalated. The chat path pre-fills the in-app support conversation with that summary before a human joins. The assistant hands off at most once per issue, and if delivery fails it tells you directly and suggests emailing support@reply.io yourself rather than dropping the request. Human handoff is gated separately and is rolling out. ## Limits | Limit | Value | | --- | --- | | Message quota | A daily allowance that varies by plan; 1 user message = 1 unit regardless of how many actions it triggers | | Quota reset | Midnight in the user's local timezone, on a server-anchored countdown | | Quota scope | Shared between the web panel and Slack | | Help-center search results | Up to 8 articles per search; keyword matching, not semantic | | Help-center content | English only, 592 articles in the first version; refreshed by release, not continuously | | Web search | ~30 second timeout, one automatic retry on a transient failure; no region or language setting (it searches in the language of your question) | | Pending confirmations | One at a time — the composer is blocked until you confirm or cancel | | Emails per day (sequence setting writes) | 1–10000 | | Delay between emails (sequence and email-account setting writes) | 20 seconds minimum, under 24 hours maximum | | New daily contacts (sequence setting writes) | 1–1000 | | LinkedIn action limits | 0–100 per action category | | Email-account daily send cap | Rejected above your plan's per-mailbox ceiling, with the allowed maximum named — never silently clamped | | Slack workspaces | One per Reply account; connecting another replaces the existing connection | | Slack session context | Thread-keyed in channels; 24-hour rolling window in DMs, then a new session | | Human handoff | At most once per issue | ## FAQ ### Does the assistant do things, or only explain them? It does them. Requests map to real actions in your account, executed with your permissions — creating and updating contacts, starting and pausing sequences, replying from the inbox, changing settings. Explanation is the fallback when a request is out of scope, and even then it returns the navigation path rather than a refusal. ### What stops it from deleting something by mistake? The confirmation gate. Destructive and bulk actions are narrated first, then held with a confirm/cancel choice showing the action's parameters, and the turn does not proceed until you decide. The gate is on by default; the **Allow destructive actions** preference turns it off if you want actions to run immediately. Every change is also recorded in the Activity Log, so a mistake is traceable. ### Why does my message count as one when it did several things? Quota is counted per user message, not per action. A single request that searches the help center, runs three lookups, and updates a sequence still consumes one unit. Web searches inside a turn are free for the same reason. ### Can I use it from Slack? Yes. A user with the manage-integrations permission connects the Slack workspace under Settings → Integrations, then each person links their own Reply account by direct-messaging the app `connect account` and confirming the one-time link. After that, DM the app or @mention it in a channel it has been invited to. Capabilities match the web panel; confirmations appear as Slack buttons; the message allowance is shared with web. ### Where do I see what it changed? Settings → Activity Log. Every mutating action appears there, attributed to you and tagged `Agentic Chat (Web)` or `Agentic Chat (Slack)`, with the entity and a timestamp. Read-only lookups are not logged. ## Related - [AI writing assistant](/capabilities/ai-writing-assistant) — the message-drafting side of Reply's AI, distinct from this command interface - [AI SDR](/capabilities/ai-sdr) — the autonomous agent whose offers, playbooks, and approvals this assistant can operate - [CRM and integrations](/capabilities/integrations) — the Slack connection lives alongside the other integrations - [Triggers](/specifications/triggers) — the automation objects the assistant can create within a curated set - [Sequence stopping](/behavior/sequence-stopping) — what actually happens when you ask it to pause a sequence - [Workspaces and roles](/specifications/workspaces-and-roles) — the permissions the assistant inherits - [Permissions](/reference/permissions) — who can do what - [Agent index](/start/agent-index) — machine-readable entry points for building on Reply ## Build with Reply - REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the same operations the assistant performs, callable directly - MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — the same action layer exposed to your own AI agents, with scoped keys --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the product._ ## At a glance | | | | --- | --- | | **What it does** | Native two-way CRM sync (Salesforce, HubSpot, Pipedrive, Copper) plus in-CRM apps for Salesforce and Copper, workflow platforms (Zapier, Make, n8n), an MCP server for AI agents, real-time webhooks, website visitor tracking, Clay and RB2B lead feeds, Vidyard video in steps, 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; sync emails sent to a contact's secondary addresses into HubSpot; 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 - Install the Reply managed package in a Salesforce Org so reps work from Salesforce: a quick action on the Lead or Contact page layout sends people to Reply, and a separate tab on the record shows their Reply sequence context; each Salesforce user is linked to their own Reply API key through a custom metadata record - 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 - Push Reply calls, tasks, emails, and LinkedIn activities into HubSpot as contact tasks and logged emails on predefined field mappings — call outcome, notes, recording link and duration land in the HubSpot call description; sequence name and step travel with emails; voice-message files attach to the LinkedIn task record - 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 - Log manually created Reply tasks in Pipedrive with the Task created trigger, choosing how each one is recorded: activity for the person, activity for the deal, a new deal in a chosen pipeline, a deal moved to the next stage, or a deal moved to a specific stage - Sync Pipedrive people in either direction with ownership mappings that create new records under the mapped owner and update ownership on existing ones, and a People to sequence block that pairs each Reply owner with a sequence and step - Pull Copper leads and people into Reply, picking one primary email in Work → Personal → Other order - Work from inside Copper CRM with the embedded Reply app: after installing it from Copper's Integrations page and logging into Reply, a Reply tab on any contact or lead adds that person to an existing sequence and shows which sequences they are already in - 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 - Start Zaps from Reply events — sends, opens, replies, opt-outs, bounces, link clicks, inbox categories, a finished prospect, contact changes, and a Zapier step reached mid-sequence — and let Zapier act back on Reply by creating or updating people, pushing them to a sequence, or changing their state in one, with custom variables mapped onto default fields - Automate through 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 - Embed Vidyard videos in sequence steps — the step editor's Add Video control signs you in to Vidyard, you pick a video from your list and share it, and the video appears in the email body - 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 - Sync emails sent to a contact's secondary addresses into HubSpot — only the primary email address is covered - Sync manual LinkedIn tasks, LinkedIn messages sent outside a sequence, or prospects' LinkedIn replies into HubSpot — only automatic LinkedIn steps performed after the integration was enabled are synced - Log automatically generated tasks in Pipedrive through the Task created trigger — it covers manually created tasks only - Sync a Pipedrive person to a Reply owner that is missing from the ownership mappings — those people are neither synced nor added to the sequence chosen for that owner - 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. The in-CRM apps need more: the Salesforce package is installed by a user with the System Administrator profile (or package-install rights), the Org must grant third-party access to Reply, and each Salesforce user who should reach their own Reply account needs a metadata record pairing their Salesforce User ID with their Reply API key; the Copper app is installed from Copper's own Integrations page and asks each user to log in to Reply once. Website Visitors also needs a privacy policy and a consent banner on your site before you switch it on. ## Produced outputs Synced contact and lead records with a direct link to the CRM record on the contact card, CRM tasks, logged emails, logged calls, and notes from Reply activity, deals created or advanced in Pipedrive, Pipedrive person activities for manually created Reply tasks, HubSpot task records carrying the sequence name and step (with voice-message files attached where they exist), 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) - The consent and disclosure layer behind Website Visitors — a privacy policy covering what is collected and why, a cookie banner that takes affirmative consent, and a process that honors opt-out and deletion requests ```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 - HubSpot activity sync: tasks arrive with Priority None, Reminder No reminder, and Queue None, and are assigned by task assignee → HubSpot account; a manual email task completed without actually sending logs as a task rather than a logged email - Pipedrive Task created trigger: manually created tasks only, and only for people that exist in both Reply and Pipedrive - Pipedrive ownership mappings: one pre-set pair (the Reply account that set the integration up and the connected Pipedrive account); each owner on the left side of a pair can be selected only once, owners on the right side can repeat - Zapier New Link Clicked: requires the sequence's Clicks tracking toggle to be on, and fires on every click - 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). ### Can I work with Reply from inside my CRM? Yes, for Salesforce and Copper. The Salesforce managed package is installed into your Org by an administrator and then surfaced on the Lead or Contact page layout as a quick action that sends the record to Reply, plus a tab that shows the person's Reply sequence context; a metadata record holds the Reply API key, and teams add one record per Salesforce user so each rep reaches their own Reply account. Copper has an embedded app: install it from Copper's Integrations page, open a contact or lead, click the **Reply** tab, log in once, and from there you can move that person into an existing Reply sequence and see which sequences they are already in. ### 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. ### Which Zapier triggers and actions can I build on? A Zap pairs a trigger (an event in Reply) with an action (what happens next). Connect the Reply account in Zapier with the API key from Settings. | Zapier triggers — events in Reply | Zapier actions — what Zapier does in Reply | | --- | --- | | New Emails Sent (first step or a follow-up) | Create/Update Person | | New Email Opened | Create/Update Person and Push to Sequence | | New Email Replied | Mark as Replied | | New Person Opt Out | Mark as Finished | | New Person Bounce | Move to Next Step | | New Link Clicked | Remove Person from Campaign | | Inbox Category Set | | | Prospect Finished | | | Add or Update Contact | | | Zapier Step Launched (a Zapier step reached mid-sequence) | | Two triggers repay a closer look. **New Link Clicked** is one-way (Reply to your app), needs the sequence's Clicks tracking toggle on, and fires on every click — its payload carries a clicks-count value, so add a Zapier filter that proceeds only when the count equals 1 if you want the first click alone. **Prospect Finished** carries the contact's name, email, phone, company, title, city, state, country, LinkedIn URL, company size, industry, time zone, campaign name, account and custom fields, the reason for finish (Bounced, Replied, Finished after X days, Manual), the finished step number, and the total step count — enough to write completion data into CRM custom fields you create for it. Typical patterns people build: create or update a Reply contact (and push it to a sequence) from a new Mailchimp subscriber, a new Agile CRM contact, a Typeform submission, or a new Google Sheets row; create a lead in Close when a reply arrives; and post a Slack notification when a prospect replies or finishes a sequence. ### What do I need in place before turning on Website Visitors? Legal groundwork, because you are responsible for collecting and using visitor data lawfully. Publish a privacy policy that discloses what data you collect, why — including marketing and outreach — how it may be combined with other sources to build visitor profiles, and how visitors opt out. Run a cookie banner that takes affirmative consent before cookies or similar technologies are placed, explains what is collected and why, and offers an opt-out. Then handle the data accordingly: in the U.S. that includes respecting CCPA and CPRA rights — the right to know what personal information is collected, to request its deletion, and to opt out of its sale or sharing — with a process that acts on opt-out requests promptly. > What applies to you depends on your location, your visitors' locations, and your business > size, and some thresholds exempt small businesses. Confirm the specifics with a legal > professional rather than treating this list as complete. ## 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 --- # Chrome extension > The Reply Chrome extension finds emails on LinkedIn, LinkedIn Recruiter, Gmail, and CRM pages, pushes contacts into Reply lists and sequences, and executes call, SMS, WhatsApp, LinkedIn, and manual email tasks from the browser. **Reply's Chrome extension works on LinkedIn, LinkedIn Recruiter, Gmail, and Salesforce, HubSpot, or Copper pages. It reveals contact emails, flags valid and invalid ones, saves people into Reply lists and sequences, and executes sequence tasks — manual email, LinkedIn, call, SMS, WhatsApp — from the browser, syncing every action back to your account.** _Status: Reviewed — human-edited, facts not yet confirmed against the product._ ## At a glance | | | | --- | --- | | **What it does** | Reveals contact details on LinkedIn, LinkedIn Recruiter, Gmail, and CRM pages; saves people to Reply lists, sequences, and account records; creates, filters, and executes tasks — call, SMS, WhatsApp, LinkedIn, manual email, meeting, to-do; holds live SMS conversations; adds Template and Add to sequence buttons to the Gmail composer | | **Required objects** | A Reply account signed in from the extension; contacts, and the lists, sequences, or tasks they land in | | **Surfaces** | Chrome extension, paired with the Reply UI — the Tasks page **Launch** action opens selected tasks in the extension in execution mode | | **Key limit** | Designed and optimized for Google Chrome; other browsers are not guaranteed, and updating means removing and reinstalling the extension | | **Stops on** | A red banner or an error: an SMS cannot go to an opted-out contact or an invalid phone number, and the task stays open until the issue is resolved | | **Does not** | Track WhatsApp replies; edit account industry or company size; sync the Salesforce City field or the Recently Viewed Contacts (Leads) list; sync custom fields when syncing a CRM contact *list*; show tasks assigned to other team members; put placeholder-email contacts into sequences with email steps | | **Plans** | Cloud Calls must be enabled in the Reply web application before calling; SMS requires a registered A2P messaging campaign; task visibility follows Team Edition rules | ## Summary The extension is a browser-side surface over the same Reply account you use in the web application. It does two jobs. First, **acquisition**: on a LinkedIn profile, a LinkedIn Recruiter search, a Gmail thread, or a CRM contact page, it identifies the person, looks up an email address, and saves them as a [contact](/specifications/contacts) — into a [list](/specifications/lists), into a [sequence](/specifications/sequences) at a chosen step, or both, attaching the company record along the way. Second, **execution**: it is where manual sequence work actually happens — call, SMS, WhatsApp, LinkedIn, and manual email [tasks](/specifications/tasks) are opened, edited, sent, logged, and completed there, which moves the contact to the next step. A contact's own record adds direct actions outside any task: dial them, hold an SMS conversation, or read the activity history. Reply's documentation names the extension several ways — *Findy: Email Search and Outreach*, *Reply: LinkedIn Email Finder and Outreach*, and simply *Reply Chrome Extension* — all pointing at the same Chrome Web Store listing. Article screenshots and menu names are the part most likely to have drifted; the behavior below is stable. ### Where it works | Surface | What the extension adds | | --- | --- | | LinkedIn feed and search results | Reveals details for profiles as you scroll a People search; individual or bulk **Move to** into a list or sequence, including **ALL** contacts on the page | | LinkedIn profile page | Single search — the extension gathers the profile automatically; **Reveal details** then **Move to** | | LinkedIn Recruiter | **Find emails** starts a bulk search across the result set, or an individual search from one profile; results save to a sequence or list | | Gmail inbox and New Message | Hovering a contact opens **Create contact** with Email, First name, and Last name prepopulated, or **Edit contact** if the person already exists | | Gmail composer | **Template** inserts or saves Reply templates; **Add to sequence** enrolls the recipient | | Salesforce, HubSpot, Copper pages | Reads the contact or list on screen and creates or enriches the matching Reply contact | Page-specific search is enabled by default. On a LinkedIn page it prepopulates First name, Last name, Title, Company, City, Country, and LinkedIn URL; in Gmail it prepopulates Email, First name, and Last name. ## Problems it solves - Prospecting inside LinkedIn without leaving the tab — find the person, get the email, and enroll them in one pass - Bulk sourcing from LinkedIn Recruiter, which has no native export into an outreach tool - Manual sequence steps stalling because there is nowhere convenient to execute them — the extension is the execution surface for call, SMS, WhatsApp, and manual email tasks - Re-typing prospects that already exist in Salesforce, HubSpot, or Copper into Reply - Duplicate company records piling up as new people arrive from LinkedIn one profile at a time - Losing the next touch after a call — logging a call and creating the follow-up task happen in the same dialog - Calls placed on a physical phone or another system never reaching Reply's reporting ## What Reply can do - Reveal contact details for LinkedIn People search results as you scroll, then move one contact, a selection, or **ALL** contacts on the page into a Reply list or sequence - Run a single search from one LinkedIn profile, saving the company record too when Accounts (company records) are enabled in Reply - Save contacts that have no email address when the **Save without email** setting is on — Reply generates a placeholder address so they can still enter LinkedIn sequences - Filter revealed contacts by valid or invalid email before pushing them into a sequence - Search LinkedIn Recruiter in bulk or per profile with **Find emails**, and enrich contacts that already exist in Reply instead of duplicating them - Attach new LinkedIn contacts to accounts automatically from the company information LinkedIn provides, matching on either **account domain** or **account name** through the *Assign new contacts to the existing accounts based on* setting - Show **Account**, **Account Industry**, and **Account: Company size** on the contact profile, and reassign the contact to any existing account from the Account drop-down - Browse the **People** tab — every contact in your Reply account — and act on one: Move to a list or sequence, Send Email, Send WhatsApp Message (when a phone number exists), Change Status, or Blacklist and unblacklist - Move a contact to a sequence from the Contact Details screen, choosing the sequence *and* the step it starts at, with a confirmation toast - List every task in the account — sequence-generated and standalone — on the **Tasks** tab, filtered by interval, sequence, and task type, then **Launch all tasks** to open them one by one - Create a task of type To Do, Email, Call, LinkedIn, Meeting, Message, WhatsApp, Manual Email, or SMS, with a start and due date, an attached contact, a sending email address for emails, and a template for the body - Snooze a task for 24 hours, clone it, edit it, or delete it — individually from the three-dot menu, or in bulk with the **All tasks** checkbox - Execute tasks selected and launched from the Reply Tasks page — the extension opens directly in execution mode - Place Cloud Calls from the Dialer, the contact's profile, or a call task, choosing which number to dial from when the account has more than one, taking notes with the pencil icon mid-call, muting the microphone, and ending the conversation from the call module - Set a call resolution from the three defaults — **Positive**, **Negative**, **To Call** — or from custom resolutions, and finish with Complete, Log the call, Log the call and follow up, or Log, complete and follow up - Log calls that happened outside the extension, on another system or a physical phone: filter the Tasks tab to Call tasks, open the task, add a note, and pick **Log a call** from the Complete button's dropdown - Create a follow-up task (Call, To do, LinkedIn, or Meeting) straight from the call log, including for call tasks generated by a sequence - Hold a live SMS conversation from a contact's **Messages** tab — type and send, insert a template from the Templates icon, and watch inbound replies arrive in real time - Edit and send manual SMS from an SMS task with **Send and Complete**, then move automatically to the next task - Edit a WhatsApp message, hand it to WhatsApp Web or WhatsApp Desktop, and send it there - Keep the history in reach — the Messages tab holds the full SMS thread, the Activity tab summarizes calls and SMS on the contact, and the same records appear in the Reply web application - Insert Reply templates into the Gmail composer, save Gmail text back to the Reply template library, and add the recipient to a sequence without opening Reply - Sync individual contacts and contact lists from Salesforce (classic and Lightning), HubSpot, and Copper CRM — automatically when you open a contact page or list, or on demand with **Find emails** or the **CRM Sync** button - Create a Reply contact from a CRM record that is new, or enrich an existing contact with fresher CRM data - Sign in either with Reply account credentials or with the API key from **Settings → API key** ## What Reply cannot do - Guarantee behavior outside Google Chrome — the extension is designed and optimized for Chrome - Update itself — when the extension window reports a new version, you remove the current extension and install it again - Put contacts saved with an autogenerated placeholder email into sequences that contain email steps - Edit **Account Industry** or **Account: Company size** — account information is edited in the Reply web application on the **People → Accounts** page - Prevent duplicate accounts when the assignment toggle is off — new contacts then keep creating new accounts under the same company name - Track replies to WhatsApp messages — those are read in your WhatsApp account, not in Reply - Send a WhatsApp message when you choose **Complete** instead of **Send WhatsApp** — the contact still moves to the next step - Send an SMS to a contact who opted out or whose phone number is incorrect — the attempt errors out until the number or status is fixed - Call without Cloud Calls enabled in the Reply web application, and without a valid phone number on the contact - Show or execute tasks assigned to other team members — team owners see everyone's tasks on the Reply Tasks page, but the extension shows only tasks assigned to you - Execute already-completed tasks selected for launch — they are skipped and never appear on the extension's Tasks dashboard - Sync the Salesforce **City** field, or the Salesforce **Recently Viewed Contacts (Leads)** list - Sync custom fields when syncing a CRM contact *list* — custom fields carry over on individual contact sync only - Sync a HubSpot custom field unless a Reply custom field with the same name exists, or a HubSpot list without the email column enabled in the list view - Sync CRM fields that are not displayed in the CRM interface — Salesforce and Copper fields must be visible on the record for the extension to read them ## Required inputs Google Chrome with the extension installed from the Chrome Web Store, and a signed-in Reply account — credentials, or the API key copied from the **Your API Key** field under **Settings → API key**. For CRM sync, an open session in Salesforce, HubSpot, or Copper with the relevant fields displayed on the record or list view. For calls, Cloud Calls enabled in the Reply web application and a valid phone number on the contact. For SMS, a registered A2P messaging campaign, a valid number, and a contact who has not opted out. For WhatsApp, an active WhatsApp Web or Desktop session. Account matching needs its identifier — account domain or account name — chosen in the extension settings *before* you start searching. ## Produced outputs Contacts created or enriched in Reply, assigned to account records when Accounts are enabled; contacts added to lists and to sequences at a chosen step; completed tasks that advance the contact to the next sequence step; logged calls with resolutions and notes, including calls placed elsewhere; follow-up tasks; sent SMS with a stored conversation thread; WhatsApp messages opened in WhatsApp with the text prepared; templates saved to the Reply library from Gmail. Everything the extension does lands in the same Reply account you would see in the web application. ## Use Reply when - Prospecting happens on LinkedIn or LinkedIn Recruiter and you want people in a sequence the same minute you find them — see [Build a prospect list](/workflows/build-a-prospect-list) - A sequence mixes automated and manual steps and someone has to work the task queue — see [Run multichannel outreach](/workflows/run-multichannel-outreach) - Manual email steps are part of the design: they can only be sent from the extension - Reps are on the phone all day and want dialing, notes, resolutions, and follow-ups in one panel — see [Calls and SMS](/capabilities/calls-and-sms) - Your team lives in Gmail and wants Reply templates and sequence enrollment in the composer - Reps browse CRM records all day and should be able to push them into outreach from that page ## Do not use Reply when - You need a server-side, unattended path — the extension is a human-driven browser surface; use the [REST API](https://docs.reply.io/api-reference/introduction) or scheduled CRM sync for automation, described in [CRM and integrations](/capabilities/integrations) - You need scheduled two-way CRM synchronization — the extension syncs the record in front of you, the native integrations sync on a cycle; see [Sync Reply with a CRM](/workflows/sync-reply-with-a-crm) - You are sourcing prospects in volume from filters rather than from pages you visit — see [Prospect search](/capabilities/prospect-search) - Your team standardizes on a browser other than Chrome ## What you still need to build - The routing decision — which revealed contact goes to which list versus straight into a sequence, and at which step; enrollment rules still apply, see [Contact enrollment](/behavior/contact-enrollment) - A duplicate policy for records pulled from both LinkedIn and a CRM, and the account identifier that keeps company records from splitting — see [Contact deduplication](/behavior/contact-deduplication) and [Companies](/specifications/companies) - Task hygiene: who works which queue, how overdue tasks are cleared, and what happens to the contact when a task is deleted - The WhatsApp reply loop, since Reply does not read WhatsApp responses ```yaml capability: chrome-extension supported: true interfaces: product_ui: live browser_extension: live api: not-applicable mcp: not-applicable cli: not-verified required_objects: - contact - task side_effects: - creates_contacts - enriches_contacts - assigns_contacts_to_accounts - pushes_contacts_to_sequences - completes_tasks - sends_manual_messages - places_calls human_approval_recommended: true ``` ## Limits - Browser: Google Chrome; other browsers are not supported or guaranteed - Updates are manual — remove the installed extension and install it again - Default due date for a task created in the extension: within **30 minutes** of creation - Snooze duration: **24 hours** - Task filters combine with AND logic across interval, sequence, and task type — a task must match every filter set to appear - Filter defaults: the default interval, all task types, all sequences; applied filters persist after closing and reopening the extension until the cache is cleared - Interval filter options: Overdue tasks (default), today, today and forward, this week, last week, this month, last month - Task type filter options: all tasks (default), to do, call, meeting, SMS, WhatsApp, LinkedIn, manual email - Visibility: only tasks assigned to you, in every Team Edition mode - Default call resolutions: **Positive**, **Negative**, **To Call** — custom resolutions are configured in the Reply web application - Account matching identifier: **account domain** or **account name**, one at a time, set before searching - Account Industry and Account: Company size are read-only in the extension - Contact-list sync from Salesforce, HubSpot, and Copper carries all fields **except** custom fields - Contacts saved with a generated placeholder email are limited to LinkedIn sequences ## FAQ ### How do I sign in to the extension? Either with your Reply account credentials, or with an API key. For the key, click **Sign in with the API key** in the extension, open Reply, go to **Settings → API key**, copy the value from **Your API Key**, paste it into the extension form, and click **Sign in**. ### Can I save a LinkedIn contact who has no email address? Yes, if the **Save without email** setting is on. Reply generates a placeholder address so the contact can be saved and moved into LinkedIn sequences. Because the address is autogenerated, those contacts cannot be added to sequences that contain email steps. You can also filter revealed contacts by valid or invalid email before pushing them anywhere. ### How do new contacts get attached to a company record? The extension reads the company LinkedIn shows for the person and prefills the **Account** field. Turn on *Assign new contacts to the existing accounts based on* in the extension settings and pick the identifier — account domain or account name — before you start searching: matching contacts then join the existing account instead of creating another one with the same name. Industry and company size are shown but edited in the web application. See [Companies](/specifications/companies). ### Can I call and text a contact without a task? Yes. Open the contact in the **People** tab: the phone icon dials them through Cloud Calls (pick the number to call from if several are connected), and the **Messages** tab is a live SMS thread where inbound replies appear as they arrive and templates can be inserted. Calls made on a physical phone or another system can still be logged from a Call task with **Log a call**. ### What happens to a contact if I delete their sequence task? The contact moves on to the following step in the sequence. Bulk deletion behaves the same way, so filter carefully before selecting the **All tasks** checkbox — see [Tasks](/specifications/tasks) and [How sequences execute](/behavior/sequence-execution). ### Can a team owner execute a teammate's tasks from the extension? No. In Team Edition, public or private, owners can *see* every team member's tasks on the Reply Tasks page but execute only tasks assigned to them, and the extension shows only tasks assigned to you. See [Workspaces and roles](/specifications/workspaces-and-roles). ### How do tasks get from the Reply Tasks page into the extension? Open **More → Tasks** in Reply, select the tasks (or use the **All** checkbox), and click **Launch**. The extension opens in execution mode and walks the tasks one at a time. Completed tasks in the selection are skipped. ### Does the extension send WhatsApp messages itself? No. It prepares and lets you edit the message, then hands it to WhatsApp Web or WhatsApp Desktop, where you press **Send**. Replies are not tracked back into Reply — check them in your WhatsApp account. ### Which CRM fields sync, and when does sync run? Sync is on by default and runs each time you open a contact page or a list in Salesforce, HubSpot, or Copper; **Find emails** or the **CRM Sync** button runs it on demand, and manual-versus-automatic list sync is a setting in the extension. Individual contact sync covers basic and custom fields when they are mapped with matching types; list sync covers everything except custom fields. Salesforce's City field is not synced, and Mailing Address maps into Reply's Country and State fields — falling back to Other Address when Mailing Address is empty. ### What is the difference between the extension and the native CRM integration? The extension acts on the record you are looking at, in your browser session, driven by you. The native integrations sync in the background on a schedule with field mappings, filters, and push-to-sequence rules. They are complementary — see [CRM and integrations](/capabilities/integrations). ## Related - [Tasks](/specifications/tasks) — the object the extension executes - [Companies](/specifications/companies) — the account records contacts are assigned to - [Prospect search](/capabilities/prospect-search) — filter-driven sourcing, as opposed to page-by-page reveal - [LinkedIn outreach](/capabilities/linkedin-outreach) — the channel most extension work feeds - [Calls and SMS](/capabilities/calls-and-sms) — the Cloud Calls and SMS capability behind the call and SMS tasks - [CRM and integrations](/capabilities/integrations) — scheduled two-way CRM sync - [Run multichannel outreach](/workflows/run-multichannel-outreach) — the workflow that generates these tasks - [Contact enrollment](/behavior/contact-enrollment) — what happens when a saved contact reaches a sequence - [Import contacts](/how-to/import-contacts) — the bulk alternative to page-by-page saving ## Build with Reply - REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the contact, list, and sequence operations the extension performs by hand - MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agent access to the same contacts, sequences, and task queue --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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) — import-prospects workflow --- # 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 — human-edited, facts not yet confirmed against the 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) — launch-outreach workflow with confirmation guardrails --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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) — manage-replies workflow --- # 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 — human-edited, facts not yet confirmed against the 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. On HubSpot the four activity steps are named after what they produce — Calls in Reply ⟶ Contact Tasks in HubSpot, Tasks in Reply ⟶ Contact Tasks in HubSpot, Emails in Reply ⟶ Contact Logged Email in HubSpot, and LinkedIn Activities in Reply ⟶ Contact Tasks in HubSpot. On the Default profile you toggle them on; on the Custom profile you add each one through **Add sync step**, then toggle it on and click **Sync now**. Existing activity is carried over on that first pass, and later passes keep it current. 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 — **+ Add owner mapping** adds a pair and **Save and apply for all steps** copies the pairs everywhere. One pair is pre-set: the Reply account the integration was set up from and the CRM account it connected with. On the left of a pair, each owner can be selected only once and only from the team members you have access to; on the right, the same owner can appear several times. The mapping works in both directions — new CRM records are created under the mapped owner and existing ones have their ownership updated to match the rules, and the same holds for contacts arriving in Reply. Do not combine Owner ID filters with ownership mappings, and switch off Salesforce automatic assignment rules — both interfere. 7. **Push synced contacts into sequences.** On a CRM-to-Reply step, the People to sequence section appears below the owner mappings; each row reads Reply owner → sequence → 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. Pick an owner who is not in the ownership mappings and nothing happens for that row — those people are not synced and never reach the sequence. 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. The **Task created** trigger covers tasks you create by hand on the Tasks page (To do, Call, LinkedIn, Manual email, Manual SMS, WhatsApp, or Meetings): switch it on, pick how the activity is recorded, and click **Save** — from then on each new manual task shows up as a planned activity on the Pipedrive person. 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. ## What activity looks like on the CRM side Activity steps use predefined field mappings — unlike contact fields, there is nothing to configure per field. Plan the CRM side around what actually arrives. ### Reply activity in HubSpot | Reply activity | HubSpot record | Predefined mapping | | --- | --- | --- | | Logged call | Logged call | Contact → associated record; call outcome Positive → Connected, To call → No answer, Negative → Wrong number; date and time of the call → date and time; call notes, the recording link, and the duration → description | | Task | Contact task | Task type → task name; contact → associated record; sequence name (where there is one) and the message body or task description → description; due date → due date; task assignee → assigned to | | Email — automatic, manual, or direct | Logged email | Task name → Manual email or Automatic email; contact → associated record; date and time of completion → date and time; sequence name, subject line, and email text → description; task assignee → logged by | | LinkedIn activity from a sequence | Contact task | LinkedIn activity type (LinkedIn Message, Connect, InMail, Voice Message, and so on) → task name; contact → associated record; sequence name → description; date and time of completion → date and time; a voice-message file is attached to the record | HubSpot users can see whether an email was outbound or inbound and which sequence and step it came from, where that information exists. The LinkedIn account owner in Reply becomes the HubSpot task owner; other tasks follow task assignee → HubSpot account. A manual email task completed without actually sending is logged as a task rather than a logged email. ### How Pipedrive records a synced trigger or task | Recording option | Result | | --- | --- | | Record activity for the person | The activity is recorded on the person's record — the default | | Record activity for the deal | The activity is recorded on the deal associated with that contact in Pipedrive | | Create a deal | A deal is created for that contact in the pipeline you pick from the drop-down, or in a new one | | Move deal to the next stage | The deal moves one stage forward | | Move deal to the specific stage | The deal moves to the pipeline and stage you choose | ## 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 - **Unmapped owner in People to sequence** — a row pointing at a Reply owner missing from the ownership mappings syncs nobody and enrolls nobody - **Secondary email addresses** — where a contact carries several addresses, only emails sent to the primary one reach HubSpot - **Manual LinkedIn work** — HubSpot receives automatic LinkedIn steps only; manual LinkedIn tasks, messages sent outside a sequence, and prospects' LinkedIn replies never arrive - **Automatic tasks in Pipedrive** — the Task created trigger fires for manually created tasks only, so sequence-generated tasks are not logged this way ## 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. With HubSpot activity steps on, complete one call or task for that contact and confirm it lands on the HubSpot record as a logged call or a contact task after the next pass. On Pipedrive, create one manual task and confirm it appears as a planned activity on the person. ## 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, except in HubSpot, where synced tasks arrive with Priority None, Reminder No reminder, and Queue None - LinkedIn activities: automatic steps only, and only those performed after the integration was enabled; Pipedrive does not sync them - HubSpot tasks are distributed by task assignee → HubSpot account, and a LinkedIn task's owner is the Reply LinkedIn account owner - Pipedrive Task created trigger: manually created tasks only, and only for people present in both Reply and Pipedrive - Ownership mappings: one pre-set pair per integration — the Reply account that set it up and the CRM account it connected with; each owner on the left of a pair can be used once, owners on the right can repeat - 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) - [Tasks](/specifications/tasks) — what the Pipedrive Task created trigger and the HubSpot task steps carry over - [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 — human-edited, facts not yet confirmed against the 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/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) — pull reports into scripts - Agent skills: [agents.reply.io/skills](https://agents.reply.io/skills) — analyze-performance workflow --- # 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 — human-edited, facts not yet confirmed against the 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 ## Craft that carries across every play Each play sets the situation, the targeting, and the cadence. The message still has to earn a click, and the levers for that are the same whichever play you are running: - **Personalize with real data.** Use the prospect's first and last name in the body, as merge fields — see [Templates and variables](/specifications/templates-and-variables). - **Give one compelling reason to respond.** Keep the email to five sentences or less so the prospect is not overwhelmed, name the recipient and their job title, and state plainly which problem your product solves and what they gain from replying. - **Segment before you write.** The documented dimensions are referral source, job title, company type, region or city, desired outcome, and interest or problem. Smaller, more personalized sequences are also less likely to be marked as spam. - **Check grammar and punctuation.** Poor grammar irritates recipients; running the copy through an editing tool such as Hemingway or Grammarly is the documented check before sending. - **Close with a professional signature.** Visible contact details are what let a stranger trust the sender — full construction detail lives in [Outbound for seed-stage founders](/playbooks/outbound-for-seed-stage-founders). Reply publishes no benchmark click rate to measure these against. Each play's expected-results table states exactly which numbers are documented and which are not. ## Related - [Workflows](/workflows) — complete outcomes with every product rule on the path - [Core concepts](/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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — the four documented components are your first and last name, your job title, the company name or logo, and a link to the website — because a credible sign-off adds the trust a cold note needs For a founder nobody has heard of, the signature is the credential. Beyond those four basics, the documented additions are a LinkedIn link at minimum — it validates who you say you are — plus a phone number, and whichever extras fit what you sell: a blog link, a free resource, a short video, social icons, a logo with a call to action, or a data point that supports the product. Two items belong there for legal reasons and can sit in the footer: a physical mailing address and an opt-out message. [Reply's free email signature generator](https://reply.io/email-signature-generator/) builds the HTML from a template and copies it out ready to paste. One trap: when you add a photo or logo, use an externally hosted image link — a link into internal storage such as Google Drive will not render for recipients. ### 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 - Signing off with a bare first name — the contact details in the signature are what make an unfamiliar founder credible - 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 --- # How-to guides > Product-interface instructions — connect accounts, import contacts, build and launch sequences, process replies. Steps describe actions, not button positions. _Status: Reviewed — human-edited, facts not yet confirmed against the 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/analyze-campaign-performance) — 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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) — import-prospects workflow --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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). --- # Configure account settings > Where each account preference lives in Settings — the Account tab's personal details and Dark mode toggle, the three email notification reports, per-mailbox signatures, the Beta program, and where compliance and uptime information sits. **Open Settings from the profile menu. The Account tab holds personal details, login email, timezone, password, and the Dark mode toggle; the Emails tab holds Email notifications; Email Accounts holds each mailbox signature; and the Beta tab opts you into early features. Compliance and uptime information lives outside the app.** _Status: Reviewed — human-edited, facts not yet confirmed against the product._ ## Goal An account configured the way you work: correct personal details and timezone, the right notification emails arriving at the right addresses, a signature on every outgoing message, and the interface in the theme you prefer. ## Preconditions Access to your own Reply account. Two settings are gated: - **Email notifications** are available only to team owners and admins — with Team Edition disabled, in Team Edition Private mode, and in Team Edition Public mode alike. See [Workspaces and roles](/specifications/workspaces-and-roles). - **Signatures** require at least one connected mailbox — see [Connect a mailbox](/how-to/connect-a-mailbox). ## The Settings tabs Settings groups the account's configuration into tabs. Each one owns a different part of the account: | Tab | What you configure there | | --- | --- | | **Account** | Personal details, login email, timezone, password, and the Dark mode toggle | | **Tools** | The Email Quality checker toggle | | **Emails** | Email safety, Email notifications, BCC Settings, and Out-of-Office handling | | **Calls** | Turning calls on or off, renting a phone number, call recording, Custom Caller ID, inbound call transfer, teammate access to Cloud Calls, and call resolutions | | **Email accounts** | Adding and managing mailboxes, their daily limit, and the overall email count per mailbox | | **LinkedIn Accounts** | Connecting, pausing, and removing LinkedIn accounts, LinkedIn limits, refreshing the connection cookie, and revoking connection requests | | **Triggers** | Automated actions on contacts and emails — adding to lists, moving to sequences, assigning statuses and stages, and removing contacts | | **Schedules** | Creating and managing sending windows, choosing the default schedule, and reviewing schedules across the team | | **API Key** | The account's API key, plus **Generate new** to issue a replacement | | **Custom tracking links** | Personalizing the opt-out, open, and click tracking links | | **Meetings** | The Google Calendar integration, Google Meet and Zoom calls, meeting time zone, title, description, and duration | | **Contacts** | Custom fields, contact stages, and Account-based mode prospect handling | | **Chrome Extension** | The link to the extension and its video guide | | **Blacklist** | Blacklisted domains, entered manually or uploaded from a CSV | | **Beta** | The toggle that opts the account into features not yet enabled globally | > The API key is what authenticates the Reply API, the Zapier and Make (Integromat) > integrations, and signing in to the Chrome extension. **Generate new** issues a > replacement key, so update anything already using the previous one. See > [Integrations](/capabilities/integrations) and > [Chrome extension](/capabilities/chrome-extension). ## Profile and account details 1. Open **Settings** and go to the **Account** tab. 2. Fill in the personal details — **First name**, **Last name**, **Company**, **Phone**, and **Title**. 3. Check the **Email** field — this is your login email. 4. Set the **Timezone**. Sending windows are interpreted against it, so a wrong timezone shifts every [schedule](/specifications/schedules). 5. Update the account **Password** here if you need to. ## Email notifications Reply sends three kinds of notification email, each with its own toggle: - **Team reports** — how many emails were sent across the whole team in a chosen interval. Available daily, weekly, or monthly. - **Sequence error reports** — sequence errors from the past 24 hours, with recommendations on how to fix them. - **Notifications when the token expires** — emails about mailbox connection problems, so a broken token does not sit unnoticed. To configure them: 1. Open **Settings** and go to the **Emails** section. 2. Expand the **Email notifications** part. 3. Turn the toggles on or off for the report types you want. 4. For team reports and token-expiration reports, pick the addresses that receive them. Enter as many as you need, and remove any that are no longer relevant. 5. Save the changes. ## Mailbox signature A signature is set per mailbox, not per account — each connected [email account](/specifications/email-accounts) carries its own. 1. Open **Settings** and go to the **Email Accounts** tab. 2. Click the mailbox you want to add a signature to. 3. Open the **Signature** section and write the signature in the text editor. It can include your name, job title, company website, and social media links. 4. Click **Save**. The signature then appears on every email sent from that mailbox. If a signature copied from elsewhere will not paste into the editor, build it as HTML and use the source code instead — Reply's [email signature generator](https://reply.io/email-signature-generator/) produces the signature in HTML format for exactly this case. ## Interface preferences ### Dark mode 1. Open **Account settings** in Reply. 2. Enable the **Dark mode** toggle. Turning the toggle off returns the interface to light mode. Dark mode set in the browser syncs to Reply automatically — in Chrome, click the three dots next to your profile photo and go to **Settings → Appearance → Dark mode**; in Safari, open **Settings → System Preferences → Appearance → Dark mode**. ### Beta program The Beta program gives access to the latest features before they are publicly available. 1. Open **Settings**. 2. Scroll down to the **Beta** tab. 3. Turn the toggle on. 4. Confirm. Turning the toggle off removes the beta features from the account — along with some pages and the data generated and used by those features. > Disabling Beta is not a neutral undo. Pages and data that only exist because of a beta > feature disappear from the account when the toggle goes off. ## Compliance, security, and status These are not in-app settings — they are reference sources you point at when someone asks how Reply handles data or whether the platform is up. **Uptime and incidents.** The [status page](https://status.reply.io) reports uptime and downtime for the web application, API availability, the Reply website, the Chrome Extension, and Integrations. It is monitored automatically and updated every 4 hours, and statistics are kept for the last 90 days. The incident list sits in the lower part of the page. **Security.** Reply runs on MS Azure Cloud Services, with infrastructure designed in multiple layers of defense-in-depth security measures and data centers guarded by perimeter fencing, video surveillance, security personnel, and secure entrances. Access to the production environment is limited to authorized members of the Reply engineering team, and database access is restricted to specific IP addresses. All network connections use SSL/HTTPS, and internal infrastructure sits behind firewall policies. Data is backed up every minute with incremental encrypted backups, stored in geo-replicated storage that keeps six copies across two Azure data centers. Your data remains your property — it is not shared with third parties or mined for advertising, and you get time to export it before any deletion. The application is protected against SQL injection, cross-site scripting, authentication vulnerabilities, application setup vulnerabilities, sensitive data theft, and cross-site request forgery. **GDPR.** Reply is aligned with GDPR legislation, with one stated exception: the LinkedIn Email Finder and Outreach extension, which is used for LinkedIn scraping. Used without that extension, the rest of the platform is compliant with the legal obligations set out in the regulation. The extension only extracts information that is in open access on LinkedIn, and Reply handles data-controller requests — including erasing that data from the system on request. Customer data in Reply accounts is stored and processed in the Azure Cloud; outside the application it is used only in aggregated form for analysis. Customers act as the data controller for the people in their accounts, and Reply acts as the processor. ## Common mistakes - Leaving the **Timezone** on the Account tab at its default — every schedule is then interpreted against the wrong zone. - Expecting a signature set on one mailbox to apply everywhere. It applies only to emails sent from that mailbox; each connected account needs its own. - Clicking **Generate new** on the API Key tab without updating the integrations that use the previous key. - Turning the Beta toggle off and expecting the account to look exactly as it did before. Data created by beta features goes with them. - Reading email-account statistics right after a schedule that runs past midnight UTC. Email account limits update daily at 00:00 UTC, and stats can show incorrect values when a sequence schedule is extended past that point. ## FAQ ### Who can set up email notifications? Only team owners and admins. The setup is available with Team Edition disabled, in Team Edition Private mode, and in Team Edition Public mode — but a regular member does not see it in any of them. ### Can notification emails go to someone other than me? Yes, for team reports and token-expiration reports. Both let you pick the addresses that receive them, and you can enter as many as you need or remove ones you no longer want. ### Where do I add my email signature? In **Settings → Email Accounts**, on the mailbox itself: click the mailbox, open the **Signature** section, write it in the text editor, and save. If pasting fails, use the HTML source code instead. ### Does dark mode follow my browser? Yes. Dark mode turned on in the browser is synced with Reply automatically. You can also set it directly with the **Dark mode** toggle in Account settings, and turn that toggle off to go back to light mode. ### Where do I check whether Reply is down? On the [status page](https://status.reply.io). It covers the web application, API availability, the website, the Chrome Extension, and Integrations, refreshes every 4 hours, keeps 90 days of history, and lists incidents at the bottom of the page. ## Related - [Connect a mailbox](/how-to/connect-a-mailbox) · [Email accounts](/specifications/email-accounts) - [Configure sending limits](/how-to/configure-sending-limits) - [Schedules](/specifications/schedules) · [Triggers](/specifications/triggers) - [Workspaces and roles](/specifications/workspaces-and-roles) · [Permissions](/reference/permissions) - [Integrations](/capabilities/integrations) · [Chrome extension](/capabilities/chrome-extension) ## Build with Reply - REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — the account API key authenticates every call - MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents read and update notification and mailbox settings - CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted settings changes --- # 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 — human-edited, facts not yet confirmed against the 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 launch-outreach skill wraps this flow --- # 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 — human-edited, facts not yet confirmed against the 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/analyze-campaign-performance). ## 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 --- # Edit a running sequence > What you can safely change on a live sequence and what you cannot — appending and deleting steps, switching to conditional, per-contact email edits, CC and BCC, custom opt-out links, clearing a Bounced status, and bulk actions across sequences. **Steps can only be appended to the end of a live sequence, and an edit never reaches contacts who already passed that step. Deleting a step is permanent. To add conditions, duplicate the sequence and move the Throttled contacts across. Per-contact wording is edited in the Preview tab, without touching the template.** _Status: Reviewed — human-edited, facts not yet confirmed against the product._ ## Goal A live [sequence](/specifications/sequences) changed without disrupting the contacts already moving through it — and a clear picture of which contacts each change reaches. ## Preconditions An existing sequence with contacts in it. Read [How a sequence executes](/behavior/sequence-execution) first if you are not sure where your contacts currently sit — the **Current step** column in the sequence's People tab shows the step each contact is waiting for. ## The rule behind every live edit Edits are forward-looking. A change to a step's content or delay applies only to the contacts that have not reached that step yet; contacts already past it keep what they received. Restructuring is narrower still: you cannot rework a stretch of the sequence that contacts have already completed, which is why steps append to the end rather than insert at the top, why switching to conditional means duplicating, and why a per-contact wording change lives in the Preview tab instead of the template. Deleting a step is the one change that reaches everyone. | Change | Who it reaches | | --- | --- | | Editing a step's content or delay | Only contacts that have not reached that step yet | | Appending a new step at the end | Contacts that are still `Active` and have steps remaining | | Deleting a step | Everyone — the step disappears from the sequence for all contacts | | Editing an email in the Preview tab | One contact, on one step; the template is untouched | | Adding CC or BCC to a template | Sends of that step that have not gone out yet | ## Change the steps ### Add a step 1. Open the sequence's **Steps** tab and add the new step at the end of the steps list. 2. If the sequence is finished, change the contacts' statuses from **Finished** to **Active**. This is required — the sequence will not start sending new emails unless the contacts are active. 3. To reactivate only some people, filter first and activate the result. A filter that excludes the Replied, Bounced, and Opted out contacts leaves you with just the ones worth another touch. Once the contacts are active, the sequence resumes sending. A step appended to a running sequence picks up a default delay based on its position — the position-to-delay table is in [How a sequence executes](/behavior/sequence-execution). > An active sequence with contacts in progress cannot take a new **first** step — the button > to insert before Step 1 is hidden, and steps can only be appended at the end. Build the > opening touch before you launch, or duplicate the sequence. ### Delete a step 1. Open the sequence and go to the **Steps** tab. 2. Hover over the step you want to remove and click the bin icon. 3. Click **Delete** in the pop-up window. 4. Confirm the action if some contacts have already completed the step. Deletion is allowed in almost every case — including steps that already have contacts processed through them, steps with many A/B variants (including variants beyond Z, such as A1 and A2), and bulk deletion of a step together with all steps below it. There is exactly one blocked case: **deleting Step 1 when Step 2 is an email without a subject line**. Step 2 would become the first email in the sequence, and the first email must include a subject, so you see the message *"Cannot add step — email subject is missing. The first email in a sequence must include a subject."* Add a subject to Step 2 first, then delete Step 1. > Once a step is removed it cannot be restored. What a deletion changes elsewhere: | Area | Effect | | --- | --- | | People History, Preview, Current Step column | The step no longer appears | | Filters, integrations, triggers, contact activity, tasks | Deleted steps show as *(Deleted)* | | Contacts moved in by **Merge** or **Move to sequence** | They skip the deleted step and go to the next one | | A deleted **last** step | No further steps exist, so contacts are not moved to the deleted step or to another sequence | | Email threads | The first email of a thread cannot be removed if it is the very first email in the sequence. Delete the first email of the second or any later thread and the rest of that thread's emails move into the previous thread | | Reports | Historical data from deleted steps is kept and is not affected | | [Triggers](/specifications/triggers) | Triggers still run. A trigger set to *Move to step* whose target step was deleted will fail; other triggers keep working | | [Tasks](/specifications/tasks) | Tasks linked to deleted steps are not removed and can still be completed | | [Inbox](/specifications/inbox) | Threads are unaffected — you can continue the conversation with the contact | ### Switch an existing sequence to conditional Because steps cannot be changed once contacts have completed them, the way to add conditions to a live sequence is to duplicate it and carry the untouched contacts across. 1. On the **Sequences** page, click the three dots next to the sequence and select **Duplicate**. 2. Add the condition steps to the duplicated sequence. 3. In the **People** tab of the original sequence, apply the "Current step is Throttled" smart filter to find the contacts who have not progressed yet. 4. Move those contacts to the new sequence. Throttled contacts are the ones queued for Step 1 that have not received anything, so moving them loses nothing. Contacts already deep in the original sequence stay where they are and finish under the old structure. See [Sequence steps](/specifications/sequence-steps) for what conditions can branch on. ## Change what one contact receives ### Edit the email for one contact 1. Open the sequence and go to the **Preview** tab. 2. Choose the contact from the list. 3. Change the email body on the right — you can edit text and links, upload images, and attach files. 4. Save the changes. The edit is not reflected in the original sequence step, so the template and every other recipient stay as they were. Three limits apply: customized emails do not support CC; variables cannot be modified here, because Reply populates them from the contact's card and any alteration is reverted; and when customizing an A/B test email, only one variation can be changed. See [Templates and variables](/specifications/templates-and-variables). ### Add CC or BCC to a sequence email 1. Open the **Steps** tab of the sequence. 2. Click the template you want to edit. 3. Choose the CC or BCC option. 4. Type the email address and press Enter on your keyboard. 5. Click **Save**. CC and BCC are set per template. You must add them to each sequence template separately — there is no way to apply a CC or BCC to the whole sequence at once. ### Add a BCC to every email in the account 1. Open the **Emails** tab of your **Settings**. 2. Expand the BCC section. 3. Choose whether the BCC applies to **outgoing** or **incoming** emails. 4. Enter at least one email address that should receive the BCCs, and press Enter to populate it. 5. Click **Save**. There is also an option to exclude the Out of Office, Bounced, and Automatic emails — check the box if you want to keep those out. This setting adds a BCC to *all* emails, so you cannot scope it to one particular sequence. See [Configure account settings](/how-to/configure-account-settings). ### Add a custom opt-out link to the email body 1. Go to the **Steps** tab of the sequence. 2. Click the step to open the editor. 3. Select the place where the opt-out link should sit. 4. Click the **Insert/edit link** button. 5. In the Url field, enter `{opt-out}`. 6. In the Text to Display field, enter the link text — for example, *here*. 7. Click **Ok** to insert the link. Repeat for the other sequence emails that need one. > If you already have an **Opt-out link** set up in your email account settings, adding > another one to the email body creates duplicates. To avoid that, open the **Email > Accounts** tab of your settings, click the mailbox, move to the **Opt-out** section, > remove everything from the *Text at the bottom of the email* field, and click **Save**. > See [Email accounts](/specifications/email-accounts). ## Fix contact state ### Clear a Bounced status and resend Reply assigns the `Bounced` status automatically once an email bounces. To let the sequence try the address again, remove the status: 1. Go to the **People** tab. 2. Select the contact. 3. Click the **Change status** icon. 4. Hit **−** next to the Bounced status. 5. Apply the changes and confirm. Clearing the status does not repair the address. A hard bounce means the address is permanently rejected, so fix or [enrich](/capabilities/data-enrichment) it on the contact record before resending — the mechanics are in [What happens when an email bounces](/behavior/bounce-handling). ## Find things while the sequence runs ### Which mailbox sends to a contact Each contact has a sending email attached — the mailbox the sequence sends from. 1. Go to the **People** tab of the sequence. 2. Click **Create new filter**. 3. Choose the sending-email property. 4. Pick the email account and click **Apply**. The conditions available are **Equals** (contacts with that exact sending address), **Does not equal** (contacts with any other sending address), **Is set** (contacts with any sending email), and **Is not set** (contacts with no sending email assigned). Only mailboxes linked with the sequence appear in the picker — if the one you need is missing, add it in the sequence settings first. How Reply picks the account in the first place is in [Mailbox selection](/behavior/mailbox-selection). ### Contacts who clicked Click tracking is off until you turn it on, and it is not retroactive. 1. Open the sequence and go to the **Settings** tab. 2. Expand the **General Settings** section. 3. Turn the **Link tracking** toggle on. Clicked contacts then appear in their own section of the sequence's **People** tab. To see clickers across all sequences, apply the equivalent filter on the People page — see [Filter contacts](/how-to/filter-contacts). The **Stats** and **Reports** tabs also carry a clicks column in the Brief and Detailed views. > Reply tracks only links added with the **Insert/Edit link** button in the template editor, > and link tracking does not work in test emails. ### Manage the People-tab columns Resize a column by hovering over its title until the resizer appears, then dragging it to the width you need. To reorder or remove columns, open the **People** tab, click the **Settings** icon, then click and hold a column to move it, or click the **Delete** icon to take it out of the view. The same menu has a button for adding a column back. If the columns you have checked do not fit the screen, use the horizontal scroll. | Column | What it shows | | --- | --- | | **Name** | The contact's name. Cannot be unchecked | | **Email** | The contact's email. Cannot be unchecked | | **Company** | The contact's place of work | | **Title** | The contact's position | | **Status** | The contact's status in the sequence | | **Delivered** | How many times an email was delivered to the contact | | **Opens** | The *unique* number of email opens per step and per sequence — a contact on the second step who opened each step shows Opens = 2 | | **Views** | How many times the contact opened your email; every opening is counted | | **Replied** | How many times the contact replied to your email | | **Current step** | The step the contact is on now | | **Delivery date** | The date of delivery, recorded per step | | **Inbox** | Which inbox category the contact's reply landed in | | **Country**, **City**, **State**, **Phone** | The contact's location and phone fields | ## Work across many sequences ### Bulk actions Select the sequences on the Sequences page and use the action icons. | Action | Constraint | | --- | --- | | **Activate** | Sequences with errors cannot be activated — fix them first. Hover the toggle to see what the issue is | | **Pause** | Archived and new sequences cannot be paused | | **Archive** | Active sequences and sequences with errors cannot be archived — pause them first | | **Move to folder** | Archived sequences cannot be moved to a folder | | **Delete** | Removes the selected sequences from Reply | Archiving is permanent: an archived sequence keeps its metrics but only deletion remains available on it. See [Sequences](/specifications/sequences). Selected sequences also have a **Tracking settings** panel that changes Plain Text Mode, Open tracking, and Click tracking for all of them at once. Each row carries **+** (enable for all) and **−** (disable for all) controls rather than a toggle, which avoids ambiguity when the selected sequences are in mixed states. All three rows start neutral, and a row you do not touch is left unchanged. Selecting **+ Plain Text Mode** immediately disables the Open tracking and Click tracking rows; selecting **+ Open tracking** or **+ Click tracking** immediately disables the Plain Text Mode row, and saving may first ask you to confirm when a selected sequence currently has Plain Text Mode enabled. Selecting **−** on any row never triggers a conflict. Every changed sequence records the change in its own sequence log. > The bulk **Tracking settings** panel is not available in every account. If you do not see > it, ask your account manager. ### See a teammate's sequences With **Team Edition** in **Public** mode, open the **Sequences** tab in the header, click the initials to expand the drop-down menu, and pick the teammate whose sequences you want to see. In **Private** mode, only the Team Owner can see other team members' sequences. Without Team Edition, log into the teammate's account instead: click your initials in the header, pick the teammate, and click their profile. Only users with the **Admin** role can log into other team members' accounts. To check or change a role, go to Team management, open the **Members** tab, click the role, and pick another one. See [Permissions and roles](/reference/permissions). ## Verification After appending a step, confirm the contacts you want to continue show `Active` rather than `Finished`, and watch the **Current step** column advance. After deleting a step, check that the Steps tab shows the structure you expect and that no trigger points at the removed step. After a Preview-tab edit, reopen the same contact and confirm the custom body is still there and the template is unchanged. ## Common mistakes - Appending a step to a finished sequence and expecting sending to resume on its own — the contacts stay `Finished` until you set them back to `Active`. - Reactivating everyone in a finished sequence, including the Replied, Bounced, and Opted out contacts. Filter them out before changing statuses. - Editing a step and assuming the change reaches everyone — it only reaches contacts that have not passed that step. - Adding a custom opt-out link to the body while a mailbox-level opt-out text is still configured, which produces two opt-out links per email. - Adding CC or BCC to one template and expecting it on every step — CC and BCC are per template. - Enabling link tracking after a send and expecting historical clicks — tracking starts from the moment the toggle goes on. - Archiving a sequence you still need. Archiving cannot be undone; move the contacts to a list first. ## FAQ ### Can I add a step to a sequence that has already finished? Yes. Add the step at the end of the steps list, then change the contacts' statuses from Finished back to Active — that second part is required, or the sequence will not send anything new. Filter first if you only want to reactivate part of the audience. ### Can I insert a step before Step 1 while the sequence is running? No. On an active sequence with contacts in progress the insert-before-Step-1 control is hidden and steps can only be appended at the end. See [How a sequence executes](/behavior/sequence-execution). ### What happens to contacts when I delete a step they already completed? They keep their history in Reports, but the step stops appearing in the People History and Preview tabs and in the Current Step column, and it shows as *(Deleted)* in filters, integrations, triggers, contact activity, and tasks. Contacts that were moved into the sequence and had not reached the step skip it and go to the next one. ### Can I change the wording for a single contact? Yes, in the **Preview** tab. Pick the contact, edit the body, and save — the original step is untouched. CC is not supported in customized emails, variables revert to the contact card's values, and only one A/B variation can be customized. ### Can I BCC a single sequence? No. Per-template CC and BCC are set on each step individually, and the account-level BCC in Settings → Emails applies to all emails, so it cannot be scoped to one sequence. ### How do I let a bounced contact receive email again? Select the contact on the People tab, open **Change status**, hit **−** next to Bounced, apply, and confirm. Fix the address itself first — clearing the status does not make an invalid address deliverable. See [What happens when an email bounces](/behavior/bounce-handling). ### Why can't I archive an active sequence in bulk? Archiving requires the sequence to be paused and error-free. Pause the selected sequences first, then archive them. Sequences with errors also cannot be activated — hover the toggle to see what needs fixing. ## Related - [How a sequence executes](/behavior/sequence-execution) · [Sequence stopping](/behavior/sequence-stopping) - [Sequences](/specifications/sequences) · [Sequence steps](/specifications/sequence-steps) - [Filter contacts](/how-to/filter-contacts) - [Launch a sequence](/how-to/launch-a-sequence) · [Create a sequence](/how-to/create-a-sequence) - [Statuses](/reference/statuses) · [Permissions and roles](/reference/permissions) - [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, step, and contact-status endpoints - MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents inspect and adjust running sequences - CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted sequence maintenance --- # Filter contacts > Build smart filters on the People page — the property, condition, and value pattern, AND and OR logic, every filter dimension from time zone to LinkedIn connection status, and what you can do with the result. **Open the People page, click Create new filter, pick a Property, choose a condition such as Is, Is not, Contains, Is set, or Is not set, and enter a value. AND adds another property, OR adds another value for the same property. Click Apply to see results or Save to reuse the filter.** _Status: Reviewed — human-edited, facts not yet confirmed against the product._ ## Goal A precise slice of your [contact](/specifications/contacts) base — everyone who matches a set of conditions — ready to move to a [list](/specifications/lists), move to a [sequence](/specifications/sequences), or act on in bulk. Saved filters turn a slice into a view you can reopen. ## Preconditions Contacts in the account. Some properties only carry values after a prior action: email validation status appears after you [validate the addresses](/behavior/email-validation), call resolution after calls are logged, inbox category after replies are classified, and custom fields after you create and fill them. ## Steps The builder works the same way for every property, on the People page and inside a sequence's People tab. 1. Open the **People** page and click **Create new filter**. 2. Enter a **Filter name**. This is optional — but if you save the filter, a name makes it easier to find and reuse later. 3. In the **Property** field, select what you want to filter on from the drop-down. 4. Select a condition. Which conditions appear depends on the property: **Is** and **Is not** for exact matches, **Contains** and **Doesn't contain** for partial matches, **Starts with** for prefixes, **Is set** and **Is not set** for whether the field carries any value at all, and **True** or **False** for the sequence-status properties. 5. Enter or pick the value. 6. Click **Apply** to see instant results, or **Save** to both see the results and keep the filter for future use. ## Combining conditions A filter can hold any number of properties, combined with two operators. | Operator | Use it for | Effect | | --- | --- | --- | | **OR** | The same property with different values | The filter includes contacts that match **any** of the specified criteria | | **AND** | Different properties | The filter finds contacts that match **all** of the specified criteria | To build an OR filter, select the **Property**, then click **OR** to add additional conditions — for example, Provider set to Gsuite, Outlook, or Hotmail returns contacts on any of the three. To build an AND filter, click **AND** to include the required properties and select a condition for each — for example, Provider is Gsuite, Sequence is the Outbound cold outreach sequence, and the contact has opened an email more than once. The two combine. Click **AND** to add multiple properties, then click **OR** to add multiple conditions within a property; the system shows results that meet all the specified conditions. A filter reading "in the Outbound cold outreach sequence, and Provider is Gsuite, Gmail, or Outlook" returns contacts with those providers *only within that sequence*. Click **Apply** when the conditions are set. ## Filter reference | Property | Conditions | Values and notes | | --- | --- | --- | | **Time Zone** | Is, Is not, Is set, Is not set | A time-zone value such as UTC+01:00. Is set / Is not set show all contacts who do or do not have a time zone specified in the field | | **Call resolution** | Is, Is not, Is set, Is not set | Default resolutions are *Positive*, *To Call*, *Negative*, and *Busy*; custom call resolutions you create also appear in the list | | **Creation source** | Is, Is not | Other, Reply Data (DataSearch, ChromeExtension), Salesforce, Pipedrive, Import CSV, Manually, Reply API, HubSpot, AI SDR, Website visitor, Calendly | | **Custom field** | Is, Is not, Contains, Doesn't contain, Starts with, Is set, Is not set | Any custom field you added to contacts. AI custom fields add a **Status is** condition | | **Email Validation status** | Is | Valid, Risky, or Invalid — see [email validation](/behavior/email-validation) | | **Inbox Category** | Is | Interested and the other categories, including any custom inbox category you created | | **LinkedIn Connection Status** | Is, Is not | Unchecked, Connected, Not connected, Pending, Connection forbidden, Invalid URL, Revoked | | **Status: …** | True, False | One property per contact status in the sequence | | **Title** | Contains (among others) | A free-text job title fragment such as CEO | | **List** | Is, Is not, Is set, Is not set | A specific list, or any list at all | ### Time zone Select **Time Zone** as the property, choose **Is** or **Is not**, and enter the value — for example, UTC+01:00. The **Is set** and **Is not set** conditions do something different: they return every contact that does or does not have a time zone recorded, regardless of which one. That is the version to use before a send that depends on local time. ### Call resolution Select **Call resolution** as the property, then pick the condition: **Is** shows only contacts with a specific call resolution, **Is not** excludes them, **Is set** shows all contacts that have any call resolution recorded, and **Is not set** shows contacts that have none. Then choose the resolution — for example, Positive. Alongside the default *Positive*, *To Call*, *Negative*, and *Busy* resolutions, any custom call resolutions you create appear in the filter list too. See [Calls and SMS](/capabilities/calls-and-sms). ### Creation source Select **creation source** as the property and use **Is** to view all contacts associated with a value, or **Is not** to exclude them. The available sources are: - **Other** — added through sources not listed below. - **Reply Data** (DataSearch, ChromeExtension) — added from a Realtime B2B Data or Findy search; see [Prospect data](/specifications/prospect-data) and the [Chrome extension](/capabilities/chrome-extension). - **Salesforce**, **Pipedrive**, **HubSpot** — synced from that CRM. - **Import CSV** — imported in bulk from a CSV file. - **Manually** — added by hand. - **Reply API** — added via the API. - **AI SDR** — added automatically by Autopilot mode in [AI SDR](/capabilities/ai-sdr). - **Website visitor** — added through the Website Visitors feature. - **Calendly** — added automatically by a Calendly booking, when the option to create a new contact if one does not exist is enabled. If you have set up a native integration with HubSpot, Pipedrive, Salesforce, or Copper CRM, that integration also appears as its own property in the smart filter. Selecting it with the **Is set** condition returns the contacts that have a record on the CRM side — useful for spotting records that never synced. See [Integrations](/capabilities/integrations). ### Custom fields Any custom field you add to contacts becomes a filterable property. Standard custom fields support **Is** and **Is not** for an exact value match, **Contains** and **Doesn't contain** for a partial match, **Starts with**, and **Is set** / **Is not set** for whether the field holds any value. AI custom fields support all of the above and add a **Status is** condition that filters by enrichment outcome: - **Enriched** — the field was successfully filled. - **Failed — Missing variables** — enrichment was skipped because one or more prompt variables were absent. - **Failed — No results found** — enrichment ran but returned no data. That last pair is how you find the contacts worth re-running: missing variables mean the source data is incomplete, no results mean the prompt found nothing to work with. ### Email validation status After you have [validated your contacts](/behavior/email-validation), select **Email Validation status** as the property, choose the **Is** condition, and select the status — for example, Invalid. To catch both problem classes in one pass, click **Or** and add the Risky status: the filter then shows contacts with either an Invalid or a Risky validation status. Move that set to a separate list or delete it. ### Inbox category Select **Inbox Category** as the property and the **Is** condition to find contacts whose replies were sorted into that category — for example, Interested. Custom inbox categories you create appear in the filter list as well. See [Inbox](/specifications/inbox). ### LinkedIn connection status Select **LinkedIn Connection Status** as the property, then **Is** to find contacts at a specific stage of the connection process or **Is not** to find everyone else. The full set of statuses is **Unchecked**, **Connected**, **Not connected**, **Pending**, **Connection forbidden**, **Invalid URL**, and **Revoked**. See [LinkedIn outreach](/capabilities/linkedin-outreach). ### Status in a sequence Sequence statuses are exposed one property per status, and the value is **True** or **False** rather than a picked item. To find contacts that carry two statuses at once, select the first — for example Status: Replied — set the value to **True**, click **And**, add Status: Finished, and set that to **True** as well. The filter offers a property for each contact status — **Active**, **Paused**, **Missing Data**, **Bounced**, **Out of office**, **Finished**, **Contacted**, **Opted out**, **Replied**, **Opened**, **Clicked**, **Auto-replied**, **To call**, and **Called** — plus **Meeting booked**. What each one means, and when Reply assigns it, is in [Statuses](/reference/statuses). ### Job title Select **Title** as the property, choose the **Contains** condition, and enter the title fragment — for example, CEO. Contains rather than Is matters here, because real job titles carry prefixes and suffixes that an exact match would miss. ### List membership Select **List** as the property and pick **Is** or **Is not**. In the **Select list** field, choose the list from the drop-down, or start typing its name — including a shared list, if you are using Team Edition in the Public mode. The **Is set** and **Is not set** conditions work at a different level: they return all people who are, or are not, in *any* list. ### Engagement Engagement filters are the sequence-status properties with a **False** value. To find the contacts who never opened your emails, select Status: Opened and set the value to **False**. The same pattern gives you contacts who never replied, never clicked, or were never contacted. ## Act on the result Select the filtered contacts in the grid — the whole result or individual rows — and use the grid actions. - **Move to list** — click the button, choose the list, and click **Apply**. Create the list first from **Add new list** on the People page: enter a name and click **Create**. - **Move to sequence** — click the button, select the sequence from the list, then click **Move contacts**. - **More → Blacklist** — expand the **More** drop-down, choose **Blacklist**, and pick whether to blacklist the contacts or the whole domain. Blacklisted contacts receive no sequence emails. - **Save** in the filter panel — keeps the filter itself, so the same slice is one click away next time. The full set of bulk grid actions — validation, enrichment, status and stage changes, owner changes, export, and deletion — is in [Contact management](/capabilities/contact-management). ## Worked example: split out the CEOs 1. On the **People** page, click **Add new list**, name it, and click **Create**. 2. Click **Create new filter**, select **Title** as the property, choose **Contains**, and enter CEO. 3. Click **Apply** to see the results, or **Save** to keep the filter. 4. Select all filtered contacts and click **Move to list**. 5. Choose the list you created and click **Apply**. ## Worked example: re-run the non-openers 1. On the **Sequences** page, click the three dots on the right side of the sequence and select **Duplicate**. 2. Open the original sequence, go to its **People** tab, and click **Create new filter**. 3. Select Status: Opened as the property, set the value to **False**, and click **Apply**. 4. Select the filtered contacts and click **Move to sequence**. 5. Select the duplicate sequence from the list and click **Move contacts**. ## Worked example: blacklist a CSV of contacts 1. On the **People** page, create a new list for the file. 2. Click **Add Contact** and choose **Import from CSV**. 3. Upload the file and map the fields; pick the list you created on the **Options** tab. 4. Once the contacts are in the list, select them and click **More** to expand the drop-down menu. 5. Choose **Blacklist**, then pick whether to blacklist the contacts or the whole domain. > The blacklist and a list do different jobs. A list groups contacts for outreach; the > blacklist suppresses sending. A blacklisted contact receives no sequence emails even when > they sit in an active sequence. See [Lists](/specifications/lists). ## Verification The grid narrows to the matching contacts as soon as you click **Apply**. Spot-check two or three rows against the condition you set — for a Contains filter especially, since partial matches are easy to over-shoot. A saved filter reappears in the filters panel at the top of the Contacts page and can be reopened without rebuilding it. ## Common mistakes - Using **Is not set** when you meant **Is not** — the first returns contacts with an empty field, the second returns contacts whose field holds a different value. For the List property, **Is not set** returns people who are in no list at all, not people missing from one particular list. - Filtering by email validation status before running validation — the property has no values to match until the addresses have been checked. - Using **Is** on the Title property — job titles rarely match exactly; **Contains** is the condition that works. - Expecting a filter to behave like a list. A filter is a live view over the grid; a list is a stored membership a contact can belong to alongside others. Move the filtered set to a list when you need it to persist. - Applying a filter and forgetting to click **Save** — the conditions are gone the next time you open the page. ## FAQ ### How many conditions can one filter hold? Any number. You can add as many properties as you need to refine the results, and each property can carry several values through the OR operator. ### What is the difference between AND and OR? OR widens: it applies to one property with several values and returns contacts matching any of them. AND narrows: it applies across different properties and returns only contacts matching all of them. Used together, OR groups the alternatives inside each property and AND requires every property to match. ### Do I have to name a filter? No. The **Filter name** field is optional and you can click **Apply** without it. Name it if you intend to click **Save** — the name is how you find the saved filter again. ### Can I filter by a custom field that Reply's AI filled in? Yes. AI custom fields support the standard operators plus a **Status is** condition with the values Enriched, Failed — Missing variables, and Failed — No results found, so you can separate the fields that enriched cleanly from the ones that need a better prompt or more source data. ### Can I filter a teammate's contacts? On Team Edition in the Public mode you can, including by a shared list — start typing the list name in the **Select list** field and shared lists appear alongside your own. See [Permissions and roles](/reference/permissions). ### Where do I filter — the People page or the sequence? Both work and the builder is identical. The People page filters your whole contact base; a sequence's People tab filters only the contacts in that sequence, which is what you want for questions like "who in this sequence has not opened anything". ## Related - [Contacts](/specifications/contacts) · [Lists](/specifications/lists) - [Contact management](/capabilities/contact-management) - [Statuses](/reference/statuses) - [Email validation](/behavior/email-validation) - [Import contacts](/how-to/import-contacts) · [Manage duplicate contacts](/how-to/manage-duplicates) - [Edit a running sequence](/how-to/edit-a-running-sequence) ## Build with Reply - REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — contact search and list endpoints - MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — agents filter contacts and act on the result - CLI: [agents.reply.io/cli](https://agents.reply.io/cli) — scripted segmentation --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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) — manage-replies workflow --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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) - [Analyze campaign performance](/how-to/analyze-campaign-performance) - [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) --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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, Reply stops sending the **first step** but **continues sending follow-ups**. The stopped step resumes automatically once the window passes and the bounce rate resets; reaching the threshold again repeats the cycle. Reply notifies you at half and at full bounce quota. The rule has a 200-email floor and an hourly recount — [Bounce handling](/behavior/bounce-handling) is authoritative on the exact mechanics. 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 after reaching an 8% bounce rate — the first step only, until the bounce window resets | | **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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 import-prospects workflow --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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) — packaged launch-outreach workflows --- # 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 | | Export from Zapmail | Bulk connection of Zapmail mailboxes, driven from Zapmail: select the mailboxes, click **Export**, choose Reply as the platform, and paste your Reply API key from Settings → API Key | **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. **Zapmail exports** are queued from the Zapmail side and land in the Reply workspace the API key belongs to — the key is unique per user and workspace. On an Email Volume plan, an export that would push you past the mailbox limit shows a confirmation first; **Proceed** opens the billing summary so the plan can be upgraded before the export finishes, and an export that stays inside the limit runs through without interruption. Connecting mailboxes to Reply does not connect them to MailToaster — for warm-up, export the same mailboxes from Zapmail again, choose MailToaster under **All connected platforms**, and sign in with the MailToaster account details, having first linked that MailToaster account to Reply. ## 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 | | Signature section | The signature added to every email sent from this mailbox — name, job title, company website, social links — edited in a text editor or pasted as HTML source | | 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). **Signature** is set per mailbox: open **Settings → Email Accounts**, click the mailbox, open the **Signature** section, compose in the text editor, and save. It can carry your name, job title, company website, and social links, and it then appears in every email sent from that mailbox. When a signature copied from elsewhere does not paste in cleanly, build it as HTML and paste the source code instead — Reply's own email signature generator returns HTML for exactly this. **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. With the link variant, the words that become the hyperlink must sit inside curly brackets — for example `Would you like to unsubscribe? Just {click this link} to opt-out.` Text saved without brackets is sent as plain words with no link behind them, which is the usual explanation for a missing opt-out hyperlink; **Regenerate** offers another wording if you would rather start from a fresh variant. **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. Several domains can be rechecked in one go: tick the mailboxes on the Email Accounts page and click **Retest domain health** in the bulk-actions toolbar (on a phone, the same entry sits in the actions menu). Reply confirms that the check has started and clears the selection. The check runs once per domain even when several selected mailboxes share one, skips domains already **Under testing...**, and can take up to 10 minutes; each card shows **Under testing...** with its **Last updates** value set to the moment the check was queued, then refreshes on its own when results arrive. A failed request keeps your selection so you can retry. See [SPF, DKIM, DMARC](/learn/spf-dkim-dmarc). A health check that never completes usually means the test message never arrived — the provider blocked it on the way out rather than Reply failing to run the test. Check the sending mailbox for a bounce addressed to Reply's health-check address, which names the cause; Microsoft tenants that are new or on a trial commonly return a `550 5.7.708 Service unavailable. Access denied, traffic not accepted from this IP` error and need permission from Microsoft support to send through a third-party tool. If you administer the mail platform, check the message trace or email logs for the test message sitting blocked or in outbound quarantine, release it, and allow the health-check address through your outbound policy. Re-run the test once the block is cleared. ## 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. Zapmail mailboxes have a native path that runs from the Zapmail side: select them there, click **Export**, choose Reply, and paste your Reply API key. Warm-up is a separate step — export the same mailboxes to MailToaster as well, because connecting them to Reply does not connect them to MailToaster. ### How do I find one mailbox among hundreds? Type into the **Search** field in the Email Accounts toolbar, next to the view selector and the filters. It matches part of either the mailbox email or the mailbox name, ignores case, and updates the list shortly after you stop typing. Search works in both the list view and the domain (grouped) view, and stacks with the tags, domains, and owners filters, so results respect both at once. In the domain view, matching domains expand automatically and domains with no match are hidden while the search is active. Clearing the field restores the full list, and if nothing matches you get the standard empty state. > Search changes what the list shows, not what you have selected. Bulk actions still apply to > every mailbox you ticked, even after a search hides some of them — a bulk **Retest domain > health** covers the whole selection. **Select all**, by contrast, takes the mailboxes > matching the active search and filters at that moment. ### 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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, Reports → Tasks dashboard) · 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. ## Reporting Task activity is measured on the **Tasks** dashboard under **Reports**, which is where team throughput is read rather than individual queues. Every metric, username, and chart segment on the page can be drilled into, and the stats can be exported. | Section | What it reports | | --- | --- | | Overview | Total tasks split into Calls, Emails, LinkedIn, SMS, WhatsApp, and To-do's, sortable by type and time frame | | Tasks per team member | Team members ranked by task count, with the task types each has in progress — the comparison view for activity across a team | | Tasks by type chart | Created or completed tasks over time, with months listed below the chart; click a type to hide it from the view and click again to bring it back | | Created and completed tasks | Created against completed counts side by side per task type, so a growing backlog is visible as a gap | | SMS stats | Sent messages, replies, created and completed SMS tasks, and their ratio | The whole page switches between **Created** and **Completed** through the **All statuses** selector, combined with a time filter. Two behaviors are worth knowing: the SMS stats section honors the time filter but ignores the created/completed selection, and the dashboard follows the same visibility rule as tasks themselves — with Team Edition enabled you see every team member's task metrics, without it only your own. See [Campaign analytics](/capabilities/campaign-analytics) for the other Reports dashboards. ## 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 (outreach recipes)](/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 — human-edited, facts not yet confirmed against the 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); profile photo → **Team Management** (tabs: Members, Permissions) for a single team | | **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 | | Team member | Invited from **Team Management → Members**; the tab shows each teammate's status and role, plus team-wide Delivered, Open, and Reply metrics | | Mailbox ownership | Every [email account](/specifications/email-accounts) belongs to one teammate and shows their name in the owner column; a mailbox can be marked default for its owner | ## Team Management vs Organization Two surfaces manage people, and they are not the same thing. **Team Management** (profile photo → **Team Management**) manages the members of a single team — invitations, the Admin/Regular role pair, and per-member statistics. **Organization** (profile photo → **Organization**) manages workspaces, the organization-wide user list, and the three-level role catalog. Teams that run outreach for several clients belong in the Organization setup, where each client gets its own workspace with independent prospects, sequences, and templates. ## 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. **Team members.** In **Team Management → Members**, click **Invite team member**, enter the person's name and email address, and click **Invite**. They receive an email invitation with a sign-up link. A person who already created a trial account in Reply cannot be invited until support deletes that account. An invitation can be cancelled — and a member removed — from the drop-down menu under the arrow on the right of their row. **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 — prospect flow, communication, and every activity attached to the prospect. Schedules become manageable at the team level, and detailed statistics become visible per team member. Enabling it requires being the Team owner: 1. Click your profile photo in the bottom-left corner and select **Team Management**. 2. Go to the **Permissions** tab. 3. Click **Enable management**. 4. Choose **Public** or **Private** mode. 5. Click **Next**. A notification confirms Team Edition is enabled. Reply recommends starting with Public and switching to Private later if needed, so everything can be set up properly first. Once enabled, Team Edition cannot be reverted. 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. #### Public mode vs Private mode The mode decides what a *regular* member sees and can act on. Team owners see everything in both modes. | Aspect | Public mode | Private mode | | --- | --- | --- | | Prospects | All prospects are shared. Every member can create, edit, and delete prospects. The owner shows in the Owner column on the People page — hover the icon for the full name | A regular member sees only the prospects they own | | Sequences | Members see every member's sequences and their metrics; the owner shows in the **OWNER** column | A regular member sees only the sequences they own | | Same prospect in several sequences | Allowed — the same prospect can sit in multiple sequences at once, for example a marketing sequence from one member and a product-update sequence from another | Not allowed — one prospect cannot be in the sequences of different regular members at the same time | | Acting on another member's records | Any member can add and remove prospects from sequences, change sequence settings, remove sequences, and change the status of prospects in sequences owned by someone else | A regular member acts only on their own records | | Changing ownership | The team owner, or the member who owns the prospect or sequence | Only the team owner, signed in as Team Owner | | Mailboxes | Members can view and manage teammates' mailboxes in Email Accounts; inside a sequence, only the sequence owner adds or removes mailboxes | Only the team owner can view and manage teammates' mailboxes | | Templates, schedules, reports | Shared across the team | Shared across the team — templates and schedules keep everyone on the same standards | | Lists, folders, filters, integrations, settings | Shared with the team | Visible only to the users who created them | | Communication history | Full flow in the contact sidebar | Full flow in the contact sidebar | | Choose it when | The team works as one pool and wants the freedom to share prospects, sequences, schedules, templates, and reports | The team needs more control and data privacy — routing prospects by inbound or outbound flow, region, segment, or seniority, and running account-based outreach | In both modes the contact sidebar shows the same communication record: every action taken on the prospect by any team member, the sequence the prospect is currently active in plus past sequences, the prospect's status in each sequence, the sequence owner, Opens and Replies metrics, and the emails sent and replies received. That is what makes reassignment safe — when a prospect moves to another member, the full history travels with them. #### Changing prospect and sequence ownership In **Public mode**, ownership moves without extra conditions. On the **People** page, select the prospects, click **Change owner**, pick the new owner, and click **Apply**. On the **Sequences** page, hover the sequence, expand the **Actions** drop-down, click **Change owner**, pick the new owner, and click **Apply**. In **Private mode**, the team owner must be signed in, and prospect ownership is blocked while the prospect sits in a sequence. Two ways around it: change the *sequence* owner, in which case every prospect in that sequence changes owner automatically — but all prospects in the sequence must already belong to the same owner — or remove the prospect from the sequence first and then change its owner. The same rule gates the sequence itself: a sequence owner can be changed only when all prospects in it belong to one owner. > Changing the owner of a sequence that has already sent at least one email stops any > further sending. The new sequence owner has to connect an email account after the > ownership change before the sequence resumes. ### Team Management roles Separate from the organization-level role catalog, a team has two roles assigned from **Team Management → Members** after the invited member accepts: | Team role | Access | | --- | --- | | Admin | Can open other members' accounts directly from their own and make changes on their behalf — managing contacts, sequences, and the rest | | Regular | Can access only their own data; cannot make changes for other team members | Selecting or editing one of these roles only works while Team Edition is **disabled**. Once Team Edition is on, the mode — Public or Private — governs access instead. An admin switches into a teammate's account by clicking the profile photo in the bottom-left corner and selecting the member from the list of all members. ### Mailboxes in a team Teammates' mailboxes are managed from the **Email Accounts** section of Settings. A member who is not the Team Owner can view and manage them only in Team Edition Public mode. By default the list is filtered to mailboxes you own — click the **X** next to the **1 owner** filter to see all of them. To filter by specific people, click **All owners**, select the owners, and click **Apply**. Each mailbox then shows its owner's name in a separate column. For a teammate's mailbox you can click **Reconnect** to restore the connection, open **WarmUp settings** to manage warm-up, and remove the account from the three-dot menu with **Remove**. What you cannot change is someone else's default: a mailbox marked default belongs to that teammate and is used automatically for the sequences they create, and only its owner can change that setting. See [Email accounts](/specifications/email-accounts) and [Connect a mailbox](/how-to/connect-a-mailbox). ### 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. The Members tab in Team Management is the team-level counterpart: it shows each teammate's status and role alongside the total Delivered emails, Open rate, and Reply rate across all teammates' accounts. Clicking a colleague's name opens their profile with detailed reports. Per-member analytics also appear on the Reports pages — see [Campaign analytics](/capabilities/campaign-analytics). ## 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. - Removing a team member from Team Management deletes that member's Reply account, and they cannot be added back to the team afterwards. - With Team Edition enabled, a removed member's contacts, sequences, schedules, templates, and uncompleted tasks pass to the team owner; their completed tasks are deleted permanently. - With Team Edition disabled, removing a member permanently deletes all data associated with them. - Changing the owner of a sequence that has already sent at least one email stops further sending until the new owner connects an email account. ## 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 | | Team Edition | One-time and permanent — cannot be reverted | | Same prospect across regular members' sequences (Private mode) | **1** sequence at a time | | Editing the Admin / Regular team role | Possible only while Team Edition is disabled | | Changing a sequence owner | Allowed only when all prospects in the sequence belong to one owner | | Removing a team member | Permanent — the member cannot be added back to the team | ## 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. ### Removing a team member Only the team owner can delete team members. Click the profile photo in the bottom-left corner, select **Team Management**, open the **Members** tab, hover over the member, click the three dots, and choose **Remove**. The action is permanent, cannot be reverted, and the removed member cannot be added back to the team. What survives depends on Team Edition: | Team Edition | Outcome for the member's data | | --- | --- | | Enabled | The team owner becomes the owner of the member's contacts, sequences, schedules, tasks, and templates. Uncompleted tasks are reassigned to the owner; completed tasks are permanently deleted | | Disabled | All data associated with the deleted teammate is permanently removed — enable Team Edition *before* the deletion if the data must be kept | Mailboxes follow their own rule. Email accounts the member connected **manually** are disconnected and deleted. Mailboxes and domains **purchased through Reply** — both regular purchased packages and pre-warmed packages — are reassigned to the team owner instead: they stay active and visible under the owner, keep sending and warming up, and are not cancelled at the provider. A pre-warmed package moves intact, all 3 mailboxes plus their domain together and never partially, and the purchased domain stays with the team. After the reassignment the team owner receives a notification stating how many mailboxes and domains were reassigned and which member they came from. In Team Edition Private mode, check before deleting that the removed member's contacts are not already in the owner's account — the contacts move to the owner during the deletion and cannot exist there twice. ## 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. - The two removal surfaces treat mailboxes differently: removing a user from a workspace deletes their connected email accounts, while removing a team member from Team Management deletes only the manually connected ones and reassigns mailboxes and domains purchased through Reply to the team owner. - Team Edition has to be enabled *before* a member is deleted for their data to survive — turning it on afterwards does not bring anything back. - In Private mode a prospect cannot sit in two regular members' sequences at once, so a prospect must leave one member's sequence before entering another's; Public mode allows both at the same time. - Prospect ownership in Private mode cannot be changed while the prospect is in a sequence — change the sequence owner or remove the prospect from the sequence first. - In Public mode the team owner can always reassign a prospect or sequence; whether the record's own owner can do the same is stated inconsistently across sources, so use the team owner account if a reassignment is refused. - A person who already created a trial Reply account cannot be invited to a team until support deletes that trial account. ## 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. ### What is the difference between Public and Private mode? Public mode shares prospects and sequences with the whole team: any member can create, edit, and delete prospects, add and remove them from sequences, change sequence settings, and change the status of prospects in other members' sequences, and the same prospect can run in several sequences at once. Private mode limits a regular member to the prospects and sequences they own, keeps lists, folders, filters, integrations, and settings private to their creator, and allows only one regular member's sequence per prospect at a time. Templates, schedules, and reports are shared in both. ### Which mode should a team start with? Public. Reply recommends starting there and switching to Private later if more control is needed, so the team can get everything set up first. Private suits teams that need to route prospects deliberately — by inbound or outbound flow, region, segment, or seniority — and teams running account-based outreach where it matters which member contacts which accounts. ### What happens when I remove a team member from Team Management? Their Reply account is deleted and they cannot be added back. With Team Edition enabled, the team owner inherits their contacts, sequences, schedules, templates, and uncompleted tasks, while completed tasks are deleted; manually connected mailboxes are disconnected, but mailboxes and domains purchased through Reply are reassigned to the owner and keep running. With Team Edition disabled, all of the member's data is permanently removed. ### Can I manage a teammate's mailbox? If you are not the team owner, only in Team Edition Public mode. In the Email Accounts section, clear the **1 owner** filter to see every mailbox, then reconnect it, open its **WarmUp settings**, or remove it. A mailbox marked default belongs to its owner — only that teammate can change their own default. ### Who can assign the Admin and Regular team roles? The team account admin, from **Team Management → Members**, once the invited person has accepted. Selecting or editing those roles works only while Team Edition is disabled; with Team Edition on, Public or Private mode governs access instead. ## 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) · [Connect a mailbox](/how-to/connect-a-mailbox) - [Configure account settings](/how-to/configure-account-settings) ## 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 --- # Triggers > The specification of Reply triggers — the built-in When/If/Then automations in Settings, the full catalog of trigger events with their available actions, the conditions that narrow them, and how they behave in Team Edition. **Triggers are built-in automations configured in Settings → Triggers as When an event fires, If optional conditions match, Then run actions. Seventeen events cover contact, email, call, and LinkedIn activity; actions add to lists, move or remove from sequences, update fields, set stages, pause contacts, or assign owners.** _Status: Reviewed — human-edited, facts not yet confirmed against the product._ ## At a glance | Aspect | Detail | | --- | --- | | **What it is** | A built-in automation that runs one or more actions when a chosen event happens, optionally narrowed by conditions | | **Belongs to / Contains** | Lives in **Settings → Triggers**; acts on [contacts](/specifications/contacts), their [lists](/specifications/lists), [sequence](/specifications/sequences) membership, fields, stages, and owners | | **Surfaces** | UI · MCP | | **Key limit** | **17** trigger events; each event offers its own fixed set of actions | | **Lifecycle** | Created → named → event picked in **When** → optional conditions in **If** → actions chosen in **Then** → saved → activated with a toggle; some triggers are predefined and already active | | **Does not** | Run before its toggle is enabled, or react to events outside the catalog below | | **Plans** | **Assign Owner** actions are marked *TE Only*; **Contact owner** and **Sequence owner** conditions require Team Edition Public support for triggers | ## Definition Triggers in Reply are built-in automations that run based on specific events or conditions, such as a contact opening an email or replying to a message. When a certain event or condition occurs, you define an action — for example, assign a contact stage, move the contact to a sequence, or remove them from a sequence — so these updates happen automatically. For example, if a contact opens an email or clicks a link, you can automatically assign them the *Interested* contact stage. This identifies engaged prospects and lets you continue working with them without extra steps. Some triggers are **predefined** — they exist and work by default rather than being built by hand. **Account created** is one of them: out of the box it assigns the *New* account stage to every newly created account. A predefined trigger can be customized, or you can leave it alone and create your own trigger for a different event, condition, and action combination. ## Purpose Triggers remove the manual bookkeeping between an outreach event and the record change it should cause. They are the mechanism for reacting to engagement (opens, clicks, replies, LinkedIn acceptances), to failures (bounces, invalid LinkedIn URLs, blocked connection requests), and to lifecycle events (contact created, contact finished sequence) without a person watching for them. In Team Edition Public they also remove duplication: one trigger covers every team member instead of one trigger per person. ## Relationships | Relationship | Object | | --- | --- | | Fires on events from | [Contacts](/specifications/contacts), [sequences](/specifications/sequences), [inbox](/specifications/inbox) categorization, logged calls, and LinkedIn steps | | Acts on | [Contacts](/specifications/contacts) — their [list](/specifications/lists) membership, sequence membership, custom fields, [stage](/reference/statuses), and owner | | Also acts on | [Accounts](/specifications/companies) — the **Account created** event sets an account stage | | Narrowed by | Conditions on sequence, sequence step, contact field, number of views or clicks, inbox category, call resolution, and — in Team Edition — contact owner and sequence owner | | Scoped by | [Team Edition mode](/specifications/workspaces-and-roles) — Private affects only your contacts, Public can apply to all team contacts | ## Creation 1. Go to **Settings → Triggers**. 2. Click **New trigger** in the upper-right corner. 3. Enter a name for your trigger, then select the event in the **When** section. 4. (Optional) Use the **If** section to add conditions. 5. In the **Then** section, choose the action or actions to perform. 6. Save the trigger and enable the toggle to activate it. ## Configuration ### The When / If / Then structure Every trigger is built from three parts. **When** selects the single event that starts the automation. **If** is optional and holds the conditions that must match for the trigger to proceed — a specific sequence or sequence step, for example — so the automation runs only for the contacts you want, at the right stage. **Then** holds the actions to perform; a trigger can carry more than one action. ### Trigger catalog The full list of trigger events, with descriptions and the actions available for each. | Trigger | Description | Actions | | --- | --- | --- | | Contact created | Activates when a new contact is added. | Move to Sequence, Add to List, Update Contact Field, Set Contact Stage, Assign Owner (TE Only) | | Contact updated | Activates when a contact's information changes. | Move to Sequence, Remove from Sequence, Add to List, Set Contact Stage, Assign Owner (TE Only) | | Account created | Triggers when a new account (company) is added. | Set Account Stage (choose from New, Qualified, Meeting Booked, etc.) | | Contact replied to sequence email | Activates when a contact replies to an email in a sequence. | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | Contact opened sequence email | Activates when a contact opens an email in a sequence. | Mark as Finished, Move to Sequence, Remove from Sequence, Add to List, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | Contact clicked on a link | Triggers when a contact clicks a link in a sequence email. | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | Contact finished sequence | Activates when a contact's status changes to *Finished*, either manually or after a prospect completes all steps in a sequence. | Add to List, Move to Sequence, Remove from Sequence, Update Contact Field, Assign Owner (TE Only), Set Contact Stage | | Inbox category set for reply | Activates when an Inbox category is set for an email or LinkedIn reply (for example Interested, Not Interested, Do Not Contact). | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | Contact opted out | Activates when a contact unsubscribes from emails. | Add to List, Remove from Sequence, Update Contact Field, Assign Owner (TE Only), Set Contact Stage | | Call was logged | Activates when a call is completed and logged in your system. | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | Sequence email was sent | Activates when a sequence email is successfully sent. | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | Sequence email was bounced | Activates when a sequence email fails to reach a contact. | Add to List, Move to Sequence, Remove from Sequence, Update Contact Field, Assign Owner (TE Only), Set Contact Stage | | LinkedIn connection accepted | Activates when a contact accepts an automatic LinkedIn connection request sent as part of a sequence. | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | LinkedIn message reply received | Activates when a contact replies to a LinkedIn message sent as part of a sequence. | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | LinkedIn connection request forbidden due to privacy settings | Activates when a contact in your sequence cannot receive a LinkedIn connection request because their privacy settings block it. | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | LinkedIn connection request forbidden due to lack of email | Activates when a LinkedIn connection request cannot be sent because the contact's email address is missing. Some LinkedIn users restrict connection requests so that only people who know their email address can connect with them. If the email is not available or does not match the email address associated with the contact's LinkedIn account, the connection request cannot be completed, and this trigger is activated. | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | | LinkedIn URL is invalid (missing data) | Activates when a contact's LinkedIn URL is invalid or missing, preventing LinkedIn steps in the sequence from running. | Add to List, Move to Sequence, Remove from Sequence, Mark as Finished, Update Contact Field, Pause Contact, Assign Owner (TE Only), Set Contact Stage | Eleven of the seventeen events share the same eight-action vocabulary — add to a list, move to a sequence, remove from a sequence, mark as finished, update a contact field, pause the contact, assign an owner, set a contact stage. Five offer a reduced subset: **Contact created**, **Contact updated**, **Contact finished sequence**, **Contact opted out**, and **Sequence email was bounced**. **Account created** is the only event that acts on an account instead of a contact, and its only action is setting an account stage. Account stage values are listed in [Statuses](/reference/statuses). ### Conditions Conditions refine a trigger so the automation runs only for the contacts you want, at the right stage — a specific sequence or sequence step, for example. The conditions reference below uses the labels shown in the Team Edition documentation; conditions marked *for TE* are available only when Team Edition Public support for triggers is enabled. | Trigger | Conditions | | --- | --- | | Contact created | Contact field; Contact owner (for TE) | | Contact updated | Contact field; Contact owner (for TE) | | Contact opened sequence email | Number of views; Sequence; Sequence step; Contact field; Contact owner (for TE); Sequence owner (for TE) | | Contact clicked the link in sequence email | Number of clicks; Sequence; Sequence step; Contact field; Contact owner (for TE); Sequence owner (for TE) | | Sequence email was categorized | Inbox category; Sequence; Contact field; Contact owner (for TE); Sequence owner (for TE) | | Call was logged | Call resolution; Contact field; Contact owner (for TE); Sequence owner (for TE, only for calls related to a sequence) | | Sequence email was replied | Contact field; Sequence; Contact owner (for TE); Sequence owner (for TE) | | Contact opted out | Contact field; Sequence; Contact owner (for TE); Sequence owner (for TE) | | Sequence email was sent | Contact field; Sequence; Sequence step; Contact owner (for TE); Sequence owner (for TE) | | Sequence email was bounced | Contact field; Sequence; Sequence step; Contact owner (for TE); Sequence owner (for TE) | Three events are labelled differently in the two references. *Contact clicked the link in sequence email* is the trigger catalog's **Contact clicked on a link**, *Sequence email was categorized* is **Inbox category set for reply**, and *Sequence email was replied* is **Contact replied to sequence email**. **Account created** is documented separately: its **If** section filters newly created accounts by criteria such as the exact account name, domain, company size, and owner, so the trigger runs only for accounts that match. Conditions for the LinkedIn events and for **Contact finished sequence** are not covered by either reference. ### Team Edition behavior Triggers work in both Team Edition Private and Team Edition Public modes. In Team Edition Private they affect only your contacts. In Team Edition Public they can apply to all team contacts: when a team member creates a trigger, it works for the whole team — one trigger can apply to the sequences of every team member, so a team of ten does not need ten identical triggers. When you need something narrower than the whole team, add filters — Country, Contact owner, Sequence owner, and similar. For example, a trigger can move contacts to a sequence only when the contact owner is a particular team member. The modes themselves are specified in [Workspaces and roles](/specifications/workspaces-and-roles). > Team Edition support for triggers is documented as a beta feature. The conditions marked > *for TE* in the table above appear only when that support is enabled. ## Processing behavior A trigger is inert until it is saved and its toggle is enabled. Once active, it evaluates when its **When** event occurs; if conditions are present in **If**, they must match before the **Then** actions run. Actions apply automatically to the contact — or, for **Account created**, to the account — that the event belongs to. Because actions include moving a contact into another sequence and removing them from the current one, triggers interact directly with enrollment and stopping rules; see [Contact enrollment](/behavior/contact-enrollment) and [Sequence stopping](/behavior/sequence-stopping). ### Worked examples The following automations show the shape of a typical trigger. Each row is one trigger, because a trigger listens to exactly one event — flagging both openers and clickers means building two triggers with the same **Then** action. | Goal | When | Then | | --- | --- | --- | | Stop contacting anyone who unsubscribes | Contact opted out | Remove from Sequence, Set Contact Stage to Do Not Contact | | Keep LinkedIn steps from failing on bad data | LinkedIn URL is invalid (missing data) | Remove from Sequence | | Mark warm prospects after a good call | Call was logged (condition: call resolution) | Set Contact Stage to Interested | | Flag engaged readers | Contact opened sequence email | Set Contact Stage to Interested | | Flag link clickers | Contact clicked on a link | Set Contact Stage to Interested | | Stage new accounts from one domain | Account created (condition: domain) | Set Account Stage to Qualified | ## Limits - **17** trigger events in the catalog; a trigger listens to exactly one event - Each event offers a fixed action set — you cannot use an action the event does not list - **Account created** is the only event that acts on an account, and **Set Account Stage** is its only action; it ships as a predefined trigger that assigns the *New* stage by default - **Assign Owner** is marked *TE Only* on every event that offers it - **Contact owner** and **Sequence owner** conditions require Team Edition Public support for triggers to be enabled - **Sequence owner** on **Call was logged** applies only to calls related to a sequence - A trigger runs only while its toggle is enabled - The documentation does not state a cap on the number of triggers, a processing delay, or a retry policy for failed actions ## Edge cases - In Team Edition Public, a trigger created by one member applies to the whole team by default — add Country, Contact owner, or Sequence owner filters when the automation should be narrower. - In Team Edition Private, the same trigger definition affects only the contacts of the person who created it. - Two separate events cover LinkedIn connection failures: one for contacts whose privacy settings block the request, one for contacts whose email is missing or does not match the address associated with their LinkedIn account. - **Contact finished sequence** fires both when a prospect completes every step and when the status is set to *Finished* manually — see [How statuses change](/behavior/status-transitions). - The trigger catalog and the Team Edition conditions reference use different labels for three of the same events, listed under Conditions above. - Conditions are not documented for the LinkedIn events or for **Contact finished sequence**; what the **If** section offers for those events is not stated. - **Account created** already runs as a predefined trigger assigning the *New* account stage — customize it rather than adding a second trigger for the same event if you want a different default stage. ## FAQ ### Where do I create a trigger? In **Settings → Triggers**. Click **New trigger** in the upper-right corner, name it, choose the event in **When**, add conditions in **If** if you need them, choose the actions in **Then**, then save and enable the toggle. A saved trigger with its toggle off does not run. ### What can a trigger do once it fires? Depending on the event: add the contact to a list, move them to a sequence, remove them from a sequence, mark them as finished, update a contact field, pause the contact, set a contact stage, or assign an owner (Team Edition only). The **Account created** event instead sets an account stage. ### Can a trigger apply to only one sequence? Yes, for the events that expose a **Sequence** condition — opens, clicks, categorized replies, replies, opt-outs, sends, and bounces. Opens, clicks, sends, and bounces can be narrowed further to a specific sequence step, and opens and clicks can also require a minimum number of views or clicks. ### How do triggers behave across a team? In Team Edition Private a trigger affects only your own contacts. In Team Edition Public it can apply to all team contacts, so one trigger replaces one-per-member duplicates; use Contact owner or Sequence owner filters to scope it back down. Team Edition support for triggers is documented as beta. ### Does the Account created trigger need setting up? No. It is a predefined trigger that works by default and assigns the *New* account stage as soon as an account is created. To change that, open it and select another stage from the drop-down — *New*, *Qualified*, *Meeting booked*, *Negotiating*, and the rest — or add conditions in **If** such as account name, domain, company size, or owner so it stages only the accounts you care about. **Set account stage** is the only action this event offers. ### Which trigger events cover LinkedIn? Five: connection accepted, message reply received, connection request forbidden due to privacy settings, connection request forbidden due to lack of email, and LinkedIn URL is invalid (missing data). The last three are failure events, useful for pulling contacts with unusable LinkedIn data out of a sequence — see [Why LinkedIn steps fail](/troubleshooting/linkedin-steps-fail). ## Related - [Contacts](/specifications/contacts) · [Lists](/specifications/lists) · [Sequences](/specifications/sequences) · [Companies](/specifications/companies) - [Statuses](/reference/statuses) — the contact and account stage values a trigger can set - [How statuses change](/behavior/status-transitions) · [Contact enrollment](/behavior/contact-enrollment) · [Sequence stopping](/behavior/sequence-stopping) - [Workspaces and roles](/specifications/workspaces-and-roles) — Team Edition Public and Private modes - [Inbox](/specifications/inbox) · [Reply management](/capabilities/reply-management) — where inbox categories come from - [Configure account settings](/how-to/configure-account-settings) · [Filter contacts](/how-to/filter-contacts) ## Build with Reply - REST API: [docs.reply.io](https://docs.reply.io/api-reference/introduction) — check the trigger operations and their status in the reference - MCP: [agents.reply.io/mcp](https://agents.reply.io/mcp) — an agent can list triggers, inspect one, enable or disable it, and delete it --- # Reference > Exact values and lookup tables — terminology, entity relationships, statuses, permissions, limits, and calculations. Compact pages built for retrieval, not reading order. _Status: Reviewed — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 chat assistant](/capabilities/ai-assistant) — Capability - [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 - [AI writing assistant](/capabilities/ai-writing-assistant) — Capability - [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 - [Chrome extension](/capabilities/chrome-extension) — Capability - [Companies](/specifications/companies) — Specification - [Company](/specifications/companies) — Entity - [Configure account settings](/how-to/configure-account-settings) — How-to - [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 - [Core concepts](/learn) — Learn - [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 - [Edit a running sequence](/how-to/edit-a-running-sequence) — How-to - [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 - [Filter contacts](/how-to/filter-contacts) — How-to - [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 - [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/analyze-campaign-performance) — 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 - [Triggers](/specifications/triggers) — Specification - [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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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 — human-edited, facts not yet confirmed against the 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