You get a recipe that fills the emails and phones on folk people from LeadOcean, as soon as a person is created and again on a schedule. folk has no generic HTTP step, so a small script sits in the middle. It reads a person from folk's REST API, calls POST /v1/people/enrich and writes the result back with PATCH. The free LeadOcean plan has 1,000 records for this, no card.
Related: the integrations hub, Retool, Notion, Attio and pricing.
How it works
folk's API is on the Premium plan: $60 per member a month billed monthly, or $48 a month ($576) billed yearly (folk pricing, October 2026). The script runs anywhere that takes a webhook: a small server, a serverless function or an n8n flow.
- Get a LeadOcean key. Sign up at app.leadocean.io and copy a key from the API keys page.
- Get a folk key. In your folk workspace settings, open the "API" section and create a key. folk sends it as
Authorization: Bearer. - Create the webhook. Subscribe to
person.createdwith your script's URL. folk sends a thin payload, so the script must fetch the person itself. - Fetch the person. The script calls
GET /v1/people/{personId}and readsurlsandemails. A LinkedIn URL inurlsis the best input. - Enrich. Send exactly one identifier to LeadOcean: the LinkedIn URL, else the first email. A 404 means nothing was found and costs nothing.
- Merge and write back. Combine old and new emails and phones, drop duplicates, then
PATCH /v1/people/{personId}. - Add the nightly sweep. Run the script on a cron schedule over
GET /v1/peopleand skip anyone who already has an email.
Keep calls under folk's limits: 600 requests a minute and 20 in any 2 seconds, per user (folk rate limits, September 2026). A 429 carries Retry-After.
The two triggers cover different people. The webhook handles people as they are created. The sweep handles people imported in bulk, or created before the webhook existed.
Configuration
Create the webhook once. name, targetUrl and subscribedEvents are the fields folk's create-webhook endpoint takes (folk docs, October 2026). The response carries a signingSecret; keep it to verify each call.
curl -X POST https://api.folk.app/v1/webhooks \
-H "Authorization: Bearer $FOLK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "LeadOcean enrich", "targetUrl": "https://your-host.example/folk-hook", "subscribedEvents": [{"eventType": "person.created"}]}'Then the per-person calls. The enrich request:
curl -X POST https://api.leadocean.io/v1/people/enrich \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"linkedin_url": "https://www.linkedin.com/in/jane-doe", "reveal_email": true}'And the folk update, with the full merged lists:
curl -X PATCH https://api.folk.app/v1/people/$PERSON_ID \
-H "Authorization: Bearer $FOLK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"emails": ["jane@acme.com"], "phones": ["+14155550133"]}'Send one identifier per enrich call. reveal_email: true returns the addresses and phones held and costs no extra record.
Field mapping
LeadOcean fields sit under data in the response. folk list fields are plain strings.
| LeadOcean field | folk field | Note |
|---|---|---|
data.contact_data.contact_emails[].email | emails | Add only verified or catch_all_valid. |
data.contact_data.contact_phones[].phone | phones | Needs reveal_email: true. |
data.profile_data.profile_full_name | fullName | Write only if folk's name is empty. |
data.profile_data.profile_headline | description | Free text, not a normalised title. |
| LinkedIn URL you sent | urls | Keep it in the list so later runs match. |
emails, phones and urls replace the old values on update (folk API, September 2026). Always send the old values plus the new ones. Compare emails in lowercase and phones with spaces removed.
Cost at 10,000 rows
For 10,000 people, LeadOcean costs one flat plan month and folk costs your seats. On Free you get 1,000 records, once. For 10,000 in a month use Solo at $97, which paces at 10k enrichments every 5 hours. Misses are free.
| Item | LeadOcean Free | LeadOcean Solo |
|---|---|---|
| LeadOcean price | $0, 1,000 records for life | $97 a month |
| Rows covered | First 1,000 hits | 10,000 in one run |
| folk plan with API | Premium, $60 per member a month ($576 billed yearly) | Same |
folk also has its own enrichment, paid from workspace credits, and its API takes up to 500 people per request (folk docs, September 2026). Premium lists more credits than Standard (folk pricing, October 2026). Read your workspace's credit balance before you compare per-row cost.
Run the first pass on 20 people before you open the sweep. Check three things: the right email landed, no old email was lost, and the status column of your own list matches what LeadOcean returned. Then raise the volume.
If you also want the company side, call POST /v1/companies/enrich with the company website from folk and write the result to the company record.
Past roles come with the same person call. Since October 2026 the response carries resume_data.experiences[]: title, company name and dates for each past role LeadOcean holds. Past employers have no company id yet. A short line in the folk description field, such as the last two employers, gives a rep context before a call.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Emails vanish after the update | emails replaced the list. | Send old plus new values. |
| LeadOcean returns 404 | No record for that person. | Skip the person. It costs nothing. |
| LeadOcean returns 400 | More than one identifier, or none. | Send only the LinkedIn URL or only the email. |
| folk returns 429 | Over 20 requests in 2 seconds. | Wait for Retry-After, then throttle. |
| Webhook fires but nothing changes | The payload is thin. | Fetch the person by ID first. |
| Same person enriched twice | Webhook retried. | Skip people whose emails already hold an address. |
FAQ
Does folk have a native LeadOcean integration?
No. This recipe uses folk's REST API and webhooks plus LeadOcean's REST API. Nothing in folk's docs lists a generic HTTP step.
Can I batch the nightly sweep?
Yes. folk's batch update takes up to 100 people per request and reports each record on its own, so check every result status (folk batch docs, September 2026).
Which LeadOcean plan fits?
Free for a test of 1,000 people. Solo at $97 a month for one workspace. Agency at $497 a month if you enrich for clients and need 200 requests a second.
Do I need a LinkedIn URL?
It is the best input. LeadOcean also accepts an email, a phone or a person_id. There is no name plus company lookup, so search by domain first.
Enrich your folk people with a free LeadOcean key
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →