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 Law Firms (Managing Partners, Marketing 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.

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

TL;DR

  • Law firms are partnerships. Target the owner or managing partner first, then the marketing or business development lead and the operations or IT 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 5,608 mailable owners, partners and founders at US legal services firms with 11 to 200 employees, across 1,914 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 firm owns the budget. This guide is for vendors selling software, services or data to law firms, not to legal departments inside companies.

Most deals touch four roles:

  • Owner, partner or managing partner. Signs almost everything. In a firm under 200 people this is often the only approver.
  • Marketing or business development lead. A director or VP of marketing or business development. Buys anything that brings in new clients.
  • Operations or IT lead. Runs practice management, document handling and security. Runs the pilot for software.
  • Executive sponsor. A C-level person such as a COO or CMO. Appears on larger firms.

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

yaml
owner:       { seniority: [partner, owner, founder] }
marketing:   { 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] }

Step 2: Resolve the industry value

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

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

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

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

Two values hold law firms: Legal Services and Law Practice. Copy them exactly, capitals included. A guess such as Law or Law Firms returns an empty list. The counts below use Legal Services; add Law Practice to the same filter to reach the firms filed under it.

Step 3: Size the company list for free

Law is a long tail of small firms. Most of the market is a solo or small practice, and a handful of large firms sit on top. Decide which end you sell to before you count, because the committee, the price point and the sales cycle differ at each end.

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=Legal Services" \
  --data-urlencode "hqCountry=US" \
  --data-urlencode "employeeRange=11-50" \
  --data-urlencode "employeeRange=51-200"

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.

On the small end, one person is the buyer and the deal closes in a few emails. On the large end, a marketing, operations or IT lead runs the evaluation and a partner committee signs off. Pick one end per campaign and write one message for it.

Step 4: Build the people filter

Search takes a flat JSON body. Filters are arrays. The count=true query parameter makes 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" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "industry": ["Legal Services"],
    "country": ["US"],
    "employeeRange": ["11-50", "51-200"],
    "seniority": ["partner", "owner", "founder"],
    "limit": 1
  }'

Build one filter per committee role.

RoleFilter
Owner or partnerseniority: ["partner", "owner", "founder"]
Marketing or business development leadjobLevel: ["Director", "VP", "C-Team"], jobFunction: ["Sales & Business Development", "Advertising & Marketing"]
Operations or IT 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": ["Legal Services"],
    "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-law-firm-owners",
    "filters": {
      "industry": ["Legal Services"],
      "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:

  • Owner or managing partner. Lead with client intake, realization or partner time. They think in billable hours and matter flow. Name the number you move.
  • Marketing or business development lead. Lead with new matters and referral sources. They are measured on inquiries, so open with how you reach buyers outside the referral network.
  • Operations or IT lead. Lead with document handling, access control or admin hours saved. Offer a short pilot with one practice group.
  • Executive sponsor. Lead with margin and risk. Client files are confidential, so say plainly how your product handles them, and only say what is true.

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

Split by practice area when you can. A personal injury firm, an estate planning firm and a corporate firm 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.

In a firm under 50 people, write to the owner first. Delegation is short, and one yes closes it. In a firm of 200 or more, start with the marketing or operations lead and 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 owners.json:

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 @owners.json | jq '.meta.total'

The dataset refreshes monthly, so re-run the count monthly. Partners retire, firms merge and titles change. 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 5,608 people at once. Split the list into waves and learn from each.

  1. Wave one. Owners with a verified email at firms of 11 to 50 people. They decide fast.
  2. Wave two. Owners at firms of 51 to 200 people, plus the marketing lead at the same firm.
  3. Wave three. catch_all addresses and the operations or IT 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.

What you get

Free counts run on 2026-10-21 with the MCP tools leadocean_count_leads and leadocean_count_companies. The industry filter is Legal Services unless the row says otherwise, and country is US. People figures are mailable (verified, catch_all_valid or catch_all) unless the row says otherwise.

FilterResult
Companies, 11 to 200 employees (company count)18,600 companies, 16,430 of them with 11 to 50 employees
Same company count with industry Law Practice instead17,661 companies, 15,202 of them with 11 to 50 employees
Owner, partner or founder, 11 to 200 employees5,608 mailable (20,276 with no email filter), 1,914 employers
Director/VP/C-Team, Sales & Business Development or Advertising & Marketing, 51 to 500 employees705 mailable (1,765 with no email filter), 231 employers
Director/VP/C-Team, Information Technology or Operations, 51 to 500 employees365 mailable (1,074 with no email filter), 174 employers
C-suite, 51 to 500 employees2,707 mailable (5,810 with no email filter), 381 employers

The shape is clear. The owner layer is wide and the specialist layer is thin. Plan to reach owners in small firms and one specialist in each larger firm. By company count, Texas, California, Florida and New York lead the HQ states, with 2,678, 2,280, 1,367 and 1,096 firms.

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 Law 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 law firms?

Use Legal Services and Law Practice together. Both are exact strings in the 534-value industry list, and each holds a large share of US firms. Resolve them with the free enum lookup before you query.

How many law firm 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 IT services and MSPs, lead generation for web3, lead generation for travel, pricing and the blog hub.

Size your law 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 →