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

How-to guide

How to Turn Buying Signals Into a Target Account List (LeadOcean API)

Pick accounts by signal first, size the list for free, then spend records only on the buyers who match.

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

A buying signals tool earns its keep by shrinking the account list before anyone writes an email. This guide does that with filters you can run today: one technology signal, one size band, one buyer role. You size the list for free, then pull 25 people.

TL;DR

  • Pick accounts by a signal in the data (detected technology, company size, last funding year), not by a hunch. Then pull the buyers at those accounts.
  • It takes about 15 minutes. Sizing costs 0 records. The sample pull spends 25 records, inside the Free plan's 1,000.
  • LeadOcean holds firmographic and technology signals. It does not hold intent data such as page visits or ad clicks.

What a signal tool should and should not do

A signal tool answers one question: which accounts should we spend time on this month? Anything past that is a different product.

Three checks tell you whether a signal is useful:

  • It sits on the account. A detected tool or a funding year describes the company. A job title describes only one person.
  • You can count it. If you cannot see the list size before you commit, you are buying a guess.
  • It narrows hard. A signal that matches most of the database is a filter in name only. Here one signal cut 63M companies to 105 once size and country were added.

The weak spot is timing. Firmographic signals tell you who fits, not who is buying this week. Pair them with your own trigger: a pricing page visit, a reply, a job post you track yourself.

Prerequisites

  • A LeadOcean account. The Free plan gives 1,000 records for life, no card, 5 requests a second.
  • An API key from app.leadocean.io, exported as $LEADOCEAN_API_KEY.
  • curl, plus Claude with the LeadOcean MCP server (https://api.leadocean.io/mcp) if you want the free sizing calls without writing requests.
  • Background: what a buying signal is and how to act on one.

Step 1: Choose a signal that predicts need

Pick a signal that says something about the account, not the person. Good ones are on the account: a detected tool, a headcount band, a recent funding round.

Our example seller offers a data-activation service. A company running a customer data platform has the data and the budget to act on it. So the signal is "detected technology category: Customer data platform".

Check the exact enum string first. Filter values are exact strings, and a wrong one returns nothing.

bash
curl -s "https://api.leadocean.io/v1/enums" -H "x-api-key: $LEADOCEAN_API_KEY"

This call is free. In MCP, leadocean_list_enum_values with name tech_category returned Customer data platform on 21 October 2026. Technology data comes from the company's own website, so it covers about 7.8M crawled companies, about an eighth of the corpus.

Step 2: Size the account list for free

Count companies before you search. The leadocean_count_companies tool (GET /v1/companies/count) is free and returns an exact total with breakdowns.

text
Call leadocean_count_companies with
technologyCategories ["Customer data platform"],
employeeRange ["51-200", "201-500"], hqCountry ["US"].
Tell me the total and the top three HQ states.

Two bands, one country, one signal. If the total is too big, add a filter. If it is zero, loosen one. Never search to find out how big a list is.

Step 3: Size the buyers at those accounts

Now count the people. Same signal, plus the role that buys: C-Team and VP in sales.

text
Call leadocean_count_leads with
technologyCategories ["Customer data platform"],
employeeRange ["51-200", "201-500"], hqCountry ["US"],
jobLevel ["C-Team", "VP"],
jobFunction ["Sales & Business Development"], facets false.

The default count only includes addresses worth sending to: verified, catch_all_valid or catch_all. Label any count by what you filtered. This one is a mailable-email count, not a count of people you will reach.

Step 4: Pull a sample over the API

Pull 25 people. Filters are flat JSON, every filter is an array, and limit runs from 1 to 100.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "technologyCategories": ["Customer data platform"],
    "employeeRange": ["51-200", "201-500"],
    "hqCountry": ["US"],
    "jobLevel": ["C-Team", "VP"],
    "jobFunction": ["Sales & Business Development"],
    "emailStatus": ["verified", "catch_all_valid"],
    "limit": 25
  }'

Each person returned costs one record. For the next page, send the meta.nextCursor value as cursor. One search pages to 10,000 rows, so narrow the filters rather than walk the index.

Reading the result

Check three things on the first page. Do the companies look like your buyer? Is the title mix right? Is email_status clean? If the first page is off, change a filter and count again. Counting is free, so iterate there.

Step 5: Export the full list

