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

Integration recipe

LeadOcean + Attio: search, enrich from Claude & push to Attio

Claude finds and enriches people with the LeadOcean MCP, then upserts them into Attio through the Attio MCP.

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

You get one Claude chat that searches people in LeadOcean, enriches them, and writes them to Attio as person records. LeadOcean has no Attio sync, so Claude is the bridge. It uses two connectors: the LeadOcean MCP to read, the Attio MCP to write. Reruns update records instead of duplicating them.

How it works

  1. Connect the LeadOcean MCP. Add https://api.leadocean.io/mcp as a custom connector in Claude and sign in with OAuth. No key is pasted.
  2. Connect the Attio MCP. Attio's hosted server is https://mcp.attio.com/mcp. In Claude open Settings, Connectors, search for Attio and install it. You sign in as your Attio user (Attio MCP docs, September 2026).
  3. Size the list for free. Ask Claude to run leadocean_count_leads with your filters. A count costs nothing.
  4. Search and enrich. Claude calls leadocean_search_leads, then leadocean_get_lead for the people you keep. A lookup that finds nobody costs nothing.
  5. Preview the mapping. Claude calls Attio's list-attribute-definitions on the people object, then shows five rows mapped to those attributes. Fix the mapping now.
  6. Upsert. Claude calls Attio's upsert-record with the work email as the matching attribute. Attio's docs say write operations ask you to confirm (Attio MCP docs, September 2026).

Configuration

Both sides are connectors, so there is no config file. A prompt that works:

text
Count VPs of Sales in Canada with leadocean_count_leads (mailable only).
If under 500, search them, enrich with work email, and show 5 rows
mapped to Attio people attributes. Wait for my OK, then upsert by email.

If you script it instead, this is the LeadOcean call and the Attio upsert behind it. Attio's REST upsert is PUT /v2/objects/people/records with the matching_attribute query parameter (Attio API docs, September 2026).

bash
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-example", "reveal_email": true}'

curl -X PUT "https://api.attio.com/v2/objects/people/records?matching_attribute=email_addresses" \
  -H "Authorization: Bearer $ATTIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data": {"values": {"email_addresses": ["jane@acme.com"], "name": [{"first_name": "Jane", "last_name": "Doe", "full_name": "Jane Doe"}]}}}'

Enrich takes exactly one of linkedin_url, email, phone or person_id. To start from a company, search people by domain first, then enrich by person_id.

Field mapping

Attio attribute names come from the Attio docs. Check yours with list-attribute-definitions.

LeadOcean fieldAttio attributeNote
Work email (reveal_email: true)email_addressesThe matching attribute. Skip invalid, risky and unknown.
email_statusCustom text attributeKeep it. LeadOcean gives no refund for bounces.
Phone (contact_phones[].phone)phone_numbersPhone lookups on the v2 endpoints cost a record per call.
Full namenameAttio takes first, last and full name.
LinkedIn URLlinkedinSecond dedupe check.
Current company domaincompanyAttio can link by domain. Docs show a domains reference.
fetched_atCustom date attributeShows record age. The dataset refreshes monthly.

Cost at 10,000 rows

Searching 10,000 people and enriching them is 20,000 records on LeadOcean, because search results and enrichments both count. Free holds 1,000 for life, so it tests the mapping and no more.

PlanFits 10,000 rows?Note
Free ($0)No1,000 records, once.
Solo ($97 a month)Yes10k enrichments every 5 hours, 100k search records every 5 hours.
Agency ($497 a month)Yes1M enrichments a day, 200 requests a second.

Attio bills per seat. Its list prices are Free $0, Plus $44 and Pro $99 per user a month, with Plus at $35 and Pro at $79 billed yearly (Attio pricing, September 2026). Free allows 50,000 records, so 10,000 people fit. Attio's write limit is 25 requests a second (Attio rate limits, September 2026). Attio's MCP docs list an active workspace as the only prerequisite (Attio MCP docs, September 2026). See pricing.

Troubleshooting

SymptomCauseFix
Claude has no Attio toolsConnector not added or off in this chatEnable both connectors, start a new chat
Duplicate people in AttioWrites were creates, not upsertsAsk for upsert-record matched on email
Enrich returns 404LeadOcean holds nothing for that personNothing is charged. Skip the row
402 from LeadOceanThe 1,000 Free records are spentMove to Solo or Agency
429 from either sideOver a rate limitWait for Retry-After, then go slower
Run stops halfwayChat lengthRun batches of 500 to 1,000 rows

FAQ

Does LeadOcean write to Attio by itself?

No. LeadOcean returns data through the API and MCP. Claude with the Attio connector does the writing.

Can I use the REST API instead of the MCP?

Yes. Use the upsert call above from a script. The MCP route needs no code.

How do I keep bad emails out of Attio?

Filter on email_status before the write. Keep verified and catch-all valid, hold the rest.

Is there a similar recipe for another tool?

Enrich the next list straight into Attio

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

Get your free API key →