ParseForge Scrapers

Businesses For Sale Scraper - DealStream Listings & Deals

parseforge/dealstream-listings-scraper

E-commerceOther

Reads businesses, franchises and M&A deals listed for sale on DealStream: asking price, cash flow, revenue, industry, county level location and the full deal terms, from a marketplace of 16,900 live listings.

Run this scraper See the API call
Total runs
11
Bookmarked
0
Last modified
32 hours ago

This scraper was last updated on .

What does the Businesses For Sale Scraper - DealStream Listings & Deals return?

ParseForge

Businesses For Sale Scraper - DealStream Listings & Deals

Scrape businesses, franchises and M&A deals for sale on DealStream, a marketplace of 16,900 live listings. Every row carries 25 fields: asking price, cash flow, industry, county level location, region, country, and the six flags DealStream publishes, including seller financing and whether real estate is included. No login, no API key. Export to CSV, JSON, Excel or XML.

DealStream has no public API and sits behind DataDome, so a plain HTTP request gets a 403 no matter what headers it sends. This reads the marketplace in a real browser, takes the structured data DealStream itself publishes on every page, and hands back one flat row per listing.

Who uses it What they scrape DealStream for
Search funds and acquirers New deals in a size band and an industry, before the broker calls back
Business brokers What comparable businesses are asking and what they earn
Private equity and family offices Deal flow by region, sector and cash flow, on a schedule
Lenders and SBA underwriters Asking price against cash flow across a sector, for a sanity band
Market analysts Multiples and supply by industry, county and state

What it does

This Actor reads DealStream's browse pages in a real browser and returns each listing as a flat row. Every listing carries:

  • ๐Ÿ’ผ The business: title, industry, summary, county level location, region, country and the listing URL.
  • ๐Ÿ’ฐ The money: asking price and cash flow as numbers, currency, and whether the listing is still available.
  • ๐Ÿšฉ The six DealStream flags: real estate included, seller financing, management will stay, relocatable, new arrival and franchise, each as its own Yes or No column.
  • ๐Ÿ“„ Optional blocks: the full seller write up, revenue, the nine deal terms, the posted and renewed dates, the category path and DealStream's raw structured record.
  • ๐Ÿ—‚๏ธ A second output: the directory of every browse page DealStream publishes, which is how you learn the valid values for the browse field.

Results export to CSV, JSON, Excel or XML, or stream from the API.

What you can do with DealStream data

๐ŸŽฏ Build a deal pipeline in one industry.

Point it at a category browse page, set a cash flow floor, and get every listing in that sector with its asking price and multiple.

๐Ÿ“Š Price a business against its comparables.

Pull a category and a region, take asking price and cash flow on every row, and read the band the market is actually asking.

๐Ÿ“ Cover a territory.

Walk the state and county browse pages and get every business for sale inside a footprint, refreshed on a schedule.

๐Ÿ”Ž Watch for new arrivals.

Turn on the listing dates and keep the rows whose posted date is recent, which is the difference between a fresh deal and one that has been sitting for a year.

Why choose this scraper

What you get
It gets in at all DealStream runs DataDome. Every page here is a real browser navigation on a residential address, with a fresh browser opened before the site cuts the session off.
The numbers are the source's own Asking price, currency, region and country come from the schema.org record DealStream publishes, not from parsing a dollar sign out of a div.
Revenue, which the browse page never shows Turn on the financials block and each listing carries its published revenue alongside asking price and cash flow.
The nine deal terms Represented by a broker, buyer fee, willing to co-broke, principals only, franchise, seller financing, management will stay, relocatable and real estate.
Filters that cost you nothing Price band, cash flow floor, region, country, keywords and the six flags. A listing a filter drops is never written and never billed.
Browse pages only DealStream's robots file reserves its /search endpoint. This reads the browse pages and the listing pages it allows, and nothing else.

How it compares

There is no other DealStream scraper on Apify. The neighbouring actors cover BizBuySell, BizQuest, BusinessesForSale and Empire Flippers, which are ordinary HTTP sites; DealStream is not, and that is most of the difference in what this costs and what it takes to run.

Feature ParseForge DealStream scrapesage/bizbuysell solidcode/bizquest haketa/businessesforsale
Covers DealStream Yes No No No
Asking price and cash flow on the base row Yes Yes Yes Yes
Revenue Optional block Optional block Optional block No
Nine deal terms Yes No No No
Browse category directory Yes No No No
Price per row $0.005 $0.004 $0.00114 $0.0015

