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

# Enrich Companies

`POST /v3/companies/enrich`

Reveal full company data for companies you've already found via Search Companies.

Pass up to 100 company `ids` (from the search response). Each enriched result includes:
- Firmographics: size, revenue range, year founded, company type
- Industry: primary industry, sub-industry, SIC/NAICS codes
- Locations: HQ and additional office sites
- Technologies, funding rounds, buyer intent topics
- LinkedIn followers, logo URL, social links
- Open job posting counts: total and breakdowns by department, location, and seniority

> **Billing:** Charged per successful result via the `reveal_company` action.

> **Persisting to a table:** Pass `tableId` to also add these companies to an existing table and populate the relevant enrichment columns. See [Companies Tables](#tag/Companies-Tables).

## Request body

- V3CompaniesEnrichRequest
  - `ids` string[], required — Company IDs from search results (strings)
  - `reveal` string[] — Additional data fields to reveal. Each field is charged separately per result. - `employeesByDepartment` — breakdown of employees by department - `employeesByLocation` — breakdown of employees by country/state - `employeesBySeniority` — breakdown of employees by seniority level - `competitors` — list of competitor company IDs - `intent` — buyer intent topics - `estimatedAnnualItSpend` — estimated annual IT spend. - `monthlyWebsiteTraffic` — monthly website traffic and month-over-month change. - `openJobsTotal` — reveals the total open job count. In the response, this appears as the `total` field inside the `openJobs` object. - `openJobsByDepartment` — reveals open job counts broken down by department. In the response, this appears as the `byDepartment` field inside the `openJobs` object. - `openJobsByLocation` — reveals open job counts broken down by location. In the response, this appears as the `byLocation` field inside the `openJobs` object. - `openJobsBySeniority` — reveals open job counts broken down by seniority level. In the response, this appears as the `bySeniority` field inside the `openJobs` object.
  - `tableId` string — Optional. If provided, these companies are also added to this table (if not already present) and the revealed fields' columns are populated. See the Tables API.

## Response `200`

Successful response

- V3CompaniesEnrichResponse
  - `requestId` string, uuid
  - `results` V3EnrichedCompany[]
    - `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
    - `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.
    - `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
  - `tableWrite` TableWrite — Added to a Prospecting, Enrich, Signals, or Lookalike response when `tableId` is passed on the request. The primary response is unaffected even if the table write fails.
    - `tableId` string
    - `added` integer — Number of new entities added to the table by this call.
    - `alreadyPresent` integer — Number of entities from this call that were already in the table.
    - `columnsCreated` integer — Number of columns auto-created by this call (e.g. a Signals column created on first use).
    - `rowsProcessed` integer — Number of rows the column-run touched as part of this call.
    - `rowsCharged` integer — Number of those rows that incurred a credit charge.
    - `rowsAlreadyPaidInTable` integer — Number of those rows that were already paid for in this table and were not re-charged.
    - `creditsCharged` integer — Credits charged specifically for this table write.
  - `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

---

[API](https://skmtc.net/lusha/apis/lusha-api-documentation.md) · [All operations](https://skmtc.net/lusha/apis/lusha-api-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lusha/lusha-api-documentation/revisions/8e62fb5a9414/schema)
