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

How-to guide

How to Build a B2B Lead List for Accounting Firms (Partners, Growth and Operations)

Find the buying committee, size the list with a free count, and pull only the rows you will email.

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

Accounting firms buy through partners. Map the committee to seniority and function filters, count it for free, then pull only the rows you will email.

TL;DR

  • Accounting firms are partnerships. Target the partner or owner first, then the growth or marketing lead and the IT or operations lead at the same firm.
  • Size the list with a free count, then pull a 100-row sample. The recipe takes about 25 minutes and spends 100 records at most.
  • On 2026-10-21 the free count found 8,712 mailable owners, founders, partners and C-level people at US accounting firms with 11 to 200 employees, across 2,917 employers.

Prerequisites

  • A LeadOcean account. The Free plan gives 1,000 records for life, no card, 5 requests a second. Sign up at app.leadocean.io.
  • An API key stored as $LEADOCEAN_API_KEY.
  • curl and jq, or any HTTP client. Optional: the hosted MCP server at https://api.leadocean.io/mcp if you work from Claude.

Base URL is https://api.leadocean.io. Every request carries the header x-api-key.

Step 1: Pick the buying committee

Whoever owns the partnership owns the budget. This guide is for vendors selling software, services or data to accounting firms.

Most deals touch four roles:

  • Partner, owner or managing partner. Signs almost everything. In a firm under 200 people this is often the only approver.
  • Growth or marketing lead. A director or VP of business development or marketing. Buys anything that brings in new clients.
  • IT or operations lead. Runs the tax and audit stack, security and workflow tools. Runs the pilot for software.
  • Executive sponsor. A C-level person such as a COO or CFO. Appears on larger firms.

Write the committee down as filter sets before you query anything:

yaml
partner:     { seniority: [partner, owner, founder] }
growth:      { jobLevel: [Director, VP, C-Team], jobFunction: [Sales & Business Development, Advertising & Marketing] }
operations:  { jobLevel: [Director, VP, C-Team], jobFunction: [Information Technology, Operations] }
sponsor:     { seniority: [c_suite] }

One data note. Filter on seniority first, function second. On 2026-10-21, seniority: partner alone returned 3,543 mailable people in this segment, while adding jobFunction: Finance & Accounting returned 0.

Step 2: Resolve the industry value

Filter values are exact strings. The industry list has 534 values. Check them before you guess.

bash
curl -s -G "https://api.leadocean.io/v1/enums/industry" --data-urlencode "q=accounting" \
  -H "x-api-key: $LEADOCEAN_API_KEY" | jq -r '.data.values[]'

In Claude with the MCP server connected, the free tool does the same job.

code
leadocean_list_enum_values({ name: "industry", q: "accounting" })

The value that matters is Accounting. Add Financial Services only if you also sell to bookkeeping and advisory shops filed there, and expect a noisier list.

Step 3: Size the company list for free

Count companies first. A company count is free and tells you whether the segment can carry an outbound motion.

bash
curl -s -G "https://api.leadocean.io/v1/companies/count" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  --data-urlencode "industry=Accounting" \
  --data-urlencode "hqCountry=US" \
  --data-urlencode "employeeRange=11-50,51-200"

Array parameters on a GET are comma-separated. The same call as an MCP tool is leadocean_count_companies. It spends no records and returns breakdowns by HQ state and NAICS code, so you see where the segment clusters.

Run on 2026-10-21 through leadocean_count_companies, it returned 14,177 US-headquartered accounting firms: 12,173 with 11 to 50 employees and 2,004 with 51 to 200. California (1,935), Texas (1,084) and New York (938) lead the HQ states, and 11,658 firms file under NAICS 541211 (offices of CPAs).

Step 4: Build the people filter

Search takes a flat JSON body. Filters are arrays. The count=true and limit=1 query parameters make the call a free sizing call: data comes back empty and meta.total is capped at 100,000.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true&limit=1" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "industry": ["Accounting"],
    "country": ["US"],
    "employeeRange": ["11-50", "51-200"],
    "seniority": ["partner", "owner", "founder", "c_suite"]
  }'

Build one filter per committee role.

RoleFilter
Partner or ownerseniority: ["partner", "owner", "founder"]
Growth or marketing leadjobLevel: ["Director", "VP", "C-Team"], jobFunction: ["Sales & Business Development", "Advertising & Marketing"]
IT or operations leadjobLevel: ["Director", "VP", "C-Team"], jobFunction: ["Information Technology", "Operations"]
Executive sponsorseniority: ["c_suite"]

Enum values are case-exact: C-Team, VP, Director. Seniority is lowercase.

Step 5: Pull a sample and check email status

Spend a small number of records to check quality before a bulk pull. Page size is 1 to 100 and pagination uses cursor.

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 '{
    "industry": ["Accounting"],
    "country": ["US"],
    "employeeRange": ["11-50", "51-200"],
    "seniority": ["partner", "owner", "founder"],
    "emailStatus": ["verified", "catch_all_valid"],
    "limit": 100
  }' | jq '.data | length, (.[0] | keys)'

This spends up to 100 records. Read email_status on every row. LeadOcean does not refund bounces, so send to verified first and treat catch_all as a second wave.

One search pages to 10,000 rows. If meta.depthCapped is true, narrow the filters instead of walking further. Add a state or a headcount band.

Step 6: Export the rows you will email

