# BizBuySell Scraper (`scraptivo/bizbuysell-scraper`) Actor

Collects BizBuySell businesses for sale from search URLs or location and industry filters. Returns asking price, cash flow, location, and optional listing details.

- **URL**: https://apify.com/scraptivo/bizbuysell-scraper.md
- **Developed by:** [Scraptivo](https://apify.com/scraptivo) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.97 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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** collects businesses for sale from [BizBuySell](https://www.bizbuysell.com) and turns them into structured data for deal sourcing, market research, and broker outreach. Provide a search URL, location, industry, or listing ID, run the Actor, and export asking price, cash flow, location, and listing IDs to JSON, CSV, Excel, or your preferred integration. Use it to build acquisition pipelines, monitor new listings, and automate recurring collection. Pricing starts at **$2.00 per 1,000 listings**, with optional listing details at **$15.00 per 1,000**.

### What can you automate with BizBuySell Scraper?

- **Build acquisition lists** — Collect businesses for sale with asking price, cash flow, EBITDA, and gross revenue.
- **Filter by industry and location** — Search a state, county, or city and pick from 200+ industries and sub-industries.
- **Narrow by financials** — Set revenue, cash flow, asking price, and real-estate value ranges.
- **Enrich selected listings** — Turn on listing details for description, employees, lease, financing, and broker phone.
- **Watch new inventory** — Schedule runs with `daysListedAgo` to catch recently added businesses.
- **Feed a deal pipeline** — Push structured records into Sheets, a CRM, or your own workflow.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Buyers and search funds | Building shortlists of businesses by industry, location, and cash flow. |
| Brokers and M\&A advisors | Monitoring competing listings and collecting broker contacts. |
| Market researchers | Comparing asking prices and listing activity across regions. |
| Outreach teams | Exporting broker names and phones for follow-up after a details run. |

### What data can you collect from BizBuySell?

| Data group | Example fields | How it helps |
|---|---|---|
| Listing identity | `listNumber`, title, URL | Deduplicate and reopen the exact listing. |
| Financials | Asking price, cash flow, EBITDA, gross revenue | Screen deals before outreach. |
| Location | Location text, region | Map inventory by state or city. |
| Signals | Recently added, recently updated, price reduced, hot property | Spot fresh or discounted listings. |
| Details | Description, year established, employees, lease, broker name/phone | Appear when **Scrape Listing Details** is enabled. |

Card-level title, price, cash flow, location, and `listNumber` are returned on every listing. Description, employees, lease, and broker phone appear only when listing details are enabled.

### How to use BizBuySell Scraper

1. Open the [BizBuySell Scraper](https://apify.com/scraptivo/bizbuysell-scraper) on Apify.
2. Paste a BizBuySell search or listing URL, or set a location and industry.
3. Choose a limit and optional filters — financial ranges, seller financing, or listing details.
4. Run the Actor and wait for listing records to appear in the dataset.
5. Export JSON, CSV, or Excel, or connect the dataset to your workflow.

```json
{
    "location": "California",
    "industries": ["Travel"],
    "maxItems": 10,
    "scrapeListingDetails": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US"
    }
}
```

### Example workflow

#### Watch California travel businesses every Monday

1. Schedule a weekly run with `location` = `California`, `industries` = `["Travel"]`, and `daysListedAgo` = `7`.
2. Keep listing details off for a cheap card-level snapshot, then turn them on for a shortlist.
3. Send new records to Google Sheets through a webhook.
4. Deduplicate user-side against the stable `listNumber` field.

### Automate and integrate your results

- **Schedules** — Run **weekly** for market research or **daily** when you watch a tight industry and state.
- **Webhooks** — Push completed datasets into Sheets, Slack, or a CRM.
- **Exports and API** — Download from the Apify Console or start a run from the API:

```shell
curl "https://api.apify.com/v2/acts/scraptivo~bizbuysell-scraper/runs?token=YOUR-APIFY-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "location": "California",
    "industries": ["Travel"],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US"
    }
  }'
```

- **Deduplication** — The Actor appends results on every run. Use `listNumber` as the stable key.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---|---:|---|---|
| `startUrls` | Array of URLs | No | — | Search-result or listing URLs. Encoded `q=` filters are preserved. |
| `location` | String | No | — | State, county, or city when not using start URLs. |
| `industries` | Array of strings | No | — | Industry or sub-industry values from the schema (200+ options). |
| `grossRevenueMin` / `grossRevenueMax` | Integer | No | — | Gross revenue range in USD. |
| `cashFlowMin` / `cashFlowMax` | Integer | No | — | Cash flow / EBITDA range in USD. |
| `askingPriceMin` / `askingPriceMax` | Integer | No | — | Asking price range in USD. |
| `realEstateMin` / `realEstateMax` | Integer | No | — | Real-estate value range in USD. |
| `daysListedAgo` | Integer | No | — | Only listings added within this many days. |
| `establishedAfterYear` | Integer | No | — | Only businesses established after this year. |
| `keyword` | String | No | — | Phrase to match in listings. |
| `listingIds` | Array of strings | No | — | Specific BizBuySell list numbers. |
| `hideListingsWithoutPrice` | Boolean | No | `false` | Exclude listings with no asking price. |
| `hideHomeBasedBusinesses` | Boolean | No | `false` | Exclude home-based listings. |
| `includeRelocatableListings` | Boolean | No | `false` | Include relocatable listings. |
| `mustHaveSellerFinancing` | Boolean | No | `false` | Only listings with seller financing. |
| `mustHaveRealEstateIncluded` | Boolean | No | `false` | Only listings that include real estate. |
| `mustAllowAbsenteeOwner` | Boolean | No | `false` | Only absentee-owner listings. |
| `scrapeListingDetails` | Boolean | No | `false` | Visit each listing for full details. Charges `listing-details`. |
| `maxItems` | Integer | No | `0` | Maximum listings (`0` = unlimited). |
| `proxyConfiguration` | Proxy object | No | Apify residential, country US | US residential proxies are required. |

#### Do Start URLs override location filters?

You can combine them. Start URLs keep the filters already in the link. Location, industries, and financial fields are used when you are not relying on a prebuilt search URL.

### Output example

Each dataset item is one listing:

```json
{
    "listNumber": 2524127,
    "title": "Proven Hospitality Brokerage & Consulting-Perfect for Licensed Broker",
    "url": "https://www.bizbuysell.com/business-opportunity/proven-hospitality-brokerage-and-consulting-perfect-for-licensed-broker/2524127/",
    "location": "Palm Desert, CA",
    "region": "CA",
    "askingPrice": 299000,
    "cashFlow": 247802,
    "realEstateIncluded": false,
    "recentlyUpdated": true,
    "priceReduced": true,
    "detailsScraped": false
}
```

### How much does it cost to scrape BizBuySell?

The Actor uses pay-per-event pricing plus a small Actor-start event ($0.00005 per start, scaled by memory):

- **$2.00 / 1,000 listings** — a `dataset-item` event for every listing written to the dataset.
- **$15.00 / 1,000 listing details** — a `listing-details` event only when **Scrape Listing Details** is enabled.

A listing-only run of 1,000 businesses costs **$2.00**. Enriching the same 1,000 listings with details costs **$17.00**. Volume discounts on Apify paid plans reduce the per-1,000 rate (for example **$1.97 per 1,000 listings** and **$14.80 per 1,000 details** at the Gold plan). Compute units consumed are deducted from your Apify plan.

### Reliability and responsible use

- **Proxy requirement** — US residential proxies are required. The default input uses the Apify RESIDENTIAL group with country `US`.
- **Conditional fields** — Description, employees, lease, and broker phone appear only when listing details are enabled.
- **Public listings** — The Actor collects publicly visible BizBuySell listing data.
- **Responsible use** — Only use the data in ways that comply with BizBuySell terms and applicable law.

### Frequently asked questions

#### Can I scrape BizBuySell by state and industry?

Yes. Set `location` to a state or city and choose one or more `industries` such as `Travel` or `Restaurants & Food > Food Trucks`. You can also paste a filtered search URL.

#### Can I schedule BizBuySell Scraper to run automatically?

Yes. Use the **Scheduler** tab in Apify Console. Weekly suits most deal-sourcing lists; use `daysListedAgo` to keep each run focused on new inventory.

#### What counts as one result?

Each listing saved to the dataset is one `dataset-item` event ($2.00 per 1,000). If listing details are enabled, each enriched listing also counts as a `listing-details` event ($15.00 per 1,000).

#### Why are some fields empty?

Broker phone, employees, lease, and full description are collected only when **Scrape Listing Details** is enabled. BizBuySell also leaves asking price, revenue, or EBITDA empty on some cards.

#### How do I avoid duplicate records?

The Actor does not deduplicate across runs. Use `listNumber` as the stable key. `maxItems` caps a single run.

#### Do I need a proxy?

Yes. US residential proxies are required and are the default.

### Related Scraptivo automations

- [Clutch.co Company Scraper](https://apify.com/scraptivo/clutch-scraper) — B2B service companies from Clutch.
- [Europages Scraper](https://apify.com/scraptivo/europages-scraper) — European company listings.
- [Crexi Scraper](https://apify.com/scraptivo/crexi-scraper) — commercial real estate listings from Crexi.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, sample URL, required fields, and expected volume so we can assess the request.

# Actor input Schema

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

BizBuySell search result URLs (with filters already applied) and/or individual listing URLs. Example: https://www.bizbuysell.com/california/travel-businesses-for-sale/?q=bHQ9MzAsNDAsODA%3D — the encoded q= hash is preserved.

## `location` (type: `string`):

Location to search (state, county, or city), e.g. "California", "Texas County, MO", "Austin, TX". Used when not providing startUrls.

## `industries` (type: `array`):

One or more industries / sub-industries to filter. Parent categories (e.g. Travel) or children (e.g. Travel > Hotels).

## `grossRevenueMin` (type: `integer`):

Minimum gross revenue (USD)

## `grossRevenueMax` (type: `integer`):

Maximum gross revenue (USD)

## `cashFlowMin` (type: `integer`):

Minimum cash flow / EBITDA (USD)

## `cashFlowMax` (type: `integer`):

Maximum cash flow / EBITDA (USD)

## `askingPriceMin` (type: `integer`):

Minimum asking price (USD)

## `askingPriceMax` (type: `integer`):

Maximum asking price (USD)

## `realEstateMin` (type: `integer`):

Minimum real estate value (USD)

## `realEstateMax` (type: `integer`):

Maximum real estate value (USD)

## `daysListedAgo` (type: `integer`):

Only include listings added within this many days (e.g. 7, 30, 90)

## `establishedAfterYear` (type: `integer`):

Only include businesses established after this year (e.g. 2010)

## `keyword` (type: `string`):

Keyword phrase to match in listings (e.g. "franchise", "laundromat", "car wash")

## `listingIds` (type: `array`):

Specific BizBuySell listing IDs (list numbers) to fetch

## `hideListingsWithoutPrice` (type: `boolean`):

Exclude listings that do not show an asking price

## `hideHomeBasedBusinesses` (type: `boolean`):

Exclude home-based business listings

## `includeRelocatableListings` (type: `boolean`):

Include listings marked as relocatable

## `mustHaveSellerFinancing` (type: `boolean`):

Only listings that offer seller financing

## `mustHaveRealEstateIncluded` (type: `boolean`):

Only listings where real estate is included in the asking price

## `mustAllowAbsenteeOwner` (type: `boolean`):

Only listings that allow an absentee owner

## `scrapeListingDetails` (type: `boolean`):

When enabled, visit each listing page for full details (description, financials, employees, lease, broker phone, etc.). Charges the listing-details event in addition to dataset-item.

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

Maximum number of listings to scrape (0 = unlimited)

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

Proxy settings for anti-bot protection. BizBuySell requires Apify Residential proxies with country US.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.bizbuysell.com/california/travel-businesses-for-sale/?q=bHQ9MzAsNDAsODA%3D"
    }
  ],
  "hideListingsWithoutPrice": false,
  "hideHomeBasedBusinesses": false,
  "includeRelocatableListings": false,
  "mustHaveSellerFinancing": false,
  "mustHaveRealEstateIncluded": false,
  "mustAllowAbsenteeOwner": false,
  "scrapeListingDetails": false,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Dataset containing scraped BizBuySell listings

## `runStats` (type: `string`):

Key-value store record with scrape counts and timestamps

# 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/california/travel-businesses-for-sale/?q=bHQ9MzAsNDAsODA%3D"
        }
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/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/california/travel-businesses-for-sale/?q=bHQ9MzAsNDAsODA%3D" }],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/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/california/travel-businesses-for-sale/?q=bHQ9MzAsNDAsODA%3D"
    }
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scraptivo/bizbuysell-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraptivo/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/OLw4bQN0rVaqxooxo/builds/wuUlyZ2dyVG231Axh/openapi.json
