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

Scrape BizBuySell businesses for sale and franchises with full details on every listing: asking price, cash flow, revenue, EBITDA, price multiples, broker name & phone, address, photos and more. Paste any BizBuySell URL or search by state, industry and financials. Not affiliated with BizBuySell.

- **URL**: https://apify.com/alkausari_mujahid/bizbuysell-scraper.md
- **Developed by:** [Alkausari M](https://apify.com/alkausari_mujahid) (community)
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**BizBuySell Scraper** extracts businesses for sale and franchises from [BizBuySell](https://www.bizbuysell.com) — no account, API key or browser needed. One Actor covers four jobs:

- 🏪 **Business listings with full details** — asking price, cash flow, revenue, EBITDA, price multiples, broker name and phone, address, photos and the complete seller write-up on **every** record, with no per-listing detail charge.
- 🗺️ **Whole-market exports** — any state, city, county or industry, and even all of BizBuySell: searches beyond BizBuySell's 10,000-result cap are split automatically.
- 🔔 **Deal alerts** — monitor mode returns only new or changed listings on scheduled runs; unchanged ones cost nothing.
- 🍔 **Franchise research** — franchise fees, royalty and ad-fund %, cash and net worth required, investment range, average unit revenue, success rates and unit growth by year.

Paste any BizBuySell URL or pick filters (state, industry, price, cash flow, revenue, days listed, seller financing, SBA and more). It reads up to 200 complete listings per request — about **3,000 listings a minute** — and exports to JSON, CSV, Excel or straight into Google Sheets, Airtable, HubSpot, Zapier, Make or n8n.

### Get full details on every listing

Most BizBuySell scrapers read the search-result cards and charge extra — and often fail — to open each listing page. This Actor reads the same data BizBuySell's own website loads, so every record already includes:

| Group | You get |
|---|---|
| Financials | asking price, cash flow (SDE), gross revenue, EBITDA, net income, owner's compensation, **price ÷ cash flow, price ÷ EBITDA, price ÷ revenue**, inventory, FF\&E, real estate value and whether it's included, rent and lease terms |
| Business | industry and sub-industry, listing type, year established, full-time / part-time employees, home-based, relocatable, absentee owner, seller financing, SBA pre-qualified, franchise brand |
| Location | street address, city, county, state, ZIP, country, latitude / longitude (unless the seller keeps them confidential) |
| Seller write-up | description, facilities, competition, growth & expansion, support & training, reason for selling, website |
| Contact | listed by (owner, broker, franchisor…), contact name and phone, tracking phone, photo, brokerage, broker profile and logo |
| Media & activity | all full-size photos, documents such as PDF teasers, Diamond / Showcase level, page views, last-updated date, recently added / updated / price-reduced badges |

### Get past BizBuySell's 10,000-result limit

BizBuySell never shows more than 10,000 results for one search, so a big state or a nationwide search normally gets cut off. Here, a search that's too big is split into narrower ones — by industry, then by state, then by sub-industry — and duplicates are removed, so you get the complete market: every listing in a large state, an industry nationwide, or all of BizBuySell in one run. Set **Max results** to `0` to take everything.

### Set it up for your goal

Each goal below has a matching view in the **Output** tab that shows just the columns you need, ready to download as CSV or Excel.

| Goal | Set this | Then open |
|---|---|---|
| Everything on one BizBuySell page | Paste the page URL — a state, city, county or industry page, or a search you set up on BizBuySell. | **Listings** |
| Deals that fit your buy box | **States** + **Industries** + min/max **asking price**, **cash flow** and **revenue**; add **Seller financing** or **SBA pre-qualified** if you need them. | **Financials** |
| Valuation comps | An industry and region, **Sort by** cash flow. Each listing's price ÷ cash flow and price ÷ EBITDA multiples are already worked out. | **Financials** |
| A call list of brokers and sellers | Any search in your target market. | **Broker & seller contacts** |
| Territory or market mapping | **States**, or a city or county page URL. | **Location** |
| New deals every morning | **Listed within the last** `1` day, or turn on **monitor mode** and schedule the run. | **Changes** |
| Listings you're already tracking | Paste their URLs. Listings that were taken down are reported in the log. | **Listings** |
| A franchise shortlist | Paste the franchise directory, a franchise category or a brand's page. | **Franchises** |

#### Example input: profitable service businesses in Texas and Florida

```json
{
    "states": ["TX", "FL"],
    "categories": ["service-businesses"],
    "minCashFlow": 250000,
    "maxAskingPrice": 2000000,
    "sellerFinancingOnly": true,
    "sortBy": "newest",
    "maxResults": 500
}
```

#### Example input: a pasted search, everything on it

```json
{
    "startUrls": [{ "url": "https://www.bizbuysell.com/florida/restaurants-and-food-businesses-for-sale/" }],
    "maxResults": 0
}
```

### Get only new and changed listings

Stop re-reading the same listings every week. Turn on **Only new or changed listings (monitor mode)** and schedule the Actor: the first run saves every match, and each later run saves only listings that are new or whose price, financials or details changed. Each one is marked **NEW** or **UPDATED**, shows when you first saw it, and keeps the old asking price when the price moved — so price drops stand out. Later runs usually finish in seconds, and listings that didn't change are neither saved nor charged. Give each alert its own **Monitor name** to keep their histories apart, and add Apify's email or Slack integration to get the new deals delivered.

```json
{
    "keyword": "HVAC",
    "listingTypes": ["established"],
    "monitorMode": true,
    "monitorName": "hvac-alerts",
    "maxResults": 0
}
```

### Compare franchises before you talk to a franchisor

Paste BizBuySell's franchise directory, a category such as low-cost or food franchises, or a single brand's page. Each franchise answers the questions buyers ask first:

| Your question | What you get |
|---|---|
| How much money do I need? | Cash required, net worth required, total investment range and the average initial investment |
| What will I pay the franchisor? | Franchise fee, royalty and ad-fund fee, as the franchisor states them and as percentages from the franchise disclosure data |
| Do franchisees do well? | Average revenue per unit, plus success and continuity rates from FRANdata |
| Is the brand growing or shrinking? | Franchised and company-owned units, units opened last year, and unit counts year by year |
| Who's behind it, and can I open one where I live? | Headquarters, CEO, website, training offered, the states it sells in, and the date of the latest disclosure document |

For example, Wayback Burgers comes back with $250,000 cash and $500,000 net worth required, a $550,000–$650,000 total investment, a $35,000 franchise fee, royalty of $400 + 6% of gross sales, a 2% ad fund, 153 units with 9 opened last year, a 95% success rate, and headquarters in Cheshire, CT.

### Settings

| Setting | What it does |
|---|---|
| **BizBuySell URLs** | Search pages, state / city / county / industry pages, filtered searches, single listings, franchise directory, categories and brand pages. Mix any number. |
| **Keyword** | Searches titles and descriptions. |
| **States / provinces** | 50 states, DC and Canadian provinces. |
| **Industries** | 21 industries and 190 sub-industries. |
| **Listing types** | Established businesses, asset sales, business real estate, startups. |
| **Asking price, cash flow, revenue** | Min and max for each, applied by BizBuySell's own search. |
| **Listed / updated within the last (days)**, **Established after** | Freshness and age filters. |
| **Seller financing, SBA pre-qualified, real estate included, home-based, absentee owner, price reduced** | Keep only matching listings. |
| **Include relocatable businesses** | Adds businesses from elsewhere that can move to the searched state. |
| **Sort by** | BizBuySell default, newest, price or cash flow. With a limit, you get the top listings in this order. |
| **Max results** | Cap on saved records across everything (default 100, `0` = no limit). |
| **Monitor mode**, **Monitor name** | See above. |
| **Include raw BizBuySell data** | For developers: adds BizBuySell's complete original record (170+ fields). |
| **Proxy** | Apify's standard datacenter proxy works, including on free plans. |

Filters also narrow pasted search URLs. They don't apply to franchise pages or single listing URLs.

### See a real record

One listing from the Florida restaurants search, exactly as you'd receive it. Fields the seller didn't fill in come back empty (`null`).

```json
{
    "type": "listing",
    "id": 2569692,
    "url": "https://www.bizbuysell.com/business-opportunity/profitable-burger-franchise-for-sale-orlando-fl/2569692/",
    "title": "Profitable Burger Franchise for Sale – Orlando, FL",
    "tagline": "Established Turnkey Restaurant | $1.2M Annualized Revenue | 13% Profit",
    "listingType": "Established Business",
    "industry": "American Restaurants",
    "industryGroup": "Restaurants & Food",
    "secondaryIndustry": "Quick Service Restaurants",
    "askingPrice": 620000,
    "cashFlow": 226000,
    "grossRevenue": 1200000,
    "ebitda": 156000,
    "netIncome": 156000,
    "ownerCompensation": 60000,
    "priceToCashFlow": 2.74,
    "priceToEbitda": 3.97,
    "priceToRevenue": 0.52,
    "inventoryValue": 25000,
    "ffeValue": 120000,
    "realEstate": "Leased",
    "rent": 9800,
    "rentPeriod": "per month",
    "buildingSqFt": 3000,
    "yearEstablished": 2019,
    "employees": 8,
    "employeesFullTime": 4,
    "employeesPartTime": 4,
    "sellerFinancing": false,
    "sbaPrequalified": true,
    "isFranchise": true,
    "location": "Ocoee, FL",
    "streetAddress": "336 Moore Rd",
    "city": "Ocoee",
    "county": "Orange County",
    "state": "FL",
    "zip": "34761",
    "country": "US",
    "description": "Profitable Burger Franchise – $1.2M Annualized Revenue – Orlando Area\n\nAsking Price: $620,000\n\nEstablished, Profitable Restaurant – Turnkey Franchise Opportunity …",
    "facilities": "The Brave Burger is located in an approximately 2,497-square-foot space in Ocoee, Florida …",
    "reasonForSelling": "The franchisor currently owns and operates this location.",
    "website": "http://www.thebraveburger.com",
    "sellerType": "Franchisor",
    "contactName": "Sergio BoscoJunior",
    "contactPhone": "(407) 243-7553",
    "mainImage": "https://images.bizbuysell.com/shared/listings/256/2569692/47a4188a-ec93-4af7-972f-d5ede3a1a890.webp",
    "imageCount": 19,
    "adLevel": "Diamond",
    "views": 50,
    "recentlyAdded": true,
    "lastUpdated": "2026-10-28T12:57:20Z",
    "rank": 1,
    "searchUrl": "https://www.bizbuysell.com/florida/restaurants-and-food-businesses-for-sale/"
}
```

### Pay only for results

**$3 per 1,000 results, full details included** — no separate charge for financials, contacts or photos, and unchanged listings skipped by monitor mode are free.

| Records | Cost |
|---|---|
| 100 | $0.30 |
| 1,000 | $3.00 |
| 10,000 | $30.00 |

Set a **Maximum cost per run** in the run options and the Actor stops exactly at the number of records it covers, so a run never costs more than you planned. Platform usage stays small too: no browser and no residential proxy are needed.

### Good to know

- **Not every number is disclosed.** Sellers often leave cash flow, revenue or EBITDA blank, just as on BizBuySell; those fields come back empty.
- **The cash flow filter also looks at EBITDA.** When a seller doesn't disclose cash flow, BizBuySell checks EBITDA instead, so those listings are included with cash flow empty. Listings whose disclosed cash flow is outside your range are always left out.
- **Startups have no location.** BizBuySell shows startups in state searches without tying them to a place, so their address fields are empty.
- **Confidential details stay hidden.** If a seller hides the street address, city or website, so does the output.
- **BizBuySell doesn't show when a listing was first posted.** To find fresh deals, use the **Listed within the last** filter, the last-updated date, or monitor mode, which records when you first saw each listing.
- **Max results is shared** across every URL and filter in the run, and a listing found by several searches is saved once.
- **Filters set on BizBuySell's website travel in the URL's `?q=` code.** The listing-type filter is always read; if BizBuySell won't translate another one, the log names it so you can set it with the filter fields instead.
- **Broker directory pages aren't supported yet** — but each listing already carries its broker's name, phone, brokerage and profile link.

### 📮 Support

Bugs, feature requests or custom scraping work — open an issue on Apify, email alkausarimujahid@gmail.com, or visit [ayzalsoft.com](https://ayzalsoft.com).

# Actor input Schema

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

Any BizBuySell page you can browse: search results, state/city/county/industry pages, filtered searches (with ?q=), single business listings, and the franchise directory, franchise categories or franchise brand pages. Mix as many as you like; duplicates are removed. Leave empty to search with the filters below only.

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

Search listing titles and descriptions, e.g. "laundromat", "HVAC" or "coffee shop".

## `states` (type: `array`):

Only listings located in these US states or Canadian provinces. Leave empty for everywhere.

## `categories` (type: `array`):

Only listings in these industries. Pick a whole industry (e.g. "Restaurants & Food") or a specific sub-industry (e.g. "Restaurants & Food › Pizza Restaurants"). Leave empty for all industries.

## `listingTypes` (type: `array`):

Only these kinds of listings. Leave empty for all.

## `minAskingPrice` (type: `integer`):

Only listings asking at least this much.

## `maxAskingPrice` (type: `integer`):

Only listings asking at most this much.

## `minCashFlow` (type: `integer`):

Only listings with at least this annual cash flow (seller's discretionary earnings). Listings that don't disclose cash flow are kept when their EBITDA matches, as on BizBuySell.

## `maxCashFlow` (type: `integer`):

Only listings with at most this annual cash flow.

## `minRevenue` (type: `integer`):

Only listings with at least this annual gross revenue.

## `maxRevenue` (type: `integer`):

Only listings with at most this annual gross revenue.

## `listedWithinDays` (type: `integer`):

Only listings added to BizBuySell in the last N days. Great for daily or weekly deal alerts.

## `updatedWithinDays` (type: `integer`):

Only listings added or changed in the last N days.

## `establishedAfter` (type: `integer`):

Only businesses established after this year, e.g. 2015.

## `sellerFinancingOnly` (type: `boolean`):

Only listings where the seller offers financing.

## `sbaPrequalifiedOnly` (type: `boolean`):

Only listings pre-qualified for an SBA loan.

## `realEstateIncludedOnly` (type: `boolean`):

Only listings whose asking price includes the real estate.

## `homeBasedOnly` (type: `boolean`):

Only home-based businesses.

## `absenteeOwnerOnly` (type: `boolean`):

Only businesses that can be run without the owner on site full time.

## `priceReducedOnly` (type: `boolean`):

Only listings whose asking price was recently reduced.

## `includeRelocatable` (type: `boolean`):

When searching a state, also include businesses from elsewhere that can be relocated there (BizBuySell's "show relocatable" option).

## `sortBy` (type: `string`):

Order of results. Matters when you set a limit: you get the top listings in this order.

## `maxResults` (type: `integer`):

Maximum number of listings and franchises to save in this run. Set 0 for no limit — searches over BizBuySell's 10,000-result cap are split automatically, so even all of BizBuySell can be scraped.

## `monitorMode` (type: `boolean`):

For scheduled runs: the first run saves everything and remembers it; later runs save only listings that are new or changed (price, financials or details) since the last run, marked with changeType NEW or UPDATED. Unchanged listings are not saved or charged.

## `monitorName` (type: `string`):

Optional. Names this monitoring setup so its history stays separate. Leave empty to name it automatically from the URLs and filters (changing them then starts a new history).

## `includeRawData` (type: `boolean`):

Adds a raw field with BizBuySell's complete original record (170+ fields) for advanced use.

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

Apify Proxy (the default datacenter proxy works, including on free plans). Change only if your runs get refused.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.bizbuysell.com/florida/restaurants-and-food-businesses-for-sale/"
    }
  ],
  "sellerFinancingOnly": false,
  "sbaPrequalifiedOnly": false,
  "realEstateIncludedOnly": false,
  "homeBasedOnly": false,
  "absenteeOwnerOnly": false,
  "priceReducedOnly": false,
  "includeRelocatable": false,
  "sortBy": "relevance",
  "maxResults": 100,
  "monitorMode": false,
  "includeRawData": false,
  "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/florida/restaurants-and-food-businesses-for-sale/"
        }
    ],
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("alkausari_mujahid/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/florida/restaurants-and-food-businesses-for-sale/" }],
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("alkausari_mujahid/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/florida/restaurants-and-food-businesses-for-sale/"
    }
  ],
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call alkausari_mujahid/bizbuysell-scraper --silent --output-dataset

```

## MCP server setup

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