Skip to main content
GET
Get Many Companies
This endpoint uses the Company object.

Authorizations

Authorization
string
header
required

Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.

Query Parameters

idsOrDomains
string

Comma-separated list of company IDs or domains to fetch. When provided, returns only matching companies (no pagination). Each value is classified as a company ID (e.g. cpn_xxx) or a domain (e.g. example.com). URLs are normalized automatically (e.g. https://example.com/pathexample.com). Invalid values are silently skipped. Maximum 100 values.

offset
integer
default:0

Number of companies to skip for pagination. Defaults to 0. Ignored when idsOrDomains is provided.

Required range: x >= 0
sortBy
enum<string>

The field by which to sort. Currently, only 'createdAt' is supported.

Available options:
createdAt
sortOrder
enum<string>

The sort direction. Use 'desc' for descending order; any other value (or omission) will sort in ascending order.

Available options:
asc,
desc

Search by company name (case insensitive)

fields
string

Returns selected fields. Returns all fields if empty. Each field is separated by a comma (e.g., '_id,fields.name,domain')

limit
integer
default:100

Number of companies to retrieve. Default: 100. Maximum: 500

Required range: 1 <= x <= 500
crmSyncStatus
enum<string>

Filter companies by their CRM sync state against the team's active CRM provider. Requires a CRM (Hubspot, Salesforce, or Pipedrive) to be connected — otherwise the request returns 400 NO_CRM_CONNECTED. Common values:

  • synced — the company has a CRM record and no sync errors.
  • not_synced — the company has no CRM record yet.
  • error — at least one sync error is currently raised.
  • A specific error reason (lowercase form), to filter by root cause: unique_index_error_company, property_doesnt_exist, required_field_missing, company_already_exists_with_name, company_already_exists_with_linkedin_url.

For each returned company, see crmSync.errors[].metadata.alreadyExistingCompanyId to identify the lemlist company that already occupies the conflicting CRM record (useful to remap contacts before deleting the duplicate).

Available options:
synced,
not_synced,
error,
unique_index_error_company,
property_doesnt_exist,
required_field_missing,
company_already_exists_with_name,
company_already_exists_with_linkedin_url
fieldRejectionReason
enum<string>

Filter companies to those carrying a field rejection with this reason — a value lemlist refused to write, raised during CRM sync (crm_sync_*). Returns an empty list (total: 0) when no company matches. Each returned company exposes the full detail under fieldRejections[] (which field, why, and conflictingRecordId for duplicates). Independent of crmSyncStatus (which keys off the live provider errors); this filter reads the stored field rejections. Only applies to the paginated list — ignored when idsOrDomains is provided (that path returns the exact companies requested, unfiltered).

Available options:
crm_sync_duplicate_company,
crm_sync_invalid_domain,
crm_sync_company_not_found,
crm_sync_update_failed,
crm_sync_duplicate_linkedin_url,
crm_sync_invalid_linkedin_url,
crm_sync_value_oscillating,
crm_sync_owner_sync_loop,
crm_sync_unmapped_user,
crm_sync_value_incompatible,
crm_sync_unknown_error

Response

Success

data
object[]
required
total
integer
required
limit
integer
required
offset
integer
required