BizBuySell Scraper avatar

BizBuySell Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
BizBuySell Scraper

BizBuySell Scraper

Scrape business-for-sale listings from BizBuySell.com. Extract asking price, cash flow, gross revenue, location, and description from search results and category pages.

Pricing

from $3.00 / 1,000 results

Rating

5.0

(29)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

29

Bookmarked

43

Total users

17

Monthly active users

3.2 hours

Issues response

17 days ago

Last modified

Share

Scrape business-for-sale listings from BizBuySell.com, the largest online marketplace for buying and selling small businesses. Extract asking prices, cash flow, gross revenue, locations, and descriptions from search results and category pages.

What can this scraper do?

  • Search results — Enter any BizBuySell search, category, or location URL and extract every listing
  • Asking price — Listed price as both formatted ($1,150,000) and numeric (1150000) for sorting/filtering
  • Location data — City and state extracted into a single location field
  • Business descriptions — Full listing description, not truncated to card preview
  • Optional financial enrichment — Set enrichDetails: true to also pull Cash Flow (SDE), Gross Revenue, EBITDA, Real Estate, Inventory, FF&E, Rent, Established year, and Employees
  • Listing image — Each listing's photo is downloaded and re-hosted in this run's Apify storage so the URL works in any browser without Akamai blocking; original BBS CDN URL is preserved as imageOriginal
  • Automatic pagination — Walks pages 1, 2, 3... until maxItems is reached or results run out
  • Fast & free of proxy — No browser, no proxy required. Each page is one HTTP request, ~2 seconds per page

Input

FieldTypeRequiredDefaultDescription
searchUrlstringYeshttps://www.bizbuysell.com/businesses-for-sale/BizBuySell URL to scrape (search results, category, or location page). Auto-rewritten to the mobile subdomain.
maxItemsintegerNo50Maximum number of listings to extract (1--1,000)
enrichDetailsbooleanNofalseIf true, fetches each listing's detail page to add Cash Flow, Gross Revenue, EBITDA, Real Estate, Established, Employees, FF&E, Rent. One extra HTTP request per listing.
proxyobjectNoOptional. The actor uses the unprotected mobile subdomain (m.bizbuysell.com) and works without proxy from Apify datacenter IPs.

Supported URL formats

URL PatternExample
All businesses for salehttps://www.bizbuysell.com/businesses-for-sale/
State filterhttps://www.bizbuysell.com/california-businesses-for-sale/
Category filterhttps://www.bizbuysell.com/restaurant-businesses-for-sale/
City filterhttps://www.bizbuysell.com/businesses-for-sale/los-angeles-ca/
Search resultshttps://www.bizbuysell.com/businesses-for-sale/?q=laundromat
Price rangehttps://www.bizbuysell.com/businesses-for-sale/?pmin=100000&pmax=500000

Example input

{
"searchUrl": "https://www.bizbuysell.com/restaurant-businesses-for-sale/",
"maxItems": 100
}
{
"searchUrl": "https://www.bizbuysell.com/businesses-for-sale/?q=laundromat",
"maxItems": 25,
"enrichDetails": true
}

How does it bypass Akamai?

BizBuySell's main www. site is fronted by Akamai Bot Manager, which blocks datacenter IPs. The actor side-steps this entirely by hitting m.bizbuysell.com (the unprotected mobile subdomain) with curl_cffi's real-Chrome TLS fingerprint impersonation. No browser, no proxy, no retries needed — every run completes in a few seconds.

User-supplied www.bizbuysell.com URLs are auto-rewritten to m.bizbuysell.com so paste-and-run works for any of the URL formats listed above.

Why are images re-hosted?

BizBuySell's image CDN (images.bizbuysell.com) is also Akamai-fronted and intermittently 403s direct browser opens from flagged IPs (the same residential / mobile IPs that originally browsed BBS heavily). The actor downloads each image during the run using its working Chrome TLS fingerprint, stores it in this run's Apify key-value store, and emits the stable Apify-hosted URL as image. The original BBS CDN URL is kept under imageOriginal for traceability. The mirrored URL renders correctly in any browser, dashboard, or downstream tool.

What does enrichDetails add?

By default each listing record contains: title, description, url, productId, image, location, askingPrice (numeric + formatted). Set enrichDetails: true to also fetch each listing's detail page and pull labeled financial fields:

  • cashFlow — Seller's Discretionary Earnings (SDE)
  • grossRevenue — annual gross revenue
  • ebitda — earnings before interest/taxes/depreciation/amortization
  • realEstate — included real estate value (or "Owned" / "Leased")
  • inventory, ffe, rentMonthly — inventory value, FF&E, monthly rent
  • established — year the business was founded
  • employees — headcount

Output

Empty fields are omitted (no nulls / blank strings reach the dataset).

Always-present fields

FieldTypeDescription
urlstringDirect link to the listing on www.bizbuysell.com
productIdstringBizBuySell's numeric listing ID
titlestringBusiness listing title
descriptionstringListing summary (full text, not truncated)
searchUrlstringThe search URL this listing was found on (mobile-rewritten)
scrapedAtstringISO 8601 UTC timestamp

Usually-present fields

FieldTypeDescription
locationstringCity, State (e.g. Bonita Springs, FL)
imagestringApify-hosted URL of the listing's primary photo (mirrored for browser-friendly access)
imageOriginalstringOriginal BizBuySell CDN URL (Akamai-fronted; may 403 from flagged IPs in browsers)
askingPricestringFormatted price (e.g. $1,150,000) or "Not Disclosed"
askingPriceNumericintegerNumeric price for filtering/sorting (omitted when "Not Disclosed")

