Docs Home Lightmeter APIs

Lightmeter Beam

Campaign Manager User Manual

Overview

Beam is Lightmeter’s campaign workspace for growth teams running outbound at startup speed.

Use Beam to build multi-step sequences, manage A/B variants, monitor performance, and act quickly when a variant underperforms.

  • Create campaigns, prepare leads and sequences, and submit them for review when ready.
  • Draft and review base campaign wording in Copy before choosing whether to send it to executable steps.
  • Use UniBox for one-to-one follow-up through Interactive Replies.
  • Pause or resume sending for active campaigns and individual variants.
  • Drill down from Reports directly into campaign analytics for action.
Glossary / Definitions
  1. Reply Rate: replies ÷ (leads contacted − all bounces).
  2. Positive Reply Rate: positive replies ÷ (leads contacted − all bounces).
  3. Positive Reply Share: positive replies ÷ total replies.
  4. Campaign Reply Counting: campaign-level reply totals are deduplicated by sender within a campaign (a sender contributes at most one reply unit).
  5. Interactive Replies (UniBox): outbound one-to-one replies sent manually by your team from UniBox in Beam.
  6. Threaded Steps: scheduled campaign steps configured as thread. These are different from Interactive Replies.
  7. Completed Contacts: contacts in a terminal state (all steps sent, or undeliverable).
  8. Size: average email body size for the step or variant, measured in bytes.
  9. Infra Health: mailbox deliverability/reputation score for the selected report period.
Core Workflow
  1. Create a campaign and assign leads.
  2. Set your sending schedule and mailbox limits.
  3. Optionally prepare base wording in Edit Campaign → Copy.
  4. Build sequence steps and variants (A-F), or send prepared Copy to Steps when it is ready.
  5. Preview and test message content.
  6. Submit the campaign for review when it is ready to send.
  7. Once the campaign is active, monitor results in Edit Campaign → Analytics and Reports, then optimize.
  8. Pause or resume active campaign sending when campaign-level control is needed.
  9. When a lead replies and needs human follow-up, send an Interactive Reply from UniBox.
Copy Preparation

Use Edit Campaign → Copy when you want a campaign writing space before changing the messages that can be sent.

Copy vs Steps

  • Copy is the editorial source for drafting, review, comments, and version checkpoints.
  • Steps are the execution source used for campaign sending.
  • Saving Copy or clicking Continue from Copy does not change saved Steps.
  • Copy and Steps may intentionally differ. Use Send to Steps only when prepared Copy should update the default step variant.

Sending Copy to Steps

  • If a matching default variant already exists, Send to Steps replaces its subject and body.
  • If no matching default variant exists, Send to Steps creates one from the prepared Copy.
  • A checkpoint is saved before the handoff so the prior Copy state remains available in History.

Comments and Versions

  • Comments stay with Copy and do not change campaign sending behavior.
  • Save a version before larger edits, review milestones, or handoff to Steps.
  • Restoring a version changes Copy only. Steps change only after a later Send to Steps action.
Email Inventory

Use Email Inventory to see how your sending domains and mailboxes are distributed across campaigns and which inventory is currently unused.

  • Domains shows each domain’s current status, total active mailbox count, recent mailbox activity, and linked campaign assignments.
  • Mailboxes shows each mailbox’s warming indicator, assignment status, linked campaigns, and Last activity time.
  • Distribution shows inventory usage by campaign so you can see assigned versus recently used domains and mailboxes at a glance.
  • Use Last 24 hours or Last 5 days to change the recent-activity window across all three pages.
  • Click counts, chips, or inventory pills to open the matching filtered view or jump straight to campaign analytics.
Email Inventory is read-only in Beam. Use it for review and navigation, not for changing mailbox, domain, or warming settings.
Team Members

Use Team to see who has workspace access, invite new members, review setup status, and manage workspace roles.

  • Open Team from the main navigation, or open Settings → Team.
  • Use the search box, role filter, setup filter, and access filter to find the right person quickly.
  • Use the sortable columns to review members by name, role, setup status, safeguard status, or last activity.

Invite a Member

  1. Click Invite Member.
  2. Enter the person's email address, first name, and last name.
  3. Choose a role if the role selector is shown.
  4. Click Invite Member.
  5. Copy the setup link and send it to the person through a channel your team trusts.
Setup links are single-use after the invited member completes hosted sign-in and expire after 30 days. If a pending member needs a fresh link before first sign-in, an admin can create one from the Team table.

Roles and Permissions

Role What they can do on Team
Member Invite another normal workspace member and view the team list.
Admin Invite members or admins, change Member/Admin roles, remove workspace access, and create fresh setup links for pending members.
Owner Appears in the team list as a workspace manager. Owner role changes and owner access removal are not handled from Team.

Manage Existing Members

  • Use the Role column to change a member between Member and Admin when you have permission.
  • Use Setup to see whether first-time setup is complete or still pending.
  • Use Safeguards to review visible account protection signals such as password or multi-factor authentication status.
  • Use the setup-link action for pending members who need a fresh setup link before first sign-in.
  • Use the remove-access action when someone should no longer be able to use the workspace.
Removing access stops the person from using the workspace. It does not remove their past campaign, reply, or activity history.
Webhooks & Integrations

Beam can notify your CRM, workflow tool, or internal application automatically when important events happen.

A webhook is an automatic notification that Beam sends to a URL you choose. Your system can listen for these notifications and take action immediately, for example by creating a CRM task, updating a pipeline stage, or alerting a sales rep.

  • Use webhooks when you want Beam to push information out in real time.
  • Webhook setup is available in Settings → Webhooks.
  • Beam supports both Beam-native webhooks and Instantly-compatible webhook events for customers migrating from Instantly.
If you are moving from Instantly and already have automations in place, choose one of the Instantly-compatible events below.

Start Here

Most teams use Beam webhooks to send reply notifications into Slack. Start with the direct Slack setup below, then use the rest of this section as a reference.

