# BizBuySell Scraper (`extract-labs/bizbuysell-scraper`) Actor

Scrape BizBuySell business-for-sale listings, search pages, and page ranges. Get asking prices, financials, descriptions, business details, and broker contacts in clean JSON, CSV, or Excel records.

- **URL**: https://apify.com/extract-labs/bizbuysell-scraper.md
- **Developed by:** [Extract Labs](https://apify.com/extract-labs) (community)
- **Categories:** Lead generation, Automation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 successful listings

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/platform/actors/running/actors-in-store#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** turns a [BizBuySell](https://www.bizbuysell.com/) listing,
a list of listings, or a search page into clean, structured business-for-sale
data. We save each listing to your Apify Dataset as soon as it's ready, so you
can see results while the run is still working.

Just add your BizBuySell links and start the run. We handle managed proxy
rotation, page access checks, and retries behind the scenes to reduce blocked
requests. There are no proxy settings for you to configure.

We also remove duplicates automatically. If the same listing appears in your
input or across multiple search pages, we save it once per run. That keeps your
Dataset clean and prevents duplicate result charges.

Use it for deal sourcing, market research, valuation work, or keeping your
acquisition pipeline up to date.

### What this BizBuySell scraper collects

We keep the field names aligned with the labels on the BizBuySell page.
Depending on what the seller has shared, a result can include:

- Listing URL, ID, title, and location
- Full business description
- Asking price, cash flow, EBITDA, revenue, and established year
- Inventory, equipment, employees, facilities, competition, financing, and
  other detailed information
- Seller or broker name, company, profile URL, and phone number

Not every listing has every field. If BizBuySell doesn't show a value, we leave
it out. We won't fill in missing information with a guess.

### How to scrape BizBuySell listings

You don't need to write JSON or know how to code:

1. Open the **Input** tab and keep **Form** selected.
2. Paste a link into the **BizBuySell URLs** field.
3. Click **Start**.

We'll take it from there.

#### 1. One or several listings

Paste the listing link into **BizBuySell URLs**, then click **Start**:

```text
https://www.bizbuysell.com/business-opportunity/turnkey-nationwide-pet-transportation-business/2514926/
```

To collect several listings in the same run, paste the first link, click
**+ Add**, and paste the next one. Put each listing in its own field. You can
add up to 100 links at a time.

#### 2. One or several search-results pages

Set your filters on BizBuySell, then copy the URL from your browser. We'll
collect every business shown on that page and open each listing for its full
details:

```text
https://www.bizbuysell.com/transportation-and-storage-established-businesses-for-sale/?q=ZGxhPTcmbGM9SmtjOU1UQW1RejFWVXc9PQ%3D%3D
```

To collect several search pages in the same run, paste the first search-page
link, click **+ Add**, and paste the next one. Put each search page in its own
field. We'll remove any listing that appears in more than one search.

#### 3. One or several page ranges

Want more than one page? Add a range such as `[1-2]` where the page number would
normally go. Keep the rest of the URL, including its filters, unchanged:

```text
https://www.bizbuysell.com/transportation-and-storage-established-businesses-for-sale/[1-2]?q=ZGxhPTcmbGM9SmtjOU1UQW1RejFWVXc9PQ%3D%3D
```

We'll process page 1, then page 2, and so on. Listings stay in the order shown
on each page. You can request up to 100 pages in one range. To collect several
ranges in the same run, click **+ Add** and put each range link in its own
field.

You can also mix listing links, search pages, and page ranges in one run.

### BizBuySell scraper output

Open the run's **Dataset** tab to view the results or download them as JSON,
CSV, or Excel. The example below is a preview of a saved result—you don't need
to type or edit this data yourself.

```json
{
  "URL": "https://www.bizbuysell.com/business-opportunity/pizza-to-go-gross-535-959-owner-finance-60-000-down-low-rent/2531780/",
  "Listing ID": "2531780",
  "Title": "Pizza To Go Gross $535,959 Owner Finance $60,000 Down Low rent",
  "Location": "Bakersfield, CA (Kern County)",
  "Business Description": "Franchise Pizza Gross $535,959 yr. $60,000 Down Very Low rent...",
  "Financials": {
    "Asking Price": "$279,000",
    "Cash Flow (SDE)": "$122,000",
    "Gross Revenue": "$535,959"
  },
  "Detailed Information": {
    "Employees": "9 (1 Full-time, 8 Part-time)",
    "Real Estate": "Leased"
  },
  "Business Listed By": "michael marich",
  "Broker Company": "MS Real Estate Incorporated",
  "Phone Number": "209-633-7734"
}
```

### During a run

- We save each successful listing right away. You don't need to wait for the
  whole page to finish before checking the Dataset.
- If you stop the run, anything already completed stays in the Dataset. The
  listing being worked on at that moment might not be saved.
- If the same listing appears more than once, we save and charge it once per
  run.
- If we can't collect a listing after retrying, we don't add an empty record to
  your Dataset.

### For developers

Want to automate it? You can run the scraper through the Apify API using the
`startUrls` input and read completed listings from the default Dataset.

### Frequently asked questions

#### Do I need to know how to code?

No. Keep **Form** selected, paste your links into **BizBuySell URLs**, and click
**Start**. The JSON view is only there for developers who prefer it.

#### What kind of links can I use?

You can use one listing, several listing links, a BizBuySell search-results
page, or a page range such as `[1-5]`.

#### Do I need to set up a proxy?

No. We handle managed request rotation, page access checks, and retries for
you. There are no proxy settings in the input form.

#### What happens if the same listing appears more than once?

We remove duplicates automatically. A listing is saved and charged as a
successful result only once per run, even if it appears in more than one input
or search page.

#### Can I add several search pages to one run?

Yes. Click **+ Add** and paste each search page into its own URL field. You can
also combine separate search pages with page ranges.

#### Do I have to wait for the whole run to finish?

No. Each listing is saved as soon as it's ready. If you stop the run early,
the completed listings stay in your Dataset.

#### Why is a field missing from a result?

We collect what the BizBuySell listing shows. If the seller hasn't provided a
price, phone number, or another detail, we leave that field out instead of
guessing.

#### Where can I download the results?

Open the run's **Dataset** tab. You can view the listings there or download
them as JSON, CSV, or Excel.

### Need help?

Something missing? Open an issue and send us the public BizBuySell URL and your
Apify run ID. Please don't include passwords, tokens, or anything private.
We'll check what happened.

# Actor input Schema

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

Paste a listing or search-page link. Click + Add to include more listing or search-page links in the same run. You can also use a page range such as \[1-2].

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.bizbuysell.com/business-opportunity/turnkey-nationwide-pet-transportation-business/2514926/"
    }
  ]
}
```

# Actor output Schema

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

We save each listing as soon as it's ready. Anything already saved stays here if you stop the run.

# 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/business-opportunity/turnkey-nationwide-pet-transportation-business/2514926/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("extract-labs/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/business-opportunity/turnkey-nationwide-pet-transportation-business/2514926/" }] }

# Run the Actor and wait for it to finish
run = client.actor("extract-labs/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/business-opportunity/turnkey-nationwide-pet-transportation-business/2514926/"
    }
  ]
}' |
apify call extract-labs/bizbuysell-scraper --silent --output-dataset

```

## MCP server setup

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