Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

Integration recipe

LeadOcean + Typeform: enrich, classify and route every submission

A Typeform webhook sends the respondent's email to POST /v1/people/enrich. Your handler tags the lead and sends it to the right queue.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

You get a handler that fires on every Typeform submission, looks the respondent up in LeadOcean, tags the lead as hot, standard or hold, and sends it to the right queue. Typeform pushes each response to your URL as it arrives (Typeform docs, September 2026). LeadOcean adds the job title, company and email status the form never asked for. You need a free LeadOcean key and any HTTPS endpoint that can run 20 lines of code.

How it works

  1. Ask for a work email. Add one email field to the form. Everything else comes from LeadOcean, so the form stays short.
  2. Register the webhook. Call the Typeform Webhooks API with PUT /forms/{form_id}/webhooks/{tag}, an enabled flag, your url and a secret (Typeform docs, September 2026).
  3. Verify the signature. Typeform signs the body with HMAC SHA-256 in the Typeform-Signature header. Reject anything that does not match (Typeform docs, September 2026).
  4. Read the email. The payload has event_type of form_response. Find the entry in form_response.answers whose type is email (Typeform docs, September 2026).
  5. Enrich. Send that address to POST /v1/people/enrich with reveal_email: true. A person LeadOcean holds nothing for is a 404 and costs nothing (LeadOcean docs, September 2026).
  6. Classify. Match the current job title against your own list. Check email_status. Tag the lead hot, standard or hold.
  7. Route. Post hot to Slack or your CRM owner queue, standard to a nurture list, hold to a review sheet.
  8. Answer fast. Return a 2XX within 30 seconds or Typeform marks the delivery failed and retries (Typeform docs, September 2026). Do the routing after you reply.

Configuration

Register the webhook once per form. Typeform needs its own token here.

bash
curl -X PUT "https://api.typeform.com/forms/$FORM_ID/webhooks/leadocean" \
  -H "Authorization: Bearer $TYPEFORM_TOKEN" \
  -H "content-type: application/json" \
  -d '{"enabled":true,"url":"https://hooks.acme.com/typeform","secret":"'"$WEBHOOK_SECRET"'","event_types":{"form_response":true}}'

The enrich call your handler makes, tested with a placeholder address:

bash
curl -X POST "https://api.leadocean.io/v1/people/enrich" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"email":"jane.doe@acme.com","reveal_email":true}'

Send exactly one identifier per call. The handler core:

js
const res = await fetch("https://api.leadocean.io/v1/people/enrich", {
  method: "POST",
  headers: { "x-api-key": process.env.LEADOCEAN_API_KEY, "content-type": "application/json" },
  body: JSON.stringify({ email, reveal_email: true }),
});
if (res.status === 404) return tag("hold", email);
const p = (await res.json()).data;
const title = p.contact_data.contact_current_experiences?.[0]?.job_title ?? "";
const status = p.contact_data.email_status;
const hot = /\b(vp|head|director|chief|founder)\b/i.test(title) && status === "verified";

Field mapping

LeadOcean fieldTarget fieldNote
contact_current_experiences[].job_titleLead titleInput to your hot rule.
contact_current_experiences[].company_nameCompanyFills what the form skipped.
contact_current_experiences[].company_domainWebsiteUse it to dedupe accounts.
contact_data.email_statusEmail statusStatus of the best address. Branch on it. Bounces are not refunded.
contact_phones[].phonePhoneOnly after reveal_email. Hot leads only.
form_response.hidden.*UTM or sourceTypeform's own field, passed through untouched.

Cost at 10,000 rows

10,000 submissions cost at most 10,000 LeadOcean records, and $0 on Free for the first 1,000. A hit is one record. A 404 costs nothing. Free allows 5 requests a second. Solo is $97 a month and Agency is $497 a month, with a fair-use pace and no per-record price (LeadOcean pricing).

Typeform bills by responses. Basic is $28 a month for 100 responses. Plus is $56 for 1,000. Business is $91 for 10,000 (Typeform pricing, September 2026). Billed yearly, the page shows a saving of $132, $276 and $456 a year on those three plans. Webhooks are listed on Basic (Typeform pricing, October 2026).

10,000 rows in a monthLeadOceanTypeform
PlanSolo, $97 a monthBusiness, $91 a month
Per-row priceNoneIncluded up to 10,000
Total$97$91

Troubleshooting

SymptomCauseFix
Webhook disabledYour URL returned 404 or 410Typeform stops at once. Fix the route, then re-enable it (Typeform docs, September 2026).
Duplicate leadsTypeform retried after a slow replyReply first. Key on event_id.
Signature mismatchBody parsed before hashingHash the raw bytes, not re-serialized JSON.
401 from LeadOceanWrong headerUse x-api-key.
Everything lands in holdRespondents used personal emailEnrich anyway, then route on linkedin_url if the form asked for it.
402The 1,000 free records are spentMove to Solo or Agency.

FAQ

Do I need Zapier or Make?

No. Any HTTPS endpoint works. A no-code tool is fine if it can read the answers array and call an HTTP URL. See the sign-up enrichment workflow for the pattern.

Why not ask the respondent for their title?

People type titles inconsistently, and each extra field is one more to skip. Ask for the email and let the data fill the rest.

Can I enrich a past batch?

Yes. Export responses from Typeform and loop the same call. The enrich leads prompt does it from Claude.

Where do hot leads go in a CRM?

Create or update the record with the mapped fields. See the Salesforce recipe.

Back to all integrations. See pricing.

Route your next Typeform lead before the rep opens it. Start free.

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →