Skip to content
NewSee how

Avoid double-touching & suppress bad contacts

Stop emailing the same person twice. Or emailing people who bounced or opted out. Dedupe on import, exclude with segmentation, and let bounce/unsubscribe statuses suppress automatically.

  1. The two problems this solves

    There are two things people usually mean by “suppression”: (a) emailing the same person twice across campaigns, and (b) emailing people who already bounced or opted out. There’s no single “suppression list” button in FirstSales — instead, three separate mechanisms cover both cases. This guide walks through all three.

  2. Dedup happens on import

    When you import a CSV, duplicates are detected and counted automatically — the import result shows a Duplicates tile alongside Imported, Errors, and Total. The same contact isn’t inserted twice. See Import contacts from CSV.

  3. Exclude people already in a campaign

    Open Campaign → Segmentation and turn on Exclude active campaigns and Exclude completed campaigns so no contact gets touched by two campaigns at once. This is the real “don’t double-touch” control.

  4. Exclude specific lists and tags

    In the same panel, add excluded lists and excluded tags — for example, a “customers” or “do-not-contact” tag you maintain yourself. The Contact Selection summary shows Lists included and Exclusion rules counters so you can confirm your setup at a glance.

    Exclude specific lists and tags
  5. Bounced and unsubscribed contacts are suppressed automatically

    A contact’s status governs sending, in this order: unsubscribed > bounced > auto-suspended (dirty) > risky > active. An unsubscribed contact “opted out and will not receive emails” — you don’t move them anywhere; the status alone holds them back.

  6. Opt-outs classify themselves

    With the Loop opt-out brake on, replies like “stop,” “not interested,” or “do not follow up” are auto-classified as unsubscribe and halt future sequence steps. Stop-on-reply pauses the sequence the moment anyone replies at all. Keep both on. See Stop on reply & opt-out.

  7. Keep the list clean

    Run verification — address format, mail server (MX), disposable, typo, and role checks — so junk addresses are flagged before they bounce and get suppressed the hard way. See Contact verification settings.

Pro tips

  • There’s no list to maintain

    Dedup on import, segmentation exclusions, and bounce/unsubscribe statuses cover suppression automatically: you don't need a separate list.

  • Always exclude active + completed campaigns

    It's the single switch that stops the same prospect getting hit by two campaigns at once.

  • Build your own do-not-contact tag

    Maintain a “do-not-contact” tag and exclude it in every campaign's segmentation: a manual suppression built from a control that actually exists.

  • Suppressed by status, not deletion

    Unsubscribed and bounced contacts are held back by their status. Leave them in the list so they keep being skipped instead of getting re-imported later.

Frequently asked questions

Does FirstSales have a suppression / do-not-contact list?

Not as a standalone feature. Suppression happens three ways: duplicates are dropped on import, segmentation lets you exclude lists/tags/campaigns, and bounced/unsubscribed contacts are skipped automatically by their status.

Why did the same contact get emailed by two campaigns?

Because active/completed campaigns weren’t excluded in Segmentation. Turn those on and each contact is touched by only one campaign at a time.

What happens when someone unsubscribes?

Their status becomes Unsubscribed and they will not receive further emails — it’s automatic and permanent unless changed. Replies like “stop” or “not interested” trigger this via the opt-out brake.

Are duplicates removed when I import?

Yes. The importer detects duplicates and shows the count — the same contact isn’t added twice.

How do I build my own do-not-contact list?

Tag those contacts (for example, do-not-contact) and add that tag to the exclude list in every campaign’s Segmentation. That’s the supported pattern.

Do bounced contacts keep getting emailed?

No. Bounced and auto-suspended statuses suppress sending automatically. Leave them in the list so they stay suppressed.

Should I delete unsubscribed or bounced contacts?

No — deleting them risks re-importing them later. Their status already suppresses them; keep them as a permanent record.

List Management

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.