Quick Start: Slack Reply Notifications

If you want Beam to notify a Slack channel when leads reply, this is the fastest path.

  1. In Slack, create a simple app in the workspace where you want the notifications to appear.
  2. Open Incoming Webhooks in the Slack app settings and turn them on.
  3. Click Add New Webhook, choose the Slack channel, and copy the generated https://hooks.slack.com/services/… URL.
  4. In Beam, open Settings → Webhooks and create a new webhook.
  5. Choose positive_reply if you want newly positive replies and follow-up replies in already-positive conversations.
  6. Choose reply_received only if you want every qualifying human reply, including replies that Beam does not classify as interested.
  7. Set the format to Slack, paste the Slack incoming webhook URL, save, and send a test notification.
Use direct Slack, not Zapier, when you want Beam's formatted Slack notification to render correctly. Zapier often rewrites or flattens the payload.

How To Set Up A Webhook

  1. Open Settings in Beam.
  2. Go to Webhooks.
  3. Select the event you want Beam to send.
  4. Paste the destination URL that should receive the event.
  5. Save the webhook and test it with a known reply or campaign action.

We recommend using an HTTPS endpoint that your team controls.

Which Events Are Available

Event Best used for What it means
positive_reply High-value sales conversation notifications Beam has identified a new positive reply, or a lead in an already-positive conversation has replied again.
campaign_created All formats Campaign creation alerts and handoff workflows A campaign was created from the app or API. Payloads include the workspace, campaign link, and available campaign details.
campaign_submitted Operational workflows A campaign was submitted through the Beam API.
reply_received Instantly-compatible Inbox and reply automations A human reply was received for a Beam campaign thread.
email_sent Instantly-compatible Outbound send automations and migration parity A campaign email was successfully sent and persisted by Beam.
email_bounced Instantly-compatible Bounce handling and migration parity A campaign-matched outbound email bounced and Beam persisted the bounced state.
lead_interested Instantly-compatible CRM qualification and handoff Beam classified the lead's latest supported reply state as interested.
lead_not_interested Instantly-compatible Suppression and routing rules Beam classified the lead's latest supported reply state as not interested.
lead_wrong_person Instantly-compatible Data cleanup and routing Beam classified the lead's latest supported reply state as wrong person.

Positive Reply, Reply Received, And Lead Interested

Use positive_reply for the highest-value reply notification workflow. It fires when Beam detects a new positive reply and when a lead who is already in a positive sales conversation replies again.

  • positive_reply is best for Slack, Zulip, CRM handoff, and sales-team notifications that should focus on interested conversations.
  • reply_received is best for migration, auditing, or fallback workflows that need every qualifying human reply whether or not Beam classifies it as interested.
  • lead_interested is best for state-transition automations that should run when the lead moves into Beam's interested supported state.

Beam-native positive_reply payloads include event_data.is_first_positive_reply and event_data.is_positive_conversation_follow_up so your endpoint can distinguish a new positive reply from a later reply in an already-positive conversation.

Need Use this event Format Important note
Only high-signal replies in interested conversations, including follow-up replies from already-interested leads positive_reply standard, slack, or slack_native This is Beam's focused positive conversation event. It is not currently available in instantly_compatible format.
Every qualifying human reply, including interested follow-ups and non-positive replies reply_received instantly_compatible or slack_native This is the Instantly-compatible way to receive follow-up replies from leads who were already interested.
The lead moved into Beam's interested supported state lead_interested instantly_compatible or slack_native This is a state-transition event. It does not fire for every later reply when the lead was already interested.

Available Delivery Formats

Format Best for Notes
standard Beam-native integrations Structured Beam JSON with Beam signing headers.
slack Zulip Legacy simple message payload for Zulip delivery.
slack_native Direct Slack notifications Real Slack text + blocks payloads for campaign-created and reply-related notifications. Use a Slack incoming webhook URL directly, not Zapier.
instantly_compatible Customers migrating from Instantly Flat JSON migration payloads designed to match the Instantly-style fields most customers already use.

Direct Slack Details

If you want Beam notifications to render cleanly in Slack, send them directly to a Slack incoming webhook URL.

  • Use the slack_native format in Beam for direct Slack delivery.
  • Do not put Zapier in the middle if you care about message formatting. Zapier often rewrites or flattens the payload, which breaks the Slack layout Beam sends.
  • Your team does not need a Slack Marketplace app from Lightmeter. You create a simple Slack app inside your own Slack workspace and use its incoming webhook URL.
Each Slack incoming webhook URL is tied to one Slack workspace and one channel. If you want Beam notifications in multiple channels, create one webhook URL per channel.

Which Beam Events Support Direct Slack

Slack-native delivery is currently available for campaign-created and reply-related events.

  • campaign_created
  • positive_reply
  • reply_received
  • lead_interested
  • lead_not_interested
  • lead_wrong_person

email_sent and email_bounced currently use the instantly_compatible format only.

What The Slack Message Includes

Beam's direct Slack format is designed for human-readable campaign and reply notifications.

  • Campaign name
  • Reply sender email
  • Step and variant when available
  • A Reply link that opens the matching UniBox thread when Beam has a UniBox URL
  • A truncated reply preview so long quoted email chains do not flood the Slack channel

Instantly-Compatible Events

Beam currently supports seven Instantly-compatible events. These are the recommended choices if you already have downstream automations that expect Instantly-style webhooks.

  • campaign_created is sent whenever a campaign is created and includes workspace details, campaign details, and a campaign edit link.
  • email_sent is sent for each successfully persisted outbound campaign send.
  • email_bounced is sent for each campaign-matched bounce after Beam marks the original outbound message as bounced, stores the inbound bounce, and updates the campaign lead to bounced.
  • reply_received is sent for each qualifying human reply.
  • lead_interested, lead_not_interested, and lead_wrong_person describe the lead's current supported reply state.
  • Only campaign-matched bounces emit email_bounced. Orphan or unmatched bounce traffic does not emit a customer-facing webhook.
  • Beam keeps campaign analytics separate from webhook delivery, so receiving more than one reply does not inflate your campaign reply counts.
