# BusinessesForSale.com Scraper (`extract-labs/businessesforsale-scraper`) Actor

Scrape BusinessesForSale.com listings, search pages, and page ranges. Get asking prices, financials, descriptions, property details, business operations, listing status, and broker information in clean JSON, CSV, or Excel records.

- **URL**: https://apify.com/extract-labs/businessesforsale-scraper.md
- **Developed by:** [Extract Labs](https://apify.com/extract-labs) (community)
- **Categories:**
- **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/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

**BusinessesForSale.com Scraper** turns listing links and search pages into
clean, structured business-for-sale data. Each successful listing is saved to
your Apify Dataset as soon as it's ready.

Just add your BusinessesForSale.com links and start the run. There is no proxy
or technical setup for you to manage.

We also remove duplicates automatically. If the same listing appears in your
input or on more than one search page, we save it once per run. This keeps your
Dataset clean and prevents duplicate result charges.

### What this scraper collects

The output keeps the same labels used on the listing page. Depending on what
the seller has shared, a result can include:

- Listing ID, title, location, and full description
- Asking Price, Sales Revenue, and Cash Flow, using the page's own labels
- Property Information
- Business Operation details
- Other Information, including training and financing
- Seller reference, listing status, and broker information

If the page doesn't show a value, we leave it out instead of guessing.

### How to use it

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 **BusinessesForSale.com URLs**.
3. Click **Start**.

We'll take it from there.

#### 1. One or several listings

Paste the listing link into **BusinessesForSale.com URLs**:

```text
https://canada.businessesforsale.com/canadian/long-est-full-service-towing-and-recovery-business.aspx
```

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 BusinessesForSale.com and copy the search-page link from
your browser. We'll collect every business shown on that page and open each
listing for its full details:

```text
https://us.businessesforsale.com/us/search/last-14-days-manufacturing-businesses-for-sale
```

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

To collect several pages, replace the page suffix with a range such as
`-[1-3]`:

```text
https://us.businessesforsale.com/us/search/last-14-days-manufacturing-businesses-for-sale-[1-3]
```

We'll process page 1, then page 2, and then page 3. 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.

### Output

Open the run's **Dataset** tab to view or download results as JSON, CSV, or
Excel. This is a preview of one result; you don't need to create it yourself.

```json
{
  "URL": "https://canada.businessesforsale.com/canadian/long-est-full-service-towing-and-recovery-business.aspx",
  "Listing ID": "3956504",
  "Title": "Long-est. Full-service Towing & Recovery Business For Sale",
  "Location": "Not Disclosed, Ontario, Canada",
  "Asking Price": "$2,400,000 (CAD) Furniture / Fixtures included",
  "Sales Revenue": "$1,233,255 (CAD)",
  "Cash Flow": "$587,998 (CAD)",
  "Business Operation": {
    "Management type": "This business is owner operated.",
    "Reasons for selling": "Owners retiring.",
    "Employees": "5 FT/1 PT",
    "Years established": "35"
  },
  "Listed by": {
    "Name": "Murphy Business & Financial",
    "Profile URL": "https://us.businessesforsale.com/us/agents/murphy-business-and-financial",
    "Listings": "View 454 Murphy Business & Financial listings"
  }
}
```

### During a run

- Each successful listing is saved right away.
- If you stop the run, completed listings stay in your Dataset.
- Duplicate listings are saved and charged once per run.
- Failed listings are not stored as empty or misleading results.

### For developers

You can run the Actor through the Apify API using `startUrls` and read completed
records from the default Dataset.

### Frequently asked questions

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

No. Keep **Form** selected, paste your links, and click **Start**.

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

No. There are no proxy settings in the input form.

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

We remove duplicates automatically and charge a successful listing once per
run.

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

#### Why is a field missing?

We collect what the public listing shows. If a seller hasn't provided a value,
we leave that field out.

### Need help?

Send us the public BusinessesForSale.com 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-3].

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://canada.businessesforsale.com/canadian/long-est-full-service-towing-and-recovery-business.aspx"
    }
  ]
}
```

# Actor output Schema

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

Collected listing details.

# 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://canada.businessesforsale.com/canadian/long-est-full-service-towing-and-recovery-business.aspx"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("extract-labs/businessesforsale-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://canada.businessesforsale.com/canadian/long-est-full-service-towing-and-recovery-business.aspx" }] }

# Run the Actor and wait for it to finish
run = client.actor("extract-labs/businessesforsale-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://canada.businessesforsale.com/canadian/long-est-full-service-towing-and-recovery-business.aspx"
    }
  ]
}' |
apify call extract-labs/businessesforsale-scraper --silent --output-dataset

```

## MCP server setup

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