enrichDetails: true — additional fields per listing

FieldTypeDescription
askingPriceDetailstringAsking price as shown on the detail page (may include qualifiers)
cashFlowstringSeller's Discretionary Earnings (SDE)
grossRevenuestringAnnual gross revenue
ebitdastringEBITDA
realEstatestringReal estate value or status (Owned, Leased, $X*)
inventorystringInventory value (often "Included" or $X)
ffestringFurniture, fixtures & equipment
rentMonthlystringMonthly rent
establishedstringYear founded (or "Not Disclosed")
employeesstringNumber of employees
categorystringBizBuySell business category (when populated by source)

Sample output (without enrichDetails)

{
"url": "https://www.bizbuysell.com/business-opportunity/outpatient-physical-therapy-practice-for-sale/2501583/",
"productId": "2501583",
"title": "Outpatient Physical Therapy Practice For Sale",
"description": "A 32-year operating history, approximately $1.56M in FY 2025 revenue, and an embedded referral network that has reached 700+ physicians — this owner-operated outpatient physical therapy practice in Southwest Florida is a thriving, fully operational business...",
"image": "https://api.apify.com/v2/key-value-stores/e3sxDlkCKsIIMTxzg/records/image-2501583.webp",
"imageOriginal": "https://images.bizbuysell.com/shared/listings/250/2501583/895434dc-989d-4045-86b2-5f0e3396481e-W336.webp",
"location": "Bonita Springs, FL",
"askingPrice": "$1,150,000",
"askingPriceNumeric": 1150000,
"searchUrl": "https://m.bizbuysell.com/established-businesses-for-sale/",
"scrapedAt": "2026-05-02T08:25:18.567890+00:00"
}

Sample output (with enrichDetails: true)

Adds the financial fields by fetching each listing's detail page (one extra HTTP request per listing):

{
"url": "https://www.bizbuysell.com/business-opportunity/outpatient-physical-therapy-practice-for-sale/2501583/",
"productId": "2501583",
"title": "Outpatient Physical Therapy Practice For Sale",
"location": "Bonita Springs, FL",
"askingPrice": "$1,150,000",
"askingPriceNumeric": 1150000,
"askingPriceDetail": "$1,150,000",
"cashFlow": "$319,844",
"grossRevenue": "$1,562,370",
"ebitda": "$233,264",
"realEstate": "$2,095,000*",
"established": "Not Disclosed",
"image": "https://api.apify.com/v2/key-value-stores/e3sxDlkCKsIIMTxzg/records/image-2501583.webp",
"imageOriginal": "https://images.bizbuysell.com/shared/listings/250/2501583/895434dc-989d-4045-86b2-5f0e3396481e-W336.webp",
"description": "A 32-year operating history...",
"searchUrl": "https://m.bizbuysell.com/established-businesses-for-sale/",
"scrapedAt": "2026-05-02T08:25:18.567890+00:00"
}

Tips for best results

  • Start with a small maxItems (5–10) to verify your URL works before running large jobs
  • Each search page yields ~55–58 listings, so maxItems: 100 typically completes in 2 page fetches
  • Use specific category or location URLs to get targeted results — pagination respects all BizBuySell URL filters
  • Set enrichDetails: true if you need financial figures (Cash Flow, Revenue, EBITDA) — adds one HTTP request per listing
  • Some listings show "Not Disclosed" for asking price — this is BizBuySell's actual display value, not a scraper limitation
  • Empty fields are omitted from output records; downstream consumers always see a stable schema

Limitations

  • Only US-based businesses are listed on BizBuySell — the scraper does not cover international marketplaces
  • "Not Disclosed" prices yield no askingPriceNumeric; sort/filter logic should treat those records separately
  • Some sponsored / featured listings may not have a productId and are filtered out
  • Detail-page financial fields are only present when the seller has filled them in
  • BizBuySell may rate-limit aggressive scraping; the actor inserts a 0.5s pause between requests to stay polite

Frequently Asked Questions

Do I need a BizBuySell account to use this scraper? No. All listing data is publicly accessible.

How many listings can I scrape? Up to 1,000 per run via maxItems. BizBuySell pages have ~55–58 listings each, so a 1,000-item run walks ~18–19 pages.

Why is the asking price "Not Disclosed" for some listings? Some sellers choose to hide their asking price. The scraper preserves whatever BizBuySell displays.

Can I filter by business type, location, or price range? Yes. Apply your filters on bizbuysell.com, copy the resulting URL, and paste it as searchUrl. The scraper follows every filter encoded in the URL — category, state, city, price range (pmin/pmax), keyword (q), etc.

Do I need a proxy? No. The actor uses BizBuySell's mobile subdomain (m.bizbuysell.com), which is unprotected. Runs work from any Apify datacenter IP without proxy.

Why is the scraper so fast? HTTP-only — no browser launch, no anti-bot challenge wait. Each page is one request that returns a structured SearchResultsPage JSON-LD payload with all listing data ready to extract. Typical run: 2–10 seconds.

What if I need cash flow / revenue but enrichDetails is too slow? At ~0.5s per listing, enrichment for 50 listings takes ~30s — well within reasonable run times. If you need bulk enrichment for thousands of listings, run multiple smaller jobs in parallel with different searchUrl filters.

What happens if no listings are found? The actor exits with a clear failure message. This usually means the URL was invalid, returned no results (e.g. an over-narrow filter), or the BBS site was temporarily unreachable. Re-run or widen your filter.