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 Commercial Real Estate (Buyers, Filters and Messaging)

Pick the buying committee, count the list for free, then spend records only on the people you will email.

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

Commercial real estate (CRE) sells to three groups: brokerages, owners and landlords, and property managers. Each has a different committee, so you build one list per group.

This guide picks the roles, finds them with LeadOcean filters, sizes the list with a free count and drafts a first message for each.

TL;DR

  • Target brokerages, owners and landlords, and property managers separately. Titles, deal cycles and budgets differ.
  • Size first with a free count. On 2026-10-21, Commercial Real Estate held 1,477 mailable C-level, VP and director contacts at 78 US firms of 51 to 1,000 people.
  • The recipe takes about 45 minutes and spends about 30 records, so it fits inside the Free plan's 1,000.

Prerequisites

  • A LeadOcean account on the Free plan. Sign up at app.leadocean.io, no card.
  • An API key exported as $LEADOCEAN_API_KEY.
  • curl and jq, or any HTTP client.
  • Optional: the hosted MCP server at https://api.leadocean.io/mcp if you would rather run the counts from Claude.

Step 1: Pick the buying committee

CRE deals rarely close on one signature. Name the roles before you touch a filter.

Buyer groupEconomic buyerChampionGatekeeper
BrokerageManaging Principal, CEO, PresidentDirector of Operations or TechnologyFinance, compliance
Owner or landlordCEO, Chief Investment OfficerVP Asset ManagementFinance, legal
Property managerPresident, COODirector of Property OperationsProcurement, accounting

Most CRE firms are small. In the US, 3,137 of 4,079 companies in the Commercial Real Estate industry have 1 to 10 people (count on 2026-10-21). A solo broker has no committee and often no published work email. If your product needs a committee, start at 51 people or more.

LeadOcean has no single CRE bucket for every kind of firm. Look up the exact strings first, because enum values are exact.

bash
for q in "commercial real estate" "non-residential" "real estate agents"; 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

The same lookup is free through the MCP tool leadocean_list_enum_values. On 2026-10-21 a search for "real estate" returned six values. The ones used here are Commercial Real Estate, Leasing Non-residential Real Estate and Real Estate Agents and Brokers. The others are Leasing Residential Real Estate, Real Estate and Real Estate and Equipment Rental Services.

Step 2: Turn the committee into filters

Write the filters as flat JSON. Every filter is an array, even when it holds one value.

json
{
  "industry": ["Commercial Real Estate"],
  "jobLevel": ["C-Team", "VP", "Director"],
  "employeeRange": ["51-200", "201-500", "501-1000"],
  "country": ["US"]
}

Add Leasing Non-residential Real Estate when you sell to landlords and owners. It is the largest bucket by far. On 2026-10-21 it held 9,781 of 15,297 mailable senior contacts across three CRE-related industries in the US. Many are small holding entities, so pair it with a headcount filter and read the test batch.

Leave out Real Estate and Leasing Residential Real Estate unless you also sell to residential teams. They pull in agents and landlords of single homes.

Narrow by function when one product has one owner. A lease-accounting tool sells to Finance & Accounting. A tenant-experience app sells to Operations and Marketing. Check the exact function names with list_enum_values.

Step 3: Size the list with a free count

Count before you pull. A count costs no records and you can run it as often as you like.

bash
curl -s "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "industry": ["Commercial Real Estate"],
    "jobLevel": ["C-Team","VP","Director"],
    "country": ["US"],
    "limit": 1
  }' | jq '.meta'

count=true goes in the query string. The JSON body rejects unknown fields. The response has no rows, only meta.total (capped at 100,000) and meta.countOnly: true. It also carries meta.distinctCompanies, the number of employers the matched people span.

For the company side, GET /v1/companies/count takes the company-search filters and returns an exact total with breakdowns by industry, headcount band, HQ country and HQ state. Use it to see where the firms sit before you pick a market.

Step 4: Pull a 25-row test batch

Pull a small batch first. Read the titles. If half are the wrong role, tighten the filters before you spend more.

bash
curl -s "https://api.leadocean.io/v1/people/search" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "industry": ["Commercial Real Estate"],
    "jobLevel": ["C-Team","VP","Director"],
    "employeeRange": ["51-200","201-500"],
    "country": ["US"],
    "limit": 25
  }' > batch.json

jq '.data | length' batch.json

A page of 25 is 25 records. Page with cursor from meta.nextCursor when you want more. One search pages to 10,000 rows, and the last page carries meta.depthCapped: true. Narrow the filters instead of walking further.

Each row carries contact_data.email_status. Send to verified and catch_all_valid. LeadOcean does not credit back bounces, so read the status before you send.

Step 5: Enrich the champions you will contact

Enrich only the people you will contact. Enrich takes exactly one of linkedin_url, email, phone or person_id.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/enrich" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"person_id": "PERSON_ID_FROM_SEARCH", "reveal_email": true}'

Enrich also returns career history in resume_data: past roles, education and certifications. In CRE, a past role at a large brokerage or a named fund is a better opener than a job title. An enrichment that finds nothing is a 404 and costs nothing.

For a phone number, call GET /v2/people/phone. Brokers live on their mobiles, so phone is worth it for your top accounts. A v2 contact call costs one record even when it finds nothing.

Step 6: Write messages that fit the buyer

CRE buyers watch deal flow, vacancy and cost per square foot. Open with the number they watch this quarter.

BuyerTheir pressureFirst line angle
Brokerage principalAgent retention, commission split, deal countClosing more deals per broker
Owner or asset managerVacancy, net operating income, capital callsFilling space or cutting operating cost
Property managerTenant turnover, maintenance cost, reportingHours saved on tenant requests and reports
Finance leadLease accounting, month-end closeFewer manual steps per lease

Timing matters. Year-end is closing season for deals and budgets. Send planning pitches in the autumn and keep the email under 80 words.

Plain example for a brokerage:

text
Subject: More tours booked at Acme Realty

Hi Jane,

Acme Realty runs most tour scheduling by phone and email. We help
brokerages your size book tours without the back and forth.

Open to a 15-minute call before year-end?

Names, domain and subject are placeholders. Use your own product and a claim you can back up.

Step 7: Split the list into three campaigns

Do not send one message to the whole list. Split by buyer group and run each segment on its own copy.

  1. Brokerages. Industry Commercial Real Estate and Real Estate Agents and Brokers, jobLevel C-Team. Principals read their own email, so keep it short and lead with agent productivity.
  2. Owners and landlords. Industry Leasing Non-residential Real Estate, jobLevel C-Team and VP, headcount 11 and up. Lead with vacancy or operating cost.
  3. Property managers. Industry Commercial Real Estate with a title filter such as "Property Management" or "Operations". Lead with hours saved.

Run the count again for each segment. The totals will not add up to the combined list, because a person can match more than one filter set. Use the combined count for planning and the segment counts for sending.

Step 8: Check where the firms sit

CRE is local. A free company count by HQ state shows where the firms are before you pick a market. POST /v1/companies/count takes the same filters as a JSON body.

bash
curl -s -X POST "https://api.leadocean.io/v1/companies/count" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"industry":["Commercial Real Estate"],"hqCountry":["US"]}' | jq '.data.facets.hq_state'

Pick two or three states and run them as separate sends. Name the local market in the first line, so the email reads as written for that state.

Step 9: Rank accounts before you send

A list of 1,477 people is too many to write by hand. Rank the accounts and send to the top group first.

  • Count people per company in the test batch. An account with three matching titles is a committee you can reach from several sides.
  • Prefer a work email marked verified. It bounces less than a catch-all address.
  • Use GET /v1/companies/{domain}/people for your top accounts. It lists the other people at one domain, so you can add missing roles.
  • Drop accounts where the only match is a Staff or Other level title.

Then send in batches of 50 to 100 and read the replies. If replies cluster on one role, move effort toward it.

Keep a note of which industry value each reply came from. After two or three batches you will know whether landlords or brokerages answer your offer, and you can drop the weaker segment from the next pull.

What you get

Output of leadocean_count_leads on 2026-10-21 for industry Commercial Real Estate, jobLevel C-Team, VP and Director, headcount 51-1000 and country US. The count includes only people whose best email is verified, catch_all_valid or catch_all.

json
{
  "total": 1477,
  "totalIsExact": true,
  "totalAll": 4141,
  "distinctCompanies": 78
}

Drop the headcount filter and the same count on the same date is 3,622 people at 894 companies. Adding Leasing Non-residential Real Estate and Real Estate Agents and Brokers raises it to 15,297 people at 4,256 companies. Adding the Finance & Accounting function to the first filter set cuts it to 61 people at 20 companies.

Response shape from the API reference (placeholder values). Search rows carry no contact points. Enrich with reveal_email for the address.

json
{
  "success": true,
  "data": [
    {
      "profile_data": {
        "profile_full_name": "Jane Doe",
        "profile_headline": "Managing Principal at Acme Realty",
        "profile_url": "https://www.linkedin.com/in/jane-doe"
      },
      "contact_data": {
        "has_email": true,
        "has_phone": false,
        "email_status": "verified",
        "email_type": "work"
      },
      "meta": { "source_ids": { "person_id": "1234567890" } }
    }
  ],
  "meta": { "count": 1, "credits": 1, "nextCursor": "CURSOR" }
}

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-key headerCheck $LEADOCEAN_API_KEY is exported and sent in the x-api-key header
429More than the plan's rate limit (5 requests a second on Free, 200 on Agency)Wait for the Retry-After seconds, then retry slower
402The 1,000 Free records are spentMove to a paid plan or reduce the pull; counts still work
Empty resultsAn enum value is not an exact string, such as "CRE" or "Commercial Property"Resolve the value with list_enum_values first
unsupported_filters on a countA filter such as fundingType or hqCity is not supported in people countsDrop it and count without it
meta.depthCapped: trueOne search stops at 10,000 rowsSplit by country or headcount band

FAQ

Is there a commercial real estate industry filter?

Yes, and it is one of several. LeadOcean has 534 industry values. CRE sits mainly across Commercial Real Estate, Leasing Non-residential Real Estate and Real Estate Agents and Brokers. Build the segment from those and check the title mix on a 25-row batch.

Why are most CRE firms so small?

Brokerages and owner entities are often one to ten people. On 2026-10-21, 3,137 of 4,079 US companies in Commercial Real Estate had 1 to 10 people. Filter by headcount if you need a committee.

How many records does this cost?

About 30: 25 for the test batch and a handful of enrichments. Counts, enum lookups and GET /v1/companies/count are free.

Can I download the whole list as a CSV?

Yes, on a paid plan. Bulk CSV export is not on Free. Solo is $97 a month and Agency is $497 a month, both with a fair-use pace instead of credits. See pricing.

Count your commercial real estate buyers free, then pull only the ones you will email

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

Get your free API key →