# BizBuySell Scraper - Businesses for Sale, Financials & Brokers (`scrapersdelight/bizbuysell-scraper`) Actor

Scrape BizBuySell businesses for sale with the full listing: asking price, cash flow, revenue, EBITDA, inventory, FF\&E, real estate, employees, rent, reason for selling, photos, documents and page views, plus the broker or owner name and phone. Filters, past 10,000 results, monitor. No login.

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

## Pricing

$0.80 / 1,000 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/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

### What does BizBuySell Scraper do?

**BizBuySell Scraper** exports businesses for sale from **BizBuySell.com**, the largest business-for-sale marketplace in the US (45,060 listings collected in one run on 2026-10-16). Each row is one listing with its **full record**: asking price, cash flow (SDE), gross revenue, EBITDA, inventory, FF\&E, real estate, year established, employees, rent and lease, facilities, competition, growth, support and training, reason for selling, photos and attached documents, plus the **broker or owner contact** (name, phone, brokerage, broker profile). Search funds, private-equity and independent sponsors, business brokers, SBA lenders, franchise developers and market researchers use it for deal sourcing, valuation comps and broker lead lists.

Also known as: BizBuySell API, BizBuySell data export, businesses for sale scraper, business broker leads, M\&A deal flow scraper.

- 🏢 **The whole listing in every row:** no "detail" add-on and no second request per listing - the financials, the narrative sections and the contact come in the same row.
- 🔎 **All the site's search filters:** state, city, county, Canada and other countries, keyword, 207 categories, listing type, asking price, cash flow, revenue, established after, listed within N days, seller financing, real estate included, home-based, absentee owner, price reduced, SBA eligible, franchise resales, broker or owner listings, 6 sort orders.
- ➕ **Extra row filters:** EBITDA range, employee range, established in or before a year, phone only.
- 🔗 **Or paste URLs:** any BizBuySell search page (its own filters kept), listing pages, or bare listing numbers.
- 🧩 **Past the 10,000 limit:** BizBuySell serves 10,000 results per search; bigger searches are split by state, listing type and category, and duplicates are removed. One run collected the whole site (45,060 listings) in under 4 minutes.
- 👀 **Page views per listing**, sale-flyer and financial-summary PDF links, YouTube videos, the call-tracking number and the owner's website when published.
- 🔔 **Monitor mode:** on a schedule, return only new listings and listings whose asking price changed.
- 🔓 **No login, no cookies, no API key.**

### What data can you get from BizBuySell?

<table>
<tr><td>🆔 Listing number + URL</td><td>🏷️ Title + tagline</td><td>📂 Listing type</td></tr>
<tr><td>🗂️ Category, group, second category</td><td>💲 Asking price</td><td>📈 Cash flow (SDE)</td></tr>
<tr><td>🧾 Gross revenue</td><td>📊 EBITDA, pre-tax net income</td><td>📦 Inventory (+ included?)</td></tr>
<tr><td>🪑 FF&E</td><td>🏠 Real estate: owned / leased, value, included?</td><td>➗ Price / cash flow, / EBITDA, / revenue</td></tr>
<tr><td>📅 Year established</td><td>👥 Employees (full-time, part-time)</td><td>🔑 Rent, rent period, lease expiration</td></tr>
<tr><td>🏭 Facilities, building sq ft</td><td>⚔️ Competition</td><td>🚀 Growth & expansion</td></tr>
<tr><td>🎓 Support & training</td><td>❓ Reason for selling</td><td>💳 Seller financing + details</td></tr>
<tr><td>📍 City, county, state, ZIP, country</td><td>🗺️ Street address + coordinates (when public)</td><td>🏡 Home-based, relocatable, absentee</td></tr>
<tr><td>🤝 Broker or owner</td><td>📞 Contact name + phone</td><td>☎️ Call-tracking number</td></tr>
<tr><td>🏛️ Brokerage + broker profile</td><td>🌐 Business website</td><td>🖼️ Photos + count</td></tr>
<tr><td>📄 Documents (PDF flyers)</td><td>🎬 Video links</td><td>👀 Page views, hot / new / updated badges</td></tr>
</table>

