ParseForge Scrapers

PropertyShark NYC Commercial Transactions Scraper

parseforge/commercial-property-transactions-scraper

Real estateDeveloper tools

Scrapes PropertyShark NYC commercial market pages: significant sales with address, sale date, price, sqft and price/sqft, plus borough and submarket stats and quarterly history back to 2016.

Run this scraper See the API call
Total users
10
Monthly active
2
Total runs
304
Bookmarked
0
Last modified
2 days ago

This scraper was last updated on .

What does the PropertyShark NYC Commercial Transactions Scraper return?

ParseForge

PropertyShark NYC Commercial Transactions Scraper

Scrape New York City commercial property sales from PropertyShark: significant transactions with address, sale date, price, building sqft and price/sqft, plus the market and submarket context each sale sits in. No login, no PropertyShark subscription, no browser.

What it does

  • ๐Ÿข Significant commercial sales: address, submarket, sale date, sale price, building sqft, price/sqft, and whether the deal was a package (with the other addresses in it).
  • ๐Ÿ—ฝ Five boroughs ร— five markets: Manhattan, Brooklyn, Queens, Bronx and Staten Island, each as Commercial (all), Office, Retail, Industrial or Multifamily.
  • ๐Ÿ“Š Market context on every sale row, the period's median price/sqft, transaction count, sales volume and total sqft for both the borough and the sale's own submarket, so a price is never just a number.
  • ๐Ÿงฎ Computed comparisons: price/sqft versus the submarket median and the borough median, and the sale's share of the period's total volume and total sqft.
  • ๐Ÿ“ˆ Quarterly history back to 2016 (opt-in): median price/sqft, transactions, sales volume and total sqft, one row per market, metric and quarter, each with its own year-over-year change.
  • ๐Ÿ™๏ธ Submarket breakdown (opt-in): Midtown Manhattan, Downtown Brooklyn, Long Island City and the rest, with median price/sqft, transactions, volume and sqft.
  • ๐Ÿฅง Sales volume split by property type (opt-in): how much of a borough's commercial volume was office, retail, multifamily or other.
  • โœ… Values PropertyShark publishes, not values we round, the exact 4624140476.52 behind the site's own $4.6B, taken from the chart series rather than the headline label.

What you can do with PropertyShark NYC commercial data

Price a deal against the market it is actually in. Every sale row carries the median price/sqft for its submarket and for the borough in the same period, plus the percentage gap between them. A $851/sqft Midtown office trade reads very differently once you can see the Midtown median is $851 and the Manhattan median is $729.

Track a borough's cycle without a data subscription. The opt-in quarterly history goes back to Q1 2016 across four metrics and five property types. That is roughly 170 rows per market and enough to chart a full decade of NYC commercial volume, pricing and absorption.

Find the submarkets that are moving. The submarket block gives transactions, volume, total sqft and median price/sqft per submarket per quarter, with each one's share of the borough total already computed. Sort by share of volume to see where the money went this quarter.

Feed a comps or lead model. Package deals arrive flagged, with the sibling addresses listed and a package size, so a headline price spread across three buildings does not get treated as one building's valuation.

Why choose this scraper

What you get
Source PropertyShark's own published market-trends pages, the numbers the site shows, not an estimate
Access Fully anonymous. No PropertyShark account, no cookies, no proxy needed
Coverage 25 markets (5 property types ร— 5 boroughs), ~254 significant sales and ~2,700 rows per full refresh
History Quarterly series back to Q1 2016 on four metrics
Speed The complete catalogue: all 25 markets, 2,725 rows: in 12 seconds on a 512 MB run
Honesty Every borough page is checked against its own heading, so an unpublished market is reported, never silently served as its parent

How it compares

PropertyShark itself is a paid subscription, and the Apify Store has no other actor reading it. The nearest neighbours cover different sources: LoopNet and Crexi actors (kazkn/commercial-real-estate-brokerage-intel, studio-amba/loopnet-scraper, solidcode/loopnet-com-scraper) return active listings: what is on the market and at what asking price. This actor returns closed sales plus the aggregate market statistics behind them.

This actor LoopNet / Crexi actors
Row type Closed sale + market stats Active listing
Price field What it sold for What it is asking
Geography NYC, five boroughs National
History Quarterly, back to 2016 Current listings only
Market aggregates Yes, per borough and submarket No

If you need asking prices on live inventory, use a LoopNet or Crexi actor. If you need what actually traded and where the market stands, use this one.

What a sale looks like

One unedited row from a default run:

