LA County Parcel Data (Assessor Roll)
Pricing
from $0.03 / 1,000 la county parcel records
LA County Parcel Data (Assessor Roll)
LA County assessor parcel roll (public data, 2.43M parcels): AIN/APN, situs address, use class & code, year built, units, square footage, and the full assessment roll values with exemptions for every parcel.
Pricing
from $0.03 / 1,000 la county parcel records
Rating
0.0
(0)
Developer
Wenhao Yang
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
44 minutes ago
Last modified
Categories
Share
LA County Parcel Data - Assessor Roll
Low cost
From $0.00005 per record, down to $0.00003 at Gold - pay per record delivered, and nothing for the query. A whole-county roll of 2.4 million parcels, billed by the parcel.
Los Angeles County's assessor parcel layer: the county's parcels with the assessor's own record on each - identity, situs address, use, structure, and the assessment roll figures behind the tax bill.
What you get
| Field group | What it holds |
|---|---|
| identity | AIN (10-digit assessor id) and APN (12-digit parcel number) |
| situs | house number, fraction, direction, unit, street, city, ZIP, and the full assembled address |
| tax | tax-rate area and tax-rate city |
| use | assessor use code, the broad use class, and the finer use description |
| structure | design type, year built, effective year, units, bedrooms, bathrooms, main square footage and quality class for the primary structure |
| roll values | roll year, land value, improvement value, personal-property value, fixture value - and the homeowner, real-estate, personal-property and fixture exemptions |
| basis | land and improvement base years |
| dates | parcel creation date, and the assessor's last-change timestamp where the assessor recorded one (~31% of parcels) |
| legal | five legal-description lines |
2,432,949 rows, one per assessor parcel record, drawn from a 92-field source layer; 44 fields are delivered per parcel. Residential is ~2.17M of them; commercial ~101k, industrial ~52k, irrigated farm ~52k. Roughly 49 assessor IDs appear on more than one row, so AIN identifies a parcel in practice without being a strict primary key.
Modes
- parcels (default) - individual parcels, most recently added first
- aggregate - one count row per group: by use class, use description, roll year, parcel type, or tax-rate city
Filter by AIN, APN, address, city, ZIP, use class, use code, roll year, parcel type, year built, land value, or the assessor's last-change window.
Example inputs
One parcel by AIN - ain is a substring match; the full 10-digit AIN returns the single parcel.
{ "ain": "8765001013" }
Every parcel on a street - address matches the situs address.
{ "address": "PATHFINDER RD", "maxResults": 25 }
Offices in one city - combine the assessor's useType with a city.
{ "useType": "Commercial", "city": "DIAMOND BAR", "maxResults": 25 }
The county's use mix - aggregate=true returns one count row per group, every group of the dimension.
{ "aggregate": true, "groupBy": "useType" }
What this is - and what it is not
This is the assessor roll: what the parcel is, how it is built, and what it is assessed at. It does not carry owner names - LA County publishes owner information through its own per-parcel lookup, not as an open bulk table. If your use case is "who owns this parcel", this dataset will not answer it; if it is "what is this parcel, what is on it, and what is it worth on the roll", it is the whole county in one place.
Why this is hard
Three things fight you on this layer.
The city column is free text, not a controlled list. Los Angeles County's roughly 88 cities come back as 967 distinct strings - LOS ANGELES CA, LOS ANGELES, CA, LOS ANGELES CA, LOS ANGELE CA and on. Treating it as an enumerated dimension produces a breakdown of typos rather than a breakdown of cities, so it is handled as a text match and kept out of the aggregations.
Two date encodings live in the same table. The parcel creation date is an integer YYYYMMDD; the assessor's last-change timestamp is epoch milliseconds. Read one with the other's parser and you get 1970, or the year 20260827.
The change date is mostly absent. 1,685,945 of the 2,432,949 parcels - 69% - carry no last-change timestamp at all, so a change-date window returns roughly a third of the county, not all of it. That subset is real and useful (it is the parcels the assessor touched), but it is a subset, and a query that treats it as the whole roll will be wrong.
And the roll year is not a single value. Roughly 61,000 parcels in the layer carry no roll year at all - they sit in the layer but not on the current assessment roll - so "the latest roll" is a filter you have to state, not one you can assume.
Output
One schema in every mode: each record carries the full field set, empty where the source has nothing, and dates arrive as YYYY-MM-DD. Aggregate rows use the same schema, with groupKey / groupCount filled.
Example output
One parcel - ain=8765001013 returns the assessor's record for that parcel:
{"ain": "8765001013","apn": "8765-001-013","situsHouseNo": "20955","situsFraction": "","situsDirection": "","situsUnit": "","situsStreet": "PATHFINDER RD","situsCity": "DIAMOND BAR CA","situsZip": "91765-4028","situsFullAddress": "20955 PATHFINDER RD DIAMOND BAR CA 91765","taxRateArea": "10101","taxRateCity": "DIAMOND BAR","useCode": "1703","useType": "Commercial","useDescription": "Office Buildings","yearBuilt1": "1984","effectiveYear1": "1984","designType1": "1700","units1": "0","bedrooms1": "0","bathrooms1": "0","sqftMain1": "68715","qualityClass1": "CX","rollYear": "2026","rollLandValue": "7000000","rollImpValue": "8300000","rollPersPropValue": "0","rollFixtureValue": "0","rollHomeOwnersExemp": "0","rollRealEstateExemp": "0","rollPersPropExemp": "0","rollFixtureExemp": "0","rollLandBaseYear": "2006","rollImpBaseYear": "2006","parcelTypeCode": "0","assrMap": "8765-001","assrIndexMap": "8765-NDX","parcelCreateDate": "","spatialChangeDate": "2007-01-02","legalDescLine1": "*TR=PARCEL MAP","legalDescLine2": "","legalDescLine3": "","legalDescLine4": "","legalDescLine5": "","platform": "ca-la-parcels","source": "la-county-assessor-roll","groupKey": "","groupCount": "","groupBy": ""}
aggregate=true, groupBy=useType - one count row per use class:
Residential 2,172,850Commercial 100,513Industrial 52,314Irrigated Farm 51,936Government 23,828Miscellaneous 10,435Institutional 9,689Recreational 2,651
Notes
- Public open data from LA County. No login, no scraping.
- Charges are metered per record delivered, so a single parcel lookup costs a fraction of a cent.