# Flippa Business Listings Scraper (`devilscrapes/flippa-business-listings-scraper`) Actor

Search Flippa's business-and-website marketplace by category and get structured rows for every matching listing — price, profit, revenue multiple, sale method, status, and buy link. No page-scraping guesswork, just clean deal-economics JSON.

- **URL**: https://apify.com/devilscrapes/flippa-business-listings-scraper.md
- **Developed by:** [DevilScrapes](https://apify.com/devilscrapes) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

<div align="center">
  <img src=".actor/icon.svg" width="160" alt="Devil Scrapes mark" />

## Flippa Business Listings Scraper

**💰 $6.20 / 1 000 results**  ·  pay only for results  ·  no credit card to try

*We do the dirty work so your dataset stays clean.* 😈

Search Flippa's business-and-website marketplace by category and get structured rows for every matching listing — price, profit, revenue multiple, sale method, status, and buy link. No page-scraping guesswork, just clean deal-economics JSON.

</div>

***

### 🎯 What this scrapes

Flippa is the biggest marketplace for buying and selling online businesses, websites, and apps, and its own search filters are the only way to browse it at scale. This Actor drives those filters for you — pick 1-15 curated categories (Business, Internet, Ecommerce-heavy verticals, and more), a sale method (classified asking-price or live auction), and a page depth, and get back structured rows for every matching listing: asking/current price, average monthly profit, revenue and profit multiples, category, and the buy link. Built on curl-cffi with rotating browser impersonation and a US-pinned datacenter proxy so a run finishes clean even when Flippa's own front end changes shape underneath it.

### 🔥 What we handle for you

- 🛡️ **Browser fingerprint rotation** — `curl-cffi` impersonates real Chrome / Firefox TLS handshakes on every fetch, good hygiene on any target.
- 🔁 **Retries with exponential backoff** on `408 / 429 / 503` and network errors — up to 5 attempts per page, `Retry-After` honoured.
- 🧩 **Per-listing and per-page fault isolation** — one malformed listing or an unparseable page skips just that item/fetch with a logged warning; it never sinks the whole run.
- 🧊 **Clean, typed dataset rows** — Pydantic-validated, ISO-8601 timestamps, stable listing IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 **Pay-Per-Event pricing** — you only pay for results that hit your dataset. A search that runs and matches nothing still succeeds — no data, no charge beyond the warm-up fee.

### 💡 Use cases

- **Deal sourcing** — feed acquisition criteria (category, sale method) and get every matching listing's deal economics in one export.
- **Market research** — track median multiples and asking prices across categories over time.
- **Auction monitoring** — watch bid\_count and end\_at across live auction listings to catch closing deals.
- **Lead generation for brokers/advisors** — surface sellers in a category who might want a valuation or brokerage service.
- **Portfolio benchmarking** — compare your own site's profit multiple against comparable live Flippa listings.

### ⚙️ How to use it

1. Click **Try for free** at the top of the page.
2. Fill in the input form — most fields have sensible defaults.
3. Click **Start**. Output streams into the run's dataset.
4. Export from **Storage → Dataset** as JSON, CSV, or Excel — or fetch via the API.

### 📥 Input

| Field | Type | Required | Default | Notes |
|---|---|:--:|---|---|
| `categories` | `array` | no | \['Business', 'Internet'] | 0-15 Flippa top-level categories to search. Each category is a separate fetch (more categories means more distinct… |
| `saleMethod` | `string` | no | 'both' | Filter by how the listing is sold: classified (fixed/negotiable asking price) or auction (live bidding). Choose both to… |
| `status` | `string` | no | 'open' | Listing status filter. Flippa's search filter currently only returns real matches for 'open' (live, unsold) listings —… |
| `maxPagesPerQuery` | `integer` | no | 2 | Pages to fetch per category/sale-method combination. Flippa returns 25 listings per page, server-paginated via ?page=N. |
| `proxyConfiguration` | `object` | no | {'useApifyProxy': True, 'apifyProxyGroups': \['BUYPROXIES94952']} | Apify Proxy spec — mandatory field. flippa.com/search showed no anti-bot challenge in recon (200 on first request,… |

#### Example input

```json
{
  "categories": [
    "Business",
    "Internet"
  ],
  "saleMethod": "both",
  "status": "open",
  "maxPagesPerQuery": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ]
  }
}
```

### 📤 Output

Every row is one dataset item.

| Field | Type | Notes |
|---|---|---|
| `search_category` | `['string', 'null']` | The category this row's fetch was filtered to, or null for an unfiltered search. |
| `search_sale_method` | `string` | The sale\_method filter value used for this row's fetch (classified, auction, or both). |
| `listing_id` | `integer` | Flippa's internal numeric listing ID. |
| `listing_url` | `string` | Canonical listing page URL (https://flippa.com/<id>). |
| `title` | `string` | Listing headline. |
| `summary` | `string` | Listing summary/description text. |
| `price` | `number` | Asking price (classified) or current bid (auction) in the listing's currency. |
| `price_text` | `string` | Human-formatted price string as Flippa displays it (e.g. 'USD $2,273,879'). |
| `currency_label` | `['string', 'null']` | Currency symbol/label prefix (e.g. 'USD $'). |
| `original_price` | `['number', 'null']` | Pre-drop list price when the listing has had a price reduction. |
| `profit_average` | `['number', 'null']` | Average monthly net profit, parsed from Flippa's comma-formatted string. |
| `revenue_average` | `['number', 'null']` | Average monthly revenue. |
| `multiple` | `['number', 'null']` | Asking-price-to-profit multiple. |
| `revenue_multiple` | `['number', 'null']` | Asking-price-to-revenue multiple. |
| `category` | `['string', 'null']` | Flippa's display category (e.g. 'Business'). |
| `property_type` | `['string', 'null']` | Listing property type (e.g. 'Ecommerce', 'SaaS', 'Digital Agency'). |
| `monetization` | `['string', 'null']` | How the business makes money (e.g. 'Services & Subscriptions'). |
| `sale_method` | `string` | 'classified' (asking price) or 'auction' (live bidding). |
| `sale_method_title` | `['string', 'null']` | Human label for the sale method (e.g. 'Asking Price'). |
| `status` | `string` | Listing status (e.g. 'open'). |
| `bid_count` | `['integer', 'null']` | Number of bids placed, for auction listings. |
| `established_at` | `['integer', 'null']` | Site/business age in years. |
| `end_at` | `['string', 'null']` | ISO-8601 listing close time. |
| `country_name` | `['string', 'null']` | Seller's reported state/country. |
| `confidential` | `boolean` | True when the listing hides its identity/URL until an NDA/verification step. |
| `verified_traffic` | `boolean` | True when Flippa has verified the traffic figures. |
| `verified_revenue` | `boolean` | True when Flippa has verified the revenue figures. |
| `scraped_at` | `string` | ISO-8601 UTC timestamp when this row's page was fetched. |

#### Example output

```json
{
  "search_category": "Business",
  "search_sale_method": "both",
  "listing_id": 13846152,
  "listing_url": "https://flippa.com/13846152",
  "title": "Automated AI CEO running a profitable agency with recurring clients",
  "summary": "Automated AI CEO running a profitable agency with recurring clients, proven lead generation systems, a trained team, and scalable fulfillment operations",
  "price": 2273879.0,
  "price_text": "USD $2,273,879",
  "currency_label": "USD $",
  "original_price": null,
  "profit_average": 106764.0,
  "revenue_average": 214170.0,
  "multiple": 1.8,
  "revenue_multiple": 0.9,
  "category": "Business",
  "property_type": "Digital Agency",
  "monetization": "Services & Subscriptions",
  "sale_method": "classified",
  "sale_method_title": "Asking Price",
  "status": "open",
  "bid_count": null,
  "established_at": 3,
  "end_at": "2028-03-10T02:14:48+11:00",
  "country_name": "NV, United States",
  "confidential": false,
  "verified_traffic": false,
  "verified_revenue": false,
  "scraped_at": "2026-09-16T12:00:00.000Z"
}
```

### 💰 Pricing

Pay-Per-Event — you pay only when these events fire:

| Event | USD | What it is |
|---|---:|---|
| `actor-start` | $0.2 | One-off warm-up charge per run |
| `result-row` | $0.006 | Per unique dataset item |

Example: 1 000 results at the rates above ≈ **$6.20**. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

### 🚧 Limitations

v0.1 filters by Flippa's 15 top-level categories, sale method, and status=open only — narrower facets (price range, monthly profit range, verified-traffic-only, TLD, country) aren't exposed yet. Flippa's own search filter didn't return real data for any status besides 'open' in recon testing. Confidential listings show only the fields Flippa itself exposes pre-NDA (no seller identity or direct URL beyond the search-result page).

### ❓ FAQ

**Do I need a Flippa account?**

No. This Actor scrapes Flippa's public /search results page — no login required.

**What does maxPagesPerQuery control?**

Flippa serves 25 listings per page via ?page=N. This caps how many pages are fetched per category/sale-method combination; higher values mean more listings and more result-row charges.

**Why is status fixed to 'open'?**

Flippa's own search filter only returned real matches for status=open in testing; other status values returned an empty result set (a Flippa quirk, not an Actor limitation).

**Do I need a residential proxy?**

No. Recon found no anti-bot challenge on flippa.com/search — the default US-pinned datacenter proxy is sufficient.

**What happens if a category matches nothing?**

The run succeeds with zero rows for that category and reports what was searched — a real zero-match result is not treated as a failure.

### 💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an
issue on the Actor's **Issues** tab on Apify Console — we ship
fixes weekly and we read every report.

***

<div align="center">

Built by **[Devil Scrapes](https://apify.com/DevilScrapes)** 😈 — a small fleet of
opinionated public-data Actors. Honest pricing, real engineering, zero fine print.

</div>

# Changelog

This Actor's version history is a separate document: https://apify.com/devilscrapes/flippa-business-listings-scraper/changelog.md

# Actor input Schema

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

0-15 Flippa top-level categories to search. Each category is a separate fetch (more categories means more distinct listings). Leave empty to search across all categories.

## `saleMethod` (type: `string`):

Filter by how the listing is sold: classified (fixed/negotiable asking price) or auction (live bidding). Choose both to fetch every sale method.

## `status` (type: `string`):

Listing status filter. Flippa's search filter currently only returns real matches for 'open' (live, unsold) listings — other values return an empty result set in testing, so this is fixed to 'open'.

## `maxPagesPerQuery` (type: `integer`):

Pages to fetch per category/sale-method combination. Flippa returns 25 listings per page, server-paginated via ?page=N.

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

Apify Proxy spec — mandatory field. flippa.com/search showed no anti-bot challenge in recon (200 on first request, \_\_cf\_bm is Cloudflare bot-management telemetry, not a block), so this defaults to the US-pinned BUYPROXIES94952 datacenter pack rather than RESIDENTIAL.

## Actor input object example

```json
{
  "categories": [
    "Business",
    "Internet"
  ],
  "saleMethod": "both",
  "status": "open",
  "maxPagesPerQuery": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ]
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All dataset items as JSON.

## `datasetItemsCsv` (type: `string`):

Same data exported to CSV.

## `datasetView` (type: `string`):

Open the run dataset in the Console.

# 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 = {
    "categories": [
        "Business",
        "Internet"
    ],
    "saleMethod": "both",
    "status": "open",
    "maxPagesPerQuery": 2,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "BUYPROXIES94952"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("devilscrapes/flippa-business-listings-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 = {
    "categories": [
        "Business",
        "Internet",
    ],
    "saleMethod": "both",
    "status": "open",
    "maxPagesPerQuery": 2,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["BUYPROXIES94952"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("devilscrapes/flippa-business-listings-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 '{
  "categories": [
    "Business",
    "Internet"
  ],
  "saleMethod": "both",
  "status": "open",
  "maxPagesPerQuery": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ]
  }
}' |
apify call devilscrapes/flippa-business-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,devilscrapes/flippa-business-listings-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/nZBzBLcYy1hv033r8/builds/6Pk49Fm4lAq3M5TLC/openapi.json
