Enrich contacts before a campaign goes out — Lusha in Salesforce Agentforce

Example outputs in this workflow are illustrative — they reflect the structure, fields, and format of real Lusha API output, but were not pulled from a live session. Build this workflow with your own Lusha API key and Salesforce org to see live results.

A campaign list that looked clean three months ago isn’t clean today. Contacts move on. Emails bounce. Titles change. Every unverified contact on a campaign list is a potential bounce that damages your sending domain, a message that lands with someone who left the company, or an outreach to a title that no longer reflects the person’s actual role or buying authority.

This workflow runs a Lusha verification pass on every campaign member before the campaign is activated. It flags bounced emails, marks departed contacts for suppression, updates stale titles, and returns a clean verified list — so the campaign reaches the right people at the right addresses, and your domain reputation stays intact.

Requires: Lusha API key · Salesforce Flow Builder · Salesforce Campaigns · Salesforce admin access

How it works

This workflow triggers when a Salesforce Campaign is moved to a “Ready to Send” status. It runs a Lusha verification pass on every campaign member, flags contacts that should be suppressed, updates stale data, and only allows the campaign to proceed once the list is clean.

1
Trigger — Campaign status changed to Ready to Send
A Record-Triggered Flow fires when a Campaign record’s status is updated to “Ready to Send.” The Flow immediately queries all Campaign Members associated with the campaign and begins the verification pass before any emails are sent.
2
Action — Verify every campaign member via Lusha
For each campaign member, the Flow calls Lusha’s /v2/contacts/search endpoint with the contact’s email address. Lusha returns their current verified status — confirmed in seat, departed, or not found — along with their current title and verified email address.
3
Action — Flag contacts for suppression
Contacts that Lusha identifies as departed are flagged for suppression — their Campaign Member status is updated to “Suppressed” and they are excluded from the send. Contacts where the email address has changed are updated with the current verified email before the campaign sends.
4
Action — Update stale contact data
For contacts confirmed in seat, the Flow updates any stale fields — title changes, direct dial updates, seniority changes — so the contact record reflects current reality before the campaign sends. Personalization tokens in the campaign email pull from updated fields.
5
Action — Write verification summary to campaign record
The Flow writes a verification summary to the Campaign record — total contacts verified, contacts suppressed, emails updated, and contacts confirmed. The campaign manager sees the full picture before approving the send.
6
Output — Verified campaign list ready to send
The campaign sends only to verified contacts with current email addresses. Departed contacts are suppressed. Stale titles are updated. The domain stays clean and every message reaches someone who can act on it.

What you’ll get back

A campaign verification summary on the Campaign record before the send:

Before Lusha verification

Salesforce fieldValue
Campaign nameQ3 Outbound — Series B Companies
Original list size284 contacts
Lusha — Contacts verified284
Lusha — Confirmed in seat251
Lusha — Suppressed (departed)18
Lusha — Email updated9
Lusha — Title updated24
Lusha — Not found in database6
Net sendable list257 verified contacts
Lusha — Verification date[date] ✓
Lusha — Verification status✓ Complete — ready to send

Suppressed contacts — flagged for rep review

ContactPrevious companyStatusAction
R.M.[Company A]DepartedSuppressed — find replacement contact
J.K.[Company B]DepartedSuppressed — find replacement contact
S.L.[Company C]DepartedSuppressed — find replacement contact

Build it

Step 1 — Add verification fields to the Campaign object

In Salesforce Setup, go to Object Manager → Campaign → Fields & Relationships. Add the following custom fields:

Field labelField typeAPI name
Lusha — Contacts verifiedNumberLusha_Contacts_Verified__c
Lusha — Confirmed in seatNumberLusha_Confirmed__c
Lusha — SuppressedNumberLusha_Suppressed__c
Lusha — Emails updatedNumberLusha_Emails_Updated__c
Lusha — Titles updatedNumberLusha_Titles_Updated__c
Lusha — Verification dateDate/TimeLusha_Verification_Date__c
Lusha — Verification statusPicklist (Pending / In Progress / Complete)Lusha_Verification_Status__c

Step 2 — Add a suppression status to Campaign Member

In Salesforce Setup, go to Object Manager → Campaign Member Status. Add “Suppressed — Departed” as a member status value. This allows the Flow to update individual campaign members without removing them from the campaign — preserving the record for reporting while excluding them from the send.