What a DealStream listing looks like

{
 "rowType": "listing",
 "listingId": "nlyydy",
 "postId": "69b2d78630d8c019d25a4a5a",
 "title": "Established German Auto Repair Shop",
 "listingUrl": "https://dealstream.com/d/biz-sale/auto-repair/nlyydy",
 "summary": "This well-established independent European automotive repair and service facility specializes in German and European-engineered vehicles, including BMW, Mercedes-Benz, Audi, Volkswagen, Porsche, Rolls Royce, Bentley, Ferrari, Lamborghini, Jaguar, Land Rover, Aston Martin, McLaren, Alfa Romeo, Maserati,...",
 "industry": "Auto Repair Shops, Garages",
 "location": "Broward County, FL",
 "state": "Florida",
 "country": "US",
 "askingPriceUsd": 125000,
 "cashFlowUsd": 90751,
 "currency": "USD",
 "availability": "InStock",
 "realEstateIncluded": "No",
 "sellerFinancing": "No",
 "managementWillStay": "Yes",
 "relocatable": "No",
 "newArrival": "No",
 "franchise": "No",
 "flags": [
  "Management Will Stay"
 ],
 "ratingValue": 5,
 "reviewCount": 1,
 "iconUrl": "https://dealstream.com/assets/images/listingicons/png/fak fa-ds-autorepair.png",
 "scrapedAt": "2026-09-01T16:50:12.965Z"
}

Add "outputs": ["listings", "categories"] and you also get one row per browse page:

{
 "rowType": "category",
 "title": "Businesses",
 "browsePath": "businesses-for-sale",
 "browseUrl": "https://dealstream.com/businesses-for-sale",
 "lastModified": "2026-09-01",
 "sourceSitemap": "https://dealstream.com/sitemap-us-businessforsale-0001.xml",
 "scrapedAt": "2026-09-01T16:54:44.081Z"
}

Configure the run

The browse page you pick is the server side filter, because DealStream's own search form is off limits under its robots file. Leave browsePaths at businesses-for-sale for the whole marketplace, or name a category or a place. Everything under Filters runs on the rows that came back, and a dropped row is not billed.

Every laundromat and car wash on the marketplace, with the numbers:

{ "browsePaths": ["laundromats-for-sale", "car-washes-for-sale"], "maxItems": 300 }

Florida businesses earning over $200,000, with revenue and the deal terms:

{ "browsePaths": ["florida-businesses-for-sale"], "minCashFlowUsd": 200000, "includeFinancials": true, "includeDealTerms": true, "maxItems": 100 }

Anything under a million with seller financing on the table:

{ "maxAskingPriceUsd": 1000000, "requireSellerFinancing": true, "maxPagesPerBrowsePath": 20, "maxItems": 250 }

Free users

Free-plan runs return up to 10 rows as a preview. Upgrade your Apify plan to collect up to 1,000,000 rows per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the Businesses For Sale Scraper.
  3. Pick a browse page, set any filters and maxItems, and click Start.
  4. Export the results as CSV, Excel, JSON or XML from the Dataset tab.

Run it programmatically through the Apify API or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to DealStream through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/dealstream-listings-scraper"

Then prompt it in plain language:

  • "Find businesses for sale in Florida with cash flow over $300,000 and tell me the asking price multiple on each."
  • "List every laundromat for sale under $500,000 that includes real estate."
  • "Which industries on DealStream have the most listings with seller financing?"

Copy this into ChatGPT, Claude, or Cursor to start:

Use the Apify Actor "parseforge/dealstream-listings-scraper" to collect businesses for sale from DealStream. Input: { "browsePaths": ["<slug>-for-sale"], "minCashFlowUsd": <n>, "maxAskingPriceUsd": <n>, "maxItems": <n> }. It returns title, industry, location, state, country, askingPriceUsd, cashFlowUsd, the six flags and listingUrl per listing. Call it with the ApifyClient and my APIFY_TOKEN.

Troubleshooting

Why am I getting no results?

A browse slug has to exist. florida-businesses-for-sale works, florida does not. Run once with "outputs": ["categories"] to get the directory of every browse page DealStream publishes, then copy the slug in.

Why fewer listings than I asked for?

Two reasons. Your filters removed rows, and the log prints how many: 1,204 listing(s) dropped by the filters, none billed. Or the browse page ran out: maxPagesPerBrowsePath caps how deep the walk goes, and 25 listings a page means 20 pages is 500 listings.

Why is a field empty?

