Sales sequences ≠ Marketing sequences.
- Sales Sequences (this page) — OAuth Gmail/Outlook, CRM-scoped, one rep’s inbox, exit on reply/booking. Lives under CRM → Sequences.
- Marketing Sequences — SES blast, bulk audiences, engagement branching. Lives under Marketing → Sequences.
Before you start
Connect your sending inbox
Sales sequences send from the contact owner’s connected inbox. Connect yours first:If the contact owner has no connected inbox when a step fires, the enrollment flips to failed with a red-pill message on the Enrollments tab. Connect, then resume.
Step kinds
Each sequence is an ordered list of steps. Five kinds cover most cadences:Send from your OAuth inbox. Subject + body support
{{first_name}}, {{last_name}}, {{company_name}}, and any custom field you’ve added to contacts. CC/BCC supported per step. Unsubscribe footer auto-appended.call
Creates a task on your CRM queue with a due date. No auto-dial.
Creates a LinkedIn-flagged task on your CRM queue (connect request, DM, etc.) with a due date. You do the actual send in LinkedIn.
task
Generic task reminder — “research their latest funding round”, “check for mutual connections”.
wait
No side effect; just advances the pointer. Use
wait between an email and a follow-up task to space them out.Delays between steps
Each step has three delay inputs that stack (in order): business days, calendar days, hours.delay_business_days = 2means “Mon–Fri, 2 weekdays later”. Enroll on Friday → next step fires Tuesday.- Calendar days and hours are added on top of the business-day offset.
- Holidays aren’t auto-skipped (v1). If you need them, add a
waitstep or pause the sequence.
Exit triggers
On the sequence Overview tab you can toggle three auto-exit rules:| Toggle | What it does | Typical use |
|---|---|---|
| Exit on reply | Stops the sequence when the contact replies to any email in the thread. | Default ON. You almost always want this. |
| Exit on stage change | Stops when the contact’s lifecycle stage or a linked deal’s stage changes. | ON for post-qualification cadences. |
| Exit on booking | Stops when a meeting is booked for this contact in your connected calendar. | Default ON. |
Build a sequence — three ways
- AI chat (fastest)
- Start from a template
- Build manually
Open the AI SDR chat and describe the cadence. Example:The AI SDR creates the sequence, adds the steps, and wires the exit flags. Confirm by opening the sequence in the UI.
Merge variables
Anywhere in subject, body, CC, or BCC:{{first_name}}, {{last_name}}, {{company_name}}, {{owner_first_name}}, {{owner_email}}.
You can also reference any custom field you’ve added to contacts — e.g., if you have a custom field named renewal_date, {{renewal_date}} renders it. Multi-line custom field values preserve their line breaks.
Missing values render as empty strings (no "" leaking through to the recipient). You can see the render live by clicking Preview with contact on any email step.
A/B variants per step
On any email step, toggle Enable A/B to add a second subject + body. Enrollments are assigned to A or B deterministically (hash of enrollment id), so roughly 50/50 over time. The Analytics tab breaks opens / clicks / replies out per variant so you can see which wins.Templates
Save a good email step as a reusable template: Steps → … menu → Save as template. Pick from your templates later via the template picker on any new step. Templates are personal to your user — they don’t share across the account.Spam-risk preview
Every email step shows a spam score (0–100, lower = better) and color band (green / amber / red) computed from a heuristic scorer (ALL-CAPS subjects, spam-vocabulary phrases, link-to-text ratio, excessive exclamations, empty subject, image-only bodies, dollar-sign patterns, and more). Fix the red warnings before you enroll. You can also ask the AI SDR:Score this subject and body for spam risk, and rewrite it to be under 20.
Enroll contacts
Single contact
On any contact detail page, click Enroll in sequence. Modal picks:- which sequence (active only)
- which of your connected inboxes to send from (defaults to the contact owner’s default; override only if you want sends attributed to a specific mailbox)
Bulk from the contacts list
Check rows, open the bulk action bar → Enroll in sequence. Same modal, but runs across the selected contacts. The response summarizesenrolled / skipped_duplicates / failed.
Duplicates and failure modes
- Same contact, same sequence → skipped (a contact can be in the same sequence only once).
- Same contact, different sequences → allowed.
- Contact owner has no OAuth inbox → that enrollment is
failed, with a red badge and a plain-Englishfailure_messageon the Enrollments tab. Fix by either (a) connecting an inbox, or (b) reassigning the contact to an owner who has one.
Manage live enrollments
The Enrollments tab on a sequence shows every active / paused / exited / failed enrollment. Per row you can:- Pause — freeze the cadence for this contact (no sends fire; pointer doesn’t advance).
- Resume — unfreeze.
- Unenroll — exit with reason
manual. Cannot be undone; re-enroll to start over.
reply_received, stage_changed, booking, unsubscribed, manual, or completed (reached the end of the step list).
Suppressions
A contact can be globally suppressed from sales-sequence sends — either because they clicked the unsubscribe link, hit “mark as spam”, or you manually added them.- The unsubscribe footer on every email uses RFC 8058 one-click headers, so Gmail and Outlook native unsubscribe buttons work.
- Manage the list at CRM → Settings → Suppressions.
- Suppressed contacts can still be enrolled in a sequence — the email step will just skip them with the reason
suppressedand move to the next step. No send goes out.
Analytics
Per sequence, the Analytics tab shows overall and per-step metrics:- Sent — how many emails actually dispatched (not queued)
- Opens / Open rate — from the tracking pixel
- Clicks / Click rate — from wrapped links
- Replies / Reply rate — inbound CRM email activities tied to the sequence
- Unsubs / Bounces — per the send provider’s callbacks
- Meetings booked — calendar activities for enrolled contacts
crm_sequences_compare tool lets the AI SDR rank two sequences head-to-head on reply rate.
Editing a live sequence
Steps are read from the database on every cron tick, so edits apply to steps that haven’t fired yet. Already-sent steps aren’t retroactively rewritten — the email went out with the old copy. Safe edits while enrollments are active:- Tweak subject / body of later steps
- Adjust delays on not-yet-fired steps
- Toggle exit flags on the sequence
- Deleting a step that’s “up next” for many enrollments (pointer gets stranded; those enrollments jump to the next one, but you may not intend that)
- Changing step_type mid-flight
Throttling and send caps
Account-wide knobs under Settings → Sales Sequences:max_active_sequences_per_contact— cap the number of simultaneous sequences one contact can be in (prevents over-messaging).sequence_hourly_send_cap— global hourly ceiling across all sales sequences. The queue clamps to this — extra sends roll to the next hour.
Troubleshooting
My enrollment says 'failed' with 'Owner has no connected Gmail/Outlook inbox'
My enrollment says 'failed' with 'Owner has no connected Gmail/Outlook inbox'
The contact’s owner hasn’t connected an OAuth sending inbox. Either connect one under Settings → Email Connections, or reassign the contact to an owner who has.
Emails queue but never send
Emails queue but never send
Two crons must run:
crm-sequence-engine (enqueues sends) and email-send-queue-tick (actually dispatches). If you’re on Hiveku cloud, both run automatically. If self-hosted, confirm your cron scheduler is hitting both endpoints.Exit-on-reply didn't fire even though the contact replied
Exit-on-reply didn't fire even though the contact replied
The reply needs to land as a CRM email activity — either the inbox sync picked it up, or someone logged it manually. If the mailbox isn’t syncing, replies won’t be detected. The cron backstop catches most edge cases on its next tick.
The send window dropped a step I expected to fire
The send window dropped a step I expected to fire
Steps only fire inside the sequence’s configured
send_window_start_hour and send_window_end_hour in the sequence’s timezone, and on weekdays if send_weekdays_only = true. A step scheduled for Saturday 3am in a Mon-Fri 9-5 window defers to the next Monday at 9am.How do I duplicate a sequence?
How do I duplicate a sequence?
On the sequence detail page, … menu → Duplicate. You get a copy (
Active = false) with all steps intact. Rename, tweak, activate.Related
- Connect Gmail · Connect Outlook — prerequisite for sending
- Add and Manage CRM Contacts — contact creation, tags, custom fields
- Cold Email Campaigns — for high-volume blast (Marketing side)
- Email Suppressions — account-wide opt-out list
- Marketing Sequences — the SES blast cousin of this feature