Step 3 — Build the Record-Triggered Flow

In Salesforce Flow Builder, create a new Record-Triggered Flow:

  • Object: Campaign
  • Trigger: A record is updated
  • Entry condition: Status changes to “Ready to Send” AND Lusha_Verification_Status__c is null
  • Get Records: query all Campaign Members related to this campaign
  • Loop: iterate through each campaign member
  • For each member: HTTP Callout to /v2/contacts/search with member email
  • Decision: Departed → update member status to “Suppressed — Departed”, increment suppression counter. Email changed → update email, increment email counter. Title changed → update title, increment title counter. Confirmed → increment confirmed counter
  • After loop: update Campaign record with verification summary fields and set Lusha_Verification_Status__c to “Complete”
  • Save and activate

Step 4 — Add verification summary to Campaign page layout

In Salesforce Setup, go to Object Manager → Campaign → Page Layouts. Add the Lusha verification fields to a dedicated “Lusha Verification” section near the top of the Campaign layout. Campaign managers see the full verification summary — contacts confirmed, suppressed, updated — before approving the send.

Step 5 — Test with a small campaign

Create a test campaign with 10 to 20 campaign members including at least one contact you know has recently changed companies. Set the campaign status to “Ready to Send” and confirm the Flow fires, verifications run, the departed contact is suppressed, and the summary fields populate on the Campaign record. Full troubleshooting guidance at docs.lusha.com/guides.

Example outputs in this workflow are illustrative — they reflect the structure, fields, and format of real Lusha API output, but were not pulled from a live session. Build this workflow with your own Lusha API key and Salesforce org to see live results.

Built by: Lusha
Time to build: 30 min
Difficulty: Easy
Tools: Lusha, Salesforce
Type: Template

FAQ

  • Should I run this workflow on every campaign or only certain types?

    Run it on every campaign that sends to contacts you haven’t verified in the last 30 days. If you’re running the scheduled account enrichment from Workflow 5 weekly, contacts enriched recently may not need re-verification before a campaign — add an entry condition that checks whether Lusha_Last_Verified__c is older than 30 days for each member and skips the API call for recently verified contacts. This reduces credit consumption significantly for teams running frequent campaigns against a well-maintained contact database.

  • What happens to suppressed contacts — are they permanently removed from the campaign?

    Suppressed contacts remain in the Campaign Member list with a status of “Suppressed — Departed” — they’re excluded from the send but preserved in the campaign record for reporting. This is intentional: the suppression count is useful data for understanding list quality and decay rates over time. If you want to find replacement contacts for suppressed campaign members — particularly for named account campaigns where coverage matters — run the Enrich Contact Skill or the Buying Group play on the accounts where contacts were suppressed.

  • How long does the verification pass take for a large campaign list?

    Salesforce Flow processes HTTP callouts sequentially — one API call per campaign member. At roughly one to two seconds per callout, a campaign list of 500 contacts takes approximately 8 to 15 minutes to verify. For very large campaigns of 2,000+ contacts, consider triggering the verification workflow 24 hours before the planned send date rather than at the “Ready to Send” status change — this gives the Flow enough time to complete before the campaign manager needs to review the suppression report and approve the send.

  • Can I use this workflow to verify contacts before a Salesforce Email Studio send rather than a standard campaign?

    Yes — the verification logic is the same regardless of the sending tool. The trigger condition needs to change based on how you indicate a list is ready in your workflow, but the core Flow — query campaign members, call Lusha for each one, suppress departed contacts, update stale data — applies equally. If your team uses Marketing Cloud or Pardot rather than Salesforce Campaigns natively, the verification pass can be triggered from a data extension update or a Pardot list status change using a connected Flow or API webhook.

  • What should I do with the six contacts flagged as "not found in Lusha database"?

    “Not found” means Lusha couldn’t match the contact to a verified record — this happens most often with personal email addresses, contacts at very small companies with limited Lusha coverage, or contacts where the name and email combination doesn’t resolve to a unique match. For these contacts, the safest approach is to include them in the send but flag them for manual review after the campaign — if the email bounces, suppress and remove. If it delivers and gets a reply, the contact is reachable and the record can be manually updated. For high-value named account campaigns where every contact matters, run a manual lookup in Lusha Workspace on the unresolved contacts before the send.

Ready to run this?

Connect once, run anywhere. Works in Claude, ChatGPT, n8n, Clay, or any agent connected to Lusha.