NYC Property Sales Scraper
Pricing
from $1.60 / 1,000 nyc property sale records
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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
| Field | Description |
|---|---|
saleId | Deterministic identifier used to deduplicate a sale |
borough, boroughCode | Human-readable borough and NYC DOF borough code |
neighborhood, address, apartmentNumber, zipCode | Property location fields reported by NYC DOF |
salePrice, currency, saleDate | Recorded price in USD and sale date |
buildingClassCategory | DOF building category, such as elevator co-op or one-family home |
block, lot, easement | Borough tax-lot identifiers |
residentialUnits, commercialUnits, totalUnits | Reported unit counts |
landSquareFeet, grossSquareFeet, yearBuilt | Property size and construction year when available |
| tax and building-class fields | Present and sale-time classification values |
sourceUrl, fetchedAt | Official 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
| Input | Type | Default | Purpose |
|---|---|---|---|
borough | string | manhattan | One borough or all |
neighborhood | string | — | Case-insensitive partial DOF neighborhood match |
addressContains | string | — | Case-insensitive partial address match |
zipCode | string | — | Exact five-digit ZIP code |
buildingClassCategory | string | — | Partial category match, such as CONDO |
saleDateFrom, saleDateTo | date strings | — | Inclusive YYYY-MM-DD range |
minSalePrice, maxSalePrice | numbers | — | Inclusive USD price range |
includeZeroDollarSales | boolean | false | Include transfers reported at $0 |
sortBy | string | newest | newest, oldest, price-high, or price-low |
maxResults | integer | 100 | Deliver 1–10,000 records |
maxRequestRetries | integer | 2 | Retry 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:
| Event | Price (USD) | When it is charged |
|---|---|---|
apify-actor-start | $0.00005 | Actor 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.0005 | NYC 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
SUMMARYrecord. - 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.