Skip to content

Sales Intelligence

Lusha
API integration

Ship Sales Intelligence features without building the integration. Full Lusha API access via Proxy and 60+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Talk to us
Lusha

Use Cases

Why integrate with Lusha

Common scenarios for SaaS companies building Lusha integrations for their customers.

01

Enrich inbound leads with verified contact data in real time

SaaS platforms handling lead capture can query Lusha's Person and Company APIs to append direct-dial numbers, job titles, and firmographics before routing a lead — giving end users enriched records without leaving the product.

02

Power native prospecting inside a sales execution platform

Sales engagement tools can embed Lusha's Prospecting API so their users can search for net-new contacts by ICP filters and push verified prospects directly into sequences, eliminating tab-switching and manual data entry.

03

Surface job-change signals to trigger automated workflows

CRM and RevOps platforms can consume Lusha's Signals API to detect when a contact changes roles or companies, automatically updating records and notifying reps about warm re-engagement opportunities.

04

Automate database hygiene with bulk enrichment

Data quality and RevOps tools can periodically query Lusha in bulk to refresh stale phone numbers, emails, and titles across a customer's CRM, keeping pipeline data accurate without manual intervention.

05

Dynamically personalize web experiences using company intelligence

Chatbot, form, and personalization SaaS products can resolve a visitor's email domain against Lusha's Company API to retrieve technographics, headcount, and industry — then tailor the on-site experience in real time.

What You Can Build

Ship these features with Truto + Lusha

Concrete product features your team can ship faster by leveraging Truto’s Lusha integration instead of building from scratch.

01

One-click contact enrichment panel

Let users highlight any contact record in your app and instantly pull verified mobile numbers, emails, and current job details from Lusha without leaving the page.

02

Embedded ICP prospector module

Ship a native search interface where users define ideal customer profile filters — title, seniority, company size, location — and get a ready-to-action list of prospects sourced from Lusha's database.

03

Champion-tracking alerts via job-change signals

Automatically detect when a closed-won champion moves to a new company and surface that event as an in-app notification with their updated contact info.

04

Lookalike account list generator

Allow users to feed in their best customers and generate an expansion target list of similar companies using Lusha's Lookalike API.

05

Scheduled CRM data refresh pipeline

Offer a background job that scans connected CRM records on a weekly or monthly cadence, queries Lusha for updated information, and flags or auto-corrects stale fields.

06

Real-time lead scoring enrichment hook

Inject Lusha firmographic data — revenue, employee count, tech stack — into your lead scoring engine at the moment of lead creation so routing decisions are immediate and data-driven.

SuperAI

Lusha AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

list_all_lusha_person

Look up and enrich one person with Lusha's legacy V2 API by name plus company, email, LinkedIn URL, or personId. Returns contact.data (names, emails, phones, location, jobTitle, socialLinks, company); empty when not found. revealEmails/revealPhones need the Unified Credits plan. V2 ends November 30, 2026.

get_single_lusha_contact_enrich_job_by_id

Poll a Lusha contacts enrichment job started via Enrich Contacts. Returns: jobId, status, requestId, expiresAt, retryAfter, covers, contacts, creditsCharged, reason. While status is processing, wait retryAfter seconds and poll again. Required: id.

get_single_lusha_contact_prospecting_filter_by_id

Get the valid values for a Lusha contact prospecting filter type. Returns: values. id is the filter type: one of departments, seniority, existingDataPoints, countries, locations. locations also requires a query of 2-256 characters. Required: id.

list_all_lusha_contact_prospecting_filters

List the filter types available for Lusha contact prospecting. Returns each filter with its filterType (such as departments, seniority, existingDataPoints, countries, locations) and a requiresQuery flag showing which filter types need a search query. Use a filter type with the filter values endpoint before building a prospecting request.

lusha_contacts_enrich

Reveal full contact data for up to 100 Lusha contacts you already found via search, by passing their ids. Returns: requestId, results, tableWrite, billing, status, statusDescription, statusReason, job. Required: ids. Credits charged per revealed email or phone; polling the job is free.

list_all_lusha_contacts

Prospect Lusha contacts by contact and company filters (title, seniority, department, location, data points). Returns non-PII previews: id, firstName, lastName, jobTitle, company, location, socialLinks, has. Required: filters. limit: integer 10-100, default 100; same value with next_cursor. Max 50,000 results. Credits per result and matched signal.

lusha_contacts_search

Look up up to 100 Lusha contacts by id, linkedinUrl, email, or firstName + lastName + companyName/companyDomain, one identifier per contact. Returns a non-PII preview (no emails or phones): id, firstName, lastName, jobTitle, company, location, socialLinks, has, canReveal. Required: contacts. Credits charged per successful result.

lusha_contacts_search_and_enrich

Find up to 100 Lusha contacts by identifier and reveal their full data in one call (Search plus Enrich). Returns enriched records: id, firstName, lastName, fullName, emails, phones, tags, previousEmployment, updateDate; never a job to poll. Required: contacts. Credits charged for the search and per revealed field.

lusha_contacts_lookalikes

Find contacts similar to 5-100 seed contacts (LinkedIn URLs, emails, Lusha ids, or name + company). Returns dedupeSessionId, results (contact previews), meta, tableWrite and billing; pass dedupeSessionId back to get more results without repeats. Credits: charged per result (lookalikeContact).

lusha_contacts_signals

Get signal events (promotion, companyChange, or allSignals) for up to 100 contact ids, optionally since startDate. Returns results, startDate, endDate, tableWrite and billing. Pass tableId to also write the contacts into a table. Credits: charged per matched signal per result (showSignalsContact).

lusha_contacts_signal_score

Score up to 100 contacts by their active buying signals (0 to 1). Each contact is identified by id, linkedinUrl, email, or firstName + lastName + companyName/companyDomain. Returns requestId, results (score, NOT_FOUND or NO_SCORE entries) and billing. Credits: 1 per scored row (signal_score_contact_reveal) once that action is on the account pricebook; free until then.

lusha_contacts_icp_fit_score

Score how well 1-100 contacts fit 1-3 active Target Profiles (targetProfileIds from icp_profiles list), from 0 to 1. Returns requestId, results (scored, NOT_FOUND or NO_SCORE entries) and billing. Credits: 1 per scored contact, a score of 0 included; error rows are free.

lusha_contacts_buying_group

Find the buying group (decision_maker, potential_champion, end_user) inside target companies given by domain or Lusha company id. Returns requestId, results grouped by company, pagination and billing. Page with the body pagination object. Credits: charged per contact returned (buyingGroupContact).

list_all_lusha_account_usage

Get a snapshot of your Lusha account usage, credit balance, rate limits, plan details, and per-action credit pricing. Returns: credits, rateLimits, plan, pricing.

lusha_companies_enrich

Enrich up to 100 Lusha companies by id to reveal firmographics, technologies, funding, social links, open jobs and ownership. Returns: requestId, results, tableWrite, billing. Required: ids. Premium fields (e.g. competitors, intent, directParent, ultimateParent) come only when named in reveal. Credits per company revealed, plus per premium field.

list_all_lusha_companies

Prospect Lusha companies by filters (size, revenue, industry, technologies, locations, intent, signals). Returns previews: id, name, domain, employeeCount, industry, location, socialLinks, has, canReveal. Required: filters. limit: integer 10-100, default 100; same value with next_cursor. Max 50,000 results. Credits per result and matched signal.

lusha_companies_search

Look up up to 100 Lusha companies by id, name, or domain and preview each profile. Returns: requestId, results, billing. Required: companies. Each result's has and canReveal fields show which data points Enrich can unlock. Credits charged per successful result.

lusha_companies_search_and_enrich

Find up to 100 Lusha companies by id, name, or domain and reveal their full data in a single call. Returns: requestId, results, billing. Required: companies. Premium fields are returned only when named in reveal. Credits charged per result plus per revealed premium field.

lusha_companies_lookalikes

Find companies similar to 5-100 seed companies (domains or LinkedIn URLs). Returns dedupeSessionId, results (company previews), meta, tableWrite and billing; pass dedupeSessionId back to get more results without repeats. Credits: charged per result (lookalikeCompany).

lusha_companies_signals

Get signal events (hiring, headcount, web traffic, IT spend, news, intent, or allSignals) for up to 100 company ids, optionally since startDate. Returns results, startDate, endDate, tableWrite and billing. Credits: charged per matched signal per result (showSignalsCompany); no match, no charge.

lusha_companies_signal_score