When the sample looks right, send the same filters to the exports endpoint, inside a filters object with a row limit. It takes up to 50,000 rows a request and 500,000 a day. Bulk CSV export is not on Free, so this step needs Solo ($97 a month) or higher.

bash
curl -s -X POST "https://api.leadocean.io/v1/exports" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "CDP sales leaders US",
    "filters": {
      "technologyCategories": ["Customer data platform"],
      "employeeRange": ["51-200", "201-500"],
      "hqCountry": ["US"],
      "jobLevel": ["C-Team", "VP"],
      "jobFunction": ["Sales & Business Development"],
      "emailStatus": ["verified", "catch_all_valid"]
    },
    "limit": 500,
    "preset": "full"
  }'

Pull the people at one account later with GET /v1/companies/{domain}/people, using a placeholder such as acme.com. It stops at 10,000 rows.

The app has an Exports page with a filter builder, a column picker and the record price before you start. It is the same export without the request.

What you get

Two free counts, run on 21 October 2026:

CallFiltersResult
leadocean_count_companiesCustomer data platform, 51-200 and 201-500 employees, HQ US105 companies
leadocean_count_leadsthe same, plus C-Team and VP, Sales & Business Development270 mailable people at 14 companies

Without the email filter the same people count is 425. The 270 is the mailable subset. The signal did the work: from 63M companies to 105.

Response shape from the API reference, placeholder values:

json
{
  "success": true,
  "data": [
    {
      "profile_data": { "profile_full_name": "Jane Doe" },
      "contact_data": {
        "has_email": true,
        "email_status": "verified",
        "email_type": "work",
        "contact_current_experiences": [
          { "job_title": "VP Sales", "company_name": "Acme", "company_domain": "acme.com" }
        ]
      },
      "meta": { "source_ids": { "person_id": "1234567" } }
    }
  ],
  "meta": { "count": 1, "limit": 25, "nextCursor": "opaque-cursor-string" }
}

Combine signals, then act

One signal gives you fit. Two or three give you a short list worth a personal email. Change one filter at a time and watch the count.

ChangeWhyWhat to watch
Add minLastFundingYear at search timeA recent round means budgetDo not quote a count with a funding filter: count without it, then expect a shorter list at search time
Narrow employeeRange to one bandDifferent sizes buy differentlyThe company count in step 2
Swap jobFunctionMarketing and RevOps buy different toolsThe mailable people count in step 3
Add reachable set to strictKeeps people with an email or phone, and requires the email to be verified, catch_all_valid or catch_allThe gap between 425 and 270

To size a search without spending records, send count=true as a query parameter with limit 1. The body stays flat JSON. meta.total is capped at 100,000, and data comes back empty.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"technologyCategories": ["Customer data platform"], "hqCountry": ["US"], "limit": 1}'

Once the list is final, the next step is outreach. The signal sets the angle: write about the tool the account runs, not about your product. How to do that is in how to identify and act on buying signals.

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-key headerCheck $LEADOCEAN_API_KEY is exported and sent as the x-api-key header.
429Above the plan's rate limit (5 a second on Free, 200 on Agency)Wait for the Retry-After header, then retry slower.
402The plan's records are spent (Free is 1,000 for life)Check GET /v1/account, then move to a paid plan.
Empty resultsA filter value is not an exact enum stringRead the string from leadocean_list_enum_values and copy it as written.
unsupportedFilters in a countThe filter cannot be countedCount without it. Funding filters only apply at search time.
Export refusedOver 50,000 rows a request or 500,000 a daySplit the export by country or employee range.

FAQ

Does LeadOcean sell intent data?

No. It holds firmographic and technology signals: detected technology, headcount band, last funding year, role. It has no page-visit or ad-click data. Treat these signals as account fit, then add your own timing signal.

How fresh is the technology signal?

Technology comes from the company's own website. The dataset is refreshed monthly, and each record carries its own fetched_at date. Check the site before you cite a tool in an email.

Why count before I search?

Counts cost nothing. A search costs one record per person returned. Counting first tells you whether the filters are right before you spend anything.

Can I use a funding round as the signal instead?

Yes, with minLastFundingYear at search time. Do not count with a funding filter. The count tool does not support it and can return a wrong total. See Detect B2B Buying Signals With Claude for the prompt.

What does the sample pull cost?

25 records, one per person returned. The counts and the enum lookup cost 0. See pricing for what each plan includes.

Find your first target accounts by signal, free

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

Get your free API key →