{
  "recordType": "significant-sale",
  "propertyType": "commercial",
  "propertyTypeLabel": "Commercial",
  "borough": "Manhattan",
  "boroughSlug": "manhattan",
  "marketUrl": "https://www.propertyshark.com/mason/market-trends/commercial/nyc/manhattan",
  "rank": 2,
  "address": "575 5th Ave #A",
  "submarket": "Midtown Manhattan",
  "submarketUrl": "https://www.propertyshark.com/cre/commercial-real-estate/us/ny/manhattan/midtown-manhattan/",
  "saleDate": "2026-04-16",
  "saleYear": 2026,
  "saleMonth": 4,
  "saleQuarter": 2,
  "salePrice": 316000000,
  "buildingSqft": 371374,
  "pricePerSqft": 850.89,
  "isPackageDeal": false,
  "packageIncludes": [],
  "packageCount": 1,
  "submarketMedianPricePerSqft": 850.89,
  "submarketTransactions": 67,
  "submarketSalesVolume": 3021617965,
  "submarketTotalSqft": 6380631,
  "pricePerSqftVsSubmarketMedianPct": 0,
  "pricePerSqftVsMarketMedianPct": 16.75,
  "shareOfMarketVolumePct": 6.8337,
  "shareOfMarketSqftPct": 4.2868,
  "marketPeriod": "Quarter 2, 2026",
  "marketPeriodType": "quarter",
  "marketMedianPricePerSqft": 728.7933,
  "marketTransactions": 221,
  "marketSalesVolume": 4624140476.52,
  "marketTotalSqft": 8663218,
  "scrapedAt": "2026-09-07T14:44:27.589Z"
}

Configure the run

Pick the markets you want with Property types and Boroughs: every combination of the two is fetched. maxItems caps the total rows across every output, and the significant sales are written first, so a small cap always spends itself on transactions rather than on history rows. The filters (price, building sqft, sale date) apply to significant sales only, and they run on the full row before it is billed: a sale you filter out never costs you anything.

Manhattan office trades over $50M this year:

{
  "propertyTypes": ["office"],
  "boroughs": ["manhattan"],
  "minSalePrice": 50000000,
  "saleDateFrom": "2026-01-01",
  "maxItems": 100
}

Every closed sale PropertyShark publishes, across all five boroughs and all five markets:

{
  "propertyTypes": ["commercial", "office", "retail", "industrial", "multifamily"],
  "boroughs": ["manhattan", "brooklyn", "queens", "bronx", "staten-island"],
  "maxItems": 1000
}

A decade of Brooklyn and Queens industrial history, with the market and submarket tables:

{
  "propertyTypes": ["industrial"],
  "boroughs": ["brooklyn", "queens"],
  "includeMetricHistory": true,
  "includeMarketOverview": true,
  "includeSubmarketStats": true,
  "maxItems": 5000
}

Free users

Free Apify accounts get 10 rows per run as a preview. Everything else is identical.

Upgrade for the full catalogue: https://console.apify.com/sign-up?fpr=vmoqkp

Run it

  1. Create a free Apify account, it comes with $5 of platform credit.
  2. Open PropertyShark NYC Commercial Transactions Scraper and press Start to run the default (Manhattan commercial, 10 sales).
  3. Add the boroughs and property types you want, and tick the opt-in blocks you need.
  4. Export from the Storage tab as JSON, CSV, Excel or XML, or pull it from the API.

Use with AI agents (MCP)

claude mcp add apify --transport http https://mcp.apify.com --header "Authorization: Bearer YOUR_APIFY_TOKEN"

Then ask:

  • "What were the ten largest commercial sales in Manhattan last quarter, and how did each price per square foot compare with its submarket median?"
  • "Chart Brooklyn industrial sales volume by quarter since 2016."
  • "Which NYC submarket had the highest share of retail sales volume this period?"

Troubleshooting

No results at all. Check the log for a heading mismatch. PropertyShark answers an unpublished market with its parent page instead of a 404, so the actor refuses that response and says so rather than handing you the wrong borough's data.

Fewer rows than I expected. PropertyShark publishes about ten significant sales per market per period. Ten sales for one borough and one property type is the full set, not a truncation. To get more rows, add boroughs and property types, or tick the history block.

Fewer rows than maxItems. maxItems caps total rows across every output. With no opt-in blocks on, one market yields about ten rows however high you set it.

A field came back empty. submarketMedianPricePerSqft and the other submarket fields are null when the sale's submarket is not one of the ones PropertyShark tabulates for that borough. packageIncludes is empty on any sale that was not a package deal.

The run was slow, or I saw a Cloudflare warning. The source is behind Cloudflare but serves this path anonymously; the actor retries with a second TLS profile. If your account's egress starts getting challenged, switch on Apify Proxy in the input.

FAQ