Score up to 100 companies by their active buying signals (0 to 1). Each company is identified by exactly one of id, domain, name or email. Returns requestId, results (score, NOT_FOUND or NO_SCORE entries) and billing. Credits: 1 per scored row (signal_score_company_reveal) once that action is on the account pricebook; free until then.

lusha_companies_icp_fit_score

Score how well 1-100 companies fit 1-3 active Target Profiles (targetProfileIds from icp_profiles list), from 0 to 1. Returns requestId, results (scored, NOT_FOUND or NO_SCORE entries) and billing. Credits: 1 per scored company, a score of 0 included; error rows are free.

lusha_companies_website_visits

Rank companies that visited your tracked domains in a date range (at most 3 months). Domains must be set up for tracking in the Lusha dashboard, or the whole request fails with 400. Returns requestId, results (company preview plus visit metrics), pagination and billing. Credit cost is not documented. Lusha marks this endpoint Beta.

get_single_lusha_company_prospecting_filter_by_id

Get the valid values for a single company prospecting filter type in Lusha. Returns: values. id is the filter type: one of names, sizes, revenues, locations, sics, naics, industriesLabels, intentTopics, technologies. names, technologies, and locations also require a query of 2-256 characters. Required: id.

list_all_lusha_company_prospecting_filters

List the filter types available for company prospecting in Lusha (such as names, sizes, revenues, locations, sics, naics, industriesLabels, intentTopics, technologies) and whether each requires a search query. Returns: filterType, requiresQuery.

list_all_lusha_account_usage_stats

Get the credit usage of your Lusha account from the version-less GET /account/usage endpoint (used, total and remaining credits per credit type). Unlike account_usage.list (GET /v3/account/usage) it does not return rate limits, plan or pricing. Limited to 5 requests per minute. Returns: usage.

list_all_lusha_contact_signal_types

List the signal types supported for contacts. Returns each signal type name as a plain string. No credit cost is documented.

create_a_lusha_contact_table

Create an empty contacts table, optionally seeded with ids. Required: name, owner. Returns the created table. owner.email (a user on the Lusha account) is required on table calls made with an API key; GET and DELETE table calls take it as the email query parameter instead. Free. ids is rejected; add rows via entities.

list_all_lusha_contact_tables

List contacts tables owned by owner.email plus tables shared with the account, optionally filtered by name and status. Over the REST proxy pass owner[email], name and status as query parameters (they are copied into the request body). owner.email (a user on the Lusha account) is required on table calls made with an API key; GET and DELETE table calls take it as the email query parameter instead. Pages 0-100 only (at most 10,100 tables). Free.

get_single_lusha_contact_table_by_id

Get a contacts table by id: its metadata and processing status. owner.email (a user on the Lusha account) is required on table calls made with an API key; GET and DELETE table calls take it as the email query parameter instead. Free.

update_a_lusha_contact_table_by_id

Rename a contacts table, change its visibility, archive it or reassign its owner. Send only the fields that change; owner is required. Returns the updated table. Free.

delete_a_lusha_contact_table_by_id

Permanently delete a contacts table and all its data by id. Returns tableId and status. owner.email (a user on the Lusha account) is required on table calls made with an API key; GET and DELETE table calls take it as the email query parameter instead. Free.

list_all_lusha_contact_table_entities

Read rows of a contacts table (table_id) with every column value and per-cell status. Pages 0-100 only, so at most 10,100 rows can be read. Credits: charged per row returned (export_api). email is required with an API key (else 400).

create_a_lusha_contact_table_entity

Add up to 500 contacts ids to a table (table_id). Already-present ids are reported and unresolvable ids come back in invalidIds. Free.

lusha_contact_table_entities_bulk_delete

Remove specific contacts ids from a table (table_id). Required body: entityIds, owner. Returns the removal result. Free.

list_all_lusha_contact_table_columns

List the columns already on a contacts table (table_id), with type and per-cell status counts. Free. email is required with an API key (else 400).

create_a_lusha_contact_table_column

Add up to 10 Lusha columns to a contacts table (table_id), as columns [{columnKey}] or one columnKey (keys from contact_column_catalog). Enrichment starts on all rows at once. Returns one entry per requested column with its own status. Free today.

delete_a_lusha_contact_table_column_by_id

Remove a column (id) and all its cell data from a contacts table (table_id). Default Lusha columns cannot be removed. Returns tableId, columnId and removed. Free. email is required with an API key (else 400).

