# BizBuySell Scraper \[Only $1.2/1K💰] | Broker Leads | M\&A Deals (`ahmed_jasarevic/bizbuysell-scraper`) Actor

Scrape businesses for sale from BizBuySell: asking price, cash flow/SDE, EBITDA, gross revenue, location, category and broker contact data for acquisition research and lead generation.

- **URL**: https://apify.com/ahmed\_jasarevic/bizbuysell-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## BizBuySell Scraper — Businesses for Sale, Cash Flow & Broker Leads

Extract **business-for-sale listings from BizBuySell.com** — the largest online marketplace for buying and selling small businesses in the US — with asking price, cash flow/SDE, gross revenue, EBITDA, location, category and **broker contact data**, ready for acquisition research, deal sourcing and lead generation. No browser, no login, no manual tokens.

### Main Use Cases

- **Business acquisition research** — build your pipeline of businesses for sale across states, cities and industries.
- **Business broker lead generation** — collect broker name, phone and company from public listings.
- **Small business valuation benchmarking** — compare asking price, cash flow and EBITDA across regions and niches.
- **Franchise opportunity tracking** — filter franchise listings by type, price and location.
- **Business-for-sale market intelligence** — monitor newly listed, price-reduced and recently updated businesses.
- **Sell-side and buy-side deal sourcing** — export structured listing data to your CRM or deal flow tool.

### How It Works

The Actor runs a light, HTTP-only pipeline — no browser is ever launched. A Chrome-fingerprint HTTP client reads the same listing data the public site serves to normal visitors, through your proxy (plain **DATACENTER** by default — verified working and cheapest), handling the site's automated protections on its own. Search results come from the site's listing feed; when the edge blocks it, the server-rendered SEO pages are parsed instead, purely over HTTP.

**One honest caveat:** BizBuySell's edge serves an interactive challenge to plain HTTP on IP lines it does not pre-trust. The Actor rotates a small pool of proxies (max 5) and stops early if all are challenged. If a run returns 0 listings, switch the proxy group or set `apifyProxyCountry` to `GB` or `CA` — or simply re-run later. Test runs complete in about 10 seconds with full results.

### Find Businesses for Sale for Acquisition Research

Start from any BizBuySell search page — a state feed, a category feed, or the nationwide feed — and let the Actor paginate it automatically:

- `https://www.bizbuysell.com/california-businesses-for-sale/`
- `https://www.bizbuysell.com/restaurants-and-food-businesses-for-sale/`
- `https://www.bizbuysell.com/businesses-for-sale/` (nationwide)

Detail pages (`.../business-opportunity/...`) are also supported.

### Build Business Broker Lead Lists from Public Data

Every listing carries the listing broker's **name, phone and company**. Combined with location, category and asking price, this turns a public listing feed into a ready-made broker outreach list for M\&A advisors, business brokers and acquisition hunters.

### Compare Asking Price, Cash Flow and EBITDA

Listings expose the financials business buyers care about — `askingPrice`, `cashFlow` (SDE), `grossRevenue` and `ebitda` (when disclosed) — so you can benchmark multiples by industry, region and asking-price band without clicking through hundreds of pages.

### Input

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `startUrls` | array | no | `[]` | Search, category or listing URLs. Paginated automatically. Empty = nationwide feed. Category URLs are scraped without the category filter unless `filters.industryId` is set. |
| `filters.keyword` | string | no | — | Free-text keyword, e.g. `"laundromat"`. |
| `filters.askingPriceMin` / `askingPriceMax` | integer | no | — | Minimum/maximum asking price in USD. |
| `filters.cashFlowMin` / `cashFlowMax` | integer | no | — | Minimum/maximum cash flow in USD. |
| `filters.grossIncomeMin` / `grossIncomeMax` | integer | no | — | Minimum/maximum gross revenue in USD. |
| `filters.listingTypeIds` | array | no | `[30, 40, 80]` | BizBuySell defaults: 30 = Businesses for sale, 40 = Franchises, 80 = Business opportunities. |
| `filters.daysListedAgo` | integer | no | `0` | `0` = any time; e.g. `30` = only listings from the last 30 days. |
| `filters.establishedAfterYear` | integer | no | `0` | Only businesses established after this year (e.g. `2010`). |
| `filters.industryId` | integer | no | — | Experimental: single BizBuySell industry-hierarchy id (e.g. `2600` Airports/FBO, `2606` Bar). Mapping is not documented and may be ignored by the site. |
| `filters.location` | string | no | — | Overrides location for every search URL. Accepts state (`"California"`, `"CA"` or `"california"`), `"City, ST"`, or a US state name. |
| `filters.customLocation` | string | no | — | Raw JSON of the BizBuySell location object, e.g. captured from the browser's `_sl` cookie or DevTools network payload. Overrides `filters.location`. |
| `filters.absenteeOwnerListings` | boolean | no | — | Owner does not work in the business. |
| `filters.listingsWithPriceReduced` | boolean | no | — | Listings with a reduced price. |
| `filters.listingsRecentlyUpdated` | boolean | no | — | Listings updated recently. |
| `filters.listingsWithNoAskingPrice` | boolean | no | — | Include listings that don't show an asking price. |
| `filters.homeBasedListings` | boolean | no | — | Only home-based businesses. |
| `filters.includeRealEstateForLease` | boolean | no | — | Include real-estate-for-lease listings. |
| `filters.listingsWithSellerFinancing` | boolean | no | — | Only listings offering seller financing. |
| `filters.realEstateIncluded` | boolean | no | — | Only listings where real estate is included in the sale. |
| `filters.showRelocatableListings` | boolean | no | — | Include relocatable businesses. |
| `maxItems` | integer | no | `100` | Max listings across all start URLs. **Free users are capped at 10.** |
| `maxPagesPerUrl` | integer | no | `20` | Safety cap on pagination depth per start URL. |
| `proxyConfiguration` | object | no | `{"useApifyProxy": true}` | DATACENTER by default (cheapest). RESIDENTIAL or Default group also work. |

