Skip to content

Organization.enrich

Fill in what a company is, what it runs and what happened there lately, from its domain alone.

Price
20¢ per 100 companies
Success rate
99.98% of 569,418 calls
Freshness
Fresh for 30 days
Emits
Organization.enriched
Capability
Enrichment
POST https://api.sb/{your-domain}/organizations/enrich

Options and prices

You getInput that selects itPriceSuccess rate
Company profile{"fields":["profile"]}About 20¢ per 100 companies99.98% of 569,418 calls
The products a company runs{"fields":["technologies"]}About 4¢ a company99.9% of 8,842 calls
Headcount and its trend{"fields":["headcount"]}About 5¢ a company100% of 4,379 calls
Open roles{"fields":["hiring"]}About 1¢ a company97.3% of 10,852 calls
What happened there lately{"fields":["events"]}About 1¢ a company99.98% of 34,785 calls

Inputs

NameTypeDefaultMeaning
hostnamesHostname[]None.Up to 50 company domains, no scheme. Pass this or organization.
organizationOrganizationNone.A saved Organization id; its domain is read. Also served at /organizations/{organization}/enrich.
fields('profile' | 'technologies' | 'headcount' | 'hiring' | 'events')[]['profile']What to fill. Each field is its own job with its own price.
sincestring'90d'How far back hiring and events look.
maxCostnumber0.50The most this domain may spend, in USD. Over it, the call is refused before it spends, or stops early with what it has.

Outputs

FieldTypeWhat null means
organizationsOrganization[]Never null: one row per domain sent.
organizations[].hostnameHostnameNever null.
organizations[].namestringNever null when the domain is known; a domain no source knows returns only hostname and filled: [], at $0.
organizations[].descriptionstring | nullUnknown.
organizations[].industrystring | nullUnknown.
organizations[].headcountnumber | null, in peopleUnknown, never zero.
organizations[].headcountTrend{ months: 6 | 12 | 24; change: number }[], in share, 0.21 is +21%Absent without headcount in fields.
organizations[].foundednumber | null, in yearUnknown.
organizations[].countrystring | null, in ISO 3166-1Unknown.
organizations[].regionstring | null, in ISO 3166-2Unknown.
organizations[].socials{ linkedin?: string; x?: string; facebook?: string }Never null: a missing key means no profile was found on that site.
organizations[].technologies{ name: string; category: string; firstSeen: string | null; evidence: 'page' | 'job-post' | 'dns' | null }[]Absent without technologies. firstSeen: null means seen, date unknown.
organizations[].hiring{ title: string; postedAt: string; url: string; location: string | null }[]Absent without hiring; empty means no open role in since.
organizations[].events{ kind: string; date: string; summary: string; url: string }[]Absent without events; empty means nothing dated in since. A funded event carries the round.
organizations[].filledstring[]Never null: the fields this call filled, so a miss is visible.
organizations[]ObservedEach row also carries observedAt and method.
costCost, in USDNever null. In try mode usd is 0 and maxUsd is what the call would have cost.

Read the result

FieldValueWhat it meansWhat to do
eventsA dated event in the last 30 daysYou have a reason to write that is not about you.Open the first email with it; a list with a dated reason is planned to reply at twice the rate of one without. (our planning number, measured by a 50/50 split in month 1)
hiringA role your product replacesThey are about to pay a salary for the job your product does.Write while the role is open; postedAt dates it, and the url is your evidence line. (the trigger rule for cold email)
technologiesevidence: page onlyA homepage tag, not proof they use it day to day.Trust job-post evidence first: a role that names the product shows daily use. (reviews of the homepage-only read: 6% called it useful)
filledMissing a field you asked forNo source holds it for this domain; you were not billed for it.Read it from their site with Page.audit, or leave it unknown. (the contract every data call keeps)

Effects

Action class

None: it reads, so no approval rule names it

Modes
  • try: Runs the read and returns real rows; nothing is saved and nothing is billed.
  • send: Returns a pending Action at once; its Event carries the rows when the read finishes.
  • do: Waits for the read and returns the rows, billed per result.
Idempotency

The same Idempotency-Key with the same input replays the first answer at $0; with other input it returns 409.

Saved or shared

Nothing is written to your records unless the domain is a saved Organization. Company facts are shared across startups for 30 days.

Emits

Organization.enriched with { organizations, fields }, plus one Organization.funded or Organization.hiring Event per new dated fact

Performed by

Prospector

Price

About 20¢ per 100 companies. Free: a domain no source knows. maxCost defaults to 50¢. The products 100 fitting companies run: 100 × 4¢ a company is about $4.00.

Reliability

The first route succeeds 99.98% of 569,418 calls. If it fails, a second route answers at 99.99% of 277,240 calls, and you pay for one.

Freshness

A reading younger than 30 days returns at $0. Readings are shared across startups for the same subject and locale.

Batch and pages

Up to 50 domains a call. It answers in one response.

Rate

The shared rate rules: 10 calls a second per key, and an array input counts as one call.

Refuses when

This call has no refusals of its own. Every data call can also meet the shared data-call refusals: filter-unsupported, input-missing, limit-exceeded, max-cost, rate-limited, sources-busy, venue-unsupported.

When it waits

Returns in one response; nothing waits.

Example

Text
What does harborview-pm.com run, and what happened there lately? Spend
up to 10¢.

To retry, send the same Idempotency-Key: the retry returns the first answer for $0. A new key reads again.

Test values, and watching it

A sk_test_ key answers these the same way every time, at $0 (every test value).

Test valueAlways returnsWhat it is for
harborview-pm.com{"name":"Harborview Property Management","hostname":"harborview-pm.com","industry":"Real estate","headcount":34,"founded":2009,"country":"US","region":"US-WA"}Enriches to the same Harborview profile every time: 34 staff, founded 2009, in Washington.
maxCost: 0.0001Refuses with max-costAny priced call with a maxCost of 0.0001 is refused before it spends: the price is above the cap.
rate-limited.testRefuses with rate-limitedAny call naming this hostname answers 429 with Retry-After, so your retry logic runs.
sources-busy.testRefuses with sources-busyAny call naming this hostname answers 503 as if every route were busy, and nothing is spent.

Watch it on a schedule: a Monitor runs this call and records an Event only when the reading changes.

TypeScript
await $.Monitor.create({
  verb: 'Organization.enrich',
  input: { hostnames: ['harborview-pm.com'], fields: ['events', 'hiring'] },
  change: 'hiring',
  every: '1w',
})

Used by