Know who signed up before you reply.
On each new sign-up, call validate_email, and if the address is on a company domain, call domain_to_company to add name, size, industry and location to the record. Free-mail and disposable addresses stop at the first step.
One webhook, two calls
Use your sign-up form's webhook, your backend, or the HTTP step in a tool such as Zapier, Make or n8n. There are no native app listings; the HTTP step works with any of them.
- / 01
Create an API key
Sign in at askravn.com and make a key. Store it as
RAVN_API_KEYin your secrets, never in the form or browser code. - / 02
Check the email
Call validate_email with the sign-up address. If the status is invalid or
disposableis true, tag the lead and stop. That saves your team time and a lookup. - / 03
Skip free mail
If
free_provideris true (a personal mailbox), there is no company domain to look up. Mark it as a personal sign-up and stop. - / 04
Look up the company
For a company address, call domain_to_company with the domain from the validate_email answer. It runs on your own People Data Labs key (connect it with
ravn keys add pdl), and returns name, employee count, industry, founded year, city, state, country, LinkedIn URL and NAICS codes. Ravn stores none of it. - / 05
Write it back and route
Save the fields to your CRM or database, then route by size or industry. A not_found from domain_to_company costs nothing; leave those for a human to check.
- / 06
Handle limits
On HTTP 429, wait for the
Retry-Afterheader and retry. On 403provider_key_required, connect your provider key withravn keys add pdl. Do not drop the sign-up on an error; queue it.
The two requests
# 1. Check the address (1 lookup)
curl https://api.askravn.com/v1/tools/validate_email \
-H "Authorization: Bearer $RAVN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "jane@acme.com"}'
# Branch on results.status, results.disposable and results.free_provider.
# 2. Company details for the domain (one lookup on your own PDL key, free if not_found)
curl https://api.askravn.com/v1/tools/domain_to_company \
-H "Authorization: Bearer $RAVN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "acme.com"}'
# Backfill last month's sign-ups from a CSV instead
npx ravn enrich signups.csv --tool domain_to_company --map domain=Website --out signups-enriched.csvOne lookup per sign-up, one per company
The email check uses one lookup from your plan and needs no provider key. The company lookup is also one lookup when it finds a match and nothing when it does not, and it runs on your own People Data Labs key, which bills you directly for the record.
Worked example: 600 sign-ups in a month, of which 400 use a company domain. The email checks take 600 lookups, well inside the 10,000 lookups a month the plan includes. The company lookups take another 400, and if 50 domains return not_found, those 50 lookups are given straight back.
Skipping free-mail and disposable addresses before step 4 is what keeps the bill down. The company enrichment API lists every field, and the error docs list every status code.
Is there a native HubSpot or Salesforce app?
No. Use your CRM's workflow webhook, or an HTTP step in Zapier, Make or n8n, to call the REST API. The request is the same two calls shown above. The integrations page has examples.
Can I enrich the person, not just the company?
Yes. reverse_email_lookup takes an email and returns a person record if one exists, for one lookup per person matched, on your own People Data Labs key. Use it only where your privacy notice covers it.
What happens if Ravn is slow or down during a sign-up?
Do not block the sign-up on it. Queue the enrichment and retry. A 503 upstream_unavailable or a 429 with Retry-After is safe to retry later. We do not offer an SLA, so build the retry in.
Should I enrich sign-ups that use Gmail or other free mail?
There is no company to look up from a free-mail domain, so domain_to_company would only return not_found. Check the free_provider flag from validate_email and stop there. If the person gives a company website elsewhere on the form, look up that domain instead.
More in use cases
Every page uses the same account, plan and tools. See pricing →