Businesses For Sale Scraper - DealStream Listings & Deals avatar

Businesses For Sale Scraper - DealStream Listings & Deals

Pricing

from $4.45 / 1,000 business listings

Go to Apify Store
Businesses For Sale Scraper - DealStream Listings & Deals

Businesses For Sale Scraper - DealStream Listings & Deals

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.

Pricing

from $4.45 / 1,000 business listings

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

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 itWhat they scrape DealStream for
Search funds and acquirersNew deals in a size band and an industry, before the broker calls back
Business brokersWhat comparable businesses are asking and what they earn
Private equity and family officesDeal flow by region, sector and cash flow, on a schedule
Lenders and SBA underwritersAsking price against cash flow across a sector, for a sanity band
Market analystsMultiples 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 allDealStream 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 ownAsking 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 showsTurn on the financials block and each listing carries its published revenue alongside asking price and cash flow.
The nine deal termsRepresented 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 nothingPrice band, cash flow floor, region, country, keywords and the six flags. A listing a filter drops is never written and never billed.
Browse pages onlyDealStream'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.

FeatureParseForge DealStreamscrapesage/bizbuysellsolidcode/bizquesthaketa/businessesforsale
Covers DealStreamYesNoNoNo
Asking price and cash flow on the base rowYesYesYesYes
RevenueOptional blockOptional blockOptional blockNo
Nine deal termsYesNoNoNo
Browse category directoryYesNoNoNo
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 }

Pricing

Pay-per-event: $0.005 per listing, dropping to $0.00445 at higher volume, plus $0.002 per browse page of 25, $0.08 per browser session, and a $0.008 run-start fee. That last figure is $0.002 a gigabyte and the actor runs in a 4 GB container, because that is what a real browser needs. That last one is the honest cost of a DataDome site, and it is measured rather than guessed: a browser launch costs $0.045 to run, DealStream cuts each one off after about 11 pages and remembers the address, so a long run opens a fresh browser roughly every 250 listings.

Listings collectedBase rowEvery block on
100$0.60$2.25
1,000$5.41$22.39
10,000$54.01$223.81

Each optional block is billed separately and only when it actually returned something: opening the listing page $0.004, full description $0.001, revenue and financials $0.0015, deal terms $0.0012, listing dates $0.0006, category path $0.0006, raw record $0.0004. Browse category rows are $0.001 each and a sitemap read is $0.002.

The right hand column is higher than you might expect, and the reason is worth knowing before you tick the boxes: a browse page returns 25 listings in one browser navigation, and a listing page returns one. Turning on any block that needs the listing page makes the run about 25 times more browser work per row. Leave them off unless you need revenue, the deal terms or the dates. New Apify accounts start with $5 in free credit.

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

QuestionAnswer
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.

Browse the full ParseForge collection for more scrapers.

🆘 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.