# BizQuest Businesses For Sale Scraper (`datacach/bizquest-businesses-for-sale-scraper`) Actor

Scrapes business-for-sale listings from BizQuest: title, location, asking price, revenue, EBITDA, images, broker contact and listing URL.

- **URL**: https://apify.com/datacach/bizquest-businesses-for-sale-scraper.md
- **Developed by:** [DataCach](https://apify.com/datacach) (community)
- **Categories:** Lead generation, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 businesses

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/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

## BizQuest Businesses For Sale Scraper

Scrape **businesses for sale** from [BizQuest](https://www.bizquest.com/) and export them to JSON, CSV, or Excel — no code required.

### What is BizQuest Businesses For Sale Scraper?

BizQuest Businesses For Sale Scraper is an **Apify Actor** that **extracts business-for-sale listings** from BizQuest, one of the largest business-for-sale marketplaces in the United States. It collects the **asking price**, **location**, **EBITDA**, **revenue**, listing description, photo, and direct listing URL for every business it finds, then hands you the whole thing as structured **JSON, CSV, or Excel data**.

You can **search by location** — a state, city, county, or metro area — **filter by industry**, or let it walk the entire BizQuest catalog state by state — roughly **45,000 active listings**. Just click **Run** to get started; every input has a sensible default.

### What can this BizQuest scraper do?

- 🗺️ **Scrape every US state automatically** — it reads BizQuest's own sitemap to find each state's listing page, so nothing is hardcoded and nothing goes stale.
- 📍 **Search by location** — type `Houston, TX`, `Texas`, `Los Angeles County, CA`, or `New York City Metro Area, NY`. Locations are matched against BizQuest's own location pages, so you get exactly what the site's search returns.
- 🏭 **Filter by industry** — pick from the 28 BizQuest industries, from Food & Beverage to Manufacturing. The filter applies to every page the run scrapes.
- 🎯 **Or paste any BizQuest listing URL** and it takes it from there.
- 💰 **Extract financial data** — asking price, EBITDA, revenue, and whether real estate is included in the price.
- 🏷️ **Catch fresh and reduced listings** — flags for recently added, recently updated, and price-reduced businesses.
- 🔒 **Broker contact details are opt-in** — names and phone numbers are excluded by default, because they are personal data.
- 📤 **Export to JSON, CSV, Excel, XML, or RSS** straight from the Apify Console, or pull results through the **Apify API**.
- ⏰ **Schedule runs** to track the market daily or weekly and spot new listings as they appear.
- 🔗 **Integrate with Zapier, Make, Google Sheets, Slack, Airtable**, and webhooks — no glue code needed.
- 📊 **Monitoring and alerts** are built into the Apify platform, so you know when a run fails.
- 🌐 **Proxy rotation available** if you need it — though this Actor does not require a proxy to work.

### What data does this BizQuest scraper extract?

| Field | Description | Example |
|---|---|---|
| `listing_id` | BizQuest's unique listing number | `2520211` |
| `title` | Listing headline | `Recurring-Retainer Google Ads Agency \| $494K EBITDA` |
| `description` | Short teaser description | `24–30% margins, recurring retainers, fully remote` |
| `url` | Direct link to the listing on BizQuest | `https://www.bizquest.com/business-for-sale/.../BW2520211/` |
| `location` | City / county and state | `Sheridan, WY` |
| `state` | Two-letter state code | `WY` |
| `asking_price` | Asking price in USD | `1750000` |
| `ebitda` | EBITDA in USD, when disclosed | `494034` |
| `revenue` | Annual revenue in USD, when disclosed | `1562385` |
| `cash_flow` | Cash flow in USD — see the FAQ below | `null` |
| `real_estate_included` | Whether real estate is part of the asking price | `false` |
| `image` | Main listing photo | `https://images.bizquest.com/...webp` |
| `recently_added` | Listed recently | `true` |
| `recently_updated` | Updated recently | `false` |
| `price_reduced` | Asking price was reduced | `false` |
| `broker_name` | Broker's full name — **opt-in** | `Sam Mirza` |
| `broker_phone` | Broker's phone number — **opt-in** | `(281) 781-8799` |
| `broker_company` | Brokerage name, when published | `null` |
| `extraction_datetime` | UTC timestamp when the item was extracted (ISO 8601) | `2026-08-08T01:02:21.804134+00:00` |
| `extraction_date` | Extraction date in `mm-dd-yyyy` format | `08-08-2026` |

### How do I use this Actor to scrape BizQuest?

1. **Sign in** to your [Apify account](https://console.apify.com/) — a free account is enough to try it.
2. Leave **Scrape every US state** switched on to crawl the full catalog, or type where you want to look into **Location** — for example `Houston, TX`. Filling in a location turns the all-states crawl off automatically.
3. Optionally pick one or more **Industries** to narrow the results, and set **Maximum listings** to a small number like `50` for your first run, so it finishes in seconds.
4. Decide whether you need **broker contact details**. They are off by default — see the legal note in the FAQ.
5. Click **Run**.
6. When the run finishes, open the **Output** tab and **export** your results as JSON, CSV, or Excel — or fetch them from the **Apify API**.

### Input

Every field is optional and pre-filled with a working default.

- **Scrape every US state** — crawls all state listing pages found in BizQuest's sitemap. This is how you reach the full catalog, because BizQuest caps any single search at 10,000 results while individual states stay below that ceiling.
- **Location** — one or more places to search, one per line: a US state (`Texas`), city (`Houston, TX`), county (`Los Angeles County, CA`), or metro area (`New York City Metro Area, NY`). Add the two-letter state code when a city name exists in several states — otherwise the most popular match is used and the alternatives are listed in the run log. Filling this in turns off the all-states crawl.
- **Industries** — limit results to any of BizQuest's 28 industries. Leave empty for all of them. The filter applies to every page the run scrapes, whether it came from Location, Start URLs, or the all-states crawl.
- **Start URLs** — specific BizQuest listing pages, such as a state page (`/businesses-for-sale-in-texas-tx/`) or an industry page (`/restaurant-and-food-businesses-for-sale/`). Use listing pages, not individual business detail pages.
- **Maximum listings** — stop after N results. Set to `0` for no limit.
- **Delay between requests** — defaults to 2 seconds, matching the `Crawl-delay` that BizQuest declares in its `robots.txt`.
- **Include broker contact details** — adds broker name and phone. Off by default.
- **Proxy configuration** — available but not required.

### Free vs. paid Apify plans

This Actor runs on both free and paid Apify accounts, but **free accounts are capped**. The scraping logic and the data fields are identical on both — only the volume differs.

| | Free plan | Paid plan |
|---|---|---|
| **Maximum listings per run** | 50 | Unlimited (about 45,000 available) |
| **Scrape every US state** | Not available — one listing page per run | Full catalog, all 51 state pages |
| **Start URLs per run** | 1 | Unlimited |
| **Locations per run** | 1 | Unlimited |
| **Industry filter** | Available | Available |
| **Data fields returned** | All of them | All of them |
| **Broker contact details** | Available (opt-in) | Available (opt-in) |
| **Scheduling, API, integrations** | Yes | Yes |

When a run is limited, the Actor says so plainly in the log, so you always know which cap applied. To remove the caps, upgrade your plan in the [Apify Console](https://console.apify.com/billing).

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

This Actor is **pay per result** — you are charged for the listings it actually delivers to your dataset, not for the time it spends running. There are no Apify compute-unit charges to reason about on top of it.

Two things make up your bill:

| Event | Price |
|---|---|
| **Actor start** — charged once per run | $0.00005 |
| **Listing scraped** — charged per result | See the table below |

The per-result price depends on your Apify plan, so the more you scrape, the less each listing costs:

| Apify plan | Price per 1,000 listings | Price per listing |
|---|---|---|
| **Free** | $3.00 | $0.0030 |
| **Starter** | $2.00 | $0.0020 |
| **Scale** | $1.50 | $0.0015 |
| **Business** | $0.99 | $0.00099 |

#### What a typical run costs

The $0.00005 start fee is effectively a rounding error — a run is priced by its results.

| What you scrape | Free | Starter | Scale | Business |
|---|---|---|---|---|
| 100 listings (a quick test) | $0.30 | $0.20 | $0.15 | $0.10 |
| 1,000 listings (one state) | $3.00 | $2.00 | $1.50 | $0.99 |
| 10,000 listings (a large region) | $30.00 | $20.00 | $15.00 | $9.90 |
| 45,000 listings (the full catalog) | $135.00 | $90.00 | $67.50 | $44.55 |

Every Apify account comes with **free monthly platform credits** — $5 on the free plan, which is enough to pull about 1,600 BizQuest listings at no cost before you pay anything at all.

#### How to keep your costs down

- Set **Maximum listings** on your first runs. A limit of `50` tells you exactly what the data looks like for a couple of cents.
- **Filter before you scrape.** A **Location** and an **Industry** filter return the listings you actually want, so you do not pay for rows you will delete later.
- **Schedule incremental runs** instead of re-scraping the whole catalog. A daily run with a modest limit picks up new listings — the `recently_added` and `price_reduced` flags tell you what changed — for a fraction of a full crawl.

### Output example

Each listing is stored as one dataset item. Every item carries the same keys, so the output is a stable, flat table — fields the listing does not disclose come back as `null` rather than being dropped. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
  "listing_id": 2537697,
  "title": "$1.78M SDE Water/Wastewater Contractor, 25+ Yr. (Unbroker Exclusive)",
  "description": "$23M Contracts Underway, CA Public Works Niche",
  "url": "https://www.bizquest.com/business-for-sale/1-78m-sde-water-wastewater-contractor-25-yr-unbroker-exclusive/BW2537697/",
  "location": "California",
  "state": "CA",
  "asking_price": 7950000,
  "cash_flow": null,
  "revenue": null,
  "ebitda": 1569214,
  "real_estate_included": false,
  "image": "https://images.bizquest.com/shared/listings/253/2537697/cc857c74-4784-42f3-89a7-c0ee230dc1dd-W336.webp",
  "recently_added": true,
  "recently_updated": false,
  "price_reduced": false,
  "broker_name": "Sam Mirza",
  "broker_phone": "(281) 781-8799",
  "broker_company": "Unbroker",
  "extraction_datetime": "2026-08-08T02:47:06.884783+00:00",
  "extraction_date": "08-08-2026"
}
```

`broker_name` and `broker_phone` are personal data and are **only present when you switch on Include broker contact details** — with the option off (the default) those two keys are removed from every item entirely. `broker_company` is always present, but BizQuest publishes it only for some listings.

Franchise opportunities are returned in the same shape, with the fields a franchise actually publishes — an initial investment as `asking_price`, an average unit `revenue`, no `ebitda`, and a nationwide `location` with no `state`:

```json
{
  "listing_id": 1059,
  "title": "Toastique",
  "description": "Join one of the fastest-growing, most simple-to-run healthy fast-casual restaurants!",
  "url": "https://www.bizquest.com/toastique-franchise-for-sale/",
  "location": "Available in Multiple Locations",
  "state": null,
  "asking_price": 300000,
  "cash_flow": null,
  "revenue": 614256,
  "ebitda": null,
  "real_estate_included": null,
  "image": "https://images.bizquest.com/fnw/images/1001/1059/d1dc2c9a-1a6c-4970-87f2-8199a1f2802f.jpg",
  "recently_added": false,
  "recently_updated": false,
  "price_reduced": false,
  "broker_company": null,
  "extraction_datetime": "2026-08-08T02:47:06.884989+00:00",
  "extraction_date": "08-08-2026"
}
```

### Use cases

- 🔎 **Business acquisition search** — build a filterable pipeline of acquisition targets by state, industry, and asking price.
- 📈 **Market research and valuation benchmarking** — track asking prices and EBITDA multiples across regions and sectors over time.
- 🏦 **Deal sourcing for search funds and private equity** — monitor new listings daily and act before the market does.
- 🤝 **Broker and intermediary prospecting** — see which brokerages dominate which markets.
- 📊 **Competitive and trend analysis** — measure how many businesses come to market, and how often prices get reduced.
- 🧾 **Lead lists for M\&A advisors, lenders, and SBA brokers** — export directly to CSV or your CRM through Zapier or Make.

### Other Actors you might like

| Actor | What it does |
|---|---|
| [BBB Search Listing by Keywords](https://apify.com/datacach/bbb-search-listing-by-keywords) | Searches the Better Business Bureau directory by keyword and extracts business profiles, ratings, accreditation status, and contact details. |
| [BizBuySell Franchises for Sale Scraper](https://apify.com/datacach/bizbuysell-franchises-for-sale-scraper) | Extracts franchise opportunities listed on BizBuySell, including investment requirements, franchise fees, and industry categories. |
| [BizBuySell Businesses for Sale Scraper](https://apify.com/datacach/bizbuysell-businesses-for-sale-scraper) | Extracts businesses for sale from BizBuySell with asking price, cash flow, revenue, location, and listing details. |

### FAQ

#### Is it legal to scrape BizQuest?

This Actor collects only **publicly available listing data** from pages that BizQuest's own `robots.txt` permits crawlers to access, and it honours the `Crawl-delay: 2` that BizQuest declares there. It does not access any page behind a login, and it does not touch the paths BizQuest disallows. That said, scraping legality depends on your jurisdiction and on what you do with the data. Review BizQuest's Terms of Service and take your own legal advice before commercial use. If you enable **broker contact details**, you are collecting personal data of identifiable people, which brings GDPR, CCPA, and similar regimes into play — you need a lawful basis, and you are responsible for storage and retention.

#### Why is `cash_flow` always empty?

BizQuest does not publish cash flow on its listing pages — the field exists in the page data but is never filled in. It appears only on individual listing detail pages, which are not accessible to this Actor. `revenue` and `ebitda` **are** available, but only for the minority of listings whose sellers disclose them (roughly 9% and 14% respectively). `asking_price` is present on about 84% of listings.

#### How many businesses can I scrape from BizQuest?

BizQuest publishes roughly **45,000 active listings**. Any single BizQuest search is capped at 10,000 results, which is why this Actor crawls state by state — every individual state sits below that ceiling, so the full catalog stays reachable.

#### Can I scrape BizQuest with the Apify API?

Yes. Every Apify Actor is available through the **Apify API**, so you can start runs, pass input, and fetch the dataset programmatically from Python, JavaScript, or plain HTTP. See the **API** tab on the Actor page for ready-made code snippets.

#### Can I schedule this BizQuest scraper to run automatically?

Yes. Use the **Schedules** feature in the Apify Console to run the scraper hourly, daily, or weekly, and connect it to Slack, Google Sheets, or a webhook so new listings land wherever you work.

#### Do I need a proxy to scrape BizQuest?

No. BizQuest does not block by IP address, so the default direct connection works reliably. Proxy configuration is available if you are running at unusually high volume or from an already-restricted network.

#### Why did my run return fewer results than I asked for?

Either you are on the **free plan** (capped at 50 listings — check the run log, which states this explicitly), or the listing page you targeted simply has fewer businesses than your limit. Wyoming, for example, has around 82 listings in total.

### Support

Found a bug, or need a field this Actor does not extract yet? Open a ticket in the **Issues** tab on the Actor's page — it is monitored, and feature requests are welcome. If you need a **custom scraping solution** for BizQuest or another business-for-sale marketplace, get in touch through the same channel.

# Actor input Schema

## `crawlAllStates` (type: `boolean`):

When on, the Actor reads BizQuest's sitemap, finds the listing page for every US state, and scrapes each one. This is the way to get the full catalog, because BizQuest caps any single search at 10,000 results while each individual state stays below that ceiling. Filling in Location below automatically turns this off, since a location is a more specific instruction. When off and no location is given, only the Start URLs are scraped. On the free plan this is always off, and a single listing page is scraped instead.

## `location` (type: `array`):

Where to look for businesses. Type a US state, city, county or metro area, one per line — for example "Texas", "Houston, TX", "Los Angeles County, CA" or "New York City Metro Area, NY". Each entry is matched against BizQuest's own location pages, so you get exactly what the site's own search returns. Add the two-letter state code when a city name exists in several states, otherwise the most popular match is used and the alternatives are listed in the log. Filling this in turns off the all-states crawl. Free plan uses only the first location.

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

Limit results to these industries. Leave empty to get every industry. The filter is applied to every page the run scrapes, whether it comes from Location, Start URLs or the all-states crawl.

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

Specific BizQuest listing pages to scrape, for example https://www.bizquest.com/businesses-for-sale-in-texas-tx/ for one state or https://www.bizquest.com/restaurant-and-food-businesses-for-sale/ for one industry. Paste listing pages, not individual business detail pages. Leave empty to rely on the full crawl above. Free plan uses only the first URL.

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

Stop the run once this many listings have been collected. Set to 0 for no limit, which scrapes roughly 45,000 listings for the full catalog and takes around half an hour. Keep this low while you are testing so runs finish quickly and cheaply. Free plan is capped at 50 listings.

## `requestDelaySeconds` (type: `integer`):

How long to pause between page requests. The default of 2 seconds matches the Crawl-delay that BizQuest declares in its robots.txt. Setting a lower value makes the run faster but stops honouring what the site asks of automated clients.

## `includeBrokerContact` (type: `boolean`):

When on, each listing also includes the broker's full name and phone number. These are personal data of identifiable individuals, so only turn this on if you have a lawful basis to collect and store them under GDPR, CCPA or your local equivalent. When off, those two fields are removed from every result and the rest of the listing data is unaffected.

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

This Actor does not need a proxy. BizQuest does not block by IP address, so the default direct connection works reliably and costs you nothing in proxy usage. Only enable a proxy if you are running at unusually high volume or from a network that is already restricted.

## Actor input object example

```json
{
  "crawlAllStates": true,
  "location": [
    "Houston, TX"
  ],
  "industries": [],
  "startUrls": [
    {
      "url": "https://www.bizquest.com/businesses-for-sale-in-texas-tx/"
    }
  ],
  "maxItems": 100,
  "requestDelaySeconds": 2,
  "includeBrokerContact": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "location": [
        "Houston, TX"
    ],
    "startUrls": [
        {
            "url": "https://www.bizquest.com/businesses-for-sale-in-texas-tx/"
        }
    ],
    "maxItems": 100,
    "requestDelaySeconds": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("datacach/bizquest-businesses-for-sale-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 = {
    "location": ["Houston, TX"],
    "startUrls": [{ "url": "https://www.bizquest.com/businesses-for-sale-in-texas-tx/" }],
    "maxItems": 100,
    "requestDelaySeconds": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("datacach/bizquest-businesses-for-sale-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 '{
  "location": [
    "Houston, TX"
  ],
  "startUrls": [
    {
      "url": "https://www.bizquest.com/businesses-for-sale-in-texas-tx/"
    }
  ],
  "maxItems": 100,
  "requestDelaySeconds": 2
}' |
apify call datacach/bizquest-businesses-for-sale-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datacach/bizquest-businesses-for-sale-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/4WU38gnXZMQ21lEU0/builds/aOGMhjkQkJey7SwFr/openapi.json
