Integration

LeadOcean + n8n: Pull B2B Data Into Any Workflow

Two ways in: an HTTP Request node against the REST API, or the MCP Client Tool node for an AI agent. Free key to try both.

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

You get a workflow that turns a filter set into a CSV of people with verified work emails. Each row then goes to whatever node comes next. The main route is three HTTP Request nodes against the LeadOcean export endpoint. An MCP Client Tool node gives an AI agent the same data as tools. Both use one key and the same record count. Each person returned counts one record either way.

How it works

Run the export as a job: create it, poll it, download the file. One export holds up to 50,000 rows, so 10,000 rows is one run, not 100 pages. A search call returns 100 people at most per page, which is why the export route suits big pulls.

  1. Add a credential. In n8n, create a Header Auth credential. Set Name to x-api-key and Value to your LeadOcean key.
  2. Create the export. Add an HTTP Request node. Method POST, URL https://api.leadocean.io/v1/exports, Authentication "Generic Credential Type", then Header Auth. Send the JSON body below. The API answers 202 with a job id.
  3. Wait. Add a Wait node set to After Time Interval. The response carries pollAfter (typically 10 seconds), so use that.
  4. Check status. Add a second HTTP Request node: GET https://api.leadocean.io/v1/exports/{{ $json.data.id }}. Follow it with an If node that tests data.status equals done. Send the false branch back to the Wait node.
  5. Download the CSV. On the true branch, add a third HTTP Request node: GET https://api.leadocean.io/v1/exports/{{ $json.data.id }}/download. Under Options, set Response Format to File.
  6. Parse it. Add an Extract From File node, operation Extract From CSV, Input Binary Field data. You now have one n8n item per person.
  7. Send rows on. Map the fields below into your CRM, sheet or sequencer node.

For an AI agent, skip steps 2 to 6. Add an MCP Client Tool node to your agent, point it at https://api.leadocean.io/mcp, and set Tools to Include to Selected. Start with count_leads and search_leads. n8n's docs list bearer, header, multiple headers and OAuth2 as the authentication options.

The n8n docs page only names an SSE Endpoint field. The node's source shows more. From node version 1.2 it has a Server Transport option, with HTTP Streamable as the default and SSE as the alternative. Earlier versions are SSE only (n8n source, October 2026). Use a current n8n so the node offers both.

The LeadOcean MCP OAuth server supports dynamic client registration at https://api.leadocean.io/oauth/register (scope mcp), so a client can register itself. We have not tested n8n's OAuth2 sign-in against it. The simplest route is a Header Auth credential with your API key.

Configuration

Body for step 2. Filters join with AND. Several values inside one filter join with OR.

json
{
  "name": "n8n VP sales Canada",
  "filters": {
    "jobLevel": ["VP"],
    "jobFunction": ["Sales & Business Development"],
    "country": ["CA"],
    "emailStatus": ["verified"],
    "emailType": ["work"]
  },
  "limit": 10000,
  "columns": [
    "profile_full_name", "profile_first_name", "profile_last_name",
    "profile_url", "current_job_title", "current_company_name",
    "current_company_domain", "email_N_address", "email_N_status"
  ]
}

The same call from a terminal, to test the filters before you build the workflow:

bash
curl -X POST https://api.leadocean.io/v1/exports \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"n8n test","filters":{"jobLevel":["VP"],"country":["CA"],"emailType":["work"]},"limit":100,"columns":["profile_full_name","current_company_domain","email_N_address"]}'

curl -H "x-api-key: $LEADOCEAN_API_KEY" https://api.leadocean.io/v1/exports/EXPORT_ID
curl -H "x-api-key: $LEADOCEAN_API_KEY" -o people.csv https://api.leadocean.io/v1/exports/EXPORT_ID/download

Size the audience first. A search with count=true and limit=1 is free. Contact columns need a key with the enrich scope. Keys on the Free plan get both scopes, search and enrich, inside the 1,000 one-off records.

Field mapping

The CSV header is the column id. Map these into your target node. Column ids come from GET /v1/exports/columns, which needs no key.

LeadOcean fieldTarget fieldNote
profile_first_nameFirst nameEmpty if the profile has no split name.
profile_last_nameLast name
profile_full_nameFull nameUse when the target has one name field.
email_1_addressEmailBest address first.
email_1_statusEmail statusverified, catch_all_valid or catch_all. Filter on it before sending.
current_job_titleJob title
current_company_nameCompany
current_company_domainCompany domainGood dedupe key for CRM upserts.
profile_urlLinkedIn URLPass to POST /v1/people/enrich for a single-person lookup.
person_idExternal IDStable across exports. Add it to the columns list.

Cost at 10,000 rows

The short version: LeadOcean charges by plan, n8n charges by workflow run, and the two do not multiply.

A 10,000-row export costs 10,000 records on LeadOcean, and Pro covers that for $499 a month flat. The Free plan has 1,000 records, one-off, so it runs a 1,000-row test of the same workflow.

LeadOceann8n
Free plan1,000 rows, then stop. No card.Community Edition is free to self-host.
10,000 rows, one runPro, $499 a month. No per-record price, no overage invoice.One workflow run is one execution, whatever the row count.
n8n CloudStarter €20 a month for 2.5K executions, Pro €50 for 10K, billed annually.

n8n counts "a single run of your entire workflow" as one execution. Step and row counts do not change that (source: https://n8n.io/pricing/, checked September 2026). So the export workflow above adds one execution per run. Your 10,000 rows cost you LeadOcean's flat fee plus the plan you already pay n8n.

Troubleshooting

SymptomCauseFix
402 on createFewer records left than limit reserves.Lower limit, or move to Pro.
403 on createContact columns asked without the enrich scope.Use a key with that scope, or drop the email columns.
400 export_limit_rowslimit is over 50,000.Split into several exports.
429 export_limit_daily or export_limit_monthlyAccount export ceiling reached.Wait for resetsAt in the response.
409 on downloadThe export is still running.Loop through the If node until data.status is done.
410 on downloadThe file expired after 7 days.Create the export again.
Extract From File returns nothingThe download node did not return a file.Set Response Format to File on the download node.
New export sits queuedOne export runs per account at a time.Wait for the earlier one to finish.

FAQ

Should I use the HTTP Request node or the MCP Client Tool?

Use HTTP Request for scheduled, repeatable pulls. Use the MCP Client Tool when an agent decides the filters at run time. The agent route spends records per tool call, for example one per person from search_leads.

Can I page through search results instead of exporting?

Yes. GET /v1/people/search and POST /v1/people/search return up to 100 people per page with meta.nextCursor. The HTTP Request node has a pagination option that updates a parameter on each request, and it can read the previous response. Exports suit large pulls better.

Does the free plan work with n8n?

Yes, the same API and MCP server as Pro, with 1,000 records one-off and no card. That is enough to run this workflow on a small filter and check the field mapping.

Where do I find a phone number?

Phone lookup is GET /v2/people/phone, one person per call. Wire it as a fourth HTTP Request node after the If node if you need numbers for a short list. Read the MCP setup page for the agent route and the n8n and Attio stack guide for a full outbound build. Plans are on the pricing page, and more recipes sit in the integrations hub.

Run your first n8n export on the free plan

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

Get your free API key →