### Output

One dataset item per business listing:

| Field | Description |
|---|---|
| `listNumber` | BizBuySell's listing ID (stable dedup key). |
| `title` / `description` | Listing headline and summary. |
| `askingPrice` | Asking price in USD, when disclosed. |
| `cashFlow` | Annual cash flow / SDE in USD, when disclosed. |
| `grossRevenue` | Annual gross revenue in USD, when disclosed. |
| `ebitda` | EBITDA in USD, when disclosed. |
| `location` | City + state. |
| `category` | Business category. |
| `brokerName` / `brokerPhone` / `brokerCompany` | Listing broker contact details. |
| `establishedYear` / `employees` | Populated when the detail page is served (detail fetching is off by default). |
| `url` | Direct link to the listing detail page. |

Download results as **JSON, HTML, CSV or Excel** from the Apify dataset.

### Example Input

```json
{
  "startUrls": ["https://www.bizbuysell.com/california-businesses-for-sale/"],
  "filters": {
    "keyword": "laundromat",
    "askingPriceMax": 500000,
    "cashFlowMin": 50000,
    "listingsWithPriceReduced": true
  },
  "maxItems": 100,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Example Output

```json
{
  "listNumber": 2538659,
  "title": "Own a Popular Turnkey TexMex Fast Casual National Franchise Restaurant",
  "description": "Established TexMex Fast Casual Franchise Restaurant - Totowa, NJ ...",
  "askingPrice": 165000,
  "cashFlow": 59000,
  "grossRevenue": 1280000,
  "ebitda": 180000,
  "location": "Totowa, NJ",
  "category": "Restaurants & Food",
  "brokerName": "John Smith",
  "brokerPhone": "(555) 123-4567",
  "brokerCompany": "Smith Business Advisors",
  "url": "https://www.bizbuysell.com/business-opportunity/own-a-popular-turnkey-texmex-fast-casual-national-franchise-restaurant/2538659/"
}
```

### Automate Business Listing Monitoring

- **Schedule daily or weekly runs** on the Apify platform to track newly listed businesses, price reductions and market movements.
- **Paged API access** — the Apify API returns fresh JSON and your downstream tools never touch the site.
- **Integrations** — wire results into Zapier, Make, Sheets or your CRM via webhooks and the Apify API.

### Related Actors

- [abotapi/bizbuysell-scraper](https://apify.com/abotapi/bizbuysell-scraper) — the other widely used BizBuySell actor (validated against this one for coverage).
- [parseforge/bizbuysell-scraper-v2](https://apify.com/parseforge/bizbuysell-scraper-v2) — another popular option for the same marketplace.
- [ahmed\_jasarevic/hotfrog-scraper](https://apify.com/ahmed_jasarevic/hotfrog-scraper) — business directory data for lead enrichment alongside buying-side listings.

### FAQ

#### Why use this actor instead of the official BizBuySell API?

BizBuySell does not offer a public API for its listing data — the only third-party access is through scrapers. This Actor provides the same structured data through a clean, documented interface with none of the site's click-through friction, and at one of the lowest per-result prices on the Store.

#### What are alternatives to BizBuySell data?

- Other Apify actors: [abotapi/bizbuysell-scraper](https://apify.com/abotapi/bizbuysell-scraper), [parseforge/bizbuysell-scraper-v2](https://apify.com/parseforge/bizbuysell-scraper-v2).
- Other business-for-sale marketplaces you can scrape: LoopNet (business/real estate), BusinessesForSale.com, Craigslists's business section (regional), and state business-broker association listings.

#### How can I scrape businesses for sale in a specific state?

Set `startUrls` to the state feed (e.g. `https://www.bizbuysell.com/florida-businesses-for-sale/`) or use `filters.location` (e.g. `"Texas"` or `"Austin, TX"`) to override location across any URL set.

