NYC Property Sales Scraper avatar

NYC Property Sales Scraper

Pricing

from $1.60 / 1,000 nyc property sale records

Go to Apify Store
NYC Property Sales Scraper

NYC Property Sales Scraper

Extract official NYC property sales by borough, neighborhood, address, ZIP code, sale date, price, building class, units, and square footage.

Pricing

from $1.60 / 1,000 nyc property sale records

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Free plan limit: Free-plan users can receive up to 5 result records per run. Paid-plan and local/unknown runs retain the Actor's existing limits.

Extract recent New York City property sales from the official NYC Department of Finance rolling sales dataset. Filter by borough, neighborhood, address, ZIP code, building class, sale date, and price; receive normalized records ready for real-estate research, comparable-sales analysis, lead generation, and market monitoring.

The Actor reads the public NYC Citywide Rolling Calendar Sales dataset (usep-8jbt) directly from NYC Open Data. It uses a low-cost HTTPS data path, requires no proxy or login, paginates deterministically, and never fabricates fallback records.

What it extracts

FieldDescription
saleIdDeterministic identifier used to deduplicate a sale
borough, boroughCodeHuman-readable borough and NYC DOF borough code
neighborhood, address, apartmentNumber, zipCodeProperty location fields reported by NYC DOF
salePrice, currency, saleDateRecorded price in USD and sale date
buildingClassCategoryDOF building category, such as elevator co-op or one-family home
block, lot, easementBorough tax-lot identifiers
residentialUnits, commercialUnits, totalUnitsReported unit counts
landSquareFeet, grossSquareFeet, yearBuiltProperty size and construction year when available
tax and building-class fieldsPresent and sale-time classification values
sourceUrl, fetchedAtOfficial dataset URL and extraction timestamp

Missing source values are returned as null, not guessed. Prices of $0 are excluded by default because the rolling file can contain non-market transfers; enable includeZeroDollarSales when those records matter to your analysis.

When to use it

Use this Actor for:

  • recent comparable-sales research;
  • borough, neighborhood, or ZIP-level market analysis;
  • monitoring recorded sales by price band or building category;
  • building structured real-estate datasets for spreadsheets, BI tools, and AI agents;
  • finding public transaction records for outreach or further due diligence.

Do not use it for active property listings, owner contact details, live assessments, deeds/documents, geocoded radius searches, or a complete historical archive. The NYC rolling dataset covers approximately the prior 12 months and is updated monthly. A $0 record is not evidence of a market sale.

Input

InputTypeDefaultPurpose
boroughstringmanhattanOne borough or all
neighborhoodstring—Case-insensitive partial DOF neighborhood match
addressContainsstring—Case-insensitive partial address match
zipCodestring—Exact five-digit ZIP code
buildingClassCategorystring—Partial category match, such as CONDO
saleDateFrom, saleDateTodate strings—Inclusive YYYY-MM-DD range
minSalePrice, maxSalePricenumbers—Inclusive USD price range
includeZeroDollarSalesbooleanfalseInclude transfers reported at $0
sortBystringnewestnewest, oldest, price-high, or price-low
maxResultsinteger100Deliver 1–10,000 records
maxRequestRetriesinteger2Retry transient network, 429, and 5xx failures 0–5 times

Example: recent Brooklyn condo sales from $500,000 to $2,000,000:

{
"borough": "brooklyn",
"buildingClassCategory": "CONDO",
"minSalePrice": 500000,
"maxSalePrice": 2000000,
"sortBy": "newest",
"maxResults": 250
}

Run through the Apify API:

curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~nyc-property-sales-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"borough":"queens","zipCode":"11101","maxResults":50}'

Keep API tokens in an authorization header or secret manager in production; do not commit them to source control.

Output example

Each default-dataset item has a stable, schema-validated shape:

{
"saleId": "1-605-1-2026-07-31-7192000-100-barrow-street-3b",
"borough": "Manhattan",
"boroughCode": 1,
"neighborhood": "GREENWICH VILLAGE-WEST",
"buildingClassCategory": "10 COOPS - ELEVATOR APARTMENTS",
"taxClassAtPresent": "2",
"block": "605",
"lot": 1,
"easement": null,
"buildingClassAtPresent": "D4",
"address": "100 BARROW STREET, 3B",
"apartmentNumber": null,
"zipCode": "10014",
"residentialUnits": null,
"commercialUnits": null,
"totalUnits": null,
"landSquareFeet": null,
"grossSquareFeet": null,
"yearBuilt": 2015,
"taxClassAtTimeOfSale": 2,
"buildingClassAtTimeOfSale": "D4",
"salePrice": 7192000,
"currency": "USD",
"saleDate": "2026-07-31",
"sourceDataset": "NYC Citywide Rolling Calendar Sales",
"sourceUrl": "https://data.cityofnewyork.us/d/usep-8jbt",
"fetchedAt": "2026-08-31T12:00:00.000Z"
}

The SUMMARY key-value-store record reports the outcome (data, partial, empty, rejected, or failed), matched and delivered counts, request count, warnings, charge-budget state, and estimated result-event cost. This keeps diagnostics out of the homogeneous sales dataset.

Pricing

This Actor uses pay-per-event pricing. These are the current Apify Store event prices:

EventPrice (USD)When it is charged
apify-actor-start$0.00005Actor Start — Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). — Charged once per run.
apify-default-dataset-item$0.0005NYC property sale record — One normalized NYC Department of Finance property-sale record written to the default dataset.

Apify platform usage for this Actor run is included alongside the event prices above; no separate per-run platform-usage fee is passed to users.

This covers Apify platform usage for this Actor run. Other Apify products or usage outside this Actor run may still follow your account plan.

Reliability and limitations

  • Data comes directly from the official public NYC Open Data endpoint.
  • Filters execute server-side using generated, escaped SoQL; arbitrary user-supplied SoQL is not accepted.
  • Results are ordered deterministically and fetched in bounded pages.
  • Transient 429, 5xx, timeout, and network errors use bounded exponential backoff.
  • Invalid cross-field ranges return an actionable rejected summary before result work.
  • A valid query with no matches returns an empty dataset and an explicit SUMMARY record.
  • Malformed source rows are skipped with warnings rather than replaced with invented values.
  • The source is a rolling, monthly dataset, not a complete historical sales archive. NYC may revise records and field coverage.
  • Property descriptions, sizes, unit counts, and classifications reflect NYC DOF source data and can be blank or administrative rather than market-ready.

Responsible use

The source records are public government data. Follow NYC Open Data terms and applicable laws. Verify records against authoritative documents before making legal, lending, valuation, investment, or outreach decisions. Do not use the Actor to discriminate, harass, or make high-impact decisions without appropriate review.

For support, include the Apify run ID, redacted input, expected result, and the relevant SUMMARY record. Never include your API token.