BizBuySell Businesses for Sale Scraper
Pricing
from $0.99 / 1,000 businesses
BizBuySell Businesses for Sale Scraper
Scrape businesses for sale from BizBuySell. Filter by state, industry, asking price, cash flow and revenue, and get listings with financials, location, broker and detail URL.
Pricing
from $0.99 / 1,000 businesses
Rating
0.0
(0)
Developer
DataCach
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape every business for sale on BizBuySell into clean, structured JSON, CSV or Excel — filter by state, industry, asking price, cash flow and revenue exactly like the site's own search, and export the results without writing a line of scraping code or pasting a single URL.
What is BizBuySell Businesses for Sale Scraper?
BizBuySell Businesses for Sale Scraper extracts business-for-sale listings from BizBuySell, the largest online marketplace for buying and selling small and medium businesses in the United States. Every listing becomes a structured row with title, description, location, asking price, cash flow, gross revenue, EBITDA, listing type, broker company and a direct link to the deal.
You don't need to find or paste search URLs. You fill in the same filters you would click on BizBuySell — states, industries, listing types, price and cash flow ranges — and the Actor builds the search for you, paginates through it, and pushes each business to a dataset you can export as JSON, CSV, Excel, HTML or XML, or read straight from the Apify API.
What can this BizBuySell scraper do?
- 🔎 Search without URLs — 20+ structured filters mirroring BizBuySell's own search: keyword, states, industries, listing types, asking price, cash flow, gross revenue, year established, date added, and deal toggles like seller financing, real estate included, absentee ownership and home-based businesses.
- 🧩 Breaks through BizBuySell's 10,000-result ceiling — any single BizBuySell search stops at 10,000 results. When your filters match more than that, the Actor automatically splits the search by state, industry and price band, runs the pieces and merges them, so a nationwide sweep really does return everything.
- 🔁 Never collect the same business twice — paste the URLs (or listing numbers) you already have into Exclude already collected, and those listings are skipped on every future run.
- 💾 Resumable runs — crawl progress is checkpointed to the key-value store, so a migrated or restarted run picks up where it left off instead of re-emitting listings it already delivered.
- ⏱️ Extraction timestamps on every row —
extraction_datetime(ISO-8601 UTC) andextraction_datelet you build time series, track price drops and audit when each record was captured. - 🔀 Sort before you cap — combine Sort results by with Maximum results to pull, say, the 100 highest-cash-flow businesses in Texas rather than an arbitrary 100.
- 🛡️ Proxy rotation and anti-bot handling built in — the Actor rotates residential proxy sessions and HTTP fingerprints, retries with exponential backoff and degrades gracefully, so you don't configure anything.
- ⚡ No browser, no bloat — it queries BizBuySell's JSON search endpoint directly instead of rendering pages, which keeps runs fast and memory small (capped at 512 MB).
- 🔌 Full Apify platform power — scheduled runs, run monitoring and alerts, webhooks, and one-click integrations with Make, Zapier, Google Sheets, Airtable, Slack and your CRM or BI tool.
What data does the BizBuySell scraper extract?
Each dataset item is one business listing. These are the main fields:
| Field | Type | Description |
|---|---|---|
listingNumber | number | BizBuySell's internal listing ID — a stable key for deduplication. |
url | string | Direct link to the listing's detail page on BizBuySell. |
title | string | Listing headline. |
description | string | Listing summary text. |
location | string | Location as shown on the listing, e.g. "Totowa, NJ". |
county | string | City/county parsed out of location. |
state | string | Two-letter US state code. |
region | string | Region code returned by BizBuySell. |
askingPrice | number | Asking price in USD, when disclosed. |
cashFlow | number | Annual cash flow (seller's discretionary earnings) in USD, when disclosed. |
grossRevenue | number | Annual gross revenue in USD, when disclosed. |
ebitda | number | EBITDA in USD, when disclosed. |
listingType | string | established, assetSale, realEstate or startup. |
financingTypeId | number | BizBuySell financing-type code. |
realEstateIncluded | boolean | Whether property is included in the asking price. |
brokerCompany | string | Listing broker's company name. |
brokerName | string | Listing broker's contact name. |
brokerCertifications | string | Broker professional certifications. |
isHotProperty | boolean | Flagged by BizBuySell as a "hot" property. |
isRecentlyAdded | boolean | Recently added to the marketplace. |
isPriceReduced | boolean | Asking price was recently reduced. |
auctionStartDate / auctionEndDate | string | Auction window, for auction-style listings. |
imageUrl | string | Listing photo URL. |
extraction_datetime | string | ISO-8601 UTC timestamp of when the listing was scraped. |
extraction_date | string | Extraction date in mm-dd-yyyy format. |
🔒 Broker phone numbers and email addresses are deliberately excluded. Only company-level business information is collected.
How do I scrape BizBuySell listings?
- Click Try for free on the Actor page, or create a free Apify account.
- Open the Input tab and set your filters — states, industries, listing types, asking price and cash flow ranges. Every field is optional; leaving everything empty searches all of BizBuySell.
- Set Maximum results to something small (like 20) for a first look, and pick a Sort results by order so the cap keeps the listings you actually care about.
- Click Start. Watch progress in the Log tab — the Actor reports how many listings it has pushed and whether it had to split an oversized search.
- When the run finishes, open the Storage → Dataset tab to preview and filter the results.
- Export as JSON, CSV, Excel, HTML or XML, or fetch the data programmatically with the Apify API, the JavaScript client or the Python client.
- Optional: hit Schedule to re-run it daily or weekly, and set Date added to
Last 3 daysso each run only pulls fresh listings.
Input
All input is optional — just click Run to scrape the full nationwide BizBuySell feed. In plain language, you can set:
- Keyword — free-text search across titles and descriptions, e.g.
pizza,car wash,franchise. Searchingfranchisereturns franchise resales listed for sale as businesses, not BizBuySell's separate Franchises section — see the FAQ. - States — pick one or more US states; empty means nationwide.
- Industries — top-level BizBuySell categories such as Restaurants & Food or Health Care & Fitness. Subcategories are included automatically.
- Listing types — established businesses, asset sales, real estate, start-ups.
- Financial filters — minimum and maximum asking price, cash flow and gross revenue, in USD.
0means "no bound". - Listing filters — established after year, date added (anytime / 3 / 7 / 30 days), real estate for sale or lease, plus toggles for published price only, commercial location only, include relocatable, seller financing offered, real estate included, absentee ownership possible.
- Sort results by — featured, price or cash flow, ascending or descending.
- Maximum results — stop after N businesses;
0collects everything that matches. On the free plan a run returns up to 25 listings. - Exclude already collected — listing URLs or numbers you already have, so they are never saved again (available on paid plans).
- Parallel requests (advanced) — how many requests run at once. The default of 4 is tuned for reliability.
See the Input tab for the full schema with descriptions, defaults and tooltips.
Free plan vs. paid plan
The Actor runs on any Apify account, including the free one. Two limits apply to free accounts so you can evaluate the data before committing:
| Free account | Any paid plan | |
|---|---|---|
| Results per run | Up to 25 listings, even with Maximum results set higher or to 0 | Unlimited — 0 collects every listing that matches your filters |
| Exclude already collected | Ignored (the run logs a warning) | Full support — skip listings you already have so you never pay for them twice |
| Every filter, field and export format | ✅ Included | ✅ Included |
Nothing else changes: free runs return the same fields, the same accuracy and the same export options — just fewer rows. Twenty-five listings is enough to check that the financials, location and broker data fit your pipeline before you scale up. Upgrading the account lifts both limits immediately; no change to your input is needed.
How much does it cost to scrape BizBuySell?
You pay per listing saved to the dataset — nothing else. Compute, proxies, retries and storage are already included in the price, so the number you see below is the number you pay. The rate drops as your Apify plan grows:
| Your Apify plan | Price per 1,000 listings | 100 listings | 10,000 listings | 50,000 listings |
|---|---|---|---|---|
| Free | $3.00 | $0.30 | — | — |
| Starter | $2.00 (−33%) | $0.20 | $20 | $100 |
| Scale | $1.50 (−50%) | $0.15 | $15 | $75 |
| Business | $0.99 (−67%) | $0.099 | $9.90 | $49.50 |
On the Free plan a run returns at most 25 listings, so the higher-volume columns only apply from Starter upwards.
Three things that keep the bill predictable:
- You are never charged twice for the same listing. Duplicates are removed inside every run, and anything you list under Exclude already collected is skipped before it reaches the dataset — so a weekly monitoring run only bills you for what is genuinely new.
- Failed and retried requests are free. Bot protection, timeouts and retries are on us; only listings that actually land in your dataset count.
- The default is deliberately cheap. Maximum results starts at 100, so a first exploratory run costs about $0.20 on Starter. Raise the cap once the output looks right.
To estimate a run before starting it, apply your filters on bizbuysell.com and read the result count off the page — that is very close to what the Actor will return and bill.
Output example
Real records produced by the Actor:
[{"listingNumber": 2538659,"url": "https://www.bizbuysell.com/business-opportunity/own-a-popular-turnkey-texmex-fast-casual-national-franchise-restaurant/2538659/","title": "Own a Popular Turnkey TexMex Fast Casual National Franchise Restaurant","description": "Established TexMex Fast Casual Franchise Restaurant - Totowa, NJ This turnkey franchise restaurant represents an exceptional opportunity to acquire a proven QSR concept in a prime downtown Totowa...","location": "Totowa, NJ","county": "Totowa","state": "NJ","region": "NJ","askingPrice": 165000.0,"cashFlow": 59000.0,"grossRevenue": null,"ebitda": null,"listingType": "established","financingTypeId": 0,"realEstateIncluded": false,"brokerCompany": null,"brokerName": null,"brokerCertifications": null,"isHotProperty": false,"isRecentlyAdded": true,"isPriceReduced": false,"auctionStartDate": null,"auctionEndDate": null,"imageUrl": "https://images.bizbuysell.com/shared/listings/253/2538659/02d93e46-557c-4a27-a5f2-62ba62339a92-W336.webp","extraction_datetime": "2026-08-07T20:19:56.445336+00:00","extraction_date": "08-07-2026"},{"listingNumber": 2533918,"url": "https://www.bizbuysell.com/business-opportunity/fireplace-and-hearth-retailer-central-maryland-30-years-established/2533918/","title": "Fireplace & Hearth Retailer | Central Maryland | 30+ Years/Established","description": "FINANCIAL SNAPSHOT Asking Price: $449,000 Annual Revenue: $646,500 Annual Cash Flow: $145,000 Inventory at Cost: $250,000...","location": "Westminster, MD","county": "Westminster","state": "MD","region": "MD","askingPrice": 449000.0,"cashFlow": 145000.0,"grossRevenue": null,"ebitda": null,"listingType": "established","financingTypeId": 0,"realEstateIncluded": false,"brokerCompany": null,"brokerName": null,"brokerCertifications": null,"isHotProperty": false,"isRecentlyAdded": false,"isPriceReduced": false,"auctionStartDate": null,"auctionEndDate": null,"imageUrl": "https://images.bizbuysell.com/shared/listings/253/2533918/f39d8b3d-8e47-428c-90b4-df9952886a68-W336.webp","extraction_datetime": "2026-08-07T20:19:56.445336+00:00","extraction_date": "08-07-2026"}]
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Use cases: who scrapes BizBuySell data?
- 🏢 Acquisition entrepreneurs and searchers — run a standing search for businesses in your buy box (industry + state + cash flow band) and get new listings delivered daily.
- 💼 Search funds and SMB private equity — automate deal sourcing across many geographies at once instead of checking the site market by market.
- 🤝 Business brokers and M&A advisors — build comparable-sale databases, benchmark asking-price and cash-flow multiples, and watch competing listings in your niche.
- 📊 Market researchers and analysts — study small-business valuations, regional M&A activity and how asking prices move over time using the extraction timestamps.
- 🎯 Lead-generation teams — identify business owners actively looking to exit and feed the list into your CRM through Apify's integrations.
- 🛠️ Developers and data teams — pull fresh BizBuySell data into an internal tool, dashboard or warehouse with the Apify API, no scraping infrastructure to maintain.
Other Actors you might like
| Actor | What it does |
|---|---|
| Your other Actor | Short description |
| Your other Actor | Short description |
Browse Apify Store for more scrapers you can chain with this one.
FAQ
Is it legal to scrape BizBuySell?
This Actor collects only publicly available listing information that any visitor to bizbuysell.com can already see. It does not access private, gated or personal data, and it deliberately omits broker phone numbers and email addresses. You are responsible for using the extracted data in compliance with BizBuySell's Terms of Service and applicable law, including data-protection rules such as GDPR and CCPA where relevant. This Actor is not affiliated with, endorsed by or sponsored by BizBuySell.
Do I need proxies to scrape BizBuySell?
No. Proxy rotation is built in and requires no configuration. The Actor rotates residential proxy sessions and HTTP fingerprints on every request, and retries with exponential backoff when BizBuySell's bot protection pushes back.
How do I scrape more than 10,000 BizBuySell listings?
You don't have to do anything. BizBuySell caps any single search at 10,000 results, so when your filters match more, the Actor automatically subdivides the search by state, industry and price band, crawls each slice and merges the output. The log tells you when a split happened.
How do I avoid scraping duplicate listings across runs?
Two mechanisms. Within a run, listings are deduplicated by listingNumber — this works on every account. Across runs, paste the url (or listingNumber) values from your previous dataset into Exclude already collected and those businesses are never saved again; this one needs a paid plan, as free runs ignore the list. For scheduled monitoring, set Date added to Last 3 days so each run only touches fresh listings — that works on any account and is the cheaper approach anyway, since it also cuts the crawling work rather than just filtering the output.
Can I schedule the BizBuySell scraper to run daily?
Yes. Use the Schedule button on the Actor page to run it hourly, daily or weekly, and connect a webhook or an integration such as Google Sheets, Airtable, Slack, Make or Zapier to receive each new batch automatically.
Can I use the BizBuySell scraper via API?
Yes. Every run and dataset is reachable through the Apify API, the JavaScript client and the Python client, so you can trigger runs and pull results directly into your own application.
Does it scrape the full BizBuySell listing detail page?
No — this Actor reads BizBuySell's search results, which is what makes it fast and lets it sweep entire states in one run. Detail-page-only fields such as number of employees, year established, inventory value or reason for selling are not included. Every listing does come with its url, so you can follow up on the ones that matter.
Does it scrape BizBuySell franchise opportunities?
No. BizBuySell's search has two separate sections — Businesses and Franchises — and this Actor covers Businesses for sale only. The two are different products: a franchise opportunity is a franchisor offering new units nationwide, described by required investment, liquid capital, net worth and franchise fees, whereas a business listing is one operating company at one address with an asking price, cash flow and revenue.
What can confuse: searching the keyword franchise does return listings, but those are franchise resales — an existing franchised location (a specific store) whose owner is selling it. Those are genuine Businesses-section listings and this Actor collects them in full. What it does not collect is the Franchises section's new-unit opportunities.
Why are some fields null?
Because BizBuySell sellers choose what to disclose. Many listings withhold cashFlow, grossRevenue or ebitda, and a large share do not publish an asking price at all. A null means the marketplace itself does not expose that value for that listing — it is not a scraping error. Turn on Listings with a published price only if you want to exclude them.
Why did my run return fewer results than expected?
Either your filters are narrower than you think — check the same filters on bizbuysell.com — or Maximum results capped the run. On the free plan, runs return up to 25 listings. Very rarely, sustained bot protection can end a run early; the Actor logs this clearly, keeps everything it already collected in the dataset, and a retry a little later normally succeeds.
💡 Pro tips
- Narrow before you scale. Validate one state or industry against the live site before launching a nationwide sweep.
- Sort deliberately. Price: high to low plus a result cap gives you the top of the market; Cash flow: high to low gives you the most profitable operations.
- Track price drops by scheduling weekly runs and comparing
askingPriceperlistingNumberusing theextraction_datefield. - Leave parallel requests at 4 unless a run is timing out — pushing it higher trips bot protection more often and can end up slower.
- Chain it into your stack with Apify integrations: straight to Google Sheets for review, or to a webhook that scores new deals against your buy box.
Support
Found a bug or want a field added? Open an issue in the Actor's Issues tab in Apify Console — bug reports and feature requests are read and welcome. For custom scraping solutions, higher-volume needs or a tailored data pipeline, get in touch through the support contact on the Actor page.