# TrustMRR Scraper — Verified Startup Revenue & Acquisitions (`memo23/trustmrr-scraper`) Actor

Scrape TrustMRR — payment-verified startup revenue, monthly revenue timelines, MRR, growth, tech stack, founder, and acquisition listings with asking price + revenue multiple. Crawl the acquire marketplace, any category, or all ~15,000 startups. JSON or CSV out, billed per result.

- **URL**: https://apify.com/memo23/trustmrr-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, AI, Agents
- **Stats:** 21 total users, 20 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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

## TrustMRR Scraper — Verified Startup Revenue, MRR & Acquisition Listings

Extract **payment-provider-verified startup revenue data** from [TrustMRR](https://trustmrr.com) — the public database of 15,000+ startups with Stripe/LemonSqueezy/RevenueCat-verified revenue and 3,000+ startups listed for sale.
Every row carries verified revenue summaries, a **monthly revenue timeline**, current MRR, growth rates, tech stack, marketing channels, and — for marketplace listings — the asking price, revenue multiple, seller message, and buyer-interest stats.
No browser, no login: pure HTTP against public pages, billed per result.

#### How it works

![How it works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-trustmrr.png)

#### ✨ Why use this scraper?

- **Verified numbers, not self-reported claims** — TrustMRR revenue comes straight from connected payment providers (Stripe, LemonSqueezy, Polar, Paddle, RevenueCat, and more).
- **Full monthly revenue timelines** — up to 12+ months of verified revenue per startup, ready for trend analysis.
- **Acquisition deal flow** — asking price, revenue multiple, first-listed date, seller message, and how many buyers viewed and made offers.
- **Whole-database mode** — flip one toggle to enumerate all ~15,000 startups via the public sitemaps.
- **50+ structured fields per row** — founder, country, category, tech stack, marketing channels, SEO domain rating, GitHub activity.
- **Fast and cheap** — one HTTP request per startup, no browser rendering, high concurrency.

#### 🎯 Use cases

| Who | What they do with it |
|---|---|
| **Buyers & micro-PE** | Screen the acquire marketplace by revenue, multiple, and growth before making offers |
| **Investors & analysts** | Track verified MRR growth across categories (AI, SaaS, fintech, …) month over month |
| **Founders** | Benchmark revenue, pricing models, and marketing channels against verified peers |
| **Lead-gen & sales** | Build lists of revenue-verified startups by tech stack or category, with websites and founders |
| **Researchers & media** | Analyse the indie-SaaS economy with payment-provider-backed data |

#### 📥 Supported inputs

| Input | Example |
|---|---|
| Acquire marketplace | `https://trustmrr.com/acquire` |
| Category page | `https://trustmrr.com/category/saas` |
| Tech-stack page | `https://trustmrr.com/tech/nextjs` |
| Marketing-channel page | `https://trustmrr.com/channels/seo` |
| Recently added | `https://trustmrr.com/recent` |
| Founder page | `https://trustmrr.com/founder/marclou` |
| Direct startup URL | `https://trustmrr.com/startup/datafast` |
| Whole database | enable **Scrape the entire database** (no URL needed) |

**Not supported:** logged-in metric timelines (MRR history, churn history, visitor history, Search Console history) — TrustMRR only exposes those to authenticated accounts. Public snapshots and verified revenue summaries ARE included.

#### 🔄 How it works

1. **Classify** every start URL — startup URLs, listing pages, and sitemaps are auto-detected.
2. **Collect** startup slugs from each listing (the acquire marketplace additionally merges TrustMRR's public deals endpoint) or from the sitemaps in whole-database mode.
3. **Fetch** each startup's public profile in parallel with automatic retries.
4. **Parse** 50+ fields: verified revenue, monthly timeline, MRR, acquisition data, tech stack, channels, founder.
5. **Filter** (optional) to startups currently listed for sale.
6. **Push** one clean row per startup to the dataset — JSON or CSV export.

#### ⚙️ Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | `["https://trustmrr.com/acquire", "https://trustmrr.com/category/saas"]` | Any trustmrr.com URLs — auto-classified |
| `scrapeAll` | boolean | `false` | Enumerate ALL ~15,000 startups via public sitemaps |
| `forSaleOnly` | boolean | `false` | Keep only startups currently listed for sale |
| `enrichEmails` | boolean | `false` | Experimental: visit each startup's own website to find a contact email |
| `maxItems` | integer | `100` | Hard cap on rows collected |
| `maxConcurrency` | integer | `10` | Profiles processed in parallel |
| `proxy` | object | Apify proxy | TrustMRR has no aggressive anti-bot; defaults work |

#### 📊 Output overview

One row per startup. Revenue values are USD numbers (not strings). `monthlyRevenue` is an array of `{month, revenue}` points. Acquisition fields (`askingPrice`, `revenueMultiple`, `offersCount`, …) are populated when the startup is listed for sale, `null`/`false` otherwise.

#### 📦 Output sample

```json
{
    "type": "startup",
    "name": "NextjobConnect LLC",
    "slug": "nextjobconnect-llc",
    "trustmrrUrl": "https://trustmrr.com/startup/nextjobconnect-llc",
    "website": "https://nextjobconnect.com/",
    "websiteDomain": "nextjobconnect.com",
    "description": "Real-time job leads for home service contractors...",
    "country": "US",
    "foundedDate": "2025-05-01",
    "paymentProvider": "Stripe",
    "merchantOfRecord": false,
    "revenueLastSyncedAt": "2026-07-14T23:38:33.834Z",
    "revenueLast30Days": 6700,
    "revenueLast12Months": 42676,
    "revenueAllTime": 45776,
    "revenueGrowth30d": 5.3,
    "monthlyRevenue": [
        { "month": "2026-05", "revenue": 6484 },
        { "month": "2026-06", "revenue": 5664 },
        { "month": "2026-07", "revenue": 3334 }
    ],
    "mrr": 7570,
    "mrrGrowth30d": 16.7,
    "activeSubscriptions": 33,
    "profitMargin30d": 65,
    "pricingModel": "Flat monthly rate",
    "targetAudience": "B2C",
    "category": "SaaS",
    "relatedMarkets": ["Marketplace"],
    "techStackFrontend": ["React", "Capacitor"],
    "techStackBackend": ["Python", "SQLite", "Firebase", "Stripe", "Twilio"],
    "forSale": true,
    "askingPrice": 100000,
    "revenueMultiple": 1.2,
    "firstListedForSaleAt": "2026-05-21",
    "buyersViewedRecently": 9438,
    "offersCount": 33,
    "offerUrl": "https://trustmrr.com/startup/nextjobconnect-llc?offer=1",
    "scrapedAt": "2026-07-15T09:03:41.212Z"
}
```

#### 🗂 Key output fields

| Group | Fields |
|---|---|
| **Identity** | `name`, `slug`, `trustmrrUrl`, `website`, `websiteDomain`, `iconUrl`, `description`, `country`, `foundedDate` |
| **Founder** | `founderName`, `founderProfileUrl`, `founderXFollowers` |
| **Verification** | `paymentProvider`, `merchantOfRecord`, `revenueLastSyncedAt`, `googleAnalyticsConnected`, `googleSearchConsoleConnected` |
| **Revenue** | `revenueLast24Hours` … `revenueAllTime`, `revenueGrowth30d`, `monthlyRevenue[]` |
| **Metrics** | `mrr`, `mrrGrowth30d`, `activeSubscriptions`, `visitorsLast30Days`, `revenuePerVisitor30d`, `profitMargin30d` |
| **Positioning** | `valueProposition`, `problemSolved`, `pricingModel`, `targetAudience`, `estimatedUserCount`, `category`, `relatedMarkets[]` |
| **Tech & growth** | `techStackFrontend[]`, `techStackBackend[]`, `marketingChannels[]`, `seoDomain`, `seoDomainRating`, `githubConnected`, `githubContributionsLast7Days/30Days/Year` |
| **Acquisition** | `forSale`, `askingPrice`, `revenueMultiple`, `firstListedForSaleAt`, `buyersViewedRecently`, `offersCount`, `offerUrl`, `sellerMessage` |
| **Extras** | `screenshots[]`, `contactEmail`\* / `contactWebsite`\* (\*with `enrichEmails`) |

#### ❓ FAQ

**How do I get ONLY the startups for sale?**
Set `startUrls` to `https://trustmrr.com/acquire` for the current featured deals (~50), or enable both `scrapeAll` and `forSaleOnly` to sweep the whole database for every for-sale listing.

**How many startups can I get?**
The whole public database — roughly 15,000 startups — via the `scrapeAll` toggle. Category/tech/channel pages return their top listings (~30 each); the full sweep uses the sitemaps.

**Is the revenue data reliable?**
It's TrustMRR's verified data, synced from connected payment providers (Stripe, LemonSqueezy, RevenueCat, Paddle, and others). The row includes `revenueLastSyncedAt` so you can see how fresh each startup's sync is.

**Why are MRR/churn/visitor histories missing?**
TrustMRR only exposes those timelines to logged-in accounts. This actor scrapes public pages only — you still get the full monthly *revenue* timeline, current MRR, and last-30-day snapshots.

**Do I need a proxy?**
The default Apify proxy is fine. TrustMRR has no aggressive anti-bot protection.

#### 💬 Support

- 🐛 Found a bug? Open an issue on the actor's **Issues** tab in the Apify Console.
- 💡 Need a custom field or a bigger integration? Message me through Apify.

#### 🛠 Additional services

Need this data delivered to your warehouse, merged with other marketplaces (Acquire, Flippa, Investors.club), or monitored on a schedule? I build custom pipelines — get in touch via Apify.

#### 🔎 Explore more scrapers

Check my Apify profile for 300+ actors: [apify.com/memo23](https://apify.com/memo23) — including [Acquire.com](https://apify.com/memo23/acquire-scraper) and other startup-marketplace scrapers.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by TrustMRR or its operator. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available startup-profile pages and public endpoints — no authenticated endpoints, no logged-in metric timelines, and no content behind a TrustMRR account. Users are responsible for ensuring their use complies with TrustMRR's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.

***

### SEO Keywords

trustmrr scraper, scrape trustmrr, trustmrr api, apify trustmrr, verified startup revenue data, startup mrr database, saas revenue scraper, startups for sale scraper, micro saas acquisition data, indie hackers revenue, startup marketplace scraper, acquire startups data, saas deal flow, startup asking price data, revenue multiple data, startup due diligence data, verified mrr list, buy saas business data, startup lead generation

# Actor input Schema

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

Any trustmrr.com URL: the acquire marketplace (`/acquire`), category pages (`/category/saas`), tech-stack pages (`/tech/nextjs`), marketing-channel pages (`/channels/seo`), recent listings (`/recent`), founder pages (`/founder/{slug}`), or direct startup URLs (`/startup/{slug}`).

## `scrapeAll` (type: `boolean`):

Enumerate ALL startups on TrustMRR (~15,000) via the public sitemaps, in addition to any start URLs. Combine with 'Maximum items' to bound the run.

## `forSaleOnly` (type: `boolean`):

Keep only startups currently listed on the acquire marketplace. Kept rows carry asking price, revenue multiple, and offer statistics. Note: startups are still fetched before the filter is applied, so a full-database for-sale sweep visits every profile.

## `enrichEmails` (type: `boolean`):

Best-effort: visits each startup's own website and reads its contact/about pages to add `contactEmail` and `contactWebsite` columns plus a detailed `emailEnrichment` object. Adds a few HTTP calls per startup.

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

Hard cap on startup rows collected.

## `maxConcurrency` (type: `integer`):

Maximum number of startup profiles processed in parallel.

## `proxy` (type: `object`):

TrustMRR has no aggressive anti-bot — the default Apify proxy works fine.

## Actor input object example

```json
{
  "startUrls": [
    "https://trustmrr.com/acquire",
    "https://trustmrr.com/category/saas"
  ],
  "scrapeAll": false,
  "forSaleOnly": false,
  "enrichEmails": false,
  "maxItems": 100,
  "maxConcurrency": 10,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# 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": [
        "https://trustmrr.com/acquire",
        "https://trustmrr.com/category/saas"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/trustmrr-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": [
        "https://trustmrr.com/acquire",
        "https://trustmrr.com/category/saas",
    ],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/trustmrr-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": [
    "https://trustmrr.com/acquire",
    "https://trustmrr.com/category/saas"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call memo23/trustmrr-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/WZxOKEkqDdrwrY01o/builds/62MvABStUk7r8wUB9/openapi.json