Question Answer
Do I need a PropertyShark account? No. Every page this actor reads is public.
Which cities are covered? New York City only. PropertyShark publishes commercial market trends for the five boroughs; other metros have residential pages only.
Are these asking prices or closed sales? Closed sales, with the recorded sale date and price.
How far back does the history go? Q1 2016 on quarterly markets. Thinner markets are published annually instead, back to 2016.
Why do some markets say "Year 2025" instead of a quarter? PropertyShark switches a market to annual reporting when quarterly volume is too thin. The row tells you which with periodType.
What is a package deal? One recorded transaction covering several buildings. isPackageDeal flags it, packageIncludes lists the other addresses and packageCount gives the total.
How current is the data? As current as PropertyShark's own pages, which lag the recording date by roughly a quarter.
Can I get individual property records? Not from this actor. It reads the published market pages, which cover significant sales and aggregates.
How often should I run it? Once per quarter is enough for the sales and aggregates; the numbers do not change between publications.
Does an empty opt-in block cost anything? No. Blocks are billed per row returned.

What input does the PropertyShark NYC Commercial Transactions Scraper accept?

FieldTypeWhat it doesDefault
propertyTypes array Which commercial market to read. PropertyShark publishes a separate market-trends page per property type per borough. ["commercial"]
boroughs array New York City boroughs to cover. PropertyShark publishes commercial market trends for the five boroughs only. ["manhattan"]
maxItems integer How many rows to return in total, across every enabled output. Free users: limited to 10 items (preview). Paid users: up to 1,000,000. 10
minSalePrice integer Drop significant sales that closed below this price. not set
maxSalePrice integer Drop significant sales that closed above this price. not set
minBuildingSqft integer Drop significant sales of buildings smaller than this. not set
maxBuildingSqft integer Drop significant sales of buildings larger than this. not set
saleDateFrom string Drop significant sales that closed before this date. not set
saleDateTo string Drop significant sales that closed after this date. not set
includeMarketOverview boolean Add one row per market with the current period headline stats: median price/sqft, sales volume, transaction count, total sqft, and the year-over-year change for each. false
includeSubmarketStats boolean Add one row per submarket with its median price/sqft, transaction count, sales volume and total sqft for the current period. false
includeMetricHistory boolean Add one row per market, metric and quarter of the published history (median price/sqft, transactions, sales volume, total sqft) back to 2016. This is the high-volume block: roughly 170 rows per market. false
includeVolumeByPropertyType boolean Add the share of sales volume by property type. PropertyShark publishes this split on the Commercial (all) pages only. false
proxyConfiguration object Optional proxy. The source is anonymous and normally needs none; switch on Apify Proxy if your runs start seeing Cloudflare challenges. {"useApifyProxy":false}
state string Kept so saved tasks from the older location-slug input keep running. Use the Boroughs field instead; a legacy city of manhattan, brooklyn, queens, bronx or staten-island is mapped onto it. not set
county string Kept so saved tasks from the older location-slug input keep running. Use the Boroughs field instead; a legacy city of manhattan, brooklyn, queens, bronx or staten-island is mapped onto it. not set
city string Kept so saved tasks from the older location-slug input keep running. Use the Boroughs field instead; a legacy city of manhattan, brooklyn, queens, bronx or staten-island is mapped onto it. not set

How much does the PropertyShark NYC Commercial Transactions Scraper cost?

from $0.44 per 1,000 results

Charged forWhat it isPrice each
Actor Start Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). $0.0178 to $0.02
Market page One PropertyShark market page fetched and parsed (one property type in one borough). $0.0178 to $0.02
Significant sale One closed commercial sale: address, submarket, sale date, price, building sqft, price/sqft, package flag, plus the submarket and borough context. $0.00623 to $0.007
Market overview One market summary row: median price/sqft, transactions, sales volume and total sqft for the period, each with its year-over-year change. $0.0178 to $0.02
Submarket stats One submarket row: median price/sqft, transactions, sales volume, total sqft and its share of the borough total. $0.00623 to $0.007
Property type split One slice of a borough's commercial sales volume by property type. $0.00623 to $0.007
History data point One metric, market and quarter of published history back to 2016, with its year-over-year change. $0.000445 to $0.0005

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

How do I call the PropertyShark NYC Commercial Transactions Scraper API?

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST ยท run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~commercial-property-transactions-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "propertyTypes": [
      "commercial"
    ],
    "boroughs": [
      "manhattan"
    ],
    "maxItems": 10,
    "includeMarketOverview": false,
    "includeSubmarketStats": false
  }'

What example inputs can I use?

Use these inputs to see how a run is configured.

input.json
{
  "propertyTypes": [
    "commercial"
  ],
  "boroughs": [
    "manhattan"
  ],
  "maxItems": 10,
  "includeMarketOverview": false,
  "includeSubmarketStats": false
}

What do users say about the PropertyShark NYC Commercial Transactions Scraper?

No reviews yet. Be the first.

How do I report an issue with the PropertyShark NYC Commercial Transactions Scraper?

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

What related scrapers can I use?

Run PropertyShark NYC Commercial Transactions Scraper on Apify All scrapers