Every new Intercom ticket gets the requester's job title, company and phone attached as a note, seconds after it opens. The agent sees who is writing before the first reply. You need one webhook subscription, one small receiver and a LeadOcean key.
How it works
- In the Intercom Developer Hub, subscribe your app to the
ticket.createdtopic. It needs the Read tickets permission (Intercom webhook topics, September 2026). - Point the subscription at a receiver you host, such as a serverless function. The payload carries the Ticket object, whose
contacts.contacts[]list holds the requester's contactid(Intercom ticket object, October 2026). - The ticket holds no email, so the receiver calls
GET https://api.intercom.io/contacts/{id}and readsemail(Intercom get a contact, October 2026). - The receiver calls
POST /v1/people/enrichwith that email andreveal_emailtrue, which returns phones and costs no extra record. A person we hold nothing for returns a 404 and costs nothing. - The receiver writes the result to the contact with
POST https://api.intercom.io/contacts/{contact_id}/notes(Intercom create note, September 2026). - Agents open the ticket and read the note. Route by seniority or company size in your own rules if you want.
Why a note and not a reply: a note is visible to your team only, so the requester never sees enrichment data. Answer with HTTP 200 at once: Intercom resends a notification that gets no 200 within 5,000 ms, so duplicates happen (Intercom webhook notifications, October 2026). Key your work on the ticket id and skip repeats.
A requester we hold nothing for returns a 404. Write no note and do not guess.
Configuration
The receiver's LeadOcean call:
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}'The Intercom call that writes the note:
curl -X POST https://api.intercom.io/contacts/CONTACT_ID/notes \
-H "Authorization: Bearer $INTERCOM_TOKEN" \
-H "Content-Type: application/json" \
-d '{"body": "Jane Doe, VP Sales at Acme (acme.com). Enriched by LeadOcean."}'Enrich takes exactly one of linkedin_url, email, phone or person_id. There is no name plus domain lookup. If the payload gives only a name, search by domain first, then enrich by person_id.
Field mapping
| LeadOcean field | Intercom target | Note |
|---|---|---|
data.contact_data.contact_current_experiences[].job_title | Note body | Current role; read it from the first entry. |
data.contact_data.contact_current_experiences[].company_name | Note body | Add company_domain from the same entry. |
data.contact_data.contact_phones[].phone | Note body | Present with reveal_email true, when we hold a number. |
data.resume_data.experiences[] | Note body, optional | Past roles. Past employers have no company_id yet. |
Notes are free text, so nothing here maps to a custom attribute. To fill attributes, add a second Intercom call after the note.
Cost at 10,000 rows
At 10,000 tickets a month, LeadOcean enrich needs the Solo plan at $97 a month. Free covers 1,000 records for life and then answers 402. One record is one person returned, and a miss is free (pricing).
| Item | Cost at 10,000 tickets | Source |
|---|---|---|
| LeadOcean on Free | First 1,000 records only | LeadOcean pricing, October 2026 |
| LeadOcean on Solo | $97 a month, 10k enrichments every 5 hours | LeadOcean pricing, October 2026 |
| Intercom | Your existing Intercom plan; this recipe adds no LeadOcean app | Not priced here |
Paid plans have a fair-use pace, not credits. There is no per-record bill and no overage invoice.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Same ticket enriched twice | Receiver answered after 5,000 ms, so Intercom resent | Return 200 first, then work. |
| Webhook never fires | Subscription lacks the topic or permission | Subscribe to ticket.created and grant Read tickets. |
| 404 from enrich | Free-mail address or person not in the data | Skip the note. A 404 costs nothing. |
| 402 from enrich | Free plan's 1,000 records are spent | Move to Solo or Agency. |
| 429 from enrich | Over the plan's request rate | Back off by the Retry-After header. Free allows 5 a second. |
| Note lands on the wrong contact | Used the ticket id as the contact id | Use the id in the ticket's contacts.contacts[] list. |
FAQ
Does this need a Chrome extension or an app inside Intercom?
No. It is a webhook, a receiver and three HTTP calls. LeadOcean has no Intercom app and no Chrome extension.
Can I use it with the LeadOcean MCP server instead?
Yes for testing. The MCP tool leadocean_get_lead enriches one person from an AI client. For every new ticket, call the REST endpoint from the receiver.
Is the data fresh?
The dataset is refreshed monthly, and each record carries its own fetched_at date. Read it before you act on a phone number.
What happens when the person is not found?
Enrich returns a 404 and the receiver writes nothing. It costs no record.
Which LeadOcean pages cover the endpoint?
See enrich a person, enrich a company and the enrich person Claude skill. Back to all integrations.
Put a job title next to every new Intercom ticket
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →