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
Inputs
| Name | Type | Default | Meaning |
|---|---|---|---|
hostnames | Hostname[] | None. | Up to 50 company domains, no scheme. Pass this or organization. |
organization | Organization | None. | A saved Organization id; its domain is read. Also served at /. |
fields | ('profile' | 'technologies' | 'headcount' | 'hiring' | 'events')[] | ['profile'] | What to fill. Each field is its own job with its own price. |
since | string | '90d' | How far back hiring and events look. |
maxCost | number | 0.50 | The most this domain may spend, in USD. Over it, the call is refused before it spends, or stops early with what it has. |
Outputs
| Field | Type | What null means |
|---|---|---|
organizations | Organization[] | Never null: one row per domain sent. |
organizations[].hostname | Hostname | Never null. |
organizations[].name | string | Never null when the domain is known; a domain no source knows returns only hostname and filled:, at $0. |
organizations[].description | string | null | Unknown. |
organizations[].industry | string | null | Unknown. |
organizations[].headcount | number | null, in people | Unknown, never zero. |
organizations[].headcountTrend | { months:, in share, 0.21 is +21% | Absent without headcount in fields. |
organizations[].founded | number | null, in year | Unknown. |
organizations[].country | string | null, in ISO 3166-1 | Unknown. |
organizations[].region | string | null, in ISO 3166-2 | Unknown. |
organizations[].socials | { linkedin? | Never null: a missing key means no profile was found on that site. |
organizations[].technologies | { name: | Absent without technologies. firstSeen: means seen, date unknown. |
organizations[].hiring | { title: | Absent without hiring; empty means no open role in since. |
organizations[].events | { kind: | Absent without events; empty means nothing dated in since. A funded event carries the round. |
organizations[].filled | string[] | Never null: the fields this call filled, so a miss is visible. |
organizations[] | Observed | Each row also carries observedAt and method. |
cost | Cost, in USD | Never null. In try mode usd is 0 and maxUsd is what the call would have cost. |
Read the result
| Field | Value | What it means | What to do |
|---|---|---|---|
events | A dated event in the last 30 days | You 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/ |
hiring | A role your product replaces | They 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) |
technologies | evidence: only | A 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) |
filled | Missing a field you asked for | No 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-Keywith 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.enrichedwith{ organizations,fields }, plus one Organization.funded or Organization.hiring Event per new dated fact - Performed by
- Price
About 20¢ per 100 companies. Free: a domain no source knows.
maxCostdefaults 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
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 value | Always returns | What it is for |
|---|---|---|
harborview-pm.com | {"name": | Enriches to the same Harborview profile every time: 34 staff, founded 2009, in Washington. |
maxCost: | Refuses with max-cost | Any priced call with a maxCost of 0.0001 is refused before it spends: the price is above the cap. |
rate-limited.test | Refuses with rate-limited | Any call naming this hostname answers 429 with Retry-After, so your retry logic runs. |
sources-busy.test | Refuses with sources-busy | Any 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.
await $.Monitor.create({
verb: 'Organization.enrich',
input: { hostnames: ['harborview-pm.com'], fields: ['events', 'hiring'] },
change: 'hiring',
every: '1w',
})Used by
- Workflows: Champion moved · Inbound routing · Buying-trigger feed · List refresh · Who is visiting
- Agent tasks: Account brief · Answer every inbound