### How to scrape BizBuySell with BizBuySell Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) - the free plan comes with monthly credit.
2. Open **BizBuySell Scraper** and pick **states**, **categories** or a **keyword** - or paste BizBuySell search or listing URLs.
3. Narrow it down with the financial and listing filters, or leave them empty for every listing.
4. Set **Max listings** (100 by default; 0 = everything that matches).
5. Click **Start**. 100 listings take a few seconds; 1,000 took 8 seconds and the whole site under 4 minutes in our tests.
6. Download the results as JSON, CSV, Excel or HTML, or read them through the API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `startUrls` | list | BizBuySell search pages (filters in the `q` parameter kept), listing pages, or listing numbers |
| `listingIds` | list | Listing numbers, e.g. `2507315` (100 per request) |
| `keyword` | text | The site's keyword search |
| `states` | multi-select | US states (or codes like `TX`), Canada, Caribbean, Mexico, Puerto Rico, United Kingdom, Australia. Several places = one search |
| `city` / `county` | text | A city or county inside the ONE state picked |
| `categories` | multi-select | 207 categories (a group includes its sub-categories); names and ids also accepted through the API |
| `listingTypes` | multi-select | `established`, `asset-sale`, `real-estate-for-sale`, `real-estate-for-lease`, `start-up` |
| **💰 Financial filters** | | |
| `minAskingPrice` / `maxAskingPrice` | number | USD, site filter |
| `minCashFlow` / `maxCashFlow` | number | USD, site filter |
| `minGrossRevenue` / `maxGrossRevenue` | number | USD, site filter |
| `minEbitda` / `maxEbitda` | number | USD, applied to the rows (listings without EBITDA are left out) |
| `minEmployees` / `maxEmployees` | number | Applied to the rows |
| `establishedAfterYear` | number | Site filter |
| `establishedBeforeYear` | number | Established in or before this year, applied to the rows |
| `listedWithinDays` | number | Only listings published in the last N days |
| **✅ Listing filters** | | |
| `sellerType` | select | `any` (default), `broker`, `owner` |
| `sellerFinancingOnly`, `realEstateIncludedOnly`, `absenteeOwnerOnly`, `priceReducedOnly`, `sbaEligibleOnly` | true/false | Site filters, off by default |
| `homeBased`, `franchiseResales` | select | `any` (default), `only`, `exclude` |
| `hideNoAskingPrice` | true/false | Leave out listings without a price |
| `includeRelocatable` | true/false | Also return relocatable businesses from elsewhere (site option) |
| `withPhoneOnly` | true/false | Only rows with a contact or tracking phone (others are not charged) |
| **⚙️ Run options** | | |
| `sortBy` | select | `recommended` (BizBuySell's order), `newest`, `price-asc`, `price-desc`, `cashflow-desc`, `cashflow-asc` |
| `maxResults` | number | Default 100; 0 = everything. In monitor mode it is the number of listings checked |
| `maxResultsPerSearch` | number | Cap per pasted URL / search; 0 = none |
| `splitLargeSearches` | true/false | Default true: go past the site's 10,000 results per search |
| `includeImages` | true/false | Default true: every photo URL in `images` |
| `monitorMode` + `monitorStoreName` | true/false + text | Only new / re-priced listings on later runs |
| `maxConcurrency` | number | Parts of a split search read at once (1-4, default 2) |
| `proxyConfiguration` | proxy | Optional; by default the Actor connects directly and moves to residential proxies by itself only if BizBuySell refuses |

With an empty input the Actor returns the first 100 listings of the whole site in BizBuySell's own order.

#### Input JSON

```json
{
    "states": ["Florida", "Georgia"],
    "categories": ["restaurants-and-food-businesses"],
    "minCashFlow": 100000,
    "sellerType": "broker",
    "sortBy": "newest",
    "maxResults": 200
}
```

Paste URLs instead (or as well):

```json
{
    "startUrls": [
        "https://www.bizbuysell.com/texas/houston-businesses-for-sale/",
        "https://www.bizbuysell.com/business-opportunity/rare-waterfront-opportunity/2507315/"
    ],
    "maxResultsPerSearch": 50
}
```

### ⬆️ Output

One row per listing. A real row from the test run (shortened; long text fields cut):

```json
{
  "listingId": 2561833,
  "url": "https://www.bizbuysell.com/business-opportunity/profitable-senior-care-advisory-business/2561833/",
  "title": "Profitable Senior Care Advisory Business",
  "listingType": "Established business",
  "category": "Assisted Living & Nursing Homes",
  "categoryGroup": "Health Care & Fitness",
  "askingPrice": 275000,
  "cashFlow": 139448,
  "grossRevenue": 346581,
  "askingToCashFlow": 1.97,
  "yearEstablished": 2019,
  "support": "Seller willing to train.",
  "reasonForSelling": "Family commitments",
  "location": "Austin, TX",
  "city": "Austin", "county": "Travis County", "state": "TX", "zip": "78748",
  "sellerType": "broker",
  "contactName": "Dave Godwin, CBI, IBBA, M&A Source",
  "contactPhone": "(479) 263-7330",
  "trackedPhone": "(539) 999-0309",
  "brokerCompany": "CBI Team",
  "brokerProfileUrl": "https://www.bizbuysell.com/business-broker/dave-godwin-cbi-ibba-manda-source/cbi-team/291/",
  "pageViews": 106,
  "lastUpdated": "2026-10-16"
}
```

#### Fields

Fill = share of rows with a value, measured on the full-site run of 2026-10-16 (45,060 listings). Sellers decide what they disclose; a missing value is `null`, never a made-up zero.

| Field | Meaning | Fill |
|---|---|---|
| `listingId`, `url`, `title`, `listingType`, `category`, `categoryGroup`, `categoryId` | Identity and category | 100% |
| `tagline`, `secondaryCategory` | Ad line, second category | 35% / 53% |
| `askingPrice` | Asking price, USD | 95% |
| `cashFlow` | Cash flow / SDE | 53% |
| `grossRevenue` | Annual gross revenue | 71% |
| `ebitda`, `preTaxNetIncome` | EBITDA, pre-tax net income | 11% / 2% |
| `inventory`, `inventoryIncludedInPrice` | Inventory value, included in price | 34% |
| `ffe` | Furniture, fixtures & equipment | 35% |
| `realEstate`, `realEstateValue`, `realEstateIncludedInPrice` | owned / leased / none, value, included | 90% / 8% / 100% |
| `askingToCashFlow`, `askingToEbitda`, `askingToRevenue` | Asking price divided by each (computed) | 51% / 9% / 68% |
| `sellerFinancing`, `financing` | Seller financing offered, details | 99% / 27% |
| `yearEstablished` | Year established | 68% |
| `employees`, `fullTimeEmployees`, `partTimeEmployees`, `employeeNotes` | Staff | 41% (notes 19%) |
| `rent`, `rentPeriod`, `leaseExpiration`, `buildingSqFt` | Rent, lease, building | 36% / 19% / 44% |
| `summary`, `facilities`, `competition`, `growth`, `support`, `reasonForSelling` | Listing sections | 100% / 57% / 40% / 44% / 67% / 70% |
| `homeBased`, `relocatable`, `absenteeOwner`, `isFranchise`, `franchiseBrand` | Business flags (11% are franchises) | 100% (brand 5%) |
| `location`, `city`, `county`, `state`, `zip`, `country` | Location | 99% / 58% / 88% / 99% / 57% / 99% (city and ZIP are often kept confidential) |
| `streetAddress`, `latitude`, `longitude` | When the seller made them public | 10% / 15% |
| `sellerType` | broker 78%, owner 13%, broker or M\&A advisor 5%, other roles (franchisor, accountant, attorney...) 2% | 99% |
| `contactName`, `contactFirstName`, `contactLastName` | Who to contact | 99% |
| `contactPhone` | Contact phone | 97% |
| `trackedPhone` | BizBuySell call-tracking number | 77% |
| `brokerCompany`, `brokerProfileUrl`, `brokerId` | Brokerage and profile | 78% |
| `businessWebsite` | The business's website | 14% |
| `imageUrl`, `images`, `imageCount` | Photos | 100% |
| `documents` | `{name, url}` of attached PDFs (flyers, financial summaries) | 10% |
| `videoUrls` | YouTube links | 3% |
| `pageViews` | Times the listing was viewed on BizBuySell | 100% |
| `hotProperty`, `recentlyAdded`, `recentlyUpdated` | Site badges | 100% |
| `lastUpdated` | Date the listing was last edited | 100% |
| `changeType`, `previousAskingPrice`, `firstSeenAt` | Monitor mode only | monitor rows |
| `source`, `scrapedAt` | Search or URL that produced the row, time collected | 100% |

The Console shows four views: **Listings**, **Financials**, **Contacts** and **Business details**. A `RUN_SUMMARY` record in the key-value store lists every search with the total the site counted, the parts it was split into, pages read, rows delivered and its status.

### Use cases

- 🎯 **Search funds and independent sponsors:** a daily feed of new listings with cash flow above your floor in your states, with the broker's phone.
- 🏦 **SBA lenders and acquisition-loan brokers:** listings marked SBA eligible or with seller financing, with asking price, cash flow and revenue to pre-screen.
- 🤝 **Business brokers:** competitor inventory by category and county, broker names and brokerages, page views per listing.
- 📐 **Valuation and M\&A research:** price-to-cash-flow and price-to-revenue multiples by category and state from tens of thousands of asking prices.
- 🍕 **Franchise developers:** franchise resales by brand and region.
- 📞 **Lead generation:** owner-listed businesses with the owner's name, phone and website.

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

You pay per listing delivered; there is no start fee and no extra charge for the details or the contact. The price per listing is shown on the Actor's pricing tab.

- Duplicates, rows removed by the EBITDA / employee / year / phone filters, and monitor-mode listings that did not change are **never charged**.
- A run stops cleanly at the maximum charge you set for it: every row in the dataset is a charged row.

### Integrations, API, scheduling & MCP

Run BizBuySell Scraper on a [schedule](https://docs.apify.com/platform/schedules) (daily with monitor mode is the usual set-up), get a webhook when it finishes, and send results to Google Sheets, Slack, Make, Zapier or n8n through Apify integrations. Call it from code with the [Python](https://apify.com/scrapersdelight/bizbuysell-scraper/api/python) or [JavaScript](https://apify.com/scrapersdelight/bizbuysell-scraper/api/javascript) client, or connect it to an AI assistant through the [MCP server](https://apify.com/scrapersdelight/bizbuysell-scraper/api/mcp).

### More business-for-sale scrapers

<table>
<tr><td>🏪 <a href="https://apify.com/scrapersdelight/bizquest-scraper">BizQuest Scraper</a><br>BizQuest businesses for sale with broker name and phone.</td>
<td>🏢 <a href="https://apify.com/scrapersdelight/crexi-scraper">Crexi Scraper</a><br>Commercial real estate listings and brokers.</td>
<td>🌾 <a href="https://apify.com/scrapersdelight/landwatch-land-scraper">LandWatch Scraper</a><br>Land and farm listings with brokers.</td></tr>
</table>

More from [ScrapersDelight](https://apify.com/scrapersdelight).

### Limits & empty runs

- BizBuySell serves at most **10,000 results per search**. With `splitLargeSearches` on (default) a bigger search is split; the whole site (45,060 listings) arrived in one run, with 524 cross-listed duplicates removed and not charged.
- The site's **publish date** is not part of the data BizBuySell serves outside its web pages, so there is no "date listed" column; use `listedWithinDays` to filter by listing age, `sortBy: newest`, and `lastUpdated`.
- Franchise-directory offers and broker-directory profiles are not listings and are not scraped (use the broker fields on each listing).
- An unknown city, county or URL path ends the search as "rejected by the site" (shown in the run status and `RUN_SUMMARY`); nothing is charged. A run whose every search fails is marked FAILED.
- A monitor run that finds nothing new delivers 0 rows and costs nothing per row.

### FAQ

#### How much does BizBuySell Scraper cost?

One charge per listing delivered, with every field included; see the pricing tab. Filtered, duplicate and unchanged-monitor rows are free.

#### How many listings can BizBuySell Scraper return?

Everything on the site: the full-site test run returned 45,060 listings. A single search is limited by BizBuySell to 10,000; the Actor splits larger searches automatically.

#### Does BizBuySell Scraper return the broker's phone number?

Yes: 97% of rows have the contact's phone and 77% also carry BizBuySell's call-tracking number. Broker rows add the brokerage and the broker's BizBuySell profile; owner rows often add the website and sometimes the street address.

#### Can BizBuySell Scraper return cash flow, revenue and EBITDA?

Yes, together with asking price, inventory, FF\&E, real estate, rent and the computed price multiples - when the seller discloses them (cash flow 53%, revenue 71%, EBITDA 11% of all listings).

#### Can I monitor BizBuySell for new listings with BizBuySell Scraper?

Yes. Turn on monitor mode, give the watch a store name and schedule the run: later runs return only new listings and listings whose asking price changed (`changeType`, `previousAskingPrice`).

#### Can I use BizBuySell Scraper with BizBuySell URLs I already have?

Yes. Paste any BizBuySell search page - the filters in its address are kept - or listing pages and listing numbers.

#### Does BizBuySell Scraper need a BizBuySell account, cookies or an API key?

No.

#### Why did BizBuySell Scraper return fewer rows than I asked for?

The search had fewer matches, rows were removed by the EBITDA / employee / year / phone filters, or the run reached its maximum charge. `RUN_SUMMARY` shows the count the site reported for each search and the reason.

#### Can I call BizBuySell Scraper from my code or an AI agent?

Yes, through the Apify API (Python and JavaScript clients) or the MCP server; see Integrations above.

#### Your feedback

Something missing or not working? Open an issue on the **Issues** tab - we read every one and usually ship fixes within days.

# Actor input Schema

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

Any BizBuySell search page, run exactly as the site runs it (its own filters in the "q" parameter included): all businesses (/businesses-for-sale/), a state (/texas-businesses-for-sale/), a city (/texas/houston-businesses-for-sale/), a county, a category (/pizza-restaurants-for-sale/) or a state + category (/florida/restaurants-and-food-businesses-for-sale/). Listing pages (/business-opportunity/…/2507315/, /business-asset/…, real-estate and start-up listings) and bare listing numbers work too.

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

BizBuySell listing numbers (the number at the end of a listing URL, e.g. 2507315). Fetched 100 per request.

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

The site's own keyword search, e.g. coffee, HVAC, laundromat.

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

US states, or Canada, the Caribbean, Mexico, Puerto Rico, the United Kingdom or Australia. Several places run as one search. API callers may pass state codes (TX).

## `city` (type: `string`):

A city in the ONE state selected above, e.g. Houston (the site resolves it).

## `county` (type: `string`):

A county in the ONE state selected above, e.g. Harris (with or without "County").

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

BizBuySell's 208 categories (20 groups and their sub-categories); a group includes its sub-categories. Several categories run as one search. API callers may also pass the category name or id.

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

Leave empty for all types.

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

USD. The site filter.

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

USD. The site filter.

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

USD (cash flow / SDE). The site filter.

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

USD. The site filter.

## `minGrossRevenue` (type: `integer`):

USD. The site filter.

## `maxGrossRevenue` (type: `integer`):

USD. The site filter.

## `minEbitda` (type: `integer`):

USD. Applied to the rows (listings that do not disclose EBITDA are left out).

## `maxEbitda` (type: `integer`):

USD. Applied to the rows.

## `minEmployees` (type: `integer`):

Applied to the rows (listings without a staff count are left out).

## `maxEmployees` (type: `integer`):

Applied to the rows.

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

e.g. 2015. The site filter.

## `establishedBeforeYear` (type: `integer`):

e.g. 2000. Applied to the rows.

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

Only listings published in the last N days, e.g. 7. The site filter.

## `sellerType` (type: `string`):

Broker listings, owner (and other non-broker) listings, or both.

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

Only listings that offer seller financing.

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

Only listings whose asking price includes real estate.

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

Only absentee / semi-absentee businesses.

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

Only listings with a price reduction.

## `sbaEligibleOnly` (type: `boolean`):

Only listings BizBuySell marks as eligible for SBA financing (the site filter).

## `homeBased` (type: `string`):

Keep, require or remove home-based businesses.

## `franchiseResales` (type: `string`):

Keep, require or remove franchise resales.

## `hideNoAskingPrice` (type: `boolean`):

Leave out listings that do not show an asking price.

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

Also return businesses from elsewhere that can be relocated to the chosen place (the site option).

## `withPhoneOnly` (type: `boolean`):

Leave out listings without a contact or tracked phone number (not charged).

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

Order of the results (and so which listings a capped run returns).

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

Stop after this many listings (the main cost control). 0 = everything that matches.

## `maxResultsPerSearch` (type: `integer`):

Cap for each pasted URL / search. 0 = no per-search cap.

## `splitLargeSearches` (type: `boolean`):

BizBuySell serves at most 10,000 results per search (the whole site holds about 45,000). When a search reaches that ceiling and you want more, it is split by state, then listing type, then category group; duplicates are removed.

## `includeImages` (type: `boolean`):

Add every photo URL (the first photo is always in imageUrl).

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

Remember delivered listings in a named store and, on later runs, return (and charge) only NEW listings and listings whose asking price CHANGED. Schedule the same input daily.

## `monitorStoreName` (type: `string`):

Key-value store that keeps the monitor memory (one name per watched search). Default: bizbuysell-monitor.

## `maxConcurrency` (type: `integer`):

How many parts of a split search are read at once.

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

Optional. By default the Actor connects directly and moves to residential proxies by itself only if BizBuySell refuses the connection. Add your own proxy URLs to route through them first.

## Actor input object example

```json
{
  "states": [
    "Texas"
  ],
  "sellerType": "any",
  "sellerFinancingOnly": false,
  "realEstateIncludedOnly": false,
  "absenteeOwnerOnly": false,
  "priceReducedOnly": false,
  "sbaEligibleOnly": false,
  "homeBased": "any",
  "franchiseResales": "any",
  "hideNoAskingPrice": false,
  "includeRelocatable": false,
  "withPhoneOnly": false,
  "sortBy": "recommended",
  "maxResults": 20,
  "splitLargeSearches": true,
  "includeImages": true,
  "monitorMode": false,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One item per BizBuySell business-for-sale listing.

## `summary` (type: `string`):

Per-search totals, split parts, pages read and status; duplicate, filtered and unchanged counts; routes used and their cost.

# 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 = {
    "states": [
        "Texas"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/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 = {
    "states": ["Texas"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/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 '{
  "states": [
    "Texas"
  ],
  "maxResults": 20
}' |
apify call scrapersdelight/bizbuysell-scraper --silent --output-dataset

```

## MCP server setup

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