TL;DR
- LeadOcean finds the owners and founders of real estate companies (landlords, property managers, brokerages) and returns their work emails. It does not hold parcel or deed records.
- It takes about 20 minutes. The example run spends about 106 records: 5 to spot-check, 1 for a single lookup, 100 for the export. The export step needs Solo ($97 a month) or above.
- Sizing, filter lookups and enum lookups cost nothing. Only people you receive count.
Prerequisites
- A LeadOcean account and API key from app.leadocean.io. The free plan has no card and 1,000 records, one-off.
- The key in your shell as
$LEADOCEAN_API_KEY. Lookups and exports that reveal emails need a key with theenrichscope. Free keys get both scopes. curlandjq.
export LEADOCEAN_API_KEY="paste-your-key-here"LeadOcean is a people and company data API, not a property records database. That shapes the whole recipe.
Be clear about the data before you spend anything. A property owner of record is a name on a county deed, often an LLC. County recorders and skip-tracing tools hold that.
LeadOcean holds people and their employers. If the owner runs a real estate business, you can find that person and a deliverable work email. If the owner is a private individual behind an LLC, you start from the operating company or the person's profile instead.
LeadMagic's use case page (checked September 2026) takes a CSV of names plus a company or domain and returns emails. That works when you already have the list. The recipe below builds the list first, from filters.
Step 1: Resolve the exact industry values
Filter values are exact strings. Real estate is split across several industries, so look them up before you filter. The call is free.
curl -s "https://api.leadocean.io/v1/enums/industry" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq . | grep -i "real estate"In an MCP client, ask for the same thing.
Use leadocean_list_enum_values with name "industry" and q "real estate". Do not call any tool that spends records.On 21 October 2026 the MCP lookup returned these six values.
- Commercial Real Estate
- Leasing Non-residential Real Estate
- Leasing Residential Real Estate
- Real Estate
- Real Estate Agents and Brokers
- Real Estate and Equipment Rental Services
Three matter most for owners: the two Leasing values and Real Estate. Landlords and property companies tend to sit under the Leasing values. Agents and brokers have their own value, so leave it out when you want owners.
Step 2: Size the audience for free
Owners and founders are a seniority band, not a title. Use seniority set to owner and founder, which catches people whatever their title text says. Count first.
Use leadocean_count_leads with industry ["Leasing Residential Real Estate",
"Leasing Non-residential Real Estate", "Real Estate"], seniority ["owner","founder"],
country ["US"], facets false. Report the total and say which email statuses it counted.The same count over REST is a search with count=true as a query parameter and limit at 1. It returns meta.total and no rows.
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": ["Leasing Residential Real Estate", "Leasing Non-residential Real Estate", "Real Estate"],
"seniority": ["owner", "founder"],
"country": ["US"],
"emailStatus": ["verified", "catch_all_valid", "catch_all"],
"limit": 1
}' | jq '.meta'On 21 October 2026 the free MCP count, with its default email filter (verified, catch_all_valid or catch_all), was 119,603 mailable US owners and founders across those three industries. The same filters with no email condition match 421,148. Restricting to work addresses with status verified gave 38,697 (a count by status, not a mailable total). Narrowing to Leasing Residential Real Estate alone gave 209 mailable people.
The REST meta.total stops at 100,000, so use the MCP count for a wide audience. It returned an exact total above that on 21 October 2026. Counts move as the data refreshes monthly.
Treat the industry list as a dial. The two Leasing values are narrow and close to landlords. Adding Real Estate and Commercial Real Estate widens the list and pulls in more agents, developers and funds. Count each combination before you pick one.
Other filters help you aim. Use employeeRange set to 1-10 and 11-50 for small landlords and local property managers. Use hqState and hqCity only at search time, not in a count, because the free count tool rejects them or returns a fake total. Use title for words such as "landlord", "property manager" or "managing member" when seniority is too broad.
Step 3: Spot-check five rows
Look at real rows before you buy a hundred. A search returns thin records: name, headline, current role, company and email flags, never addresses. Each person returned counts one record.
curl -s https://api.leadocean.io/v1/people/search \
-H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
-d '{
"industry": ["Leasing Residential Real Estate"],
"seniority": ["owner", "founder"],
"country": ["US"],
"emailStatus": ["verified", "catch_all_valid", "catch_all"],
"excludeTitle": ["assistant", "intern"],
"limit": 5
}' | tee sample.json | jq '.data[] | {title: .profile_data, has_email: .contact_data.has_email, status: .contact_data.email_status}'If titles look wrong, add words to excludeTitle or narrow the industry. The person ID for the next step sits at meta.source_ids.person_id on each row.
Five rows is a cheap test. If three of them are brokers, fix the filter now. Fixing it after a 100-row export costs 100 records.
Step 4: Pull one email by person ID
Take one person from the sample and ask for the address. POST /v1/people/enrich takes exactly one of linkedin_url, email, phone or person_id. Send reveal_email to get the address back.
curl -s 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 step 3>", "reveal_email": true}' \
| jq '.data.contact_data.contact_emails'A person we hold nothing for returns a 404 and costs nothing. If you only want the best work address, GET /v2/people/email/work?person_id=... returns one address, but a call that finds nothing still costs one record.
There is no name plus domain lookup. If your starting point is a company you already know, list its people first.
curl -s "https://api.leadocean.io/v1/companies/acme.com/people?limit=10" \
-H "x-api-key: $LEADOCEAN_API_KEY" | jq '.meta'That returns thin records, one record per person. Enrich the owner by person_id.
Step 5: Export the list to CSV
Use the export for the bulk pull, not a paging loop. An export takes the same filters, a limit and a column preset. The full preset reveals emails and phones.
curl -s https://api.leadocean.io/v1/exports \
-H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
-d '{
"name": "US residential real estate owners",
"filters": {
"industry": ["Leasing Residential Real Estate"],
"seniority": ["owner", "founder"],
"country": ["US"],
"emailStatus": ["verified", "catch_all_valid", "catch_all"]
},
"limit": 100,
"preset": "full"
}' | tee export.json | jq '.data | {id, status, requested, perRow, remaining, pollAfter}'Poll every pollAfter seconds, then download when status is done.
ID=$(jq -r '.data.id' export.json)
curl -s https://api.leadocean.io/v1/exports/$ID -H "x-api-key: $LEADOCEAN_API_KEY" | jq '.data.status'
curl -s https://api.leadocean.io/v1/exports/$ID/download -H "x-api-key: $LEADOCEAN_API_KEY" -o owners.csvBulk CSV export is not on the Free plan. It is included from Solo ($97 a month) up. On Free, page the search 100 rows at a time instead. An export takes up to 50,000 rows a request and 500,000 a day. Each row costs one record. The app's Exports page does the same with a filter builder, a column picker, the record price before you start and a Download button.
What you get
The download is a .csv, one row per person, 45 columns in the full preset. Emails come back as email_1_address, email_1_status, then email_2_address and so on. Phones are phone_1_number. The request returns HTTP 202 and a job.
This is the response shape from the API reference, with placeholder values.
{
"success": true,
"data": {
"id": "<export id>",
"name": "US residential real estate owners",
"status": "queued",
"requested": 100,
"perRow": 1,
"remaining": "<records left after this reservation>",
"pollAfter": 10,
"file": null
}
}The enrich response in step 4 carries addresses under contact_data.contact_emails. This is the shape from the API reference, with placeholder values.
{
"success": true,
"data": {
"contact_data": {
"has_email": true,
"email_status": "verified",
"email_type": "work",
"contact_emails": [
{ "email": "jane.doe@acme.com", "type": "work", "status": "verified" }
]
}
}
}Read email_status before you send. catch_all_valid means the domain accepts any address but we confirmed this mailbox exists, through the provider's identity check on Microsoft 365 and Google Workspace domains.
Sort the CSV by email_1_status. Send to verified and catch_all_valid rows first, hold the plain catch_all rows for a smaller second batch, and drop anything risky, role or disposable. The audience sizes above come from the free MCP count on 21 October 2026. LeadOcean does not refund or credit back bounced emails.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing, wrong or revoked key | Re-copy the key from app.leadocean.io and re-export $LEADOCEAN_API_KEY. |
| 429 | Above your plan's rate limit per account (5 a second on Free, 200 on Agency), or an export past its daily ceiling of 500,000 rows | Wait for the Retry-After seconds. Send full pages of 100 rather than more calls. |
| 402 | The 1,000 free records are spent, or an export limit is above your remaining records | Lower limit to what GET /v1/account shows, or move to Solo ($97 a month) or Agency ($497 a month). Free records do not reset. |
| 400 or a count of 0 | A filter value outside the catalogue, such as industry: "Property" | Resolve it with leadocean_list_enum_values (or GET /v1/enums/industry) and pass the exact string. |
| 400 on an export | limit is above 50,000 rows for one export | Split by country or headcount band and run several exports. |
| 403 | The key lacks the enrich scope that a full export or reveal_email needs | Use a key with the scope, or set "preset": "search", which has no contact points. |
FAQ
Can I find the owner of a specific address?
No. LeadOcean has no parcel, deed or APN data. Use county records or a skip-tracing tool for the owner of record. If that owner runs a company, search by its domain and enrich the person.
How many records does this cost?
One record per person returned or per export row. Sizing is free. The example run is about 106 records: 5 spot-check, 1 lookup, 100 export rows.
Which emails should I send to?
Send to verified first, then catch_all_valid. Treat plain catch_all as a risk you accept on the domain. emailType set to work keeps personal addresses out of a business list.
Why not just buy a property owner list?
Owner-of-record lists give you a name and a mailing address, rarely a working email. This recipe gives you the business owner and a checked work address, with the filter visible so you can rerun it next month.
Does it work outside the US?
Yes. Change country to the ISO code, for example CA or GB. Count first, because real estate coverage varies by country.
More recipes live in the blog hub. Related guides: how to find a real estate broker's email, email finders for agency owners and how to find an agency owner's email. Plans are on pricing.
Find your first real estate owner emails free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →