BizBuySell Scraper - Businesses for Sale & Cash Flow
Pricing
from $2.13 / 1,000 listing delivereds
BizBuySell Scraper - Businesses for Sale & Cash Flow
Scrape BizBuySell businesses for sale by keyword, state, city or URL: asking price, cash flow, category, seller financing, broker and phone. Optional listing page with revenue, EBITDA, inventory, employees, rent and reason for selling. New-listing alerts.
Pricing
from $2.13 / 1,000 listing delivereds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
10 hours ago
Last modified
Categories
Share
BizBuySell Scraper: businesses for sale, cash flow, revenue and brokers
Scrape BizBuySell, the largest marketplace of businesses for sale in the United States, without an account. Search by keyword, state or city, paste any BizBuySell search URL, or paste listing links. Every listing comes with the asking price, cash flow (SDE), location, category, seller financing, price-reduced and "hot" flags, who listed it (broker or owner), the broker company, contact name and phone, and its position in the results.
Turn on the full listing page and you also get gross revenue, EBITDA, inventory and FF&E (and whether they are included in the price), year established, employees, real estate, rent and lease, facilities, competition, growth, financing terms, support and training, reason for selling, the full description and the city and street when published.
Built for deal flow: schedule the same search every day and get only the listings that are new, or whose asking price changed. A quiet day costs nothing.
At a glance
- Price per 1,000 listings, Free plan: US$ 2.50
- Full listing page (optional): US$ 4.00 per 1,000, on top, plus US$ 0.005 per run that opens listing pages
- Fee per run start for searches: None
- Keywords, US states and cities, search URLs and listing links: Yes
- Asking price, cash flow and gross revenue filters: Yes, with BizBuySell's own filters
- Listed in the last N days filter: Yes
- Seller financing, real estate included, price reduced: Yes, as filters and as fields
- Broker company, contact name and phone: Yes, when the listing shows them
- Only new listings since the last run (
onlyNew): Yes, free when nothing is new - Asking price tracking between runs: Yes
- BizBuySell categories, listing type, year established and sort order: Yes, BizBuySell's own filters
- Industry and category path: Yes, from BizBuySell's own category tree
- Error rows (bad URL, no results, site refusal): Free, with an
errorCode - Spend control: a per-search limit and an optional cap for the whole run (
maxTotalItems)
What it fixes
- Gross revenue on search results, not only on pasted links. With full listing pages on, every row of a keyword, state or category search gets the gross revenue, EBITDA, year established, inventory and FF&E of its own page.
- Year established, real estate, building size, rent and lease expiration are filled when the listing
publishes them, and the lease date also comes as a real date (
leaseExpirationDate,2030-01-01), never as 1970-01-01. - Full category path:
industry("Restaurants & Food"),subcategory("Bars, Pubs & Taverns") andcategoryFull("Restaurants & Food > Bars, Pubs & Taverns"), from BizBuySell's own category tree: on every row with the listing page, on every row of a category search or category URL, and on featured rows of other searches. - Your limit is respected. A
limit,results_wantedormaxListingspasted from another BizBuySell actor gives that many listings and that many charges, not this form's default of 50. - Proxy settings never break the run. No custom proxy session names that the proxy can refuse, and a pasted
"useApifyProxy": falseis replaced by the default Apify Proxy, which the searches need. - Fewer refusals. When BizBuySell refuses a search, the Actor retries it by itself before giving up.
- When was it listed? BizBuySell shows the listing date only to paying members, so no actor can read it from
the public page. Use
listedWithinDays(BizBuySell's own "added in the last N days" filter) for fresh listings, andonlyNew+trackPriceChangeson a schedule:firstSeenAtis the first time your search saw the listing.
Switching from another BizBuySell actor? Your existing input works
Paste the input you already use. These names and values are read as they are:
| You may already send | Read as |
|---|---|
keyword, queries, searchKeyword | searchTerms |
location, searchLocation, state + area ("texas" + "dallas") | locations |
startUrls (text or { "url": ... }), urls; mode: "url" or useQueryBuilder: false | URLs only, other filters ignored |
category (restaurants-and-food), industryIds (["17"]) | categories |
limit, results_wanted, maxItemsPerSearch | maxItems |
maxListings | maxTotalItems (cap for the whole run) |
max_pages, maxPages | maxPages |
minAskingPrice, maxAskingPrice | minPrice, maxPrice |
minCashflow, maxCashflow | minCashFlow, maxCashFlow |
minGrossRevenue, minGrossIncome, maxGrossIncome | minRevenue, maxRevenue |
establishmentDate (a year) | establishedAfter |
listingType: all, established, asset-sale | listingType |
sortBy: default, newest, price-asc, price-desc, cashflow-desc | sortBy |
fetchDetails, enrich_data, includeListingDetails | includeDetails |
incrementalMode | onlyNew + trackPriceChanges |
{ "keyword": "laundromat", "location": "Florida", "listingType": "established", "maxAskingPrice": 900000, "sortBy": "price-asc", "maxListings": 25 }
{ "useQueryBuilder": true, "state": "texas", "area": "dallas", "industryIds": ["17"], "minCashflow": 100000, "limit": 50, "enrich_data": true }
When a single URL comes with a single keyword (as some actors take them), the keyword filters that URL: one search, not two.
One real row
From a test on 2026-10-08 (location "Florida", with the listing page). Long texts are shortened here, and the contact fields are replaced with placeholders; the Actor returns them as the listing shows them.
{"type": "listing","listingId": "2522913","title": "Established Commercial Painting Contractor","url": "https://www.bizbuysell.com/business-opportunity/established-commercial-painting-contractor/2522913/","askingPrice": 16000000,"cashFlow": 3850000,"location": "Jacksonville, FL","state": "FL","category": "Building & Construction Service","sellerFinancing": true,"realEstateIncluded": false,"priceReduced": false,"hotProperty": true,"listedBy": "broker","brokerCompany": "<broker company>","contactName": "<broker name>","contactPhone": "<phone>","imageCount": 6,"position": 61,"page": 2,"searchInput": "Florida","hasDetails": true,"grossRevenue": 16380000,"inventory": 145000,"inventoryIncludedInPrice": false,"ffe": 675000,"ffeIncludedInPrice": true,"employees": "32 (30 Full-time, 2 Contractors)","financing": "Seller financing available\nDetails will be provided during due diligence.","supportAndTraining": "The owner is willing to provide a reasonable transition period to introduce key customer and vendor relationships...","reasonForSelling": "retiring","tagline": "Serving Multiple States with Experienced Team","address": {"street": null, "city": "Jacksonville", "state": "Florida"},"scrapedAt": "2026-10-08T01:56:45Z"}
Rows also carry ebitda, summary, industry, subcategory, categoryFull, categoryId, listingType
(established, asset sale, startup, real estate...), recentlyAdded, recentlyUpdated, brokerProfileUrl,
image and, with the listing page, description, facilities, competition, growthAndExpansion,
yearEstablished, realEstate (Leased or Owned), buildingSqft, rent, leaseExpiration, leaseExpirationDate,
detailLocation, categoryPath (the primary and secondary categories the seller picked), images and
otherDetails (any other line the listing has). A value the seller marked "Not Disclosed" comes back as null.
BizBuySell's search results carry the category only for featured listings, so on a keyword or location search
without the listing page industry can be null; search by category, or turn on the listing page, to have it on
every row.
How to use it
By keyword and location. Each keyword runs in each location:
{"searchTerms": ["laundromat", "car wash"],"locations": ["Texas", "Phoenix, AZ"],"maxPrice": 800000,"maxItems": 200}
By URL. Open BizBuySell, pick a state, city or industry, and paste the address. The Actor pages through the results by itself:
{"startUrls": ["https://www.bizbuysell.com/texas-businesses-for-sale/","https://www.bizbuysell.com/restaurants-and-food-businesses-for-sale/"],"minCashFlow": 200000}
By listing link. Paste listing URLs (they contain /business-opportunity/). Each comes back with the full page.
By category. Use BizBuySell's industries or narrower categories, alone or with keywords and locations:
{"categories": ["Restaurants & Food", "Laundromats"],"locations": ["Florida", "Austin, TX"],"listingType": "established","sortBy": "cashflow-desc","maxItems": 50,"maxTotalItems": 150}
Filters: minPrice/maxPrice (asking price), minCashFlow/maxCashFlow, minRevenue/maxRevenue,
listedWithinDays, establishedAfter (a year), listingType (established, asset-sale, startup) and
categories use BizBuySell's own filters; sortBy uses BizBuySell's own orders (newest, asking price, cash flow).
A search URL keeps its own filters too (the ?q= part BizBuySell adds). sellerFinancingOnly, realEstateIncludedOnly and
priceReducedOnly keep only matching listings; the others are skipped and not charged.
Daily deal alerts
Schedule the Actor with the same input every day and turn on:
onlyNew: only listings this search never returned before. The first run delivers up tomaxItemsand remembers everything it read; later runs deliver only what is new. Listings already seen are not charged.trackPriceChanges: every row getspreviousPrice,priceChange,priceChangePct,isPriceDrop,isNewListing,firstSeenAtandpreviousSeenAt. WithonlyNewon too, listings whose asking price changed are delivered as well.onlyPriceDrops: with both of the above, of the listings seen before, only the ones that got cheaper.
Tip: combine onlyNew with listedWithinDays: 7 for a cheap daily feed of fresh listings.
The memory lives in a key-value store in your own account (bizbuysell-scraper-state), one entry per search and
filters. Delete it to start over.
Who uses this
- Search funds and individual buyers screening small businesses by cash flow, price and location.
- Private equity and holding companies building acquisition pipelines in one industry.
- Business brokers watching competing listings, prices and price cuts in their territory.
- SBA lenders, valuation firms and researchers collecting asking-price multiples by industry and state.
Limits and good to know
- BizBuySell returns 50 listings per page and up to 10,000 per search. Split large searches by state or filters.
- BizBuySell's cash flow and revenue filters also let through listings whose seller did not disclose that figure
(the field comes back
null). - Gross revenue, EBITDA and the detailed information are only on the listing page (
includeDetails). Cash flow is on every row when the seller published it. - New-franchise ads that BizBuySell mixes into the results are skipped; set
includeFranchisesto keep them. Broker ads and partner real-estate auctions mixed into the results are always skipped. maxItemsis per search (each keyword, location and category combination, or URL);maxTotalItemscaps the whole run, andmaxPagesthe result pages read per search.- Searches work with the default Apify Proxy (a proxy turned off in the input is replaced by it). If you get
BLOCKEDrows, switch the proxy to the RESIDENTIAL group with country US. - Contact names and phones are the ones the listing publishes for buyers. Use them according to the laws that apply to you (for example, US telemarketing rules).
Pricing
Pay per listing: US$ 2.50 per 1,000 listings on the Free plan (lower on paid Apify plans), plus US$ 4.00 per
1,000 for listings delivered with the full listing page and US$ 0.005 per run that opens listing pages. Search-only
runs have no start fee. Error rows, duplicates and listings skipped by filters or onlyNew are never charged.
Error codes
| errorCode | Meaning |
|---|---|
INVALID_INPUT | The URL is not a BizBuySell search or listing link, a location was not understood, or a filter is wrong |
NO_RESULTS | BizBuySell found no listing for this search and filters |
NOT_FOUND | The listing does not exist (sold, removed or a wrong link) |
BLOCKED | The site refused every attempt on fresh IPs; run again in a few minutes |
NOT_REACHED | The run timeout came before this input |
UNEXPECTED | Anything else; run again, and open an issue if it repeats |
FAQ
Do I need a BizBuySell account? No. The Actor reads public listings only.
Does it get sold listings? No. Only listings that are live on BizBuySell at run time.
Can I search outside the US? BizBuySell's US site only. Canadian and other listings that appear in US searches are delivered as they are.
Changelog
- 2026-10-09: input from other BizBuySell actors works as it is (see the table above); new
categories,listingType,establishedAfter,sortBy,maxTotalItemsandmaxPages;industry,subcategory,categoryFull,categoryIdandlistingTypeon every row; with the listing page,yearEstablished,realEstate,buildingSqft,rentandleaseExpirationare now filled (they were alwaysnull), plusleaseExpirationDateanddetailLocation; search URLs keep their?q=filters; broker ads and real-estate auctions no longer come as listings; fewer refused searches. - 2026-10-08: first version.