Skip to main content
POST
Attach a search to an existing table

Authorizations

X-API-Key
string
header
required

Path Parameters

table_id
string<uuid>
required

Body

application/json

The body for appending a search's results to an existing table.

record_type
enum<string>
required

Which dataset a search runs against, and so which provider serves it.

Values are persisted in String(16) columns, so every member must stay within 16 characters.

Available options:
people,
companies,
signal_companies,
signal_people,
lookalikes,
local_businesses,
hiring_companies,
backlinks,
search_results,
post_authors

The sites linking to a domain or a page.

Name the target and get one row per referring site by default, sorted by the rank the link passes. Every attribute of a backlink the index can filter on is here, in four groups: the referring site, the referring page, the link itself, and the page it points at. The index takes at most eight filter conditions in one search, counting every value of every list as one; a ninth is refused rather than dropped.

companies
CompanyQuerySchema · object | null

Filters for a company search.

enrichments
enum<string>[]

What to find out about the rows this adds. Each becomes its own column, and each is billed per row that comes back with an answer.

Maximum array length: 4

An enrichment offered at import, in the user's vocabulary not the catalog's.

Each option names an outcome and resolves to the curated enrichment that delivers it, so importing leads stays a question about what you want rather than about who supplies it.

Kept as its own enum rather than reusing the capability keys directly: the import page offers a deliberately short list, and which enrichments belong on it is a product decision that should not change every time the catalog gains a capability.

Available options:
find_email,
find_phone,
enrich_contact,
enrich_company
hiring_companies
HiringCompaniesQuerySchema · object | null

Filters for a search for companies with open roles matching a job title.

The rows are companies, one per employer, each carrying every open posting the search read for it. The count is of open postings, since the companies are folded from them once they are read.

include_people_already_in_tables
boolean
default:false

A people search only. By default it leaves out the people who already have a row in one of the workspace's other tables, and keeps looking until enough new people are added; the response says how many it skipped. Set true to add them again.

local_businesses
LocalBusinessQuerySchema · object | null

Filters for a map search over business listings.

The one search here that asks "who is within this radius". Name a category, a business name or a website to look for, plus an area to look in for the radius part.

lookalikes
LookalikeQuerySchema · object | null

Filters for a search for companies resembling a set of seed companies.

people
PeopleQuerySchema · object | null

Filters for a people search.

post_authors
PostAuthorsQuerySchema · object | null

Filters for a search for people whose own LinkedIn posts carry a phrase.

The rows are people, one per author, each carrying every matching post the search read for them. The count is of posts, since the people are folded from them once they are read.

row_limit
integer | null

Rows to add. Clamped further by the organisation's plan cap; omit for the maximum.

Required range: 1 <= x <= 1000000
search_results
SearchResultsQuerySchema · object | null

Google searches to run, each landing the results Google shows for it.

Write each search the way you would type it into Google: operators (site:, intitle:, quoted phrases) work and cost nothing extra. One row is one result of one search, with the search that found it and its rank.

signal_companies
SignalCompaniesQuerySchema · object | null

Filters for a company buying-signal search.

signal_people
SignalPeopleQuerySchema · object | null

Filters for a person activity-signal search.

Response

Successful Response

What one re-run of a table's search changed.

rows_created
integer
required

Rows the request itself added.

total_matched
integer
required
import_status
enum<string>
default:success

running when the request added a first batch and the rest is still being added in the background, so poll the table's search runs for progress; success when every row is in.

Available options:
running,
success,
failed
people_skipped
integer
default:0

People the request left out because another of the workspace's tables already has them. A run that continues in the background goes on skipping them.

provider_notices
string[]

What the data source said about the rows the request added, in the words to show beside them; see the create response. A run that continues in the background can add more, and the table's search runs carry every one.

rows_not_added
RowsNotAddedSchema · object | null

The people the search found that are not rows, and why, once every row is in: found_twice when the people search holds one person under two records, so a new table took them once; already_in_table when a person found was already a row of the table. Null when every person found was added, or while rows are still being added.

rows_wanted
integer
default:0

Rows the import set out to add in all.

run_id
string<uuid> | null

The run row recording this import, when the search is persisted.

skip_limit_reached
boolean
default:false

Whether the search stopped looking after skipping as many people as one search may, so fewer rows may be added than asked for.