# DealStream Scraper (`extract-labs/dealstream-scraper`) Actor

Scrape DealStream business-for-sale listings, search pages, and page ranges. Get asking prices, financials, descriptions, deal terms, locations, industries, and listing status in clean JSON, CSV, or Excel records.

- **URL**: https://apify.com/extract-labs/dealstream-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

**DealStream Scraper** turns DealStream 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 is ready.

Just add your DealStream links and start the run. We handle managed request
rotation, page access checks, and retries behind the scenes, so you do not have
to manage that setup yourself.

Duplicate listings are removed automatically. If the same listing appears in
more than one input or search page, we save and charge it once per run.

### What this DealStream scraper collects

Field names follow the labels shown on the DealStream listing. Depending on
what the seller has shared, a result can include:

- Listing URL, ID, title, location, industry, status, and listed date
- Full business description
- Financials, including Asking Price, Cash Flow, Sales, and currency
- Every item shown under Deal Terms
- Public request or contact information when it is available on the page

If DealStream does not show a value, we leave it out instead of guessing.

### How to scrape DealStream listings

You do not need to write JSON or know how to code:

1. Open the **Input** tab and keep **Form** selected.
2. Paste a link into **DealStream URLs**.
3. Click **Start**.

We'll take it from there.

#### 1. One or several listings

Paste a DealStream listing link into **DealStream URLs**, then click **Start**:

```text
https://dealstream.com/d/biz-sale/machinery-mfg/gvvtfz
```

To collect several listings in one 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 DealStream and copy the search-page URL from your browser.
We'll collect every business shown on that page and open each listing for its
full details:

```text
https://dealstream.com/manufacturing-businesses-for-sale?new=true
```

To collect several search pages in one 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 consecutive pages, add a range such as `[1-3]` where the page
number belongs:

```text
https://dealstream.com/manufacturing-businesses-for-sale/[1-3]?new=true
```

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

### DealStream scraper output

Open the run's **Dataset** tab to view your results or download them as JSON,
CSV, or Excel. This is a shortened example of one saved listing:

```json
{
  "URL": "https://dealstream.com/d/biz-sale/machinery-mfg/gvvtfz",
  "Listing ID": "gvvtfz",
  "Title": "CNC Machine Shop with Strong Cash Flow",
  "Location": "Oklahoma",
  "Industry": "Machinery, Excluding Computers",
  "Status": ["New Arrival", "Management Will Stay"],
  "Listed on": "Aug 31, 2026",
  "Business Description": "Well-equipped CNC machining and metal fabrication operation...",
  "Currency": "USD",
  "Financials": {
    "Asking Price": "$1,899,182",
    "Cash Flow": "$818,423",
    "Sales": "$1,899,182"
  },
  "Deal Terms": {
    "Represented by broker?": "Yes",
    "Seller Financing?": "Available On Request",
    "Management will stay?": "Yes"
  }
}
```

### 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 saved as empty records.
- The run stops when its maximum charge is reached.

### For developers

You can run the Actor through the Apify API using the `startUrls` input 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 into **DealStream URLs**, and click
**Start**.

#### What links can I use?

You can use listing links, search-results pages, page ranges, or a mixture of
all three in the same run.

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

No. There are no proxy settings in the input form. We handle page access and
request rotation for you.

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

We remove duplicates automatically. A successful listing is saved and charged
once per run, even if it appears in several inputs.

#### Can I add several search pages or ranges?

Yes. Click **+ Add** and put each search page or range in its own URL field.

#### Do I have to wait for the whole run to finish?

No. Each listing is saved as soon as it is ready. If you stop early, completed
listings stay in your Dataset.

#### Why is a field missing?

We collect what the public DealStream listing shows. If a seller has not shared
a value, we leave that field out.

#### Where can I download the results?

Open the run's **Dataset** tab. You can download the results as JSON, CSV, or
Excel.

### Need help?

Send us the public DealStream 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 links in the same run. You can also use a page range such as \[1-3].

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://dealstream.com/d/biz-sale/machinery-mfg/gvvtfz"
    }
  ]
}
```

# Actor output Schema

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

Each listing is saved as soon as it is ready.

# 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://dealstream.com/d/biz-sale/machinery-mfg/gvvtfz"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("extract-labs/dealstream-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://dealstream.com/d/biz-sale/machinery-mfg/gvvtfz" }] }

# Run the Actor and wait for it to finish
run = client.actor("extract-labs/dealstream-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://dealstream.com/d/biz-sale/machinery-mfg/gvvtfz"
    }
  ]
}' |
apify call extract-labs/dealstream-scraper --silent --output-dataset

```

## MCP server setup

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