Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
US Property Owner & Parcel Records Scraper icon

US Property Owner & Parcel Records Scraper

Find who owns a US property from the public assessment roll. Search 7.6M parcels by address, owner name, city, postal code or parcel id.

58 runs on Apify $0.0007 per parcel record ($0.7 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust jurisdictions, address, ownerName (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0007 per parcel record = $0.7 per 1,000

You are charged forWhenPrice
Parcel recordOne property parcel with its owner of record. Jurisdictions that cannot answer a filter are skipped and never charged.$0.0007

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.

Inputs

FieldWhat it doesType
jurisdictionsThe places this Actor covers. Pick one or more. Every extra place you tick is another lookup, and the row budget below is shared between them - so for a single address, tick only the place it is in.array
addressA street address, written the way you would write it: "2125 Bruckner Blvd". The house number has to start the address, and after that the words are matched however the local roll happens to spell them - Blvd finds BOULEVARD, Ave finds AV. Leave off apartment and unit numbers; most rolls keep those in a separate column. A street name on its own, with no number, returns the whole street.string
ownerNamePart of an owner name. Word order does not matter - "John Smith" finds a roll that writes "SMITH JOHN". Every word you type has to appear, so fewer words finds more. Useful for tracking one landlord or LLC across a whole city.string
cityA city or town name, for the places that cover more than one. In New York City this is the borough - Brooklyn, Queens, Manhattan, Bronx, Staten Island. A place that cannot honour it is skipped with a note rather than quietly handing you a different city's parcels.string
zipCodeA five-digit postal code of the PROPERTY, not of the owner's mailing address. Connecticut, Vermont and Cambridge publish no property postal code at all - only the owner's - so those three are skipped with a note when you use this rather than answering with the wrong one.string
parcelIdsLook up parcels directly by their identifier. Every place uses its own and calls it its own thing: a New York BBL, a Cook County PIN, a Philadelphia OPA account number, a Vermont SPAN, a Montana geocode, a Washington DC square-suffix-lot, a Texas property id. Up to 200 per run. Type a DC SSL with single spaces - "1077 0130" finds the record however the roll pads it. Ids that do not look like they belong to a place you ticked are skipped there with a note.array
maxItemsHow many parcels to return in total, across every place you ticked. The budget is shared between them. Keep it low while you are trying things out - you pay per row. Hard ceiling 5,000.integer
proxyUrlsOptional. Leave it empty unless you want the requests to go through proxy servers of your own. Write each one as http://user:pass@host:port.array

What you get

A structured dataset — each result includes fields like:

jurisdictionNameownerNamepropertyAddresspropertyCitypropertyStatepropertyZipparcelIdpropertyUseyearBuiltassessedTotalUsdmarketValueUsdlastSaleDatelastSalePriceUsdrecordUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

US Property Owner & Parcel Records Scraper: who owns a property, from the public assessment roll

Pick one or more of thirteen US jurisdictions and search by street address, owner name, city, postal code or parcel id, and you get one row per parcel off the public assessment roll: the owner of record, the mailing address where the roll has one, the property address and use, areas, year built, assessed value, the last sale and a link back to the public record. That is about 7.6 million parcels, each read from the government host that publishes it, with nothing joined from anywhere else. It is not national coverage and it is not a deed search: thirteen places only, rolls that lag recent sales, and no chain of title, mortgage or lien.

InputJurisdictions, plus an address, owner name, city, postal code or parcel ids
OutputOne row per parcel
Ceiling5,000 parcels and 200 parcel ids per run
Account neededNone
Price$0.70 per 1,000 parcels, flat on every plan

🔍 What US Property Owner & Parcel Records Scraper does

Your filters go to each roll's own host, and every row that comes back is checked again against what you asked before it is charged. A record that does not match, or has no owner name on it, is dropped for free, and one ROWS_DROPPED row counts them.

Address search forgives the roll's spelling: "Blvd" finds BOULEVARD and "Ave" finds AV. The house number has to come first, and a street name with no number returns the whole street. Owner search ignores word order, so "John Smith" finds a roll that writes "SMITH JOHN", but every word you type has to appear.

A place that cannot answer one of your filters is skipped with a free FILTER_UNSUPPORTED row rather than answering a different question. Four of the rolls keep several years in one table, so each run asks them for their newest year instead of assuming it.

What is covered, counted on the live rolls in September 2026:

WhereParcelsPublished byThe owner name is
New York City, NY858,284NYC Department of City Planning (PLUTO)the assessment roll
Connecticut, statewide1,347,910State of Connecticut Office of Policy and Managementthe assessment roll
Cook County, IL1,863,562Cook County Assessorthe taxpayer of record
Philadelphia, PA583,779City of Philadelphia Office of Property Assessmentthe assessment roll
Collin County, TX479,364Collin Central Appraisal Districtthe appraisal roll
Williamson County, TX291,076Williamson Central Appraisal Districtthe appraisal roll
Norfolk, VA74,329City of Norfolk Office of the Real Estate Assessorthe assessment roll
Cambridge, MA30,156City of Cambridge Assessing Departmentthe assessment roll
Montana, statewide921,301Montana State Library, from Department of Revenue datathe appraisal roll
Wake County, NC438,403Wake County Department of Tax Administrationthe assessment roll
Vermont, statewide344,019Vermont Center for Geographic Informationthe grand list
Nashville and Davidson County, TN287,112Metro Nashville Assessor of Propertythe assessment roll
Washington, DC137,400DC Office of Tax and Revenue, via DC GISthe assessment roll

That is the whole list. Most US counties publish nothing machine-readable, and plenty of those that do blank out the owner column: New Jersey publishes 3.5 million parcels that way.

Rolls differ, so a column one city publishes another simply does not have. Where a roll has no value, the field is null:

WhereOwner mailing addressAssessed or market valueYear builtLast saleCoordinates
New York City, NYnot publishedassessedyesnot publishedyes
Connecticutyesbothyesdate and pricenot published
Cook County, ILyesnot publishednot publishednot publishednot published
Philadelphia, PAyesbothyesdate and pricenot published
Collin County, TXyesbothyesdate onlynot published
Williamson County, TXyesassessedyesnot publishednot published
Norfolk, VAnot publishedassessedyesdate and pricenot published
Cambridge, MAnot publishednot publishedyesnot publishedyes
Montanayesassessednot publishednot publishednot published
Wake County, NCyesassessedyesdate and pricenot published
Vermontyesassessednot publishednot publishednot published
Nashville, TNyesbothnot publisheddate and pricenot published
Washington, DCyesassessednot publisheddate and pricenot published

📥 What you give it

{
  "jurisdictions": ["nyc"],
  "address": "2125 Bruckner Blvd",
  "maxItems": 25
}
FieldIf you leave it outWhat it is
jurisdictionsa free sample rowOne or more of nyc, connecticut, cook-county-il, philadelphia, collin-county-tx, williamson-county-tx, norfolk-va, cambridge-ma, montana, wake-county-nc, vermont, nashville-tn and washington-dc.
addressno address filterA street address as you would write it, house number first, without the apartment or unit.
ownerNameno owner filterPart of an owner name. Every word has to appear, in any order, so fewer words find more.
cityno city filterA city or town, for the places that cover more than one. In New York City it is the borough.
zipCodeno postal filterThe property's five-digit postal code, not the owner's. Connecticut, Vermont and Cambridge publish none, so they are skipped with a note.
parcelIdsnoneUp to 200 local ids: a New York BBL, a Cook County PIN, a Philadelphia OPA account, a Vermont SPAN, a Montana geocode, a DC square-suffix-lot or a Texas property id. Type a DC lot with single spaces, such as 1077 0130.
maxItems25Rows across every place you ticked, 1 to 5,000, shared evenly: thirteen places and 25 rows is about two each.
proxyUrlsemptyOptional, only if you want the requests to go through servers of your own, as http://user:pass@host:port.

A run needs at least one place and something to search on. Without both, it returns the free sample row.

📤 What you get back

A real row from a real run:

{
  "ok": true,
  "charged": true,
  "recordType": "parcel",
  "jurisdiction": "nyc",
  "jurisdictionName": "New York City, NY",
  "state": "NY",
  "ownerNameSource": "assessment roll",
  "parcelId": "2038060070",
  "parcelIdType": "BBL (borough-block-lot)",
  "ownerName": "LAURA IRIS VALENTIN REVOCABLE TRUST",
  "coOwnerName": null,
  "ownerMailingAddress": null,
  "ownerMailingCity": null,
  "ownerMailingState": null,
  "ownerMailingZip": null,
  "propertyAddress": "2125 BRUCKNER BOULEVARD",
  "propertyCity": "Bronx",
  "propertyState": "NY",
  "propertyZip": "10472",
  "unit": null,
  "propertyUse": "Mixed residential and commercial buildings",
  "buildingDescription": "Building class S4",
  "legalDescription": null,
  "landAreaSqFt": 2627,
  "buildingAreaSqFt": 5003,
  "livingAreaSqFt": null,
  "unitsTotal": 5,
  "unitsResidential": 4,
  "buildingCount": 1,
  "bedrooms": null,
  "bathrooms": null,
  "stories": 2,
  "yearBuilt": 1929,
  "assessedLandUsd": 182700,
  "assessedBuildingUsd": null,
  "assessedTotalUsd": 359550,
  "marketValueUsd": null,
  "lastSaleDate": null,
  "lastSalePriceUsd": null,
  "zoning": "R5",
  "latitude": 40.8275484,
  "longitude": -73.8521013,
  "rollLabel": "PLUTO 26v2",
  "dataPublisher": "NYC Department of City Planning (PLUTO)",
  "recordUrl": "https://data.cityofnewyork.us/resource/64uk-42ks.json?bbl=2038060070",
  "scrapedAt": "2026-09-30T02:38:03.813Z"
}
FieldWhat it is
ownerName, coOwnerNameThe name exactly as the roll writes it, so "SMITH JOHN A & MARY B" and "Smith, John" are both normal.
ownerNameSourceassessment roll, appraisal roll, Vermont's grand list, or Cook County's taxpayer of record, which is not the same as a deeded owner.
ownerMailingAddress, ownerMailingCity, ownerMailingState, ownerMailingZipWhere the roll sends the bill, next to the property address.
parcelId, parcelIdTypeThe local id and what kind it is. It is stable, so it is the key to run against again.
assessedTotalUsd, marketValueUsdThe assessed figure, which in most places is not the market price, and a market value where the roll has one.
lastSaleDate, lastSalePriceUsdThe last transfer the roll records.
rollLabelWhich roll the row came from, such as "PLUTO 26v2" or "Grand list 2025".
propertyCityIn New York City, the borough.
recordUrlThe public record the row was read from. Open it and you see the same parcel.

🧾 Reading the output

RowHow to spot itCharged
A parcelcharged: true, recordType: "parcel"yes
The sample row_sample: true, charged: false. Only when the run had no place or nothing to search onno
A diagnostic row_diagnostic: true, charged: false, and an errorCodeno

The sample row carries recordType: "parcel" as well, so filter on charged, not on recordType.

errorCodeWhat happened
NO_RESULTSNothing on that roll matched.
FILTER_UNSUPPORTEDThat place cannot answer one of your filters, so it was skipped.
ROWS_DROPPEDRecords came back that did not match, had no owner name or repeated a parcel. The row gives the counts.
QUERY_REFUSEDThat roll would not run the query.
SERVER_ERROR, NETWORKThe government host did not answer. They go down for maintenance now and then.
TIME_BUDGETThe run ran out of time before it reached that place.
BAD_INPUTA jurisdiction that is not on the list.

▶️ How to run it

1. Open US Property Owner & Parcel Records Scraper and click Try for free. 2. Tick the places in Where to search. For one address, tick only the place it is in. 3. Fill in one of Street address, Owner name, City or town, Postal code or Parcel ids. 4. Set Maximum rows, remembering it is shared between the places you ticked. 5. Click Start, then export the dataset as CSV, JSON or Excel.

💰 How much does it cost?

$0.70 per 1,000 parcels, flat on every Apify plan.

Not charged: the sample row, every diagnostic row, records dropped for not matching, a parcel that turns up twice in one run, and a place skipped because it cannot answer your filter. The most one run returns, 5,000 parcels, comes to $3.50.

💡 What people use it for

  • Finding out who actually owns a building when the listing, the letterbox and the management company all say something different.
  • Following one landlord or LLC across a whole city by owner name.
  • An absentee-owner list: search a city or postal code and set the property address against the owner's mailing address, which ten of the thirteen rolls publish.
  • Checking a portfolio against the record: feed in the parcel ids and compare ownerName after each new roll.

🚧 What it does not do

  • Anywhere else. Thirteen places, and a parcel outside them is not in here.
  • Deeds. No chain of title, no mortgage, no lien, no document image.
  • Last month's sale. Rolls lag reality, and a few are a full cycle behind. rollLabel says which roll a row came from.
  • One year for Vermont. Each town is on the year it last filed, from 2026 down to 2018, and about one parcel in eight has no grand list entry matched yet, so it has no owner and is dropped.
  • Montana addresses. Owner and value are on 99% of its parcels, but only about half carry a street address, so an address search misses land an owner search finds.
  • Values in Cook County or Cambridge. Cook County publishes the owner and the two addresses only; Cambridge publishes building detail but no value.
  • Tidy condominiums. Cambridge has a building record whose owner reads "Condominium Building - See Individual Unit Records", and other rolls repeat the address once per unit.
  • One answer per address. A multi-tenant address returns every parcel at it: "2300 W Plano Pkwy" is five.
  • Contact data. No emails, phones or dates of birth, and nothing is joined to anything. A phone or email that ever turned up in a roll column would read [removed].

🧭 Which US property scraper do you need?

If you wantUse
Who owns a parcel, off the public rollThis one
Homes on Zillow with price, tax and price historyZillow Scraper
Listings on Realtor.com with the agent and brokerRealtor.com Scraper
Building permits from 14 US cities and countiesUS Building Permits Scraper

❓ Questions people ask

Does it cover the whole United States? No. Thirteen jurisdictions across eleven states and the District of Columbia, three of them whole states. The list is above.

Is this the deed or the tax roll? The tax roll. It tells you who to look up at the recorder's office and not much more.

How current is the data? As current as each roll. Read rollLabel, and in Vermont read the year on the row before acting on an owner.

What if I search a postal code in a place that has none? That place is skipped with a free FILTER_UNSUPPORTED row. It does not guess at parcels that might be in that postal code.

Can I use the owner names however I like? The government publishes them on purpose, but some places regulate what they may be used for, and that call is yours. Every row carries recordUrl so you can read the original.

Do I need an API key or an account? No.

🆘 If something breaks

Open the Issues tab on the actor page. Include the run ID, the places you ticked and what you searched for.