Pular para o conteúdo
NovoVeja como
Correção

A failed research attempt no longer traps a campaign

A temporary research failure used to spend a contact's limited research budget the same as a completed attempt. It now retries without spending that budget.

A temporary research failure used to eat into a contact's research budget every time it happened. Now it retries without spending that budget, so a contact isn't stuck just because one attempt happened to fail.

What changed

Before a draft can be written for a contact, FirstSales runs research on that contact and their company, gathering the kind of detail that lets a draft sound like it was written by someone who actually looked into the business. Each contact has a limited research budget, since research takes real time and real resources to run properly. Previously, a temporary failure during that research process, a timeout, a source that didn't respond in time, a transient error unrelated to the contact itself, still counted against the contact's budget the same way a completed, successful attempt would.

That meant a contact could burn through its entire research budget on failures that had nothing to do with the contact or the quality of information available about them, and end up stuck: no completed research, and no budget left to try again. From your side, that contact would simply never get a draft, with no obvious reason why, since the failures that caused it weren't visible as anything more than a contact that never progressed.

Now, a temporary failure retries automatically without counting against the contact's budget. Only a completed research attempt, successful or not, uses up part of that budget. A retry after a transient failure is treated as a continuation of the same attempt, not a new one.

How to use it

There's nothing to configure. If a contact's research fails temporarily, it retries automatically in the background, and you won't see that failed attempt reflected as spent budget for the contact. You don't need to manually retry anything or intervene for this to take effect.

If you have a contact that was previously stuck with no research and no remaining budget because of failures like this before the fix, it should now be able to retry and complete research normally. If a contact still isn't progressing after this fix, that's more likely a sign of a genuine issue with the contact's information itself, worth checking directly, rather than the retry pattern this fix addresses.

Why it matters

Research budget is meant to reflect how much real research effort has actually gone into understanding a contact, not how many times an unrelated system hiccup happened to occur while trying. A contact trapped by failed attempts entirely outside its control meant no draft ever got written for that contact, and it would drop out of your campaign silently, with nothing in your view flagging that it had happened or why. In a campaign with hundreds of contacts, that kind of quiet attrition is easy to miss entirely, and it directly reduces how many people actually hear from you, for a reason that had nothing to do with them.

Retrying temporary failures without spending the budget keeps that outcome tied to whether research actually happened, not to bad luck in a single attempt. A contact now gets a fair shot at completing research and getting a draft, regardless of how many transient failures it takes to get there.

The distinction between a temporary failure and a real result also matters for how the budget itself is meant to work. Research budget is a resource you're meant to be able to reason about, roughly how many real attempts a contact has had, not a number quietly eroded by conditions that have nothing to do with the contact's actual research needs. Treating a timeout the same as a completed attempt conflated two very different things under one number, and that conflation is what this fix removes.

Auditing coverage after this fix

If you previously worked around this by manually reviewing contacts that seemed stuck with no research, you shouldn't need to keep doing that as a routine check going forward. The retry logic now handles the case that used to require your intervention, so a contact that hits a temporary failure recovers on its own rather than needing you to notice and re-trigger it by hand.

If you're auditing a campaign's contact list for coverage, for instance checking what share of contacts successfully got a draft, contacts that previously appeared stuck due to this issue should now be moving through research and drafting like the rest of your list, which is worth factoring in if you're comparing coverage numbers from before and after this fix.

Why this matters more at scale

Every contact stuck by this issue was a prospect who should have received outreach and didn't, for a reason that had nothing to do with them or with the quality of your campaign. That kind of silent loss is worse than an outright failure you'd notice and investigate, because it looks like nothing at all from your side, just a contact that never quite finished, easy to overlook in a list of any real size. Fixing the retry behavior at the source, rather than asking you to manually catch and re-trigger affected contacts, means the campaign's actual reach matches what you built it to be, without you needing to audit for this specific failure pattern yourself.

This is also the kind of fix that matters more the larger your contact list gets. A single stuck contact in a list of twenty is easy to notice and easy to manually nudge along; the same failure rate applied to a list of several thousand becomes a meaningful, invisible gap in coverage, and one that scales with the size of the campaign rather than with anything you did wrong in setting it up.

There's no action required to re-trigger contacts that were previously affected. The retry logic runs as part of the normal research process, so any contact that had genuinely exhausted its budget purely due to transient failures should now pick back up on its own the next time research runs for it.

Availability

This applies to all contacts going through AI-driven research as part of a campaign.

Todas as novidades

Prospecção que continua quando você desconecta.Leads, emails, follow-ups e respostas, resolvidos.

Conecte caixas ilimitadas e deixe os agentes de IA encontrarem leads, escreverem cada email e fazerem follow-up. Ou envie seus próprios modelos no modo manual. A partir de $29/mês.

$1 por 3 dias · Cancele quando quiser · Sem contrato

Instalar com IA

Seu agente de código configura a CLI e as skills do FirstSales para você.

Prompt para 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.