Guide

Auto-enrich new Salesforce leads with Lusha using Flow

Time to build: 30 min
Difficulty: Easy
Tools: Lusha ▪ Salesforce

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.

Every inbound lead that hits Salesforce arrives with a name, an email, and a company — and not much else. A rep has to open the record, cross-reference LinkedIn, check the CRM, and manually piece together enough context to know whether the lead is worth calling. This workflow removes that step entirely. The moment a new Lead record is created in Salesforce, a Salesforce Flow calls the Lusha API to enrich it — verified email, direct dial, current title, seniority, department, and full company firmographics — and writes everything back to the Salesforce record before the rep opens it. The lead arrives pre-enriched. The rep arrives informed.

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

How it works

The workflow runs automatically every time a new Lead record is created in Salesforce. It calls the Lusha API to enrich the contact and company, writes the enriched data back to the Lead record, and logs the enrichment timestamp so you always know when data was last verified.

1
Trigger — New Lead created in Salesforce
Salesforce Flow fires the moment a new Lead record is created — from a web form, a manual entry, a CRM import, or an inbound integration. The workflow runs on every new lead regardless of source.
2
Action — Call Lusha API to enrich contact
The Flow calls Lusha’s /v3/contacts/search-and-enrich endpoint with the lead’s email address or name and company. Lusha returns the verified contact profile — current title, seniority, department, verified email, direct dial, and mobile number.
3
Action — Call Lusha API to enrich company
A second call to Lusha’s /v3/companies/search-and-enrich endpoint enriches the company — industry, employee count, revenue range, funding stage, HQ location, and tech stack. Both calls run in sequence from the same Flow.
4
Action — Write enriched data back to Salesforce
The Flow maps Lusha’s response fields to your Salesforce Lead fields and updates the record. Only empty fields are written by default — existing data is not overwritten unless you configure it to do so.
5
Output — Enriched Lead record, ready for the rep
The Lead record now contains verified contact and company data. A custom field logs the Lusha enrichment date so you always know when the data was last confirmed. The rep opens a complete record, not a blank one.

What you’ll get back

A Lead record that arrives looking like this — before the rep opens it:

Before Lusha enrichment

Salesforce fieldValue
First nameR.
Last nameM.
Emailr.m@[company].com (unverified)
Titleblank
Phoneblank
Company[Company]
Industryblank
Employeesblank
Lusha enrichedblank

After Lusha enrichment

Salesforce fieldValue
First nameR.
Last nameM.
Emailr.m@[company].com ✓ verified
TitleVP of Sales
SeniorityVP
DepartmentSales
Direct dial+1 512 555 ••••
Mobile+1 512 555 ••••
Company[Company]
IndustryRevenue Intelligence / SaaS
Employees280–320
Revenue range$10M–$50M
Funding stageSeries B
HQAustin, TX
Lusha enriched[date] ✓

Build it

Step 1 — Get your Lusha API key

Log in to your Lusha account, go to Settings → API, and copy your API key. Full API documentation is at docs.lusha.com/guides.

Step 2 — Create a Named Credential in Salesforce

In Salesforce Setup, go to Security → Named Credentials → New. Set the URL to https://api.lusha.com, authentication protocol to “No Authentication” (you’ll pass the API key in the header), and save. This keeps your API key secure and out of the Flow directly.

Step 3 — Add custom fields to the Lead object

In Salesforce Setup, go to Object Manager → Lead → Fields & Relationships. Add the following custom fields to store Lusha data:

Field labelField typeAPI name
Lusha — Direct dialPhoneLusha_Direct_Dial__c
Lusha — MobilePhoneLusha_Mobile__c
Lusha — SeniorityTextLusha_Seniority__c
Lusha — DepartmentTextLusha_Department__c
Lusha — Funding stageTextLusha_Funding_Stage__c
Lusha — Employee countNumberLusha_Employee_Count__c
Lusha — Revenue rangeTextLusha_Revenue_Range__c
Lusha — Enriched dateDate/TimeLusha_Enriched_Date__c

Step 4 — Build the Flow in Salesforce Flow Builder

In Salesforce Setup, go to Process Automation → Flows → New Flow → Record-Triggered Flow.

  • Object: Lead
  • Trigger: A record is created
  • Condition: Run always (or add an entry condition if you want to filter by lead source)
  • Action: Add an HTTP Callout action — select your Named Credential, set the endpoint to /v3/contacts/search-and-enrich, method POST, and pass the lead email in the request body
  • Parse the response: map the returned fields to your Lead custom fields
  • Add a second HTTP Callout to /v3/companies/search-and-enrich for company enrichment
  • Add an Update Records element to write all enriched values back to the Lead
  • Save and activate

