US Property Records Export & Owner Lookup (County Assessor)
Pricing
from $0.02 / property row (export)
US Property Records Export & Owner Lookup (County Assessor)
Export every property in a US county, state or ZIP from the official assessor roll — owner, mailing address, absentee flag, values, last sale, year built — or look up by address, parcel or owner. 511 counties.
Pricing
from $0.02 / property row (export)
Rating
0.0
(0)
Developer
ScrapeBench
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Pain points
- Assessor rolls are public but every county publishes differently: the 27 feeds this actor reads come as ArcGIS layers, a Socrata catalogue, a Carto SQL endpoint, and zipped bulk files of up to 212 MB.
- An absentee-owner list built by comparing the mailing and property city goes wrong silently: rural Wisconsin records the township ('TOWN OF PERRY') where the owner writes the post town ('MT HOREB'), which flagged 198 of 300 owner-occupied parcels as absentee in our first test.
- A column named 'owner' is not always the current owner: in Cook County it matched the buyer of a sale since 2023 on 3 of 250 parcels, while the tax-bill name matched on 201 (measured 2026-09-29).
What we solve
- One input, one schema: type a state, county or ZIP and get the whole filtered roll back as one table, whichever system the county runs.
- Absentee owners classified conservatively: out of state, out of city, same city at another address, owner-occupied — and 'unknown' when the roll gives nothing to compare, with the reason on every row.
- Each county's columns chosen by count against its own sales, and every row says what its values mean (market, assessed, capped) in field_notes.
Summary
Pull an official property list for any covered US county, state or ZIP in one run: owner name, owner type (individual, company, trust, government), owner mailing address, absentee tier, parcel ID, property address, market and assessed value, land and improvement values, property use, year built, building size, lot size, and the last sale with its price and date — plus every recorded sale and prior-year values where the county publishes them. Narrow the export with ready-made lists (absentee owners, out-of-state owners, company owners, recent buyers, long-term owners, vacant land) or your own filters on ZIP, city, value, property type, sale date and year built. Run a free count first to see how many properties match and what the export will cost. Or look properties up one by one — by street address, parcel ID or owner name — with no limit on how many per run. Data comes straight from 27 official assessor and state tax-roll feeds covering 511 counties in 21 states.
Who it's for
- Real-estate investors and wholesalers building absentee-owner and out-of-state-owner mailing lists
- Property managers and home-service businesses prospecting landlords in a ZIP or city
- Proptech and data teams loading official owner and value fields for a whole county
- Analysts and appraisers comparing assessed values and sales across counties
How to use
Set the input, run the actor, and collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API). Example input:
{"areas": ["85323"],"preset": "absentee_owners","maxResultsPerArea": 100}
See Inputs below for every available field.
What you get
One row per record:
| Field | Description |
|---|---|
parcel_id | The county's own parcel / account / PIN number |
situs_address, situs_city, situs_zip | The property's address |
owner_name | Owner of record as the roll prints it (null where state law withholds names: California, New Jersey, and a few counties) |
owner_type | individual, company, trust or government — classified from the name |
mailing_address, mailing_city, mailing_state, mailing_zip | Where the owner's tax mail goes |
absentee_tier / absentee_owner | out_of_state, out_of_city, same_city_diff_address, owner_occupied or unknown, with absentee_basis saying why; absentee_owner is the yes/no version |
market_value, assessed_value, land_value, improvement_value, taxable_value | The county's values; field_notes says what each one means for that county |
property_class, property_class_desc | The county's use code and its description |
year_built, building_sqft, lot_sqft, lot_acres, bedrooms, bathrooms, units | Building facts where the county publishes them |
last_sale_date, last_sale_price | The last recorded sale (no price in non-disclosure states such as Texas) |
sale_history, tax_history | Every sale the roll carries (with buyer, seller and deed number where published) and prior-year values |
county, state, county_fips | Where the parcel is, with the 5-digit Census county code |
source, data_as_of, field_notes | Which official roll the row came from, when it last changed, and what its fields mean |
query, query_type, input_index, status, error_class, retry | Which input produced the row; lookups that miss come back as free rows saying why and whether to retry |
Sample:
{"query": "85323","query_type": "export","state": "AZ","county": "Maricopa","county_fips": "04013","parcel_id": "101-01-026","situs_address": "810 S 114TH DR","situs_city": "AVONDALE","situs_zip": "85323","owner_name": "J AND L AZ PROPERTIES LLC","owner_type": "company","mailing_address": "5001 142ND LN NW","mailing_city": "RAMSEY","mailing_state": "MN","mailing_zip": "55303","absentee_tier": "out_of_state","absentee_owner": true,"market_value": 331000,"assessed_value": 169254,"tax_year": 2027,"year_built": 2008,"building_sqft": 1804,"lot_sqft": 6722,"last_sale_date": "2013-03-01","last_sale_price": 128000,"source": "Maricopa County Assessor"}
Inputs
| Field | Required | Type | Default | Description |
|---|---|---|---|---|
areas | no | array | ["Cook, IL"] | One per line. A state ('FL' or 'Florida'), a county ('Miami-Dade, FL', 'Cook County, Illinois', 'IL/Cook') or a 5-digit ZIP code ('85323'). A ZIP becomes its county plus a ZIP filter. An area we don't cover returns a free notice, never an error. |
area | no | string | — | Same as one line of 'Areas to export'; kept for saved tasks and API callers that send one value. |
preset | no | string | "absentee_owners" | A ready-made filter for common lead lists. Any filter you set below overrides the preset's value for that filter. Absentee presets leave out government owners. |
countOnly | no | boolean | false | Don't export: return, per area, how many properties match and the estimated cost of exporting them. Free. Counts are exact for ZIP/city/value filters; owner-side filters (absentee, owner type) are applied during export, so the preview shows the count before them. |
maxResultsPerArea | no | integer | 100 | Cap on rows returned for EACH area line (not per run), so adding areas never cuts off the later ones. 0 = no cap: the whole filtered area, bounded only by your run's max charge and time. |
zipCodes | no | array | [] | Only properties in these ZIP codes. |
cities | no | array | [] | Only properties whose situs (property) city is one of these, e.g. 'OAK LAWN'. Case does not matter. |
propertyUse | no | array | [] | Words to match in the county's property-use description ('single family', 'condo', 'vacant', 'commercial', 'multi') or a class-code prefix. Matches if ANY entry matches. |
ownerTypes | no | array | [] | Keep only these owner types, one per line: individual, company (LLC, Inc, LP, ...), trust, government. Classified from the owner name. |
absentee | no | array | [] | Keep only these occupancy tiers, one per line: out_of_state, out_of_city, same_city_diff_address, owner_occupied, unknown. Compares the owner's mailing address with the property; out_of_state and out_of_city are the classic absentee-owner lists, and unknown means the roll has no mailing address to compare. |
minValue | no | integer | — | Market value, or assessed value where the county publishes no market value. |
maxValue | no | integer | — | Market value, or assessed value where the county publishes no market value. |
soldAfter | no | string | — | YYYY-MM-DD. Keeps properties whose last recorded sale is on or after this date (month precision where the county records only the month). |
soldBefore | no | string | — | YYYY-MM-DD. Keeps properties whose last recorded sale is before this date. |
minYearBuilt | no | integer | — | Year built, where the county publishes it. |
maxYearBuilt | no | integer | — | Year built, where the county publishes it. |
lookups | no | array | [] | E.g. '1001 Preston St, Houston, TX 77002', 'IL/Cook/17-09-100-001-0000', 'FL/Miami-Dade/ACME HOLDINGS LLC'. No limit on how many per run. |
addresses | no | array | [] | Street addresses with city, state and preferably ZIP. Same as 'Lookups', but always read as addresses. |
parcelLookups | no | array | [] | STATE/County/ParcelID, e.g. 'IL/Cook/17-09-100-001-0000'. A bare ID works with the State and County hints below. |
ownerLookups | no | array | [] | STATE/Owner Name or STATE/County/Owner Name. Matches names that START with what you type. Returns every parcel found plus a free portfolio summary row. |
address | no | string | — | One address; kept for API callers that send one value. |
parcelLookup | no | string | — | One parcel lookup. |
ownerLookup | no | string | — | One owner lookup. |
stateHint | no | string | — | Two-letter state for bare parcel IDs or owner names, e.g. 'IL'. |
countyHint | no | string | — | County for bare parcel IDs or addresses, e.g. 'Cook' (use with State hint). |
maxResultsPerOwner | no | integer | 50 | Cap on properties returned for EACH owner lookup. |
includeHistory | no | boolean | true | Add every recorded sale (with buyer and seller where published) and prior-year values to each row. Turn off for a smaller, flatter dataset. |
listCoverage | no | boolean | false | Return one free row per county/state source this actor reads, with the fields each one publishes. Nothing else runs. |
proxyConfiguration | no | object | {"useApifyProxy": false} | Optional. The assessor feeds answer direct requests; enable a proxy only if a run returns a 'blocked' notice. |
Pricing (Pay Per Event)
You pay per result (export-row) — no charge for empty runs. Example: 1000 absentee-owned properties in one ZIP at $0.02/result ≈ $20.00.
Lookups (address, parcel or owner) are billed per property found at $0.045 (event property-record); misses, uncovered counties and the owner-portfolio summary row are free. Use countOnly to see the count and estimated cost of an export before running it. Apify platform usage is billed separately.
Use cases
- Direct mail to absentee owners — export the out-of-state owners of single-family homes in the ZIPs you farm, with the mailing address to send to.
- Landlord prospecting — list every company- and trust-owned property in a county for a property-management or insurance pitch.
- Recent-buyer marketing — pull properties sold in the last 12 months in a county, with the sale price and date.
- Owner portfolios — look up an LLC by name and get every parcel it holds in the covered rolls, with a free summary row of parcel count and total value.
- Due diligence in bulk — resolve a list of addresses or parcel IDs to the official owner, values and last sale, with a reason on every miss.
Why this actor
- Export a whole county, state or ZIP in one run, filtered to the list you need — not one address at a time.
- A free count-only preview tells you how many properties match and what the export costs before you pay for it.
- Year built, building size and (where published) bedrooms come with the owner and value fields: 7 of 7 matched addresses in our head-to-head test carried year built and square footage.
- Absentee owners are classified from the mailing address with the reason written on each row, and 'unknown' instead of a guess when the roll has no mailing address.
- Straight from 27 official assessor and state tax-roll feeds; each row names its source and what its values mean.
Limitations & updates
Covers the counties listed above, not the whole country; an area outside coverage returns a free notice. Fields differ by county because rolls differ: no owner names in California and New Jersey, no sale prices in non-disclosure states, and some counties publish no building facts — field_notes on every row explains its county. Values are the county's own (assessed values are capped in California, Arizona and elsewhere, and are not market value). Harris County is read from a 212 MB bulk file, so its first request in a run takes about two minutes. The absentee tier and owner type are computed from the roll's own text and can be wrong where the roll is; verify before you act on a single record. Not for FCRA-regulated uses (tenant, employment, credit or insurance screening); no phone numbers, emails or skip tracing.
FAQ
Which counties are covered?
511 counties in 21 states, from 27 official feeds (counted 2026-09-29). Whole states: Florida, North Carolina, Wisconsin, Montana, Connecticut, Arkansas, New Jersey, New York (38 of 62 counties, including all of New York City) and Minnesota (57 of 87). Single counties: Maricopa AZ, Cook IL, Harris TX, Philadelphia PA, Los Angeles, Alameda and Sacramento CA, Denver CO, Fulton GA, Marion IN, Davidson TN, Franklin, Cuyahoga and Hamilton OH, Hennepin MN, Oakland MI, Salt Lake UT, and the City of Detroit (the only part of Wayne County covered). Set listCoverage to get the full list with the fields each source publishes, free.
Why is owner_name empty for some counties?
Because the county does not publish it. California counties withhold owner names from their public rolls, and New Jersey blanks them on every row under Daniel's Law. Those rows still carry the property and (except in Sacramento) its values, and in Alameda, Sacramento and New Jersey the owner's mailing address; field_notes says which.
How is 'absentee' decided?
By comparing the owner's mailing address with the property: a different state is out_of_state; a different city is out_of_city; the same street address is owner_occupied. Where a county publishes no property city, a mailing ZIP outside the county counts as out_of_city. When the roll has no mailing address, the answer is unknown — never a guess.
Why is there no sale price in Texas, Montana or North Carolina?
Texas and Montana do not make sale prices public, and North Carolina's statewide parcel feed does not carry them. You still get the sale or title-transfer date where the roll records it.
Can I see how many rows an export will return before paying?
Yes. Turn on countOnly: each area returns a free row with the matching count and the estimated cost. Counts are exact for ZIP, city and value filters; owner filters such as absentee are applied during the export, so the preview for those shows the count before them.
How do lookups work?
Put addresses, parcels or owner names in 'Lookups', one per line, and each is recognised automatically: '1001 Preston St, Houston, TX 77002', 'IL/Cook/17-09-100-001-0000', or 'FL/Miami-Dade/ACME HOLDINGS LLC'. There is no limit per run. Every miss comes back as a free row with error_class (no_match, not_covered, source_error, ...) and retry (later, with_changes, never).
Can I get the data myself for free?
Yes — every source is a public feed, and for one county once, downloading it yourself is reasonable. This actor is for when you want several counties in one table, filtered to a lead list, with owner types and absentee tiers worked out, on demand or on a schedule.
How fresh is the data?
As fresh as each county's feed: most ArcGIS and Socrata feeds are read live at run time, and bulk files are downloaded fresh on every run. data_as_of carries the source's own last-changed date where it publishes one.
Which actor to choose
Related property data in the same suite:
- Zillow & Redfin Property Data Scraper — You want the listing side of an address — Redfin Estimate, listing price history, photos and agent — rather than the county roll.
Guides & use cases
Written up on scrapebench.dev — the bench that runs and verifies this actor against the live source every night:
- How-to: How to run US Property Records Export & Owner Lookup (County Assessor)
- Use case: Build an Absentee Owner Mailing List for a ZIP Code
- Use case: Look Up Who Owns a List of Property Addresses
More actors, coverage and nightly verification results: scrapebench.dev
Works with AI assistants (MCP)
Callable as an MCP tool, so Claude, Cursor, VS Code Copilot and other MCP clients can run it directly. Grab the config from the MCP tab on this page — Apify hosts the server and keeps that snippet current, and OAuth signs you in on first connect, so no API token goes in your config file.
Then just ask:
"List the absentee owners of properties in ZIP 85323 (Avondale, Arizona), with their mailing addresses."
Add countOnly first to see how many properties match and what the full export would cost. Runs started this way bill exactly like any other run.