# BusinessesForSale Scraper (`maximedupre/businessesforsale-scraper`) Actor

Scrape BusinessesForSale listings from search, category, listing URL, or keyword targets. Export prices, revenue, cash flow, locations, tags, images, seller links, and scrape metadata.

- **URL**: https://apify.com/maximedupre/businessesforsale-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$0.75 / 1,000 scraped 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### 💼 Find BusinessesForSale listings without manual copy-paste

BusinessesForSale Scraper collects public business opportunity listings from [BusinessesForSale.com](https://www.businessesforsale.com/) and saves them as structured rows you can export, filter, schedule, or send through the Apify API. Use it to turn search pages, category pages, listing URLs, or keyword searches into a clean dataset with titles, listing links, locations, asking prices, revenue, cash flow, tags, images, seller contact links, and scrape metadata.

This actor is useful when you are researching acquisition targets, monitoring business-for-sale markets, building lead lists, checking broker inventory, or comparing opportunities across countries and categories. Start with one search URL or a short keyword such as `coffee shop` or `apps`, set a small listing limit, and review the dataset before scaling up.

### 🔎 What this BusinessesForSale scraper does

- Scrapes BusinessesForSale search, category, and listing URLs.
- Builds BusinessesForSale keyword searches for global, US, UK, Canada, Australia, and New Zealand source sites.
- Saves one dataset row per accepted business listing.
- Extracts source identifiers, title, listing URL, result position, listing status, location, country, description text, financial fields, tags, media URLs, seller contact URL, and scrape time.
- Deduplicates listings inside each run by listing ID or URL.
- Can try to enrich rows from individual listing pages when available.
- Works with Apify exports, schedules, webhooks, integrations, and API clients.

The actor focuses on public listing data visible on BusinessesForSale. It does not log in, submit buyer forms, message sellers, value businesses, or enrich listings from third-party databases.

### 📦 What data you get

Each row is one BusinessesForSale listing. Some fields can be empty when the source page does not show that value.

- `listingId`: source listing identifier when available
- `title`: listing title
- `url`: BusinessesForSale listing URL
- `sourceUrl`: search, category, or listing URL that produced the row
- `resultPosition`: position on the source results page
- `listingStatus`: visible listing labels such as new or business
- `locationText` and `country`: source location text and inferred country
- `descriptionText`: short listing description when shown
- `financials`: asking price, revenue, cash flow, and EBITDA text with parsed amount and currency when possible
- `business`: categories and tags shown on the listing card
- `media`: image URLs and image count
- `broker`: seller contact URL when shown
- `rowStatus`, `missingFields`, `detailPageFetched`, and `detailUnavailableReason`: scrape completeness metadata
- `scrapedAt`: ISO timestamp for the row

### 🚀 How to run

1. Open the Input tab.
2. Add one BusinessesForSale search, category, or listing URL, or enter one or more search keywords.
3. For keyword searches, choose the country site and optional industry or location text.
4. Set `Listing limit` to a small number such as `25` for your first run.
5. Run the actor, then open the dataset or export it as JSON, CSV, Excel, XML, or HTML.

For the easiest first run, keep the prefilled coffee shop search and a modest limit. Pasted URLs keep their own source domain, while keyword searches use the country and filter fields you choose.

### ⚙️ Input options

- `Search or listing URLs`: BusinessesForSale search, category, or listing URLs you already have.
- `Search keywords`: business opportunity keywords such as `coffee shop`, `apps`, `restaurants`, or `car wash`.
- `Country for keyword searches`: source country site used when the actor builds a keyword search URL.
- `Industry slug`: optional BusinessesForSale slug such as `restaurants` or `coffee-shops`.
- `Location text`: optional text to include in generated search URLs when the source supports it.
- `Sort listings by`: sort order for generated keyword searches.
- `Listing limit`: maximum number of listings to save across all inputs.
- `Fetch detail pages when available`: tries to enrich rows from listing pages; search-card rows are still saved when detail pages are unavailable.

### 🧾 Example output

```json
{
	"listingId": "3954882",
	"title": "Food Tracking Application",
	"url": "https://uk.businessesforsale.com/uk/food-tracking-application.aspx",
	"sourceUrl": "https://www.businessesforsale.com/search/apps-for-sale",
	"resultPosition": 1,
	"listingStatus": "New Business",
	"locationText": "Truro, Cornwall, UK",
	"country": "UK",
	"descriptionText": "Food Tracking App summary",
	"financials": {
		"askingPrice": { "text": "On request", "amount": null, "currency": null },
		"revenue": { "text": "£1,520,000", "amount": 1520000, "currency": "GBP" },
		"cashFlow": { "text": "£15,652,000", "amount": 15652000, "currency": "GBP" },
		"ebitda": { "text": null, "amount": null, "currency": null }
	},
	"business": { "categories": [], "tags": ["Real Property", "Relocatable"] },
	"media": { "imageUrls": ["https://www.businessesforsale.com/uploadsstatic/example.jpg"], "imageCount": 1 },
	"broker": { "contactUrl": "https://uk.businessesforsale.com/uk/food-tracking-application/contact" },
	"rowStatus": "partial",
	"missingFields": [],
	"detailPageFetched": false,
	"detailUnavailableReason": "Listing detail page was unavailable, so this row uses search-card data",
	"scrapedAt": "2026-05-25T00:00:00.000Z"
}
````

### 💳 Pricing

This actor uses pay-per-event pricing. You are charged for each saved BusinessesForSale listing, so duplicate or skipped listings are not billed as successful listing events.

Platform usage costs are separate Apify platform costs. Keep your first run small if you want to inspect the output shape before collecting a larger market snapshot.

### ⚠️ Limits and caveats

BusinessesForSale pages can show different fields depending on country, category, broker, and listing type. The actor keeps the row useful when some fields are missing and marks completeness with `rowStatus`, `missingFields`, and detail-page metadata.

Detail pages may be unavailable through the current source access path. When that happens, the actor still saves the search-card data and explains the detail-page gap in `detailUnavailableReason`.

### ❓ FAQ

#### 🔎 Can I scrape by keyword instead of URL?

Yes. Add terms such as `coffee shop`, `apps`, or `restaurants` to `Search keywords`. The actor builds BusinessesForSale search URLs from those terms and the selected country site.

#### ✉️ Does this actor contact sellers?

No. It only saves public listing data and the visible seller contact URL when the listing card shows one.

#### 📅 Can I schedule repeat market checks?

Yes. Because the actor runs on Apify, you can schedule it, call it from the API, connect webhooks, or export finished datasets to your workflow.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~businessesforsale-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [Business Address Scraper ↗](https://apify.com/maximedupre/business-address-scraper) - Find physical business addresses from company websites.
- [Website Emails Scraper ↗](https://apify.com/maximedupre/website-emails-scraper) - Extract public contact emails from websites for lead research.
- [LinkedIn Company Scraper ↗](https://apify.com/maximedupre/linkedin-company-scraper) - Export public LinkedIn company profile facts for target accounts.
- [Product Hunt Scraper ↗](https://apify.com/maximedupre/product-hunt-scraper) - Collect startup launch data for prospecting and market research.
- [Google Shopping Ads Scraper ↗](https://apify.com/maximedupre/google-shopping-ads-scraper) - Track sponsored product ads, prices, and merchants from Google Search.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Paste BusinessesForSale search, category, or listing URLs. You can mix URLs with keyword searches in the same run.

## `searchKeywords` (type: `array`):

Enter BusinessesForSale category wording such as coffee shops, apps, restaurants, or car washes. Keywords are converted into BusinessesForSale search URLs.

## `country` (type: `string`):

Choose the BusinessesForSale country site used for generated keyword searches. Pasted URLs keep their own source domain.

## `industry` (type: `string`):

Optional BusinessesForSale industry slug, for example restaurants or coffee-shops. Leave blank to use the keyword as the search topic.

## `locationText` (type: `string`):

Optional location text for generated search URLs when the source supports that location wording.

## `sortOrder` (type: `string`):

Sort order for generated keyword searches. Pasted URLs keep their own sort settings.

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

Maximum number of BusinessesForSale listings to save across all targets.

## `includeListingDetails` (type: `boolean`):

Try to enrich rows from individual listing pages. Search-card rows are still saved when detail pages are unavailable.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.businessesforsale.com/search/coffee-shops-for-sale"
    }
  ],
  "country": "global",
  "industry": "",
  "locationText": "",
  "sortOrder": "newest",
  "maxResults": 25,
  "includeListingDetails": true
}
```

# Actor output Schema

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

Open the dataset of BusinessesForSale listings with prices, locations, descriptions, media, seller links, and scrape metadata.

# 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.businessesforsale.com/search/coffee-shops-for-sale"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/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://www.businessesforsale.com/search/coffee-shops-for-sale" }] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/businessesforsale-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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.businessesforsale.com/search/coffee-shops-for-sale"
    }
  ]
}' |
apify call maximedupre/businessesforsale-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/businessesforsale-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "BusinessesForSale Scraper",
        "description": "Scrape BusinessesForSale listings from search, category, listing URL, or keyword targets. Export prices, revenue, cash flow, locations, tags, images, seller links, and scrape metadata.",
        "version": "0.0",
        "x-build-id": "WebIJ6bTxzc2LlZtF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~businessesforsale-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-businessesforsale-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/maximedupre~businessesforsale-scraper/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-businessesforsale-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/maximedupre~businessesforsale-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-businessesforsale-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Search or listing URLs",
                        "type": "array",
                        "description": "Paste BusinessesForSale search, category, or listing URLs. You can mix URLs with keyword searches in the same run.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL",
                                    "description": "A BusinessesForSale search, category, or listing URL."
                                }
                            }
                        }
                    },
                    "searchKeywords": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Enter BusinessesForSale category wording such as coffee shops, apps, restaurants, or car washes. Keywords are converted into BusinessesForSale search URLs.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        }
                    },
                    "country": {
                        "title": "Keyword search country",
                        "enum": [
                            "global",
                            "us",
                            "uk",
                            "ca",
                            "au",
                            "nz"
                        ],
                        "type": "string",
                        "description": "Choose the BusinessesForSale country site used for generated keyword searches. Pasted URLs keep their own source domain.",
                        "default": "global"
                    },
                    "industry": {
                        "title": "Industry slug",
                        "type": "string",
                        "description": "Optional BusinessesForSale industry slug, for example restaurants or coffee-shops. Leave blank to use the keyword as the search topic.",
                        "default": ""
                    },
                    "locationText": {
                        "title": "Location text",
                        "type": "string",
                        "description": "Optional location text for generated search URLs when the source supports that location wording.",
                        "default": ""
                    },
                    "sortOrder": {
                        "title": "Sort listings by",
                        "enum": [
                            "newest",
                            "featured",
                            "price-desc",
                            "price-asc",
                            "revenue-desc",
                            "revenue-asc",
                            "profit-desc",
                            "profit-asc"
                        ],
                        "type": "string",
                        "description": "Sort order for generated keyword searches. Pasted URLs keep their own sort settings.",
                        "default": "newest"
                    },
                    "maxResults": {
                        "title": "Listing limit",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of BusinessesForSale listings to save across all targets.",
                        "default": 25
                    },
                    "includeListingDetails": {
                        "title": "Fetch listing details",
                        "type": "boolean",
                        "description": "Try to enrich rows from individual listing pages. Search-card rows are still saved when detail pages are unavailable.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
