BizBuySell Business Listings Scraper
Pricing
Pay per event
BizBuySell Business Listings Scraper
📊 Extract public BizBuySell listings, asking prices, seller-disclosed financials, operating details, and broker contacts for acquisition sourcing.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Turn public BizBuySell business-for-sale searches into clean, analysis-ready data.
Collect listing IDs, titles, descriptions, locations, asking prices, images, availability, and canonical URLs. Enable detail enrichment to add seller-disclosed cash flow or SDE, gross revenue, EBITDA, real estate, inventory, FF&E, rent, established year, employees, and public broker fields when available.
Use the scraper for recurring acquisition sourcing, new-listing monitoring, broker research, lending analysis, and market comparables. No BizBuySell account is required for supported public pages.
What does BizBuySell Business Listings Scraper do?
The Actor accepts national or US-state BizBuySell businesses-for-sale URLs.
It then:
- 🔎 normalizes supported
www.bizbuysell.comURLs to the public mobile surface; - 📄 follows bounded path-based pagination;
- 🧩 reads structured listing data from page JSON-LD;
- 🔐 deduplicates records by BizBuySell
productId; - 🎯 applies optional minimum and maximum asking-price filters;
- 💰 optionally enriches each record from its public detail page;
- 📦 saves typed records to an Apify dataset for export or integration.
Unsupported city and category paths fail clearly instead of silently returning the wrong geographic scope.
Who is it for?
Acquisition entrepreneurs
Build a repeatable pipeline of businesses that fit your geography and price range.
Search funds and independent sponsors
Monitor multiple states, enrich candidate financials, and send records into a deal CRM.
Business brokers
Compare active inventory, asking prices, locations, and seller-disclosed operating metrics.
Lenders and M&A analysts
Create market-comparable datasets for screening, valuation research, and sector coverage.
Data teams
Schedule extraction and connect results to a warehouse, spreadsheet, webhook, or BI workflow.
Why use this BizBuySell scraper?
- Structured output: receive consistent fields instead of copying listing cards manually.
- Repeatable monitoring: schedule the same state searches daily or weekly.
- Bounded runs: control item count and pages for predictable execution.
- Financial enrichment: collect optional details only when your workflow needs them.
- Stable identity: use
productIdto compare snapshots and detect new or removed inventory. - Fail-closed filters: records without numeric prices do not slip through active price filters.
- Resilient extraction: detail-page failures do not discard valid search-page records.
- Export options: download JSON, CSV, Excel, XML, RSS, or connect through the API.
Supported BizBuySell URLs
Supported inputs are:
- national search:
https://www.bizbuysell.com/businesses-for-sale/ - state search:
https://www.bizbuysell.com/california-businesses-for-sale/ - state search:
https://www.bizbuysell.com/texas-businesses-for-sale/ - another valid US-state businesses-for-sale path
The Actor also accepts equivalent m.bizbuysell.com URLs.
City, county, category, keyword-query, and arbitrary detail URLs are not accepted as search starts in v1. This boundary prevents the mobile surface from appearing to honor a filter that it may ignore.
Input
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | California search | National or state BizBuySell search URLs |
maxItems | integer | 25 | Maximum unique listings saved across all searches |
maxPagesPerUrl | integer | 3 | Maximum pages requested for each search URL |
enrichDetails | boolean | false | Visit public listing pages for extra details |
includeBrokerContacts | boolean | false | Capture public broker fields when displayed |
minAskingPrice | integer | — | Minimum numeric asking price |
maxAskingPrice | integer | — | Maximum numeric asking price |
requestDelayMillis | integer | 500 | Polite delay between requests |
proxyConfiguration | object | direct | Optional Apify or custom proxy fallback |
Example input
{"startUrls": [{ "url": "https://www.bizbuysell.com/california-businesses-for-sale/" },{ "url": "https://www.bizbuysell.com/texas-businesses-for-sale/" }],"maxItems": 100,"maxPagesPerUrl": 3,"enrichDetails": true,"includeBrokerContacts": true,"minAskingPrice": 100000,"maxAskingPrice": 2000000}
Start with one page and 10 listings while evaluating the output. Increase volume only after confirming the search scope matches your workflow.
Output data
Each dataset row represents one business listing.
| Field | Description |
|---|---|
productId | Stable BizBuySell listing identifier |
title | Public listing headline |
description | Search-card description when present |
url | Canonical BizBuySell detail URL |
location, city, state | Public listing geography |
askingPrice, askingPriceNumeric | Formatted and numeric asking price |
currency | Price currency, usually USD |
availability | Structured listing availability |
image | Public listing image URL |
cashFlow, cashFlowNumeric | Seller-disclosed cash flow or SDE |
grossRevenue, grossRevenueNumeric | Seller-disclosed gross revenue |
ebitda, ebitdaNumeric | Seller-disclosed EBITDA |
realEstate | Public real-estate terms when present |
inventory | Public inventory value or note |
ffe | Furniture, fixtures, and equipment value or note |
rentMonthly | Public rent value or note |
establishedYear | Parsed four-digit establishment year |
employees | Public employee information |
brokerName, brokerCompany, brokerPhone | Public broker fields when displayed |
searchUrl | Normalized search that produced the record |
sourcePage | Search result page number |
scrapedAt | UTC extraction timestamp |
Optional fields are omitted when a seller did not disclose them. Missing values are not invented.
Example output
{"productId": "2508641","title": "Maid Brigade of Redwood City- includes 3 branded vehicles","url": "https://www.bizbuysell.com/business-opportunity/maid-brigade-of-redwood-city-includes-3-branded-vehicles/2508641/","location": "San Mateo County, CA","city": "San Mateo County","state": "CA","askingPrice": "$219,000","askingPriceNumeric": 219000,"currency": "USD","availability": "InStock","searchUrl": "https://m.bizbuysell.com/california-businesses-for-sale/","sourcePage": 1,"scrapedAt": "2026-07-20T00:00:00.000Z"}
Live records change as sellers add, edit, or remove listings.
How to scrape BizBuySell listings
- Open the Actor in Apify Console.
- Add one national or state businesses-for-sale URL.
- Choose a small
maxItemsvalue for your first run. - Set
maxPagesPerUrlto control pagination. - Enable detail enrichment only if financial or operating fields are needed.
- Add price boundaries for a targeted acquisition screen.
- Click Start.
- Review the Business listings dataset view.
- Export the data or connect it to your downstream workflow.
How much does it cost to scrape BizBuySell listings?
The Actor uses pay-per-event pricing:
- a one-time Run started event of $0.005 per run;
- one Item extracted event for each saved business listing;
- tiered per-item rates that decrease with your Apify plan.
| Apify tier | Price per listing |
|---|---|
| FREE | $0.000054519 |
| BRONZE | $0.000047408 |
| SILVER | $0.000036978 |
| GOLD | $0.000028445 |
| PLATINUM | $0.000018963 |
| DIAMOND | $0.000013274 |
The pricing panel shows the applicable tier before every run. A small 10-item evaluation run remains inexpensive. Detail enrichment makes additional source requests but does not create extra output-item events.
To control cost:
- combine searches in one run instead of launching many one-listing runs;
- keep
maxPagesPerUrlbounded; - leave enrichment disabled when search-card data is sufficient;
- use snapshots and
productIdto avoid unnecessary downstream reprocessing.
Price filtering and deal screening
Set minAskingPrice and/or maxAskingPrice as integer dollar amounts.
When a price filter is active:
- listings with a numeric asking price are compared against the boundary;
- listings outside the boundary are skipped;
- listings with no parseable asking price are skipped.
This fail-closed behavior is useful for automated screens because “price not disclosed” cannot be mistaken for a qualifying zero-dollar opportunity.
Detail enrichment
Enable enrichDetails to visit each saved candidate's public listing page.
Seller-dependent fields may include:
- cash flow or seller's discretionary earnings;
- gross revenue;
- EBITDA;
- real-estate terms;
- inventory and FF&E;
- monthly rent;
- established year;
- employee information.
BizBuySell sellers decide which values to disclose. An omitted output field means it was not reliably present, not that its value is zero.
Broker contact extraction
Set both enrichDetails and includeBrokerContacts to request public broker fields.
Contact data is emitted only when the page displays a recognizable name, company, or phone label. The Actor does not bypass login, reveal private data, or infer hidden contact information.
Use contact data responsibly and comply with applicable outreach, privacy, and anti-spam rules.
Pagination and deduplication
The Actor follows BizBuySell's numbered state or national result pages.
It stops when:
maxItemshas been reached;maxPagesPerUrlhas been reached;- a page contains no structured listings;
- a page contributes no new product IDs.
Duplicate listings across pages or overlapping state inputs are saved once per run.
Scheduling a business listing monitor
Create an Apify schedule for a daily or weekly run.
A practical monitoring workflow is:
- run the same state URLs on a schedule;
- export
productId, price, location, and timestamps; - compare the latest dataset with the previous snapshot;
- flag new IDs, removed IDs, and changed asking prices;
- notify an acquisition team through email, Slack, or a webhook.
Use an integration platform or your warehouse to retain snapshot history.
Integrations
Google Sheets
Send selected listing fields to a shared deal-screening sheet.
Airtable or a CRM
Upsert on productId so recurring runs update existing acquisition records.
Slack and email
Notify a channel when a new listing meets geography, price, or financial criteria.
Webhooks
Trigger valuation, enrichment, or diligence workflows after a run succeeds.
Data warehouses
Load JSON or CSV into BigQuery, Snowflake, PostgreSQL, or another analytics store for comparable analysis.
Apify API with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/bizbuysell-business-listings-scraper').call({startUrls: [{ url: 'https://www.bizbuysell.com/texas-businesses-for-sale/' }],maxItems: 50,maxPagesPerUrl: 2,enrichDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Apify API with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/bizbuysell-business-listings-scraper').call(run_input={'startUrls': [{'url': 'https://www.bizbuysell.com/florida-businesses-for-sale/'}],'maxItems': 50,'maxPagesPerUrl': 2,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Apify API with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~bizbuysell-business-listings-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url":"https://www.bizbuysell.com/new-york-businesses-for-sale/"}],"maxItems": 25,"maxPagesPerUrl": 1}'
Poll the returned run ID or use an Apify client to wait for completion and retrieve the default dataset.
Use with Apify MCP
Connect the Actor to AI agents through Apify MCP.
Claude Code setup
claude mcp add --transport http apify \"https://mcp.apify.com/?tools=automation-lab/bizbuysell-business-listings-scraper"
Claude Desktop setup
Add this configuration to Claude Desktop's MCP settings, then provide your Apify token through your secure environment:
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com/?tools=automation-lab/bizbuysell-business-listings-scraper"}}}
Cursor setup
Open Settings → MCP, add the same mcpServers JSON, and enable the apify server.
VS Code setup
Open your workspace MCP configuration, add the same HTTP server URL, and approve the Apify tools for the workspace.
Example prompts:
- “Collect 50 California businesses for sale below $2 million.”
- “Enrich current Texas business listings and return those with disclosed cash flow.”
- “Build a dataset I can compare with last week's acquisition pipeline.”
Tips for reliable runs
- Begin with one supported state URL and one page.
- Keep the default request delay unless you have a specific reason to change it.
- Avoid overlapping searches when you do not need cross-market monitoring.
- Enable enrichment only for shortlisted records to reduce run time.
- Use a proxy only if direct access from your execution region is blocked.
- Treat seller-disclosed financials as leads for verification, not audited statements.
- Store
productIdas the durable key in downstream systems.
Limitations
- v1 supports national and US-state businesses-for-sale paths, not city or category paths.
- Search inventory and page composition can change between runs.
- Seller-disclosed details vary by listing.
- Broker contact fields may be absent or represented in a format the extractor does not recognize.
- Detail enrichment is best-effort; a blocked detail page does not remove the base listing.
- The Actor collects public data and does not log in or solve interactive challenges.
Is it legal to scrape BizBuySell?
The Actor accesses publicly available pages without authentication. Web-scraping legality depends on the data, jurisdiction, purpose, contractual terms, and how you use the results.
You are responsible for:
- reviewing BizBuySell's current terms and robots guidance;
- complying with privacy, database, copyright, and outreach laws;
- avoiding excessive request volume;
- establishing a lawful basis for processing personal contact data;
- respecting deletion, suppression, and opt-out obligations.
This documentation is not legal advice.
Troubleshooting
Why did my URL fail validation?
Use the national /businesses-for-sale/ path or a US-state /{state}-businesses-for-sale/ path. City, category, query-filtered, and detail URLs are outside the supported v1 contract.
Why are financial fields missing?
Enable enrichDetails. If a field remains absent, the seller may not have disclosed it or the page may use an unrecognized presentation.
Why did a filtered run return no records?
The current pages may contain no listings inside your price range. Listings without a numeric asking price are intentionally excluded when a price filter is active.
Why did detail enrichment take longer?
Each candidate requires an additional public page request. Reduce maxItems, disable enrichment, or enrich only a shortlist.
What should I do after a block?
Keep pacing conservative and configure Apify Proxy as a fallback. Do not repeatedly retry large runs against a blocked route.
FAQ
Does the Actor require a BizBuySell account?
No. It uses supported public search and detail pages.
Can I scrape several states in one run?
Yes. Add multiple state URLs to startUrls; duplicate product IDs are saved once.
Can I monitor listing changes?
Yes. Schedule runs and compare datasets by productId, askingPriceNumeric, and scrapedAt.
Does it return every financial metric?
It returns recognized fields when sellers disclose them. It does not estimate missing financials.
Can I export to CSV or Excel?
Yes. Use the dataset export menu or API export endpoints.
Does it support residential proxies?
Yes, through proxyConfiguration, though the public mobile surface is attempted directly by default.
Related acquisition marketplace scrapers
Combine this Actor with other automation-lab acquisition data products for broader sourcing coverage:
Each marketplace has different inventory, fields, and seller practices. Keep source-specific product IDs and canonical URLs when combining datasets.
Data quality checklist
Before automating a decision:
- confirm the listing URL still resolves;
- verify the asking price and disclosed financial period;
- distinguish gross revenue, EBITDA, and SDE;
- review whether real estate or inventory is included in the asking price;
- contact the broker or seller through appropriate channels;
- perform independent financial, legal, and operational diligence.
The scraper accelerates discovery and screening. It does not replace due diligence.
Support
For reproducible support, include:
- the Actor run ID;
- a sanitized copy of the input;
- the affected search or listing URL;
- the expected field or record;
- the approximate run time.
Do not include private credentials or unrelated personal data.