lusha_contact_table_columns_run

Populate or refresh one column (column_id) of a contacts table (table_id) asynchronously; runScope is all, missing or specific (with entityIds). Poll contact_tables get for progress. Credits: charged per row processed at the column's credit tier. runScope all charges again for rows that already have data; missing is cheapest.

list_all_lusha_contact_column_catalog

List every Lusha column that can be added to a contacts table, with category, displayName, columnKey and type. Free.

list_all_lusha_company_signal_types

List the signal types supported for companies. Returns each signal type name as a plain string. No credit cost is documented.

create_a_lusha_company_table

Create an empty companies table, optionally seeded with ids. Required: name, owner. Returns the created table. owner.email (a user on the Lusha account) is required on table calls made with an API key; GET and DELETE table calls take it as the email query parameter instead. Free. ids is rejected; add rows via entities.

list_all_lusha_company_tables

List companies tables owned by owner.email plus tables shared with the account, optionally filtered by name and status. Over the REST proxy pass owner[email], name and status as query parameters (they are copied into the request body). owner.email (a user on the Lusha account) is required on table calls made with an API key; GET and DELETE table calls take it as the email query parameter instead. Pages 0-100 only (at most 10,100 tables). Free.

get_single_lusha_company_table_by_id

Get a companies table by id: its metadata and processing status. owner.email (a user on the Lusha account) is required on table calls made with an API key; GET and DELETE table calls take it as the email query parameter instead. Free.

update_a_lusha_company_table_by_id

Rename a companies table, change its visibility, archive it or reassign its owner. Send only the fields that change; owner is required. Returns the updated table. Free.

delete_a_lusha_company_table_by_id

Permanently delete a companies table and all its data by id. Returns tableId and status. owner.email (a user on the Lusha account) is required on table calls made with an API key; GET and DELETE table calls take it as the email query parameter instead. Free.

list_all_lusha_company_table_entities

Read rows of a companies table (table_id) with every column value and per-cell status. Pages 0-100 only, so at most 10,100 rows can be read. Credits: charged per row returned (export_api). email is required with an API key (else 400).

create_a_lusha_company_table_entity

Add up to 500 companies ids to a table (table_id). Already-present ids are reported and unresolvable ids come back in invalidIds. Credits: reveal_company per newly added company.

lusha_company_table_entities_bulk_delete

Remove specific companies ids from a table (table_id). Required body: entityIds, owner. Returns the removal result. Free.

list_all_lusha_company_table_columns

List the columns already on a companies table (table_id), with type and per-cell status counts. Free. email is required with an API key (else 400). Lusha returned 404 for this route on 2026-10-15.

create_a_lusha_company_table_column

Add up to 10 Lusha columns to a companies table (table_id), as columns [{columnKey}] or one columnKey (keys from company_column_catalog). Enrichment starts on all rows at once. Returns one entry per requested column with its own status. Free today. Lusha returned 404 for this route on 2026-10-15.

delete_a_lusha_company_table_column_by_id

Remove a column (id) and all its cell data from a companies table (table_id). Default Lusha columns cannot be removed. Returns tableId, columnId and removed. Free. email is required with an API key (else 400).

lusha_company_table_columns_run

Populate or refresh one column (column_id) of a companies table (table_id) asynchronously; runScope is all, missing or specific (with entityIds). Poll company_tables get for progress. Credits: charged per row processed at the column's credit tier. A company is charged once per table; re-runs on already-paid companies are free.

list_all_lusha_company_column_catalog

List every Lusha column that can be added to a companies table, with category, displayName, columnKey and type. Free.

list_all_lusha_company_signal_filters

List the filter types available for company signals and whether each needs a search query. Use a filter type as the id of company_signal_filters get. No credit cost is documented.

get_single_lusha_company_signal_filter_by_id

Get the valid values for one company signal filter type. id is the filter type: newsEventTypes, hiringByDepartments, hiringByLocations, intentCategories or intentTopics. hiringByLocations and intentTopics need query (2-256 characters); intentCategories rejects query. Returns values. Free.

list_all_lusha_icp_profiles

List the Target Profiles (ICPs) you can see: your own and those an admin shared. Use the returned id values as targetProfileIds on the icp_fit_score methods; only active profiles can score. Free.

create_a_lusha_subscription