If you use Instantly-compatible webhooks and need follow-up replies from leads who were already interested, subscribe to reply_received. lead_interested is a state-transition event and does not fire for every later reply in an already-interested conversation.

email_id is included on email_sent and reply_received. It is Beam's outbound email message_id in stored form (uuid@domain, without angle brackets). Use it as a stable correlation key across send, reply, retry, and debugging workflows. Beam does not currently expose a public API endpoint that accepts email_id, so treat it as an identifier for reconciliation rather than as a reply token.

Email field semantics for reply-related events:
  • For reply_received, lead_email and email use the actual inbound sender address when Beam can determine it. If the sender address is unavailable, Beam falls back to the matched lead / original thread recipient email.
  • For lead_interested, lead_not_interested, and lead_wrong_person, lead_email and email stay on the matched lead / original thread recipient email.
  • Use email_id as the primary correlation key if you need to join email_sent and reply_received, because the reply sender address can differ from the original outbound recipient.

Example: email_sent

{
  "timestamp": "2026-03-06T09:15:00Z",
  "event_type": "email_sent",
  "workspace": "workspace_123",
  "campaign_id": "test-campaign-1234",
  "campaign_name": "Test Campaign",
  "email_id": "019ce214-f5f1-7806-b1b3-a6e02f403819@beam.test",
  "lead_email": "test@example.com",
  "email": "test@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "companyName": "Example Inc",
  "email_account": "campaign@beam.test",
  "email_subject": "Re: your invite: AI event in Munich",
  "email_html": "
John,

Can I reserve you a seat?
", "is_first": false, "unibox_url": null, "step": 2, "variant": 1 }

Example: email_bounced

{
  "timestamp": "2026-03-06T09:15:00Z",
  "event_type": "email_bounced",
  "workspace": "workspace_123",
  "campaign_id": "test-campaign-1234",
  "campaign_name": "Test Campaign",
  "lead_email": "test@example.com",
  "email": "test@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "companyName": "Example Inc",
  "email_account": "campaign@beam.test",
  "unibox_url": null,
  "step": 2,
  "variant": 1
}

Example: reply_received

{
  "timestamp": "2026-03-06T09:15:00Z",
  "event_type": "reply_received",
  "lead_email": "replying.sender@example.net",
  "workspace": "workspace_123",
  "campaign_id": "test-campaign-1234",
  "campaign_name": "Test Campaign",
  "email_id": "019ce214-f5f1-7806-b1b3-a6e02f403819@beam.test",
  "email": "replying.sender@example.net",
  "firstName": "John",
  "lastName": "Doe",
  "companyName": "Example Inc",
  "unibox_url": "https://app.beam.test/beam_ui/unibox/thread_test_123",
  "email_account": "campaign@beam.test",
  "email_subject": "Re: your invite: AI event in Munich",
  "email_html": "
John,

Can I reserve you a seat?
", "reply_subject": "Re: Test Campaign", "reply_text": "Thanks for reaching out. This looks relevant for our team.", "reply_text_snippet": "Thanks for reaching out. This looks relevant for our team.", "reply_html": "

Thanks for reaching out. This looks relevant for our team.

", "step": 2, "variant": 1, "is_first": true }

In the example above, the matched lead is still John Doe from Example Inc, but the reply arrived from a different sender address. That difference is expected for reply_received.

Example: lead_interested

{
  "timestamp": "2026-03-06T09:15:00Z",
  "event_type": "lead_interested",
  "lead_email": "test@example.com",
  "workspace": "workspace_123",
  "campaign_id": "test-campaign-1234",
  "campaign_name": "Test Campaign",
  "email": "test@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "companyName": "Example Inc",
  "unibox_url": "https://app.beam.test/beam_ui/unibox/thread_test_123",
  "reply_subject": "Re: Test Campaign",
  "reply_text": "Thanks for reaching out. This looks relevant for our team.",
  "reply_text_snippet": "Thanks for reaching out. This looks relevant for our team.",
  "reply_html": "

Thanks for reaching out. This looks relevant for our team.

", "step": 2, "variant": 1 }

Choosing Between Beam-Native And Instantly-Compatible Events

  • Choose Beam-native positive_reply if you are starting fresh with Beam and want notifications for interested conversations without receiving every non-positive reply.
  • Choose Instantly-compatible events if you are replacing existing Instantly webhook automations and want to minimize downstream changes.
Instantly-compatible support currently covers email_sent, email_bounced, reply_received, and the supported reply state events that map cleanly to Beam. The bounce payload stays intentionally narrow for Instantly migration compatibility and does not expose Beam-specific bounce_type or bounce_reason.
Lightmeter MCP

Lightmeter MCP lets selected beta customers connect Beam to MCP-compatible tools and work with campaigns through the same secure account login they use for Beam.

  • Use Lightmeter MCP to list workspaces, review campaigns, retrieve campaign analytics, submit campaigns for review, and add leads to existing campaigns.
  • Sign in with your Lightmeter account when your MCP client opens the authorization flow. You do not need to copy or store an API key.
  • Use the remote server URL https://mcp.lightmeter.io/mcp.

Connection Details

Field Value
Display name Lightmeter
Server URL https://mcp.lightmeter.io/mcp
Authentication OAuth sign-in with your Lightmeter account

Available Actions

  • workspaces_list: list the workspaces your account can access.
  • campaigns_list: list campaigns in a workspace.
  • campaigns_get: retrieve a campaign and its sequence details.
  • campaign_analytics_lifetime_get: retrieve lifetime campaign analytics.
  • campaign_analytics_timeseries_get: retrieve date-grained campaign analytics by day, week, month, or total.
  • campaign_analytics_sequence_get: retrieve date-grained sequence email analytics.
  • campaign_analytics_leads_list: list lead-level campaign analytics.
  • campaign_lead_activity_list: list activity for one campaign lead.
  • workspace_analytics_overview_get: retrieve workspace analytics for a date range.
  • campaigns_submit: submit a draft campaign for review.
  • campaign_leads_add: add leads to a campaign.
If your account has access to more than one workspace, include the workspace name or workspace ID when asking your connected tool to work in Lightmeter.

Setup

In your compatible client, add a remote HTTP server named lightmeter with the server URL above. When prompted, authorize access with your Lightmeter account.

If this connection is not yet available for your account, contact your Lightmeter account manager to join the beta.

Blocklists (Suppression Lists)

Use Settings → Blocklists to set which email addresses and domains should never receive emails.

When Beam processes an explicit unsubscribe reply successfully, it keeps that lead unsubscribed in the current campaign and also adds the recipient email to the workspace email blocklist with source Auto Unsubscribe.

What You Can Do

  • Manage two independent lists: Email Address Blocklist and Domain Blocklist.
  • Add values manually, import values from CSV, remove selected values, and export the active list to CSV.
  • Filter and sort values by source and block time.
  • Review blocklist change history in Settings → Activity.

Send Behavior

  • Blocklists are scoped to your workspace.
  • When a recipient matches an active blocklist value, Beam skips the send for that lead.
  • Skipped blocklist sends are tracked in campaign analytics as blocklisted outcomes.
  • Remove an Auto Unsubscribe entry from Settings → Blocklists if you intentionally want to contact that recipient again.

Matching Rules

  • Email addresses must match exactly. Upper/lowercase differences are ignored.
  • Domain names must match exactly. Upper/lowercase differences and Unicode variants are handled automatically.
  • Subdomains must each be specified separately (example.com does not block sd.example.com).
  • Unicode/IDN domains are normalized safely before matching.

CSV Import Rules

  • Beam uses the first non-empty column in each row as the value.
  • The first row is treated as a header when it looks like Value, Email, or Domain.
  • Duplicate values inside the same CSV file are ignored.
  • Preview shows valid, invalid, duplicate, and already-existing values before apply.
Lead Deduplication

Beam lets you decide how broadly duplicate leads should be filtered before new leads are added to a campaign.

The setting lives in Edit Campaign → Leads → Add Leads to Campaign and applies to both Existing Audience imports and Upload CSV top-ups.

What It Does

  • Beam always skips leads that are already in the same campaign.
  • The deduplication policy controls whether Beam should also skip leads found elsewhere in your workspace.
  • Preview shows how many leads are already in the campaign, how many are skipped by deduplication, and how many remain importable.

Available Policies

Policy What Beam skips
None Only leads already present in the same campaign.
Active and paused campaigns Leads with active membership (pending, started, or paused) in other active or paused campaigns, in addition to same-campaign duplicates.
All campaigns Leads already present in any campaign, including completed campaigns.
All audiences Leads already present in any audience, even if that audience is not attached to a campaign.

What You Will See In The UI

  • Already in campaign counts same-campaign duplicates.
  • Skipped by dedupe policy counts leads excluded by the selected policy outside the current campaign.
  • Importable after dedupe is the number Beam can still add before blocklist/send-time checks are considered.
  • Blocklisted leads can still be imported; Beam blocks them later at send time.
Campaigns created through the public API can use the same setting via lead_dedupe_scope.
CSV Lead Uploads

Use Edit Campaign → Leads → Add Leads to Campaign → Upload CSV when you want to add more leads to an existing campaign from a spreadsheet.

Beam imports every valid unique lead it can and reports rows that could not be added. Duplicate rows do not block the whole upload.

How Beam Counts Uploaded Rows

  • A row needs at least one usable email address before Beam can add it to a campaign.
  • If multiple CSV rows point to the same lead, Beam keeps the first matching row and reports later matching rows as duplicate CSV rows.
  • Rows for leads already in the campaign are counted as Already in campaign; Beam does not create a second campaign entry for the same lead.
  • The selected lead deduplication policy can also skip leads that already exist elsewhere in your workspace.
  • The campaign lead total counts distinct leads added to the campaign, not the raw number of rows in the uploaded CSV file.

What Happens After Upload

  • Valid unique leads are added to the campaign.
  • Non-blocking row messages identify rows that were duplicates, already present, skipped by dedupe policy, or missing required contact data.
  • If some rows are reported but other rows are valid, Beam still adds the valid rows instead of failing the entire upload.

Re-uploading A Lead You Removed From This Campaign

  • If you manually removed a lead from this campaign before sending began, uploading that same lead back into the same campaign returns the lead to Pending.
  • This also applies when you remove affected leads from the launch-readiness repair flow after reviewing missing template values.
  • Re-uploading does not reopen leads that already ended for another reason, such as a reply, unsubscribe, bounce, blocklist, campaign completion, or a manual removal after sending had already started.

If The Campaign Total Looks Lower Than The CSV Row Count

  • Check the upload result for duplicate CSV rows, rows without a usable email address, leads already in the campaign, and dedupe-policy skips.
  • Use Edit Campaign → Analytics to review actual sends after the leads are added. Analytics reflects delivered campaign activity, not the original raw CSV row count.
CSV upload accounting and campaign analytics answer different questions. The upload result explains which CSV rows became campaign leads; analytics shows what Beam actually sent after those leads were in the campaign.
Manual Lead Removal

Use Edit Campaign → Leads to remove an individual lead from a live campaign when they should stop receiving future emails from that campaign.

Beam shows these leads as Removed on the Leads tab. Removed is a campaign-level terminal status. It is not the same as Unsubscribed or Do Not Contact.

When To Use It

  • The lead progressed elsewhere and should stop receiving this campaign.
  • You discovered the lead is a duplicate in an already-running campaign.
  • The contact is wrong or invalid for this campaign.
  • You have an operational reason to stop this lead without suppressing them globally.

What Happens

  • Beam stops future emails for that lead in that campaign only.
  • The lead remains visible in the campaign lead list with status Removed.
  • You must choose a removal reason. If you choose other, add a short note.
  • You can optionally override the attributed step and variant if the default attribution is misleading.

Re-uploading Corrected Leads

  • If a lead was removed manually while still waiting in the campaign queue, uploading that corrected lead back into the same campaign returns the lead to Pending.
  • The launch-readiness workflow for missing template values uses this same manual removal behavior when you choose to remove affected leads.
  • If the lead had already started sending before removal, re-upload does not resume that sequence automatically.

Removal Reasons

Reason Use it when
Progressed The lead moved forward outside Beam and should stop receiving this campaign.
Meeting Booked The lead booked a meeting or equivalent CTA outcome.
Not Interested You know the lead is not interested in this outreach, but they are not being globally unsubscribed.
Wrong Contact The lead is the wrong person or wrong target for this campaign.
Invalid Contact The address or contact data is unusable, stale, or otherwise invalid.
Duplicate The lead is duplicated in the current campaign and one record should be removed.
Other The lead should stop receiving the campaign for another reason. Add a short note so the reason is clear later.
Explicit unsubscribe replies add the recipient to the workspace email blocklist. Use Remove from campaign when you only want to stop one lead in one campaign without creating workspace-wide suppression.
Sequences & Variant Management

Step and Variant Limits

  • Up to 10 steps per campaign.
  • Up to 6 variants per step (A-F).

Delay and Threading

  • Delay is configured in days for each step.
  • From Step 2 onward, each variant can be configured as threaded to send as a reply in the same email thread.

Variant Controls

  • Preview & Test opens the exact variant content for review.
  • Pause / Unpause Variant is available per variant row.
  • Delete Variant is disabled when the step has only one variant.

Deleting Sequence Steps

  • Beam keeps step numbers contiguous after a delete. If you remove Step 4 from a five-step campaign, the remaining sequence becomes Steps 1-4.
  • Step 1 cannot be deleted from an existing campaign. Edit the first message instead of removing it.
  • Middle-step deletion is only available while Beam can safely compact the remaining steps. In practice, this means the campaign must still allow step reordering.
  • If Beam cannot safely renumber later steps, it disables middle-step deletion instead of leaving the campaign in a partially updated state.
  • Deleting the final step is still allowed when it does not require renumbering earlier steps.

When Middle-Step Deletion Is Available

  • Middle-step deletion is intended for draft campaigns before sending or lead progression has started.
  • When available, Beam deletes the selected step and automatically renumbers the later steps in the same save flow.
  • If a delete action is disabled, edit the existing step, delete only the final step, or duplicate the campaign and restructure the sequence before activation.

Save Behavior

  • Autosave is on and shows explicit save state (Saving, Saved, Failed, Unsaved).
  • You can still use Save All Sequences for a manual checkpoint.
Template Variables & Fallbacks

Use template variables in campaign subjects, campaign bodies, reply snippets, and UniBox replies to personalize messages with lead and sender data.

Common Variables

  • {{firstName}}, {{lastName}}, {{companyName}}, and {{email}} use standard lead profile fields.
  • {{senderFirstName}} and {{senderLastName}} use the sending mailbox identity.
  • {{attr.key}} uses a custom lead attribute named key. For example, {{attr.aiIcebreaker}} uses the aiIcebreaker attribute.

Fallback Text for Missing Values

  • Add fallback text after a pipe so the message still reads naturally when a value is blank: {{companyName | your company}}.
  • Spaces before or after the pipe are supported and behave the same way: {{ companyName | your company }} is equivalent to {{companyName|your company}}.
  • Fallbacks work for custom attributes too: {{attr.aiIcebreaker|quick note}} and {{ attr.aiIcebreaker | quick note }} both render quick note when that lead has no aiIcebreaker value.
  • You can chain candidates from left to right. {{firstName|companyName|there}} uses first name when present, then company name when present, then there.
  • Spaces that are part of fallback text are preserved only when that fallback is used. For normal greetings, prefer Hi {{firstName|there}} so spacing is correct whether Beam uses the lead value or the fallback. Use a fallback such as {{firstName| there}} only when the fallback itself should begin with a space.
  • A literal pipe character inside fallback text is not supported. Avoid fallback text such as {{firstName|ACME | Partners}} because Beam treats each pipe as another fallback candidate.

Random Text Variations

  • Use {{RANDOM|Hello|Hi|Hey}} to let Beam choose one option when rendering the message.
  • Spaces around random-option pipes are ignored too. {{ RANDOM | Hello | Hi }} is equivalent to {{RANDOM|Hello|Hi}}.
  • Random options are trimmed at the edges, so keep sentence spacing outside the RANDOM block when each option should share the same surrounding spaces.

Literal Braces

  • Escape the opening braces when you want to include literal template syntax in an email: \{{example}} renders as {{example}}.
  • Unescaped template-like text must resolve safely. If Beam would leave {{example}} in the rendered email, readiness checks and live sending block it before the message is sent.

Campaigns and UniBox Replies

  • Campaign editors keep variables as template text while you write because each campaign can send to many different leads. Use campaign preview and readiness checks to review rendered examples before activation.
  • UniBox replies are one-to-one. Variables inserted directly or through snippets resolve to the selected thread's lead and sender values in the reply draft.
  • Resolved UniBox values are highlighted in the editor so you can see which words were personalized. The preview shows the final message without editor-only highlighting.
  • If a UniBox variable is missing or empty and has no safe fallback, the draft shows a visible missing-value marker and sending stays blocked until you fix the value or edit the text.

Missing Variable Values

  • A variable value is the actual lead or sender information used to replace a variable such as {{firstName}} or {{senderFirstName}} before a message is sent.
  • If a required value is unavailable and there is no fallback text, UniBox shows a missing-value marker and blocks sending so the message does not go out with a blank or unresolved variable.
  • To fix a missing value, update the relevant lead or sender information, choose a different variable, add suitable fallback text where reusable content is edited, or replace the marker directly in the draft for that one reply.

Activation Readiness Behavior

  • Required lead and sender variables without values or fallback text block activation.
  • Custom attributes without values also block activation when they would render as raw template syntax. Add a fallback, fill the lead attribute, escape the braces if the literal text is intentional, or remove affected leads from the campaign.
  • Use an explicit empty fallback such as {{attr.aiIcebreaker|}} only when a blank value is acceptable. Beam warns about the affected leads but does not block activation.
  • Adding non-empty fallback text removes the missing-value warning for that variable because Beam has safe text to render.
Sending Cadence & Delay

Beam spaces sends automatically and applies limits before every email. This keeps outreach steady and lowers deliverability risk.

How Beam Decides Whether A Campaign Can Send Right Now

  1. Beam checks whether the campaign is allowed to run right now: active status, completion deadline, and schedule window.
  2. Beam checks whether a lead is actually due for its next step.
  3. Beam checks which mailbox that lead is allowed to use.
  4. Beam checks whether that mailbox is currently eligible to send, including cooldowns and daily limits.
  5. Beam only sends when both the lead and a mailbox are ready in the same processing cycle.

Automatic Delay Between Emails

  • Per mailbox cooldown: Beam enforces a baseline pause between sends from the same mailbox.
  • Natural variation: Beam adds randomized jitter so sends do not follow a rigid fixed interval.
  • Outcome: each mailbox sends at a human-like cadence instead of a predictable machine pattern.

Batching Rules

  • Beam evaluates active campaigns continuously in recurring processing cycles.
  • Each cycle processes a bounded subset of eligible leads instead of flushing everything at once.
  • Started leads keep their sender mailbox for follow-up consistency.
  • If multiple mailboxes are assigned, Beam distributes sends across currently available mailboxes instead of concentrating everything on one sender.
  • If one mailbox is busy with started leads but another mailbox is idle, Beam can still use the idle mailbox for other eligible leads in the same cycle.
  • If multiple campaigns share the same mailbox, that mailbox's overall daily capacity is shared rather than reserved per campaign.
  • A campaign can send multiple emails in one cycle, but one mailbox cannot send again until its cooldown is complete.

How Mailbox Assignment Works

  • Started leads: Beam keeps follow-ups on the same mailbox whenever possible.
  • New Step 1 leads: Beam can use any active eligible mailbox assigned to the campaign.
  • Mailbox removed from the new-lead pool: Beam can still let already-started leads finish on that mailbox if it is still structurally valid and has send capacity.
  • No reserved share: when multiple campaigns share a mailbox, Beam uses the mailbox's remaining daily capacity as it becomes available rather than reserving a fixed slice for each campaign.

Other Timing Controls You Configure

  • Step Delay (days): each sequence step waits the configured number of days before it is eligible to send.
  • Schedule Window: sends only run on selected days and times in the campaign timezone, or in each lead's timezone when use_lead_timezone is enabled and the lead has a valid timezone.
  • Campaign Limit: Beam enforces the campaign-wide max/day using the campaign timezone for the daily reset.
  • Mailbox-wide Capacity: if a mailbox-wide daily capacity is configured for a mailbox, Beam enforces that shared cap across all campaigns using the mailbox.
  • Missing Mailbox-wide Capacity: if a mailbox does not have a mailbox-wide daily capacity configured yet, Beam shows Not configured and does not apply a mailbox-wide daily cap until one is set.
  • No Reserved Mailbox Share: shared mailbox capacity is not automatically split or reserved per campaign.

What Stops Future Sends For A Lead

  • The first qualifying human reply stops future campaign sends for that lead in that campaign.
  • An explicit unsubscribe reply also stops future sends immediately and adds the recipient to the workspace blocklist.
  • Remove from campaign stops future sends only in that campaign and does not create workspace-wide suppression.
  • Automated non-bounce replies such as out-of-office messages are tracked separately and do not by themselves mark the lead as replied.

Common Reasons A Campaign Waits Instead Of Sending Immediately

Reason What it means
Outside schedule window The campaign is active, but the current time is outside the allowed send days or hours.
Campaign daily max reached The campaign has already used its allowed sends for the current campaign day.
No lead is due yet Sequence delays or lead-local schedule rules mean no lead is ready for the next step yet.
Mailbox cooling down The mailbox has sent recently and must wait before it can send again.
Mailbox limit reached The mailbox-wide daily capacity has been exhausted for that mailbox.
Lead already stopped A qualifying reply, unsubscribe, manual removal, or completion deadline has already stopped future sends for that lead or campaign.
If no mailbox is currently eligible due to cooldown or limits, remaining leads wait for the next processing cycle. This can happen even when a campaign still has remaining campaign limit, because a started lead may need a specific mailbox, or a shared mailbox may already have exhausted its overall daily capacity. If mailbox-wide capacity is not configured yet, Beam does not enforce that mailbox-wide cap, but campaign-level limits and cooldowns still apply.
Completion Deadlines

Use Completion Deadline when a campaign must stop sending after a specific cut-off.

How Beam Applies The Deadline

  • The deadline is treated as an exact cut-off time.
  • In the Beam UI, the deadline is edited in the campaign timezone shown in the schedule settings.
  • When the deadline has elapsed, Beam stops any remaining sends for that campaign immediately.

What You Will See

  • An active campaign whose deadline passes is moved to Paused with reason Deadline reached.
  • Campaign list and campaign overview show a Deadline passed badge so the stop is visible without opening logs.
  • Beam does not mark the campaign completed just because the deadline passed. Leads may still remain untouched.

What Happens To In-Flight Sends

  • Beam re-checks the deadline immediately before each SMTP handoff.
  • If the deadline passes during a processing cycle, any sends that have not yet been handed to SMTP are blocked.
  • Only messages that were already accepted for delivery before the deadline check can still leave the system.

How To Continue After A Deadline

  • Extend the deadline or clear it in the campaign settings.
  • Then resume the campaign manually.
  • If the deadline is still in the past, Beam will block resume until it is moved forward or removed.
Removing Mailboxes From Campaigns

Changing the mailbox pool on an active campaign can affect any leads that already started the sequence. Switching sender identity mid-campaign can hurt deliverability and thread continuity, so Beam now makes that impact explicit before the change is applied.

Pool And Continuity Mailboxes

The campaign mailbox screen shows all mailboxes still connected to the campaign. The Use column explains why each mailbox is present:

  • Pool: the campaign can use this mailbox for future leads and future sends that do not already have a fixed sender.
  • Continuity: the mailbox is no longer in the sender pool, but started leads are still linked to it so their sequence can continue from the same sender.

Continuity mailboxes are not used for new leads. They remain visible so you can see how many started leads are still attached, how many are ready now, and whether those started leads should keep their current sender, be reassigned, or be paused.

When Beam Shows A Warning

  • If you remove a Pool mailbox that still has started leads associated with it, Beam opens a confirmation step instead of silently applying the change.
  • The warning shows the removed mailbox addresses, how many started leads are affected, and how many are ready to send now.

Resolution Options

  • Keep started leads on current mailboxes; future leads stop using these mailboxes: safe default. The mailbox leaves the sender pool, but started leads keep using their current sender. The mailbox then appears as Continuity until those started leads finish or are otherwise resolved.
  • Reassign started leads to replacement mailboxes: move affected started leads to a replacement mailbox. Future sends for those started leads come from the replacement sender.
  • Pause affected started leads: pause affected started leads and fully detach the removed mailbox from that campaign.

Resolving Continuity Mailboxes Later

  • Select one or more Continuity mailboxes and choose Reassign selected started leads to move their started leads to replacement mailboxes.
  • Use Auto-match replacements to pre-fill likely replacements based on similar mailbox names, then review the choices before applying.
  • If those started leads should not continue sending, choose the pause option instead.

What You Can See After The Change

  • The campaign mailbox screen marks Continuity mailboxes separately from Pool mailboxes.
  • Each retained mailbox shows its address, active started lead count, ready-to-send count, and a shortcut to view the affected leads.
  • The affected-leads shortcut opens the existing campaign lead list with a sender-mailbox filter applied. Beam does not add a separate mailbox-history page in this release.
Beam preserves sender consistency for started leads here, but this does not create a user-visible reserved share of mailbox daily capacity. Mailbox-wide capacity is still shared across campaigns.
Campaign Pause & Resume

Campaign pause/resume controls sending for the entire campaign after it is active. Draft campaigns are submitted for review instead of being activated directly.

  • Pause is available on active campaigns and stops new emails from being scheduled and sent.
  • Resume is available on paused campaigns and returns the campaign to active status once any blocking issue has been addressed.
  • Sending restarts on the next processing cycle after resume succeeds.

Operational Timing

Beam processes sends in batches. In rare cases, a small number of in-flight emails may complete just after pause is clicked.

  • The exact number depends on how many sends are already in progress at the moment you pause.
  • New work is blocked immediately after pause takes effect.
Variant Pause & Unpause

Variant pause/unpause controls only one variant in one step.

Exact Scope

  • Pause applies to one specific variant in one specific step.
  • It does not pause the whole campaign and does not pause same-letter variants in other steps.

What Happens to Lead Flow

  • If a step still has at least one active variant, leads continue through those active variants.
  • If all variants in a step are paused, leads wait at that step until a variant is unpaused.
  • Reassignment happens at send time, so you do not need to bulk-move leads manually.

Where You Can Take Action

  • Sequences tab: full variant editing and pause/unpause controls with confirmation copy explaining lead-flow impact.
  • Analytics tab: quick action buttons for pause/unpause/delete at the variant row level.

Safety Guards

  • Analytics quick actions prevent pausing or deleting the last active variant in a step.
  • Deleting a variant is blocked when it would leave the step without a valid active path.

Unpause requires explicit confirmation and includes an experiment-validity warning.

Historical analytics for a variant remain visible even if that variant is currently paused.

Edit Campaign Analytics

The Analytics tab is optimized for operational decisions: you can inspect performance and take action in the same table.

Campaign Summary

  • Shows topline progress, engagement, list quality, and deliverability.
  • Displays both percentage bars and hard counts for contacted and completed leads.
  • All Replies and Pos Replies remain human-reply metrics only.
  • Auto Reply Rate is a deliverability-oriented rollup that combines human replies with automated non-bounce replies such as out-of-office messages.

Deliverability Summary Metrics

  • Content Health: overall deliverability content score from Beam deliverability testing.
  • Infra Health: overall mailbox/reputation health score from Beam deliverability testing.
  • Auto Reply Rate: total reply rate including autoresponder replies such as out-of-office messages.
  • On Google and Microsoft, only messages that land in inboxes can generate these auto replies, so this metric is treated as a deliverability signal.
  • The lead count under Auto Reply Rate is the number of deduplicated leads who generated either a human reply or an automated non-bounce reply.

Reply Counting Rules

  • All Replies and Pos Replies stay human-only.
  • Auto Reply Rate combines the deduplicated human-reply count with the deduplicated automated non-bounce reply count.
  • A sender with both an automated non-bounce reply and a later human reply still counts once in the combined Auto Reply Rate.
  • Multiple auto replies from the same sender still count as one lead in campaign summary metrics.

Step Performance Analytics

  • Engagement: Sent, Replies, Reply Rate.
  • Replies in analytics are inbound campaign replies from leads, not outbound Interactive Replies sent from UniBox.
  • Content Health: Size, Google Score, MS365 Score.
  • Infra Health: deliverability score for the selected report period.
  • Actions: Preview, Pause/Unpause, Delete (variant rows).

Metric Timeframes on this Table

  • Content Health is an all-time average for that step/variant.
  • Infra Health reflects deliverability during the selected report period.
  • Size is average email body size measured in bytes.
Reply Snippets

Beam includes a shared reply snippet library for UniBox so your workspace can reuse common follow-up copy without leaving the thread.

Where to Manage Snippets

  • Open Settings → Snippets to view and edit the shared workspace library.
  • From the campaign editor, open the snippets manager modal when you want to update reusable reply copy without leaving campaign setup.

How to Insert Snippets and Variables

  • Open a UniBox reply or forward draft.
  • Type / to open the insert menu. Variables appear first, followed by saved snippets where snippets are supported.
  • Type # to open the snippet-only picker.
  • Use the search field in the insert menu to narrow the list, then press Enter or select an item to insert it at your cursor position.
  • Inserted snippets append into the draft. Existing draft content is not replaced.
  • Variables inside inserted UniBox snippets resolve to the current thread's lead and sender values and are highlighted in the draft.
  • Use Preview to review the final reply without editor-only highlighting before sending.
  • If a snippet contains a variable that is missing or empty for the selected thread, UniBox shows a visible missing-value marker and blocks sending until the draft is fixed.

How to Insert Content While Editing a Snippet

  • In the snippet editor on Settings → Snippets or in the New snippet dialog from UniBox, type / to open the insert menu.
  • Type # to open the snippet-only picker while editing a snippet.
  • Variables appear first in the / menu. Other snippets appear below them when they are available.
  • Use the search field in the insert menu to narrow the list, then press Enter or select an item to insert it into the snippet body.
  • This works in both the plain text and rich text snippet editors. The snippet currently being edited is not shown in its own insert menu.

Create a New Snippet From Draft Text

  • Highlight the part of the reply you want to reuse.
  • Click New snippet in the composer toolbar.
  • Name the snippet and save it to the shared workspace library.

Rich Text and Plain Text Behavior

  • A snippet can have a plain text version and a rich text version.
  • Campaign editors insert plain text only. Rich text snippet content is never inserted into campaign copy.
  • UniBox inserts the version that matches the active composer mode: rich text in rich mode, plain text in plain text mode.
  • Use Generate Plain Text from Rich or Generate Rich Text from Plain to create or refresh one version from the other, then review and save it before inserting.
  • When generating rich text from plain text, Markdown-style bullets and links are converted into rich formatting for review before saving.
  • If the generated version would replace existing content, Beam asks you to confirm before overwriting it.
  • Plain text contexts show only plain text. Add visible URLs to the plain text version when a URL should appear in the plain body.
  • Variables such as {{firstName}} are preserved using Beam’s existing template rendering rules.
Activity Log

Beam includes a dedicated Activity Log so teams can verify who changed what, and when.

It is the primary product surface for auditability and audit log review.

Where to View It

  • Open Settings → Activity.
  • By default, Beam shows account-level campaign events in reverse chronological order.
  • Use Include lead-level events when you need per-lead membership outcomes.

What You Can Verify

  • Campaign status changes (including pause/resume transitions).
  • Sequence and variant changes, including variant paused and variant unpaused.
  • Team member invites, role changes, access removals, and fresh setup-link creation.
  • Deduplication policy changes and dedupe-based lead skips during audience import or CSV top-up.
  • Audience import outcomes (lead added vs skipped) when lead-level events are enabled.
  • Actor identity and source (for example UI, API, system, worker).

How to Use It Operationally

  • Validate experiment changes before reviewing performance shifts.
  • Confirm exactly when a variant was paused/unpaused relative to KPI movement.
  • Resolve team handoff questions with a shared, timestamped timeline.

UI Behavior

  • The Activity page is paginated (30 events per page by default).
  • Events are displayed as a timeline table with time, event type, campaign, summary, actor, and source.
Frequently Asked Questions (FAQ)

“I paused a variant but leads still moved”

That is expected when other variants in the same step are still active. Leads are reallocated to active variants in that step.

“Why is Pause/Delete disabled in Analytics actions?”

Analytics quick actions enforce at least one active variant per step. This avoids accidentally blocking sends from the analytics table.

“Why can I delete the last step but not a middle step?”

Deleting a middle step requires Beam to renumber every later step safely. If the campaign can no longer support that compaction flow, Beam disables middle-step deletion instead of risking a partially updated sequence. Final-step deletion can still stay available because it does not require renumbering earlier steps.

“Why is a report row not clickable?”

Some legacy rows may not have a direct campaign ID. Beam uses a safe fallback by campaign name, and disables linking if the match is ambiguous.

“Why did report metrics shift?”

Some report definitions can evolve over time (for example reply counting or deliverability calculations). Compare like-for-like time windows and check your Activity Log before drawing conclusions.

“Why do reply counts look lower than raw reply-email volume?”

Campaign-level reporting deduplicates by sender in each campaign, so multiple reply emails from the same sender do not all increase the campaign reply count.

“Do campaigns stop sending after a lead replies?”

Yes, after the first qualifying human reply. When Beam receives the first human reply for a campaign lead, it stops future campaign sends to that lead in that campaign.

Explicit unsubscribe replies also stop the lead immediately and add the recipient to the workspace blocklist. Automated non-bounce replies such as out-of-office messages are tracked separately under Auto Reply Rate and do not by themselves mark the lead as replied.

“Why is Auto Reply Rate separate from Reply Rate?”

Beam keeps the raw automated non-bounce reply signal separate so human reply metrics keep their existing meaning. Auto Reply Rate is the deliverability-oriented rollup that combines human replies with automated non-bounce replies.

“What is an Interactive Reply versus a threaded step?”

Interactive Replies are manual one-to-one messages sent by a user from UniBox. Threaded steps are scheduled campaign steps configured to send in an existing email thread. They are different Beam concepts.

“Can I verify who paused or unpaused a variant?”

Yes. Go to Settings → Activity to view the Activity Log with timestamp, actor, and event summary (including sequence pause/unpause events).

Missing Features or Controls

If features you expect to see are missing, check that browser privacy or ad‑blocking tools are not blocking PostHog.

  • Disable adblockers for the Beam site.
  • In Firefox, turn off Enhanced Tracking Protection for the site and reload.