LA County Parcel Data (Assessor Roll) avatar

LA County Parcel Data (Assessor Roll)

Pricing

from $0.03 / 1,000 la county parcel records

Go to Apify Store
LA County Parcel Data (Assessor Roll)

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

Wenhao Yang

Maintained by Community

Actor 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 groupWhat it holds
identityAIN (10-digit assessor id) and APN (12-digit parcel number)
situshouse number, fraction, direction, unit, street, city, ZIP, and the full assembled address
taxtax-rate area and tax-rate city
useassessor use code, the broad use class, and the finer use description
structuredesign type, year built, effective year, units, bedrooms, bathrooms, main square footage and quality class for the primary structure
roll valuesroll year, land value, improvement value, personal-property value, fixture value - and the homeowner, real-estate, personal-property and fixture exemptions
basisland and improvement base years
datesparcel creation date, and the assessor's last-change timestamp where the assessor recorded one (~31% of parcels)
legalfive 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,850
Commercial 100,513
Industrial 52,314
Irrigated Farm 51,936
Government 23,828
Miscellaneous 10,435
Institutional 9,689
Recreational 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.