Create up to 25 webhook subscriptions for contact or company signals in one call. The account must have a webhook secret first. Returns total, successful, failed and per-item results. Credits are charged per signal delivered to the webhook, not for creating the subscription.

list_all_lusha_subscriptions

List the account's webhook subscriptions, newest first. Returns each subscription's id, entityType, entityId, signalTypes, url, name, isActive, blockReason, blockedAt, createdAt and updatedAt. Page size up to 100.

get_single_lusha_subscription_by_id

Get one webhook subscription by id. Returns id, entityType, entityId, signalTypes, url, name, isActive, blockReason, blockedAt, createdAt and updatedAt.

update_a_lusha_subscription_by_id

Update a webhook subscription; every field is optional. Setting isActive true re-enables a disabled subscription. regenerateSecret true rotates the webhook secret for ALL subscriptions on the account and returns the new secret once. Returns the updated subscription.

lusha_subscriptions_test

Send a test signal to a webhook subscription (subscription_id). mode is direct (HTTP check only), kafka, or full (default, end to end). Returns subscriptionId, subscriptionName, url, mode, flowCheck, testPayload, isSuccess and timestamp. Test deliveries use mock data and cost no credits. Needs a dashboard webhook secret.

lusha_subscriptions_bulk_delete

Permanently delete one or more webhook subscriptions by id. Each id is handled on its own; unknown ids come back as NOT_FOUND. Returns total, successful, failed and per-item results.

lusha_subscriptions_opt_out

Create the account's opt-out subscription (entityType contact): Lusha posts to url whenever a contact opts out so you can remove their data. One per account; a second returns 403. Returns the created subscription.

list_all_lusha_audit_logs

List webhook delivery logs for the account, optionally filtered by subscriptionId and status (success, failed, permanent_failure). Logs are kept 90 days (success) or 180 days (failed). Rate limit 100 requests per minute.

list_all_lusha_audit_log_stats

Get webhook delivery statistics for the account, optionally for one subscriptionId. Returns total, success, failed and successRate.

lusha_conversations_search

Search sales conversations recorded by Lusha Conversations, by keyword (query) or by filters (ids, dates, contact names, company domains, meeting titles). Returns requestId, conversations (metadata, summary, action items, risks, objections, coaching, chapters), page and billing. Credits: 1 per block of up to 25 conversations returned (ci_meeting_data_export) once on the account pricebook.

get_single_lusha_conversation_transcript_by_id

Get the speaker-attributed transcript of one conversation by id (conversationId from conversations search). Returns requestId, conversationId, segments and billing. A 404 means missing, still processing or another account. Credits: 1 per successful request (ci_transcript_analysis) once on the account pricebook.

Why Truto

Why use Truto’s MCP server for Lusha

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 850+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Go live with Lusha in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s Lusha account

Use Truto’s frontend SDK to connect your customer’s Lusha account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Lusha

Truto’s Proxy API is a 1-to-1 mapping of the Lusha API. You call us, we call Lusha, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Lusha’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Lusha on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

Is the Lusha integration available as a pre-built connector on Truto?

Lusha is available on request. Truto builds and maintains the integration for you, handling authentication, pagination, and API-specific quirks so you don't have to.

What authentication method does Lusha's API use?

Lusha's API uses API key-based authentication. Your end users provide their Lusha API key, and Truto securely stores and manages it on their behalf.

What core Lusha API capabilities can Truto expose?

Truto can surface Lusha's Person API, Company API, Prospecting API, Signals API, and Lookalike API — covering contact enrichment, firmographic lookups, database search, job-change signals, and account expansion workflows.

Does Lusha support bulk enrichment or only single-record lookups?

Lusha's Person and Company endpoints support both single and bulk requests. Truto can manage batching and rate-limit handling so your application can submit large enrichment jobs without worrying about throttling.

How fresh is the data returned by Lusha?

Lusha continuously updates its database and serves data in real time at query time. For time-sensitive fields like job title or company, using the Signals API or scheduling periodic re-enrichment is recommended to catch changes.

Are there compliance considerations when embedding Lusha data?

Lusha's data collection is aligned with GDPR and CCPA. However, your application should still ensure proper consent flows and data-handling policies are in place for end users who connect their Lusha accounts through your product.

Lusha

Get Lusha integrated into your app

Our team understands what it takes to make a Lusha integration successful. A short, crisp 30 minute call with folks who understand the problem.