# Empire Flippers Scraper — Businesses for Sale & Sold Deals (`oswaldocarabano/empire-flippers-scraper`) Actor

Scrape Empire Flippers online businesses for sale, pending and sold: asking price, valuation multiple, monthly profit, revenue, expenses, 12-month P\&L and traffic, niche and monetization (Amazon FBA, SaaS, content sites), SEMrush score. For deal sourcing and valuation comps. No login.

- **URL**: https://apify.com/oswaldocarabano/empire-flippers-scraper.md
- **Developed by:** [Oswaldo Carabano](https://apify.com/oswaldocarabano) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 1,000 listing delivereds

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

## Empire Flippers Scraper — online businesses for sale, with the full P\&L

Export every listing on **Empire Flippers**, the curated marketplace for profitable online businesses: asking price, multiple, monthly net profit, revenue and expenses, the **12-month P\&L series**, the **12-month traffic series with traffic channels**, niches, monetization models, sites, SEMrush authority, Amazon and SaaS metrics, risks, opportunities and the full business summary.

It covers the **whole catalogue**: businesses **For Sale** today, **Pending Sold** (under contract) and **Sold** deals. Sold deals are the comparables that valuation work needs.

- **98 fields per listing** (91 data fields plus 7 run fields such as `scraped_at`). A typical listing fills **71 of the 91 data fields** (median over the 2,877 listings; 77 for a For Sale listing).
- **Everything the source publishes**: all 81 source fields per listing, with numbers typed as numbers, series sorted by month and traffic channels turned into a clean table.
- **Fast**: the whole catalogue of 2,877 listings in about 80 seconds. The default run finishes in a few seconds.
- **No login, no cookies, no browser.** Public listing data only.

### What you get

| Group | Fields |
|---|---|
| Deal | `price`, `status`, `monthly_multiple`, `annual_multiple`, `multiple_type`, `days_on_marketplace`, `first_listed_at`, `unpriced`, `buy_now_disabled` |
| Financials | `avg_monthly_net_profit`, `avg_monthly_revenue`, `avg_monthly_expenses`, the annual versions, `profit_margin_pct`, `ttm_net_profit`, `ttm_revenue`, `net_profit_trend_pct`, `revenue_trend_pct` |
| Monthly P\&L | `monthly_financials`: month, net profit, revenue and expenses for each month (usually 12) |
| Traffic | `avg_monthly_page_views`, `avg_monthly_unique_users`, `traffic_trend_pct`, `monthly_traffic` with page views, users and **traffic channels** per month |
| Business | `title`, `summary`, `niches`, `monetizations`, `platforms`, `sites` (with SEMrush authority score and referring domains), `country`, `business_registration_country`, `customer_type`, `business_age_years`, `hours_worked_per_week` |
| Due diligence | `opportunities`, `risks`, `work_required`, `assets_included`, `seller_support`, `reason_for_sale`, `data_providers`, `seller_interview_url`, trademark, patents, VAT, financing |
| Amazon / eCommerce | `amazon_sku_count`, `amazon_parent_asin_count`, `amazon_uses_brand_registry`, `tacos_pct`, `cogs_pct` |
| SaaS | `mrr`, `churn_pct`, `ltv`, `ltv_cac_ratio`, `growth_pct` |

### Measured fill rates

Measured on the **whole catalogue**, 2,877 listings, on 23 Sep 2026. Fill rates differ by status, so both are shown.

| Field | All listings | For Sale |
|---|---|---|
| Asking price | 99.9% | 100% |
| Monthly net profit, revenue, expenses | 99.8% | 100% |
| Monthly multiple | 99.7% | 100% |
| Monthly P\&L series (median 12 months) | 99.8% | 100% |
| Summary, opportunities, work required | 100% | 100% |
| Niches, platforms, sites | 100% | 100% |
| Profit and revenue trend | 56.8% | 100% |
| Country | 74.7% | 100% |
| Business registration country | 21.0% | 100% |
| Risks | 61.9% | 97.2% |
| Verified data providers | 26.3% | 94.4% |
| Monthly traffic series | 74.9% | 36.7% |
| Traffic channels | 4.8% | 36.7% |
| SEMrush authority score | 52.0% | 42.2% |
| Seller interview video | 32.3% | 52.2% |
| Amazon SKU count | 19.9% | 47.2% |
| TACoS and COGS | 14.4% | 54.4% |
| MRR / churn (SaaS listings only) | 34.4% / 40.6% of SaaS | — |

Fields that depend on the business model (Amazon, SaaS) are empty for other models. They are delivered as `null`, never left out.

### Use cases

- **Valuation comparables**: pull 2,674 Sold deals with their multiple, profit and niche.
- **Deal sourcing**: watch For Sale listings by niche, monetization, price or profit, sorted by newest.
- **Market research**: multiples by niche and model, days to sell, traffic mix.
- **Portfolio monitoring**: schedule a daily run and diff by `listing_id`.
- **Buy an online business**: filter Amazon FBA businesses, SaaS businesses, Shopify stores, content websites and newsletters for sale, by price or monthly profit.
- **Website valuation**: see what websites that make money actually sell for, and at what monthly multiple, before you list or buy.
- **Empire Flippers API alternative**: one clean JSON or CSV export of the marketplace, ready for Google Sheets, Excel, a database or a newsletter.

### Input

Every field has a sensible default. An empty input `{}` returns up to 200 For Sale listings.

| Field | What it does |
|---|---|
| `listingStatuses` | For Sale, Pending Sold, Sold (pick one or more; the row budget is shared fairly) |
| `maxItems` | Maximum rows (default 200) |
| `monetization`, `niche`, `platform`, `country` | Filters, each verified against the live source |
| `minPrice`, `maxPrice`, `minMonthlyProfit`, `maxMonthlyProfit` | Ranges in USD |
| `keyword` | The marketplace search |
| `sortBy` | Default, newest, price (high or low), monthly profit |
| `outputType` | `listings` (one row per business) or `monthlyMetrics` (one flat row per business-month) |
| `includeTechStack` | Adds the tech stack from each detail page (extra request; found on 16.7% of For Sale listings) |

Example: Sold SaaS businesses under $200,000, newest first.

```json
{
  "listingStatuses": ["Sold"],
  "monetization": "SaaS",
  "maxPrice": 200000,
  "sortBy": "newest",
  "maxItems": 100
}
```

### Output example

```json
{
  "listing_number": 97317,
  "title": "$29.8K Per Month eCommerce Business in the Art Niche",
  "status": "For Sale",
  "price": 215015,
  "currency": "USD",
  "avg_monthly_net_profit": 8532,
  "avg_monthly_revenue": 29773,
  "monthly_multiple": 25,
  "annual_multiple": 2.1,
  "profit_margin_pct": 29,
  "niches": ["Art", "Apparel & Accessories", "Lifestyle"],
  "monetizations": ["eCommerce", "Amazon FBM"],
  "business_age_years": 12.3,
  "monthly_financials": [{ "month": "2025-09", "net_profit": 126.91, "revenue": 30745.77, "expenses": 30618.86 }],
  "monthly_traffic": [{ "month": "2025-09", "page_views": 179668, "unique_users": 26406, "traffic_channels": [{ "channel": "Paid Social", "unique_users": 13871, "page_views": 105005, "users_pct": 52.53 }] }],
  "url": "https://empireflippers.com/listing/97317/"
}
```

The Output tab documents every field with its type and fill rate. Four table views are ready: Overview, Financials, Monthly metrics and Errors.

### Pricing

Pay per event, no subscription:

| Event | Price |
|---|---|
| Listing delivered | **$0.0045** ($4.50 per 1,000) |
| Monthly metric row (`outputType: monthlyMetrics`) | $0.0005 |
| Tech stack added (only when found) | $0.001 |
| Actor start | $0.00001 (platform minimum) |

You are never charged for error rows or for duplicates within a run. If your maximum cost per run is reached, the run stops cleanly and says so in the status message. It never delivers rows it cannot charge.

The default run (200 For Sale listings, the whole For Sale list today) costs about $0.81.

### Reliability

- Every filter was verified against the live source before being offered. Filters the source silently ignores are not in the input.
- Pagination stops on data, not on status codes, so it never repeats a page.
- If the source asks us to slow down, the whole run pauses, instead of hammering it.
- The run finishes before your timeout and tells you what was left, instead of timing out.
- Everything that goes wrong is written to the `ERRORS` record and to error rows, and none of it is charged.

### Privacy

Empire Flippers keeps sellers anonymous, and the listing data contains no seller name, email or phone. On 23 Sep 2026, none of the 2,877 listings exposed a personal contact. As a safeguard, any email that looks personal (free mail provider or name@) and any phone number found in the free text are redacted, unless you set `includePrivateSellerContact` to true. Business role mailboxes such as support@ are kept. To request removal of data, write to privacy@actorstack.dev.

### FAQ

**Does it need an Empire Flippers account?** No. It reads only what the public marketplace shows to any visitor.

**Why are some traffic fields empty?** Empire Flippers publishes monthly traffic for 74.9% of listings. The channel breakdown is published for 36.7% of For Sale listings.

**Can I get only new listings?** Use `sortBy: newest` with a small `maxItems` and schedule the run.

**Is the data fresh?** Yes, by default every run reads live data. Rows served from the optional cache say so in `from_cache` and `data_age_hours`.

# Actor input Schema

## `listingStatuses` (type: `array`):

Which listings to collect. For Sale = businesses on the market today (180 on 23 Sep 2026). Sold = closed deals with their final asking price and financials, the best comparables for valuation (2,674). Pending Sold = under contract (23). Pick several and the row budget is shared fairly between them.

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

Stop after this many rows. With outputType = listings a row is one business; with monthlyMetrics a row is one business-month (about 12 per business). The whole Empire Flippers catalogue is 2,877 listings.

## `monetization` (type: `string`):

Only listings with this monetization model. Verified against the live API on 23 Sep 2026: every returned row carries it.

## `niche` (type: `string`):

Only listings in this niche (Empire Flippers taxonomy, 59 niches). Counts are the whole catalogue on 23 Sep 2026.

## `platform` (type: `string`):

Only businesses whose site runs on this platform (for example Shopify or WordPress).

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

Two-letter ISO country code of the business audience, for example US, GB, DE. 68% of listings with a country are US.

## `minPrice` (type: `integer`):

Only listings priced at or above this.

## `maxPrice` (type: `integer`):

Only listings priced at or below this.

## `minMonthlyProfit` (type: `integer`):

Only listings whose average monthly net profit is at least this.

## `maxMonthlyProfit` (type: `integer`):

Only listings whose average monthly net profit is at most this.

## `keyword` (type: `string`):

Free-text search over the listing, the same search the marketplace uses (for example amazon, tattoo, saas).

## `sortBy` (type: `string`):

Only orderings verified to change the result against the live API.

## `outputType` (type: `string`):

listings = one rich row per business (all financials, traffic and the 12-month series nested). monthlyMetrics = one flat row per business and month (profit, revenue, expenses, page views, users, traffic channels), ready for a spreadsheet.

## `includeTechStack` (type: `boolean`):

Fetches each listing detail to add the tech stack (for example React, Firebase). Measured on 23 Sep 2026: present on 16.7% of For Sale listings and 0% of Sold ones. Charged only when a tech stack is found.

## `includePrivateSellerContact` (type: `boolean`):

Empire Flippers keeps sellers anonymous, and on 23 Sep 2026 no listing exposed a personal email or phone. As a safeguard, any email that looks personal (free mail provider or name@) or any phone number found in the free text is redacted unless you turn this on. Business role mailboxes such as support@ are always kept.

## `maxCacheAgeDays` (type: `integer`):

0 = always fetch live data (default). Rows served from cache say so in from\_cache and data\_age\_hours.

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

Not needed: the source answers without a proxy. Only used as a fallback if the source starts refusing requests.

## Actor input object example

```json
{
  "listingStatuses": [
    "For Sale",
    "Pending Sold"
  ],
  "maxItems": 50,
  "sortBy": "newest",
  "outputType": "listings",
  "includeTechStack": false,
  "includePrivateSellerContact": false,
  "maxCacheAgeDays": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

Every listing with asking price, multiple, profit, revenue, expenses, the 12-month P\&L and traffic series, niches, monetization and sites.

## `datasetUrl` (type: `string`):

Download all fields as JSON, CSV or Excel.

## `runSummary` (type: `string`):

Counts of delivered and charged rows, requests and errors for this run.

## `errors` (type: `string`):

Anything that could not be collected, and why. Never charged. Always present, empty when all went well.

# 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 = {
    "listingStatuses": [
        "For Sale",
        "Pending Sold"
    ],
    "maxItems": 50,
    "sortBy": "newest",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("oswaldocarabano/empire-flippers-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 = {
    "listingStatuses": [
        "For Sale",
        "Pending Sold",
    ],
    "maxItems": 50,
    "sortBy": "newest",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("oswaldocarabano/empire-flippers-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 '{
  "listingStatuses": [
    "For Sale",
    "Pending Sold"
  ],
  "maxItems": 50,
  "sortBy": "newest",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call oswaldocarabano/empire-flippers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,oswaldocarabano/empire-flippers-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/QI4fVQEVhDibAss5G/builds/cTYqKEZtuH6jrSg6R/openapi.json