DealStream does not fill every field on every listing. Measured over one page of 25: industry and location on 25, asking price on 22, cash flow on 23, region and country on 22. An empty field is the listing's real state, written as Not Disclosed. Revenue is empty on the base row by design: it exists only on the listing page, so it needs the financials block.

Why is the run slow, and why does it open several browsers?

DealStream runs DataDome, so every page is a real browser navigation, and a session is cut off after about 11 pages. The actor opens a fresh browser on a fresh address before that happens. That is the run working correctly, not failing.

A field stopped filling.

DealStream changed its page. Email us with your run ID so we can update the parser.

FAQ

Question Answer
Do I need a DealStream account? No. It reads the public browse and listing pages.
Why is this more expensive than a BizBuySell scraper? Those sites answer a plain HTTP request. DealStream answers 403 and needs a real browser on a residential address, and the browser is billed separately so you can see exactly what that costs.
Does it use DealStream's search filters? No. The site's robots file reserves its /search endpoint, so the browse page is the server side filter and the rest of the filtering runs on the rows that came back. Dropped rows are not billed.
How do I find valid browse slugs? Set "outputs": ["categories"] once. It returns every browse page DealStream publishes in its own sitemap.
Does it return revenue? Yes, with the financials block. Revenue is published only on the listing page, so it costs one page load per listing.
Can I get the broker's contact details? No. DealStream keeps enquiries behind its own form and this actor does not touch it.
How current are the listings? The rows are read live at run time. Turn on the listing dates block to see when each was posted and last renewed.
How many listings per run? Free plan: 10. Paid: up to 1,000,000, bounded by the roughly 16,900 listings on the marketplace.
Is this an official DealStream product? No. It is unofficial and reads only public DealStream data.

๐Ÿ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

โš ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by DealStream. It collects only publicly available listing data from the browse and listing pages, and it does not read the search, profile, messaging or enquiry areas that DealStream's robots file reserves. Listing content is written by sellers and brokers and is not verified by DealStream or by us. You are responsible for using the data in compliance with DealStream's terms and applicable laws, including GDPR, CCPA and PIPL. Do not use it to identify, profile, or target individuals.

What input does the Businesses For Sale Scraper - DealStream Listings & Deals accept?

