NYC Property Valuation - Assessment & 5-Year Value Trail avatar

NYC Property Valuation - Assessment & 5-Year Value Trail

Pricing

from $0.06 / 1,000 nyc property records

Go to Apify Store
NYC Property Valuation - Assessment & 5-Year Value Trail

NYC Property Valuation - Assessment & 5-Year Value Trail

New York City property assessment records (public open data, 11.7M rows, 2023-2027): every parcel's owner and address, its value through five assessment stages, and the year-over-year movement in market and assessed value.

Pricing

from $0.06 / 1,000 nyc property records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Categories

Share

Every property in New York City, its owner, its classification and its full five-year value trail - all on one exact parcel id.

The New York City Department of Finance assesses roughly 1.17 million parcels every year and publishes the result as an open dataset. That dataset is a five-year stack: 11.7 million records covering the 2023 through 2027 rolls (the rolls are published ahead of the year they cover), about 2.34 million records each. A parcel is one row per roll, and its identity - the PARID, which is the borough-block-lot number the city uses everywhere - is exact, so the same property lines up across all five years without a name match.

That is what makes the movement real rather than inferred: a market value stepping up, an assessment holding while the market rises, a tax class changing.

Low cost

From $0.0001 per record, down to $0.00006 at Gold Pay-per-event: you are charged per record delivered, and nothing for the query.

What you get

BlockFields
IdentityPARID, borough (code and name), block, lot, easement, section/volume, roll section, assessment period
Owner & addressowner, house number (low and high), street name, ZIP, borough-block-lot (bbl joined for you), zoning, community board
Classificationbuilding class, building and lot dimensions, corner flag, land area, number of buildings, year built and its two alterations, co-op and unit counts, condo number and suffixes
Valuesfive assessment stages, each with eleven figures - see below
Protest & appealprotest 1 / 2 / prior, attorney group 1 / 2 / prior, appointment date and the appointed lot
Floor areaeleven areas by building use: gross, hotel, office, residential, retail, loft, factory, warehouse, storage, garage, other
Derivedcomposed address, borough name, BBL, and on a parcel trail the year-over-year market and assessed movement

Five assessment stages, on every record

This is the part a plain "property value" dataset does not have. Each record carries the value at every stage of the assessment process:

StagePrefixWhat it records
Prior yearpylast year's roll, as the baseline
Tentativetenthe roll as first published
Current basecbnthe current base assessment
Finalfinthe finalized assessment
Currentcurthe roll in force

Each stage carries eleven figures: market land, market total, assessed land, assessed total, assessed-with-exemption total, transitional land, transitional total, transitional-with-exemption total, taxable total, taxable-with-exemption total, and the tax class for that stage. So a record shows not just what a property is worth but how its assessment moved from the prior year through to final - the assessment pipeline itself, not a snapshot of it.

The five-year value trail

Ask for one parcel and you get every roll it appears on, oldest first, with the movement between consecutive rolls computed on the city's own parcel id:

{ "mode": "parcel", "parid": "1000010010" }
2023 GOVERNORS ISLAND CORPORATION market 327,275,000
2024 GOVERNORS ISLAND CORPORATION market 337,093,000 +9,818,000 +3.0%
2025 GOVERNORS ISLAND CORPORATION market 347,205,990 +10,112,990 +3.0%
2026 GOVERNORS ISLAND CORPORATION market 357,622,000 +10,416,010 +3.0%
2027 GOVERNORS ISLAND CORPORATION market 355,619,560 -2,002,440 -0.6%

An area's movement without shipping a parcel

mode=trend returns one row per roll year for whatever scope you filter to - parcel count, summed market value and summed taxable value - so you get a borough's five-year series without pulling a single parcel:

{ "mode": "trend", "boro": "3" }
2023 354,754 parcels market 455,535,516,285
2024 356,996 parcels market 489,980,424,388 +7.6%
2025 359,033 parcels market 492,928,832,164 +0.6%
2026 361,145 parcels market 520,387,566,126 +5.6%
2027 362,745 parcels market 555,310,479,782 +6.7%

Owners

The owner is on every record, and it is the same field a title or lien search keys on - so ownerName finds every parcel a given owner holds across the five boroughs, and mode=parcel then follows any one of them through the years.

Modes

  • rows (default) - parcels matching your filters, from the newest roll.
  • parcel - one parcel's full five-year trail with the movement computed between rolls. Takes parid.
  • trend - per-roll-year totals for a scope: parcel count and summed market and taxable value, one row per year.
  • aggregate - one count row per group, rolled up by borough, building class, ZIP, tax class, roll section or year.

Inputs

Filter by year (2023-2027, defaults to the newest), period, boro (1-5), parid, ownerName, address, zipCode, bldgClass, zoning, rollSection, block, lot, and value bounds minMarketValue / maxMarketValue / minTaxableValue / maxTaxableValue.

A filter that belongs to another mode is rejected outright rather than silently ignored - so a query you narrowed never comes back unnarrowed.

Example inputs

Every parcel owned by a given owner

{ "mode": "rows", "ownerName": "GOVERNORS ISLAND", "maxResults": 500 }

One parcel's five-year value trail

{ "mode": "parcel", "parid": "1000010010" }

Brooklyn's five-year movement

{ "mode": "trend", "boro": "3" }

Manhattan parcels valued over $10M

{ "mode": "rows", "boro": "1", "minMarketValue": 10000000,
"maxResults": 500 }

How many parcels by building class

{ "mode": "aggregate", "groupBy": "bldgClass", "boro": "4" }

Notes on the data

  • parid alone is not unique within a year - the roll is per assessment period. Each parcel appears once for period 1 and once for period 3, and the two rows are not duplicates: about 80% of the columns match, but the currentBase and final value groups are zero at period 1 and carry the real figures at period 3 - the assessment simply is not final yet. The default path pins period 3, the finalized roll (measured on the 2025 roll: 1,169,614 rows against 1,169,614 distinct PARIDs, so the key is exact there). Set period explicitly to 1 if you want the earlier, still-moving figures.
  • The rolls publish ahead of the year they cover, so the newest roll year is the coming year rather than the last one. year defaults to whichever is newest, never to a hardcoded year.
  • A value of 0 is meaningful and common - it is how the city records a parcel that is fully exempt at that stage. It is returned as 0, not blanked.
  • maxResults is capped at one page of 20,000 records. A larger request is served one page - the run logs a warning saying it was capped, so a short result is never mistaken for the whole set. Narrow the filters to page through a larger scope.
  • The first query of a run can be slow and the rest fast. This dataset's value differs enormously warm and cold: a query pinned to a year and period measured ~15s cold and ~0.6s warm. That is the source's own cache, not the actor; the default path is built around it.
  • Within one pinned roll and period, PARID is exact - one row per parcel, verified at 1,169,614 rows against 1,169,614 PARIDs on the 2025 finalized roll. The extra rows in a raw count come from the assessment periods, not from parcels appearing twice.

Output

One JSON record per parcel row, and the same key set whichever mode produced it - so the output loads into a table or a dataframe without a schema union step. Aggregate and trend records carry their group key, count and dimension in the same shape as a parcel record.

Pay-per-event - you are charged per record delivered, never for the query itself. The run stops cleanly if you set a spend limit on your Apify account.