Property Owner Records
Pricing
from $17.00 / 1,000 parcel rows
Property Owner Records
Owners of record from public county assessor rolls in NC, NY, FL, CO, AR, and WI: look up by address, parcel ID, owner name, or ZIP. One row per parcel with owner, tax roll mailing address, values, and last sale where published. No phones, no emails.
Pricing
from $17.00 / 1,000 parcel rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 hours ago
Last modified
Categories
Features
Share
Give a US street address, a parcel ID, an owner name, or a ZIP code, and get the owner of record for each parcel from public county tax rolls: owner name, the mailing address on the roll, the property address, assessed and market values, land use, and the last sale where the county publishes it. It covers North Carolina, New York (38 counties), Florida, Colorado, Arkansas, and Wisconsin, about 29 million parcels. You pay per parcel row; misses and summary rows are free. Mamba Labs pays the platform costs of the run.
It returns no phone numbers and no email addresses, and it uses no data broker or skip tracing service. Every value is what the county roll publishes.
Features
- Four ways in: street addresses, parcel IDs, owner names, or property ZIP codes, in one run.
- An address is placed by the US Census geocoder, and the actor keeps the nearby parcel whose roll address has the same house number and street.
- Owner name search finds every parcel a person, company, trust, or agency owns in a state or county.
- A ZIP code export lists every parcel in the ZIP, up to the limit you set.
value_noteson every row says what the value fields mean in that state's roll.- A parcel already returned earlier in the run is not charged again.
How the data is read
The actor queries six public statewide parcel layers that state agencies publish from county assessor rolls, plus the US Census geocoder for addresses. All are official government services that answer with no login and no key. An address goes to the US Census geocoder first. Requests go straight from the run to these servers, with no proxy, and the actor calls no other developer's actor.
| State | Source | Parcels | Mailing address | Sale data |
|---|---|---|---|---|
| NC | NC OneMap statewide parcels, all 100 counties | 5.9 million | yes, one line | sale date |
| NY | NYS Tax Parcels Public, the 38 counties that allow public sharing, including the 5 New York City boroughs | 3.8 million | yes | no |
| FL | Florida Department of Revenue tax roll, all 67 counties | 11.0 million | yes | price and month |
| CO | Colorado Public Parcels, the counties that share publicly | 2.6 million | yes | date and price |
| AR | Arkansas GIS Office statewide parcels | 2.1 million | no | no |
| WI | Wisconsin Statewide Parcel Map Database V12 | 3.6 million | yes, one line | no |
Parcel counts were read on 2026-11-08. Each state refreshes its layer on its own schedule, from monthly to yearly; record_as_of says the roll year or update date where the layer publishes one.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
addresses | array | Full US street addresses with city and state, one per entry, such as 1 E Edenton St, Raleigh, NC 27601. The US Census geocoder places each one and the actor returns the parcel at that point. The state comes from the address, so the state field is not needed. An address it cannot place, or one outside the covered states, is a free row. | |
parcel_ids | array | Parcel numbers as the county writes them. Needs state. Add county, because the same number can repeat in two counties. | |
owner_names | array | Owner names as the roll writes them, usually last name first for a person (SMITH JOHN) and the full name for a company (CITY OF RALEIGH). Needs state. Matches names that start with the text unless owner_match is contains. | |
zip_codes | array | 5 digit property ZIP codes. Returns every parcel in the ZIP up to max_results_per_lookup. Needs state. | |
state | string | Two letter state for parcel_ids, owner_names, and zip_codes: NC, NY, FL, CO, AR, or WI. | |
county | string | Optional county name, such as Wake or St. Lawrence, to narrow parcel_ids, owner_names, and zip_codes. Does not apply to addresses. | |
owner_match | string | starts_with | starts_with (default): the owner name starts with your text. contains: the text appears anywhere in the name; slower, so add a county. |
max_results_per_lookup | string | 25 | Parcel rows per address, parcel ID, owner name, or ZIP, from 1 to 5000. Default 25. |
max_charge_usd | string | Optional. The run stops before a charge that would pass this amount. Summary rows are always returned. |
Output
| Field | Type | What it holds |
|---|---|---|
row_type | string | One of: parcel, lookup_summary, run_summary. run_summary is the one free row written when the input is refused. |
input | string | The address, parcel ID, owner name, or ZIP code that produced this row. |
lookup_kind | string | address, parcel, owner, or zip. |
state | string | Two letter state of the parcel layer read. |
county | string | County as the roll names it. |
parcel_id | string | The county parcel number as the roll writes it. |
alt_parcel_id | string | A second ID the roll publishes, such as a state wide or account number. |
owner_name | string | Owner of record as the roll writes it, often last name first. A company, trust, or agency appears as named. |
owner_name_2 | string | A second owner line, where the roll has one. |
owner_mailing_address | string | The mailing address on the tax roll, joined in one line as published. Not a home address unless the roll says so. Empty for Arkansas, whose layer has none. |
mailing_city | string | Where the roll keeps it as its own field. |
mailing_state | string | Where the roll keeps it as its own field. |
mailing_zip | string | Where the roll keeps it as its own field. |
site_address | string | The situs address of the parcel. |
site_city | string | City or municipality the roll records for the parcel. |
site_zip | string | ZIP of the parcel. |
assessed_value | number | Assessed value in USD as the roll publishes it. See value_notes. |
market_value | number | Market, just, or appraised value in USD as the roll publishes it. See value_notes. |
land_value | number | Land value in USD. |
improvement_value | number | Building and improvement value in USD. |
value_notes | string | What the value fields mean in this state's roll. |
land_use | string | Use code or description from the roll. |
year_built | integer | Where the roll publishes it. |
acres | number | Parcel area in acres. |
last_sale_date | string | YYYY-MM-DD, or YYYY-MM for Florida, where the roll publishes it. |
last_sale_price | number | USD, where the roll publishes it. |
record_as_of | string | Roll year or the date the state last updated this record. |
source | string | The public layer this row came from. |
matched_address | string | For an address lookup: the address the US Census geocoder matched. |
more_matches | boolean | True when the search stopped at max_results_per_lookup and more parcels match. |
matches_read | integer | Summary rows: parcels read for this lookup. |
rows_returned | integer | Summary rows: parcel rows written and charged for this lookup. |
duplicates_skipped | integer | Summary rows: parcels already returned earlier in the run, not charged again. |
row_status | string | ok, or why this row carries no data: no_results, no_change, partial, blocked, or error. |
error_reason | string | Why the row is not ok. A refused input reads input_invalid: followed by what to fix. |
billable_events_json | string | What this row was billed as, for example {"parcel-row":1}. {} means free. |
scraped_at | string | When the row was written, UTC. |
Pricing
Pay per event. Summary rows and a refused input are free.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
parcel-row, one parcel record | $0.02 | $0.019 | $0.018 | $0.017 |
apify-actor-start, once per run (one per GB of memory; the default 256 MB is one) | $0.009 | $0.009 | $0.009 | $0.009 |
Per 1,000 rows of parcel-row: $20.00 on the free plan, $17.00 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 75 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.
Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
A lookup with no match, an address outside the six states, and a request a source refuses are free rows. A run that is mostly misses stops after 5 free rows plus 50 per parcel row, or after 10 seconds of lookups with no parcel plus 30 seconds per parcel row, and says how many lookups it did not read.
Usage examples
Look up owners for a list of addresses. Put the addresses in addresses, one per entry, with city and state. No state field is needed.
Find every parcel an owner holds in a county. Set state to FL, county to Orange, and owner_names to ["SMITH JOHN"]. Rolls usually write people last name first; companies appear as named.
Export a ZIP code. Set state to NC, zip_codes to ["27601"], and max_results_per_lookup to 2000.
Clay. Number and on or off inputs are text fields, which is what Clay sends. A list input takes a JSON list, so put the address column inside a one item list.
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-property-owner-records exposes this actor to Claude and other MCP clients.
Error handling
| Case | What you get |
|---|---|
| Missing or unreadable input | One free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start |
| The geocoder cannot place an address | One free lookup_summary row, row_status no_results |
| The address is outside the six states | One free row naming the state |
| No parcel matches | One free row, no_results |
| A source refuses a request (HTTP 403 or 429) | One free row, row_status blocked. The actor waits and does not try that request again in the run |
| A source is down | Tried up to 2 more times, then one free error row |
| The run is close to its timeout | The actor stops starting new work 90 seconds before the timeout and delivers what it has |
Limitations
- Six states only. Other states return a free row. New York covers 38 of its 62 counties, because the other counties have not allowed the state to publish their parcels.
- Arkansas publishes no owner mailing address in its statewide layer, so those fields are empty there.
- Colorado includes only counties that share publicly, and some publish 0 for values.
- Owner names and addresses are written as each county writes them. Owner name search matches the start of the name as the roll writes it, usually last name first; set
owner_matchtocontainsto match anywhere, which is slower on large states. - An address lookup reads the parcels within 40 meters of the Census point, then within 150 meters, and keeps the ones whose roll address starts with the same house number and holds the same street name. A parcel the roll files under another number, such as a corner lot or a building on a block range, is a free miss. A condominium address can return several unit parcels.
- Florida's layer refuses map queries, so a Florida address is matched on the roll address inside its county and takes 15 to 30 seconds. In the largest counties, such as Miami-Dade, the search can pass 35 seconds; the actor then returns a free error row and suggests the parcel ID or owner name instead.
- The roll's owner can lag a recent sale until the county's next update.
- Owner name and ZIP searches on Florida and New York take 5 to 15 seconds each.
Data use
These rolls are public records published by state agencies. The owner name and mailing address are the ones the county uses for tax notices. Use them under the laws that apply to you; for example, mailing and calling rules for marketing still apply to anything you do with the names.
Mamba Labs actor suite
Built by Mamba Labs.