Skip to content

ContactPoint.findEmail

Find a person’s work email from their name and company domain, or their profile URL, checked in the same call; a miss is free.

Price
0.45¢ an address found
Success rate
95% of 3,296,127 calls
Freshness
Fresh for 90 days
Emits
ContactPoint.found
Capability
Enrichment
POST https://api.sb/{your-domain}/contact-points/find-email

Inputs

NameTypeMeaning
namestringThe person’s full name; pass it with hostname. Or pass firstName and lastName, or profileUrl.
hostnameHostnameTheir company’s domain. A name without it is refused with input-missing.
profileUrlstringTheir LinkedIn profile URL. It finds more addresses than a name does.
checkbooleanCheck the mailbox on a hit, in the same call, at the check’s own price. Default true.
maxCostnumberThe most this person may cost, in USD. Routes are walked cheapest first and stop here. Default 0.02.

Outputs

FieldTypeWhat null means
addressstring | nullNo route found an address: a miss, and free.
confidencenumber | null, in score 0 to 1No address, or the route gives no confidence.
resultEmailResult | nullNo address, or check: false.
observedAtstring, in ISO 8601Never null.
methodObserved['method']Never null.
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
addressnull from a nameName-and-domain routes find an address about a third of the time each; a profile URL finds more.Pass profileUrl from Prospect.find and try again; the miss cost nothing. (measured hit rates by route: 42% from a profile URL, 31% to 37% from a name)
resultcatch-allThe address may be right, but the domain accepts everything.Send it in the catch-all batch, at most 20% of a day’s sends. (our planning number for cold email)
addressA domain other than hostnameAn address at a previous employer: 4 of 48 first finds did this in one live run of 136 calls.Drop it before the check; find them again from a current profile URL. (a measured run, 8% of first finds)
confidenceUnder 0.7 with no resultA guessed pattern, unchecked.Never send an unchecked address: pass check: true. (reviews of unchecked finds: 73 of one team’s 79 bounces were unchecked rows)

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; pass it to Contact.import to keep it. Readings about people are never shared across startups.

Emits

ContactPoint.found with { address, confidence, result }

Performed by

Prospector

Price

About 0.45¢ an address found. At most 2¢ an address found. Free: a miss: no address found. maxCost defaults to 2¢. 100 work emails found: 100 × 0.45¢ an address found is about 45¢.

Reliability

The first route succeeds 95% of 3,296,127 calls. If it fails, the call refuses with sources-busy and nothing is spent.

Freshness

A reading younger than 90 days returns at $0. Readings about people are never shared across startups.

Batch and pages

Up to 1 person 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 is Dana Whitfield’s work email at harborview-pm.com? Check it and
spend up to 2¢.

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

Test values

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

Test valueAlways returnsWhat it is for
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.

Used by