#### Is scraping BizBuySell legal?

Scraping public listing data must respect BizBuySell's Terms of Service. This Actor makes a modest number of requests per run (it is not an aggressive crawler) — review the ToS before commercial use and consider per-run rate limits.

#### Why did my run return 0 listings?

The site fingerprints the exit IP and occasionally serves its interactive challenge to plain HTTP on that line. Re-run later, or switch the proxy group to **RESIDENTIAL**, or set `apifyProxyCountry` to `GB`/`CA` (only the egress line changes — the US listings returned do not).

### For AI Agents & LLM Apps

The BizBuySell Scraper is callable via the **Apify MCP server** (`ahmed_jasarevic/bizbuysell-scraper`) and the Apify REST API.

**Purpose:** given a BizBuySell search/category/state URL (or a keyword/location filter), returns structured business-for-sale listings with financials (asking price, cash flow, gross revenue, EBITDA) and broker contact details.

**Minimal working input:**

```json
{
  "startUrls": ["https://www.bizbuysell.com/businesses-for-sale/"],
  "maxItems": 10
}
```

**Variant input (filtered search):**

```json
{
  "startUrls": [],
  "filters": { "keyword": "laundromat", "location": "Florida", "cashFlowMin": 60000 },
  "maxItems": 25
}
```

Note: `startUrls: []` (or omitted) uses the nationwide feed.

**Output fields:** `listNumber`, `title`, `description`, `askingPrice`, `cashFlow`, `grossRevenue`, `ebitda`, `location`, `category`, `brokerName`, `brokerPhone`, `brokerCompany`, `establishedYear`, `employees`, `url`.

**Behaviors an agent should know:**

- `maxItems` caps total listings across all URLs; free accounts are capped at 10, so budget result costs accordingly on paid plans.
- `filters` values override any filter encoded in a `startUrl` when both are set.
- A `0`-listing result usually means the site challenged the egress IP — retry later or switch proxy group/country rather than assuming the query matched nothing.
- `establishedYear`/`employees` are only populated when the site serves the detail page over HTTP (detail-page fetching is off by default).
- Category URLs (e.g. restaurants) are scraped without a category filter unless `filters.industryId` is set — apply an industry id for category-targeted runs.

**Billing:** pay-per-result — cheap ($0.0012/new result, $0.0005/start, DATACENTER proxies default, 512 MB memory).

### Legal & Compliance Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by BizBuySell.com or its operators**.

It only accesses **publicly available listing pages** the same way a normal visitor would (no login bypass, no CAPTCHA solving). Users are responsible for their own compliance with BizBuySell's Terms of Service and applicable law; review the ToS before commercial use and respect per-run rate limits.

### SEO Keywords

bizbuysell scraper, businesses for sale, business for sale data, bizbuysell listings, small business valuation, business acquisition research, broker lead generation, business broker contacts, cash flow data, SDE multiples, business for sale by state, franchise for sale listings, business for sale api, bizbuysell alternative, scrape businesses for sale, business listings export, asking price data, business marketplace data, deal sourcing, business exit data, buy a business data

# Actor input Schema

## `startUrls` (type: `array`):

Search pages to scrape, e.g. https://www.bizbuysell.com/california-businesses-for-sale/ or https://www.bizbuysell.com/businesses-for-sale/. Each URL is converted into the internal listing feed query and paginated automatically. Detail pages (https://www.bizbuysell.com/business-opportunity/…) are also supported. Leave empty for the nationwide feed. Category URLs (e.g. .../restaurants-and-food-businesses-for-sale/) are scraped without the category filter unless filters.industryId is set.

## `filters` (type: `object`):

Additional search criteria applied to every search URL (values here override filters encoded in a start URL).

## `maxItems` (type: `integer`):

Maximum number of business listings to scrape across all start URLs. Free users are capped at 10.

## `maxPagesPerUrl` (type: `integer`):

Safety cap on pagination depth per start URL.

## `proxyConfiguration` (type: `object`):

Select the proxy type to use. Datacenter proxies are recommended for fast and cost-effective scraping. Residential proxies can be used when needed.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.bizbuysell.com/businesses-for-sale/"
    }
  ],
  "maxItems": 100,
  "maxPagesPerUrl": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.bizbuysell.com/businesses-for-sale/"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/bizbuysell-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.bizbuysell.com/businesses-for-sale/" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/bizbuysell-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.bizbuysell.com/businesses-for-sale/"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call ahmed_jasarevic/bizbuysell-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/bizbuysell-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1RVj0pza60kVe76UB/builds/JgIJxYOJlF9xTBxYV/openapi.json
