---
title: "Search and Enrich Companies"
method: POST
path: "/v3/companies/search-and-enrich"
tags: ["Search & Enrich"]
---

# Search and Enrich Companies

`POST /v3/companies/search-and-enrich`

## Request

- Base URL: `https://api.lusha.com`
- URL: `https://api.lusha.com/v3/companies/search-and-enrich`
- Auth: API key in header `api_key`
- TypeScript: <https://skmtc.dev/lusha/apis/lusha-api-documentation/docs/v3/companies/search-and-enrich/post.ts> (a function with typed inputs; its response is checked against the schema)

Find companies and reveal their full data in a single call. Combines Search and Enrich into one request.

Provide company identifiers the same way you would for Search Companies. Up to 100 companies per request.

Use the `reveal` field to control which premium data points are unlocked, exactly as you would on Enrich Companies. Premium fields — including `directParent` and `ultimateParent` — are returned only when you name them in `reveal`; they are never included by default.

> **Billing:** Same as Enrich Companies — charged per successful result via the `reveal_company` action, plus one charge per revealed field.

## Request body

- V3CompaniesSearchAndEnrichRequest
  - `companies` V3CompanySearchItem[], required
    - `clientReferenceId` string
    - `id` string
    - `name` string
    - `domain` string
  - `reveal` string[]: Additional data fields to reveal, using the same tokens as Enrich Companies. Each field is charged separately per result. Premium fields are returned only when named here — omitting `reveal` returns base firmographics alone. See [Enrich Companies](#operation/enrichCompanies) for what each token unlocks.
  - `options` V3SearchOptions: Additional options for search requests
    - `includePartialProfiles` boolean: Include partial profiles in results

## Response `200`

Successful response

- V3CompaniesSearchAndEnrichResponse
  - `requestId` string, uuid
  - `results` V3SearchAndEnrichCompanyResult[]
    - `id` string
    - `name` string
    - `alternativeName` string
    - `domain` string
    - `alternativeDomains` string[]
    - `description` string
    - `companyType` string
    - `yearFounded` number
    - `employeeCount` object
      - `exact` integer
      - `min` integer
      - `max` integer
    - `industry` string
    - `subIndustry` string
    - `specialities` string[]
    - `industryTags` string[]
    - `sicCodes` V3SicCode[]
      - `code` integer
      - `description` string
    - `naicsCodes` V3NaicsCode[]
      - `code` integer
      - `description` string
    - `companyOffering` string: Free field. Short description of what the company sells or does.
    - `emailDomain` string: Free field. Primary domain used for company email addresses.
    - `additionalIndustries` object[]: Free field. Up to 2 secondary industry classifications beyond the primary `industry`/`subIndustry`.
      - `industry` string
      - `subIndustry` string
    - `estimatedAnnualItSpend` object, nullable: Revealed via reveal: ["estimatedAnnualItSpend"] in Enrich Companies. Charged 1 credit when non-null.
      - `value` number
      - `currency` string
      - `valueUsd` number
    - `monthlyWebsiteTraffic` object, nullable: Revealed via reveal: ["monthlyWebsiteTraffic"] in Enrich Companies. Charged 1 credit when non-null.
      - `visits` number
      - `momChangePercent` number
      - `month` string
    - `openJobs` V3OpenJobs, nullable: Open job posting counts. Each sub-field is revealed independently in Enrich Companies via `reveal: ["openJobsTotal", "openJobsByDepartment", "openJobsByLocation", "openJobsBySeniority"]`. A sub-field is present only when its matching token was requested in `reveal` and data exists for it; sub-fields that weren't requested, or that have no data, are omitted. Department, location, and seniority values use the same vocabularies as the existing prospecting filters.
      - `total` integer: Total number of open job postings. Revealed via `openJobsTotal`.
      - `byDepartment` V3OpenJobsByDepartment[]: Open job counts broken down by department. Revealed via `openJobsByDepartment`.
        - `department` string
        - `count` integer
      - `byLocation` V3OpenJobsByLocation[]: Open job counts broken down by location. Revealed via `openJobsByLocation`.
        - `location` string
        - `count` integer
      - `bySeniority` V3OpenJobsBySeniority[]: Open job counts broken down by seniority level. Revealed via `openJobsBySeniority`.
        - `seniority` string
        - `count` integer
    - `directParent` V3CompanyParent: A company in an ownership tree, returned by the `directParent` and `ultimateParent` premium reveal fields. Pass `lushaCompanyId` back to Enrich Companies to retrieve the parent's full firmographic profile.
      - `lushaCompanyId` string: Lusha company ID of the parent. Use this with Enrich Companies to look up the parent.
      - `name` string
      - `domain` string
      - `hqCountry` string: Country of the parent's headquarters. Not always present.
    - `ultimateParent` V3CompanyParent: A company in an ownership tree, returned by the `directParent` and `ultimateParent` premium reveal fields. Pass `lushaCompanyId` back to Enrich Companies to retrieve the parent's full firmographic profile.
      - `lushaCompanyId` string: Lusha company ID of the parent. Use this with Enrich Companies to look up the parent.
      - `name` string
      - `domain` string
      - `hqCountry` string: Country of the parent's headquarters. Not always present.
    - `location` V3CompanyLocation
      - `city` string
      - `state` string
      - `stateCode` string: Free field. ISO/postal state or region code, when available.
      - `country` string
      - `countryIso2` string
      - `continent` string
      - `zipCode` string: Postal/ZIP code (present on HQ location when available)
    - `additionalLocations` V3CompanyLocation[]
      - `city` string
      - `state` string
      - `stateCode` string: Free field. ISO/postal state or region code, when available.
      - `country` string
      - `countryIso2` string
      - `continent` string
      - `zipCode` string: Postal/ZIP code (present on HQ location when available)
    - `socialLinks` object
      - `linkedin` string
      - `facebook` string, nullable: Company Facebook page URL. Included automatically when available - no `reveal` entry needed. Omitted from the response when not available (never returned empty). Free field - no credits charged. Available on all plans.
      - `x` string, nullable: Company X (formerly Twitter) profile URL. Included automatically when available - no `reveal` entry needed. Omitted from the response when not available (never returned empty). Free field - no credits charged. Available on all plans.
      - `instagram` string[]: Company Instagram profile URLs. Included automatically when Lusha holds the data - no `reveal` entry needed, no credit cost. Returned as a list because a company can hold more than one profile on this network; every value Lusha holds is returned. Omitted from the response entirely when no data is available (never returned as `null` or an empty list). Company-level data, contains no personal information, refreshed monthly. Available on all plans.
      - `youtube` string[]: Company YouTube channel URLs. Included automatically when Lusha holds the data - no `reveal` entry needed, no credit cost. Returned as a list because a company can hold more than one channel on this network (multiple YouTube channels are common); every value Lusha holds is returned. Omitted from the response entirely when no data is available (never returned as `null` or an empty list). Company-level data, contains no personal information, refreshed monthly. Available on all plans.
      - `tiktok` string[]: Company TikTok profile URLs. Included automatically when Lusha holds the data - no `reveal` entry needed, no credit cost. Returned as a list because a company can hold more than one profile on this network; every value Lusha holds is returned. Omitted from the response entirely when no data is available (never returned as `null` or an empty list). Company-level data, contains no personal information, refreshed monthly. Available on all plans.
    - `linkedinFollowers` number
    - `revenueRange` object
      - `min` number
      - `max` number
    - `funding` unknown
    - `intent` unknown
    - `technologies` string[]
    - `popularityTier` number
    - `logoUrl` string
    - `employeesByDepartment` object[]: Breakdown of employees by department. Revealed via `reveal: ["employeesByDepartment"]` in Enrich Companies.
      - `department` string: Department name
      - `count` integer: Number of employees in this department
    - `employeesByLocation` object[]: Breakdown of employees by country and state. Revealed via `reveal: ["employeesByLocation"]` in Enrich Companies.
      - `country` string: Country name
      - `state` string, nullable: State or region (null when not available)
      - `count` integer: Number of employees in this location
    - `employeesBySeniority` object[]: Breakdown of employees by seniority level. Revealed via `reveal: ["employeesBySeniority"]` in Enrich Companies.
      - `seniority` string: Seniority level
      - `count` integer: Number of employees at this seniority level
    - `competitors` object[]: List of competitor companies. Revealed via `reveal: ["competitors"]` in Enrich Companies. Use Enrich Companies with the returned IDs to get full firmographic data on each competitor.
      - `id` string: Lusha company ID of the competitor
      - `name` string: Company name of the competitor
      - `domain` string: Primary domain of the competitor
    - `businessModel` string[]: Company business model classification (e.g. B2B, B2C)
    - `phone` string: Company phone number
    - `email` string: Company contact email address
    - `keywords` string[]: Keywords associated with the company (normalized from specialities and description)
    - `specialitiesRefactored` string[]: Normalized version of the specialities list
    - `error` V3ItemError: Per-item error in a batch response
      - `code` 'NOT_FOUND' | 'COMPLIANCE_RESTRICTED' | 'ENRICH_FAILED' | 'NO_SCORE'
      - `message` string
    - `clientReferenceId` string
  - `billing` V3Billing: Credit usage summary for a V3 API request
    - `creditsCharged` integer: Total credits charged for this request
    - `resultsReturned` integer: Number of successful results returned

## Other responses

- `400`: Bad request - invalid input data
- `401`: Unauthorized - invalid or missing API key
- `402`: Payment required - insufficient credits
- `403`: Forbidden - account inactive, V3 access not enabled, or plan does not include this feature
- `429`: Too many requests - rate limit exceeded

## Changes

- **2026-09-26** `3d811e5b108c`: 1 info
  - added the new optional request property `reveal`
- **2026-09-24** `9847a3129498`: 2 info
  - added the optional property `results/items/allOf[#/components/schemas/V3EnrichedCompany]/directParent` to the response with the `200` status
  - added the optional property `results/items/allOf[#/components/schemas/V3EnrichedCompany]/ultimateParent` to the response with the `200` status
- **2026-09-18** `6eef0f67f164`: 3 info
  - added the optional property `results/items/allOf[#/components/schemas/V3EnrichedCompany]/socialLinks/instagram` to the response with the `200` status
  - added the optional property `results/items/allOf[#/components/schemas/V3EnrichedCompany]/socialLinks/tiktok` to the response with the `200` status
  - added the optional property `results/items/allOf[#/components/schemas/V3EnrichedCompany]/socialLinks/youtube` to the response with the `200` status
- **2026-08-18** `8b8953e43586`: 1 info
  - added the optional property `results/items/allOf[#/components/schemas/V3EnrichedCompany]/openJobs` to the response with the `200` status
- **2026-08-14** `d37bb08edd61`: 2 info
  - added the optional property `results/items/allOf[#/components/schemas/V3EnrichedCompany]/socialLinks/facebook` to the response with the `200` status
  - added the optional property `results/items/allOf[#/components/schemas/V3EnrichedCompany]/socialLinks/x` to the response with the `200` status

[Operation history](https://skmtc.dev/lusha/apis/lusha-api-documentation/changes/v3/companies/search-and-enrich/post.md)

---

[API](https://skmtc.dev/lusha/apis/lusha-api-documentation.md) - [All operations](https://skmtc.dev/lusha/apis/lusha-api-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/lusha/apis/lusha-api-documentation/revisions/3d811e5b108c?raw)
