Skip to content
NewSee how
Fix

Campaigns no longer stall under heavy load

Fixed a set of scheduling issues where follow-up backlogs or transient send failures could leave campaign contacts waiting indefinitely.

A campaign that goes quiet without warning is one of the harder problems to diagnose — there's no error, no alert, just a contacts list that stops moving. We found and fixed the root causes of several stall patterns that could affect campaigns under heavy load.

What was happening

Two distinct problems could leave contacts waiting indefinitely for their next step:

Backlog starvation. In workspaces with large follow-up queues, the scheduler let existing follow-up work crowd out newly enrolled contacts. Fresh prospects sat waiting for a sending slot that never came, even when there was capacity available. The problem scaled with backlog size — the more follow-ups queued, the worse the starvation.

Strand-on-failure. A transient send failure — a brief network hiccup, a momentary mailbox error — could strand a campaign instead of scheduling a retry. The campaign looked active but was effectively frozen for affected contacts, with no indication anything had gone wrong.

What we fixed

  • Follow-up backlogs no longer crowd out new campaign sends — the scheduler now balances fairly across both, so newly enrolled contacts get timely first emails regardless of queue depth.
  • Transient failures retry automatically instead of stranding the campaign at the point of failure.
  • Paused emails reactivate without colliding over sending slots when they resume.
  • A watchdog now detects and recovers any campaign that does get stuck, so a stall can't persist indefinitely even if an edge case slips through.

Why it matters

Timing is a meaningful variable in cold outreach. A contact who should receive their first email on day one and their follow-up on day three converts differently than one who waits days longer than intended. Stalls compress your effective reply window and produce misleading campaign data — a sequence that appears to be underperforming may simply be behind schedule. These fixes keep your campaigns moving at the cadence you designed.

What to check

Nothing — recovery is automatic. If a campaign previously looked stuck, its status on the Campaigns page now reflects reality, and the campaign Logs tab shows every retry as it happens.

If you had campaigns that appeared active but weren't sending, check their logs now. You'll see where they stalled and confirm that sends have resumed. Any contacts that were waiting in a stalled state will be picked up in the next scheduling cycle automatically, without needing to be re-enrolled or touched manually. The sequence continues from where it left off — no steps are skipped and no duplicates are sent.

All updates

Outreach that keeps going after you log off.Leads, emails, follow-ups and replies, handled.

Connect unlimited mailboxes and let AI agents find leads, write each email and follow up. Or send your own templates in manual mode. From $29/mo.

$1 for 3 days · Cancel anytime · No contract

Install with AI

Your coding agent sets up the FirstSales CLI and skills for you.

Prompt for Claude Code

I'm setting up FirstSales (https://firstsales.io), an AI outbound sales platform: campaigns, contacts, a reply inbox, deliverability and lead signals. Help me get my workspace sending real, good emails end to end, from Claude Code.

Read these first so you know how FirstSales works:
- Developer docs and API: https://developer.firstsales.io
- CLI: https://www.npmjs.com/package/@firstsales.io/cli
- Skills for coding agents: https://github.com/firstsalesio/firstsales-skills (read README.md and GUIDE.md)

Setup
1. Install the CLI: npm install -g @firstsales.io/cli
2. Install the FirstSales skills:
   claude plugin marketplace add firstsalesio/firstsales-skills
   claude plugin install firstsales@firstsales
3. Ask me if I already have a FirstSales account. If not, send me to https://app.firstsales.io to sign up.
4. Ask me to create an API key under Settings → API → API Keys, with only the scopes we need.
   Never ask me to paste the key into this chat. Tell me to run this in my own terminal, so the key stays hidden:
   read -rs FS_KEY && firstsales auth login --api-key "$FS_KEY"; unset FS_KEY
5. Run `firstsales whoami` and tell me which workspace and organisation we are connected to.

Then ask me about my business: what I sell, who I sell to (roles, company size, countries), my best customers, and what I use today for outbound (tools, lists, mailboxes). Walk me through:
1. Teaching FirstSales my business: website, offer, proof points and case studies in the knowledge base, so the AI writes like someone who knows the product.
2. Connecting my sending mailboxes and checking my sending domain: SPF, DKIM, DMARC and warm-up. If anything is unhealthy, tell me the exact DNS record to add.
3. Bringing in contacts: import my CSV or CRM export into a clean list, remove duplicates and bad emails, and block domains I must never email (customers, competitors, my own).
4. Building my first campaign: the right list, senders, steps and timing. Write the sequence with me, show me the drafts, and do not launch until I say yes.
5. Setting up Signals if it fits: find people engaging with LinkedIn posts about topics my buyers care about, and turn them into leads.
6. Inviting my team and giving each person the right access.

Once campaigns run, show me how to work the reply inbox from here: which replies need an answer, draft responses in my voice, and move good conversations into deals. If I use Cal.com, connect it so follow-ups can offer my booking link (not the first email).

Throughout, as you learn about my business, proactively suggest and help create:
- Reply templates for the questions and objections my prospects are likely to raise, based on my product, site and codebase if you can see them.
- Campaign ideas and segments worth testing, with the reason for each.

Safety rules:
- Show every change as a dry run (--dry-run) first and wait for my yes. Never send emails, launch campaigns or delete anything without my yes.
- Tell me before anything that spends credits, and how many.

Be opinionated. If the docs give a sensible default, just use it. Don't make me choose between five options.