FieldTypeWhat it doesDefault
browsePaths array DealStream browse slugs to walk, for example 'tobacco-shops-for-sale', 'florida-businesses-for-sale' or 'broward-county-businesses-for-sale'. Leave empty to walk 'businesses-for-sale', which is the whole marketplace. Turn on the category directory output once to get the full list of valid slugs. ["businesses-for-sale"]
maxItems integer Free users: limited to 10 items (preview). Paid users: up to 1,000,000. 10
maxPagesPerBrowsePath integer How deep to page into each browse slug. Each page holds 25 listings. DealStream's bot defence lets a browser session read about 11 pages before it cuts in, so the actor opens a fresh browser when that happens; a lower number here means fewer browser restarts and a cheaper run. 10
outputs array What the run collects. Listings is the marketplace inventory. Category directory is one row per browse page DealStream publishes, with its slug, which is how you learn the valid values for the field above. Pick both and maxItems is split evenly, with whatever one does not use rolling into the other. ["listings"]
startUrls array Optional. Paste DealStream listing URLs (https://dealstream.com/d/...) to read those exact listings instead of walking a browse page. Ignored when empty. not set
keywords array Keep only listings whose title, industry or summary contains one of these words. DealStream's own search box is off limits under its robots file, so this filter runs on the rows the browse page returned. A listing dropped here is never billed. not set
minAskingPriceUsd integer Drop listings priced below this. Listings with no published price are dropped by any price filter; leave both empty to keep them. not set
maxAskingPriceUsd integer Drop listings priced above this. not set
minCashFlowUsd integer Drop listings whose published cash flow is below this. Listings with no published cash flow are dropped when this is set. not set
states array Keep only listings in these regions, as DealStream spells them: 'Florida', 'Texas', 'Ontario'. Matched case insensitively against the region in the listing's structured data. not set
countries array Two letter country codes as DealStream publishes them, for example 'US', 'CA', 'GB'. not set
requireRealEstate boolean Keep only listings flagged 'Real Estate Included'. false
requireSellerFinancing boolean Keep only listings flagged 'Seller Financing'. false
requireManagementStays boolean Keep only listings flagged 'Management Will Stay'. false
requireRelocatable boolean Keep only listings flagged 'Relocatable'. false
includeFullDescription boolean Opens each listing's own page and adds the complete seller write up. The browse page carries only a truncated summary. One extra page load per listing. false
includeFinancials boolean Adds the listing's published revenue, plus asking price and cash flow as the financials table states them. Revenue appears only on the listing page, never on the browse page. false
includeDealTerms boolean Adds the ten deal conditions DealStream publishes: represented by a broker, buyer fee, seller financing, willing to co-broke, principals only, franchise, management will stay, relocatable and real estate. false
includeDates boolean Adds the date the listing was first posted and the date it was last renewed, which is how you tell a fresh deal from one that has been sitting. false
includeCategoryPath boolean Adds the breadcrumb category hierarchy from the listing page and the browse URL of each level. false
includeRawJsonLd boolean Adds DealStream's own schema.org Product record for the listing, untouched. Useful when you want a field this actor does not map. false
proxyMode string (2 options) DealStream remembers the IP that its bot defence blocked, so a shared datacenter address stops working after a few hundred listings. Residential is the default for that reason. 'None' is cheaper and works from a clean address, so it is worth trying for small runs. residential
countryCode string Two letter country for the residential proxy. DealStream is a US marketplace, so US is the default. US

How much does the Businesses For Sale Scraper - DealStream Listings & Deals cost?

from $1.78 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.00178 to $0.002
Business listing One business, franchise or M&A deal delivered, with 25 fields: title, industry, county level location, region, country, asking price, cash flow, currency, availability, the six DealStream flags (real estate included, seller financing, management will stay, relocatable, new arrival, franchise), rating and the listing URL. $0.00445 to $0.005
Browse page read One page of up to 25 listings read from a DealStream browse page. Charged only when that page delivered at least one listing you kept, so a page your filters emptied is free. $0.00178 to $0.002
Browser session One real browser opened on a fresh residential address and warmed through the site defence. DealStream cuts a session off after about 11 pages and remembers the address, so a long run needs a new browser roughly every 250 listings. This is the actual cost of reading a DataDome protected site, measured at $0.045 a launch, and it is billed once per launch rather than hidden inside every row. $0.0712 to $0.08
Listing page opened The listing own page opened once, which costs a full browser navigation for a single listing where a browse page costs one for 25. Charged only when you asked for at least one of the blocks below, and once per listing however many you ticked. $0.00356 to $0.004
Full description The complete seller write up. The browse page carries a truncated summary; this is the whole thing. Charged only when the listing has one. $0.00089 to $0.001
Revenue and financials The listing published revenue, plus asking price and cash flow as the financials table states them. Revenue appears only on the listing page and nowhere else on the site. Charged only when a figure was found. $0.001335 to $0.0015
Deal terms The nine deal conditions DealStream publishes: represented by a broker, buyer fee, seller financing, willing to co-broke, principals only, franchise, management will stay, relocatable and real estate. $0.001068 to $0.0012
Listing dates The date the listing was first posted and the date it was last renewed, which is how a fresh deal is told from one that has been sitting. $0.000534 to $0.0006
Category path The breadcrumb category hierarchy from the listing page, with the browse URL of each level. $0.000534 to $0.0006
Raw structured data DealStream own schema.org Product record for the listing, untouched. Useful when you want a field this actor does not map. $0.000356 to $0.0004
Browse category One browse page DealStream publishes, with its slug and the date it last changed. This is the directory of valid values for the browse field, which is the only server side filter the site allows. $0.00089 to $0.001
Sitemap read One sitemap file read to enumerate the browse pages. Charged per file, not per entry. $0.00178 to $0.002

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 Businesses For Sale Scraper - DealStream Listings & Deals 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~dealstream-listings-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "browsePaths": [
      "businesses-for-sale"
    ],
    "maxItems": 10,
    "maxPagesPerBrowsePath": 10,
    "outputs": [
      "listings"
    ],
    "requireRealEstate": false
  }'

What example inputs can I use?

Use these inputs to see how a run is configured.

input.json
{
  "browsePaths": [
    "businesses-for-sale"
  ],
  "maxItems": 10,
  "maxPagesPerBrowsePath": 10,
  "outputs": [
    "listings"
  ],
  "requireRealEstate": false
}

What do users say about the Businesses For Sale Scraper - DealStream Listings & Deals?

No reviews yet. Be the first.

How do I report an issue with the Businesses For Sale Scraper - DealStream Listings & Deals?

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 Businesses For Sale Scraper - DealStream Listings & Deals on Apify All scrapers