Step 5 — Test with a live lead

Create a test Lead record with a known email address. Open the record and confirm the Lusha fields are populated. Check the Flow debug log if fields are empty — the most common issue is an incorrect API key header or a mismatched field API name. Full troubleshooting guidance at docs.lusha.com/guides.

API reference

Contact enrichment endpoint

POST https://api.lusha.com/v3/contacts/search-and-enrich

Headers:
  api_key: YOUR_LUSHA_API_KEY
  Content-Type: application/json

Request body:
{
  "contacts": [
    { "clientReferenceId": "{{Lead.Id}}", "email": "{{Lead.Email}}" }
  ],
  "reveal": ["emails", "phones"]
}

Match the result by clientReferenceId (results[0] is fine for single-item calls).
If results[0].error exists (NOT_FOUND / COMPLIANCE_RESTRICTED / ENRICH_FAILED), skip mapping.

Key response fields to map:
  jobTitle.title                              → Title
  phones[] where type = "direct" → .number    → Lusha_Direct_Dial__c
  phones[] where type = "mobile" → .number    → Lusha_Mobile__c
  emails[] where type = "work" → .email       → Email (if empty)
  jobTitle.seniority                          → Lusha_Seniority__c
  jobTitle.departments[0] (or join array)     → Lusha_Department__c

Company enrichment endpoint

POST https://api.lusha.com/v3/companies/search-and-enrich

Headers:
  api_key: YOUR_LUSHA_API_KEY
  Content-Type: application/json

Request body:
{
  "companies": [
    { "clientReferenceId": "{{Lead.Id}}", "name": "{{Lead.Company}}" }
  ]
}
(Use "domain" instead of "name" when available, since it matches more reliably.
 No "reveal" needed. Base firmographics are returned by default.)

Match the result by clientReferenceId (results[0] is fine for single-item calls).
If results[0].error exists, skip mapping.

Key response fields to map:
  industry                                    → Industry
  employeeCount.exact (fallback: min–max)     → Lusha_Employee_Count__c
  revenueRange.min – revenueRange.max         → Lusha_Revenue_Range__c
  funding.lastRoundType                       → Lusha_Funding_Stage__c
  location.city                               → City
  location.country                            → Country

Full API documentation: 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.

FAQ

  • The Lusha API is available on Scale and Enterprise plans. If you’re on a lower plan and want to build this workflow, contact your Lusha account manager or visit lusha.com/pricing to check your current plan. The API key is available in your Lusha account under Settings → API once your plan includes API access.

  • If Lusha returns no match for the email address or name and company combination, the Flow completes without writing any enrichment data and logs a “no match” status to the Lusha_Enriched_Date__c field. The Lead record stays as-is. The rep sees the record without enrichment data and can manually trigger a lookup from within Salesforce using the Lusha native app if needed. No credits are consumed for a no-match result.

  • By default the Flow is configured to only write to empty fields — it will not overwrite a Title field that already has a value. If you want the workflow to always write Lusha-verified data regardless of existing values, change the Update Records element to overwrite all mapped fields. For most teams, the default “fill empty fields only” behavior is the right starting point — it respects manual data entry while ensuring new leads arrive pre-enriched.

  • Each successful contact enrichment consumes one Lusha credit. Each company enrichment is included and does not consume an additional credit. For a team receiving 500 inbound leads per month, this workflow consumes up to 500 credits monthly. If you want to filter which leads trigger the enrichment — for example, only leads from specific sources or industries — add an entry condition to the Flow to reduce unnecessary credit consumption on leads that are clearly out of ICP before enrichment runs.

  • Yes — but it requires a different Flow configuration. Instead of a Record-Triggered Flow on creation, build a Scheduled Flow that runs on a cadence — daily or weekly — and queries for Lead records where Lusha_Enriched_Date__c is empty or older than 90 days. The same API calls run for each record in the batch. This is the basis for the Refresh stale CRM records workflow — a separate workflow in the Lusha for Salesforce series that covers scheduled enrichment at scale.

Ready to run this?

One data connection. Works in Claude, ChatGPT, your CRM, or any agent you build.