For lists above a sample, use an export. It takes up to 50,000 rows a request and 500,000 a day. Bulk CSV export is not on the Free plan.

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": "us-accounting-partners",
    "filters": {
      "industry": ["Accounting"],
      "country": ["US"],
      "employeeRange": ["11-50", "51-200"],
      "seniority": ["partner", "owner", "founder"],
      "emailStatus": ["verified"]
    },
    "limit": 5000
  }'

You can also do this in the app at app.leadocean.io. The Exports page has a filter builder, a column picker, the record price before you start, and a CSV download. It is not a sequencer. Load the CSV into the tool you already send from.

Step 7: Match the message to the role

One angle per role:

  • Partner or owner. Lead with realization, client retention or partner time. Partners think in billable hours and fee growth. Name the number you move.
  • Growth or marketing lead. Lead with new client flow. They are measured on leads and referrals, so open with how you reach buyers outside the referral network.
  • IT or operations lead. Lead with workflow, document handling or access control. Offer a short pilot on one service line.
  • Executive sponsor. Lead with margin and risk. Client financial data is sensitive, so say plainly how your product handles it, and only say what is true.

Keep each email under 90 words with one ask. Do not name a customer you have not cleared.

Mind the calendar. Tax and audit seasons eat partner time, so send outside the busiest weeks for the firm's practice. Ask for 15 minutes, not a demo.

In a firm under 50 people, write to the partner first. Delegation is short, and one yes closes it. In a firm of 200 or more, start with the operations or growth lead, then pass the idea up with their problem stated in business terms. Never send the same template to two roles.

Step 8: Keep the list clean

Re-run the free count before every send, with the Step 4 body saved as partners.json:

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true&limit=1" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d @partners.json | jq '.meta.total'

The dataset refreshes monthly, so re-run the count monthly. Partners retire, merge firms and change titles. If the total drops, re-pull the accounts you are working and drop anyone whose title no longer matches.

Person enrich returns career history too: past roles, education and certifications. Use it to open with a real detail, such as a prior firm you both know.

Step 9: Work the list in waves

Do not send to 8,712 people at once. Split the list into waves and learn from each.

  1. Wave one. Partners with a verified email at firms of 11 to 50 people. These are owner-operators and decide fast.
  2. Wave two. Partners at firms of 51 to 200 people, plus the growth lead at the same firm.
  3. Wave three. catch_all addresses and the IT or operations lead.

Track replies per role and per headcount band. Drop the band that does not answer after two touches. The free count lets you resize any wave in seconds, so adjust the filters instead of guessing.

Segment by firm type if you can. Tax-heavy practices, audit practices and advisory practices buy different tools. Use keywords or companyKeywords in the search body to separate them, then check a 25-row sample before you trust the split.

What you get

Free counts run on 2026-10-21 with the MCP tool leadocean_count_leads. The first row is the Step 4 body. The industry filter is Accounting and country is US. People figures are mailable (verified, catch_all_valid or catch_all) unless the row says otherwise.

FilterResult
Owner, founder, partner or C-level, 11 to 200 employees8,712 mailable (38,796 with no email filter), 2,917 employers
Seniority partner, 11 to 200 employees3,543 mailable (16,004 with no email filter), 1,192 employers
Director/VP/C-Team, Sales & Business Development or Advertising & Marketing, 51 to 500 employees504 mailable (1,371 with no email filter), 185 employers
Director/VP/C-Team, Information Technology or Operations, 51 to 500 employees260 mailable (831 with no email filter), 141 employers

The shape is clear. The partner layer is wide and the specialist layer is thin. Plan to reach partners in small firms and one specialist in each larger firm.

Response shape from the API reference, placeholder values only.

json
{
  "success": true,
  "data": [
    {
      "profile_data": {
        "profile_full_name": "Jane Doe",
        "profile_headline": "Managing Partner at Acme"
      },
      "contact_data": {
        "has_email": true,
        "email_status": "verified",
        "contact_current_experiences": [{
          "job_title": "Managing Partner",
          "company_name": "Acme",
          "company_domain": "acme.com"
        }]
      }
    }
  ],
  "meta": { "count": 1, "limit": 100, "credits": 1, "nextCursor": "CURSOR", "depthCapped": false }
}

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-keyCheck $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)Back off and honor Retry-After.
402Out of records on the Free planThe 1,000 records are spent. Move to Solo ($97 a month) or Agency ($497 a month).
Empty resultsBad enum value, such as CPA as an industry or Partner in jobLevelResolve values with GET /v1/enums/{name} or leadocean_list_enum_values.
Export refusedOver 50,000 rows a request or 500,000 a daySplit by state or headcount band and run several exports.

FAQ

Which industry value should I use for accounting firms?

Use Accounting. It is an exact string in the 534-value industry list. Resolve it with the free enum lookup before you query.

How many accounting contacts can I get for free?

The Free plan gives 1,000 records for life, no card. Counts never spend records, so you can size the whole segment first and pull a 100-row sample.

Can I get phone numbers for partners?

Yes, through GET /v2/people/phone or the find_phone MCP tool. Each call costs one record, including a call that finds nothing.

Does this replace my sequencer or CRM?

No. LeadOcean returns data through an API, an MCP server and an app with an Exports page. Send from the tool you already use.

Related reading: lead generation for web3, lead generation for travel, lead generation for telecom, pricing and the blog hub.

Size your accounting firm list before you spend a record

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

Get your free API key →