Skip to content

Import Companies

POST
/companies/import

Create or update companies from a batch of contacts. SPENDS CREDITS.

Contacts are grouped by email domain: a new domain creates a company, a known one is updated. Every NEW company then triggers the full intelligence pipeline - a site crawl, several model calls and a paid enrichment lookup - and every contact triggers a paid person lookup. One request with 50 domains and 500 contacts is 50 pipelines plus 550 provider calls, so this is the most expensive operation on the company surface.

The body is REQUIRED here. The app declares it optional and then reads data.contacts unconditionally, so an empty request there is an AttributeError and a 500; requiring it makes the same request a 422.

Individual rows can fail without failing the call - read the response rather than the status.

Authorizations

Parameters

Header Parameters

X-Target-Org-Id
Any of:
string

Request Body required

Create or update companies from a batch of contacts.

Grouping is by email domain: a new domain creates a company, a known one is updated in place. There is no separate “company” payload.

object
contacts
required

Contacts to import.

Array<object>

One contact in a company import.

Contacts are grouped by email domain, so email decides which company a row lands on - company_name only names a company that does not exist yet.

object
company_name
Any of:
string
company_owner
Any of:
string
contact_owner
Any of:
string
email
required

Email address. Also the company-grouping key.

string
first_name
required

First name.

string
last_name
required

Last name.

string
linkedin_url
Any of:
string
phone
Any of:
string
role
Any of:
string
title
Any of:
string
source
required

Where the records came from, recorded on the import.

string

Responses

202

Successful Response

object
data
required

An open envelope for one record, one dashboard or one job receipt.

Open because most of these reads are COMPUTED shapes - an engagement summary, a next-best-step, an intelligence status - that grow with the product, and dropping a field from an advisory read makes it say “nothing to report” rather than “we did not tell you”.

object
key
additional properties
any
pagination
Any of:
object
has_next
required

Whether there are more pages

boolean
limit
required

Items per page

integer
next_cursor
Any of:
string
notes
Any of:
Array<string>
page
required

Current page number (1-indexed)

integer
total
required

Total number of items

integer
total_available
Any of:
integer
total_is_lower_bound
Any of:
boolean

422

Validation Error

object
detail
Array<object>
object
loc
required
Array
msg
required
string
type
required
string