BizBuySell Business Listings Scraper avatar

BizBuySell Business Listings Scraper

Pricing

from $0.03 / 1,000 item extracteds

Go to Apify Store
BizBuySell Business Listings Scraper

BizBuySell Business Listings Scraper

📊 Extract public BizBuySell listings, asking prices, seller-disclosed financials, operating details, and broker contacts for acquisition sourcing.

Pricing

from $0.03 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

16 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, and canonical URLs. Enable enrichment to add seller-disclosed cash flow or SDE, gross revenue, EBITDA, real-estate inclusion, and public broker fields when available in search results.

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:

  • 🔎 resolves supported www.bizbuysell.com URLs through BizBuySell's public search service;
  • 📄 follows bounded search-result pagination;
  • 🧩 reads structured listing data from BizBuySell's public search service;
  • 🔐 deduplicates records by BizBuySell productId;
  • 🎯 applies optional minimum and maximum asking-price filters;
  • 💰 optionally adds seller-disclosed financials and public broker fields returned with search results;
  • 📦 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 productId to compare snapshots and detect new or removed inventory.
  • Fail-closed filters: records without numeric prices do not slip through active price filters.
  • Resilient extraction: automatic proxy fallback preserves valid search-result extraction when direct access is blocked.
  • 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 unsupported URL filters from appearing to work while returning broader results.

Input

FieldTypeDefaultDescription
startUrlsarrayCalifornia searchNational or state BizBuySell search URLs
maxItemsinteger25Maximum unique listings saved across all searches
maxPagesPerUrlinteger3Maximum pages requested for each search URL
enrichDetailsbooleanfalseAdd seller-disclosed financial fields available in search results
includeBrokerContactsbooleanfalseCapture public broker fields when available
minAskingPriceintegerMinimum numeric asking price
maxAskingPriceintegerMaximum numeric asking price
requestDelayMillisinteger500Polite delay between requests
proxyConfigurationobjectautomaticOptional Apify or custom proxy; otherwise direct access with a US residential 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.

FieldDescription
productIdStable BizBuySell listing identifier
titlePublic listing headline
descriptionSearch-card description when present
urlCanonical BizBuySell detail URL
location, city, statePublic listing geography
askingPrice, askingPriceNumericFormatted and numeric asking price
currencyPrice currency, usually USD
imagePublic listing image URL
cashFlow, cashFlowNumericSeller-disclosed cash flow or SDE
grossRevenue, grossRevenueNumericSeller-disclosed gross revenue
ebitda, ebitdaNumericSeller-disclosed EBITDA
realEstateWhether real estate is included in the asking price, when disclosed
brokerName, brokerCompany, brokerPhonePublic broker fields returned with search results
searchUrlNormalized search that produced the record
sourcePageSearch result page number
scrapedAtUTC 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",
"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

  1. Open the Actor in Apify Console.
  2. Add one national or state businesses-for-sale URL.
  3. Choose a small maxItems value for your first run.
  4. Set maxPagesPerUrl to control pagination.
  5. Enable detail enrichment only if financial or operating fields are needed.
  6. Add price boundaries for a targeted acquisition screen.
  7. Click Start.
  8. Review the Business listings dataset view.
  9. 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 tierPrice 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 does not create extra output-item events.

To control cost:

  • combine searches in one run instead of launching many one-listing runs;
  • keep maxPagesPerUrl bounded;
  • leave enrichment disabled when search-card data is sufficient;
  • use snapshots and productId to 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 include seller-disclosed financial fields returned by the public search service.

Seller-dependent fields may include:

  • cash flow or seller's discretionary earnings;
  • gross revenue;
  • EBITDA;
  • whether real estate is included in the asking price.

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 public search response supplies a name, company, or phone number. The Actor does not visit detail pages, 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:

  • maxItems has been reached;
  • maxPagesPerUrl has 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:

  1. run the same state URLs on a schedule;
  2. export productId, price, location, and timestamps;
  3. compare the latest dataset with the previous snapshot;
  4. flag new IDs, removed IDs, and changed asking prices;
  5. 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 os
from apify_client import ApifyClient
client = 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().items
print(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.
  • Configure a proxy explicitly only when you need to control routing; automatic fallback handles blocked direct access.
  • Treat seller-disclosed financials as leads for verification, not audited statements.
  • Store productId as 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 because seller-disclosed fields vary by listing.
  • The Actor collects public data and does not log in or solve interactive challenges.

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?

Enrichment uses fields returned with search results. Missing values generally mean the seller did not disclose them.

What should I do after a block?

Keep pacing conservative. You can configure a proxy explicitly; otherwise the Actor automatically retries blocked direct requests through a US residential route.

FAQ

Does the Actor require a BizBuySell account?

No. It uses BizBuySell's public search service and does not log in.

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. Without one, the Actor tries direct access first and uses a US residential fallback when needed.

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