# TrustMRR Scraper: Verified Revenue, Deals & Alerts (`dead00/trustmrr-scraper-verified-revenue-deals-alerts`) Actor

Find startups for sale  on TrustMRR with payment-verified revenue, MRR, growth and profit margin. Every startup comes with valuation multiples, estimated profit and payback, a value score against similar listings. Schedule it for alerts on new listings price drops and startups taken off the market.

- **URL**: https://apify.com/dead00/trustmrr-scraper-verified-revenue-deals-alerts.md
- **Developed by:** [Dead](https://apify.com/dead00) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 startup scrapeds

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

## TrustMRR Scraper: Verified Revenue, Deals & Alerts

Find startups for sale on TrustMRR with **payment-verified** revenue, MRR, growth and profit margin. Every startup comes with valuation multiples, estimated profit and payback, and a **value score** against similar listings. Schedule it for alerts on new listings, price drops and startups taken off the market.

Public data only: it reads the pages TrustMRR publishes for automated readers (its public AI feed and AI-readable `.md` profiles). No login, no API key.

### Three ways to use it

| Mode | What you get | Best for |
|---|---|---|
| **Latest & best deals** (default) | Startups most recently listed for sale, plus TrustMRR's best deals | Daily deal alerts |
| **Specific startups** | Full profiles for the startups you paste | Due diligence on a shortlist |
| **Full sweep** | Every startup in TrustMRR's sitemap (optionally for sale only) | Market research |

### What you get per startup

- **Verified revenue:** last 24 hours, 7 days, 30 days, 3, 6 and 12 months, all time, plus MRR, 30-day growth, MRR growth and active subscriptions, and a **monthly revenue timeline** (daily optional). TrustMRR pulls these from payment providers such as Stripe, LemonSqueezy, Polar, Paddle and RevenueCat.
- **The deal:** asking price, **previous price and drop %**, revenue multiple, profit margin, **estimated monthly profit, profit multiple and payback**, days on market, offers, listing tier.
- **Value score:** the revenue multiple compared with the median of similar for-sale startups (same category when there are enough, otherwise the whole market read), rated "Great deal", "Good", "Fair" or "Expensive".
- **The business:** description, website, category, markets, country, age, founder and X followers, value proposition, problem solved, pricing model, audience, team size, funding and estimated users.
- **Signals:** tech stack, marketing channels, domain rating, GitHub activity, visitors, Google impressions, revenue per visitor, and App Store / Google Play ratings for mobile apps.
- **Verification:** which provider verified the revenue, merchant-of-record status, and when revenue was last synced.

### Filters: everything TrustMRR shows

| Group | Filters |
|---|---|
| **Deal** | Asking price range, max revenue multiple, min value score, max days on market, listing tier, exclude stealth listings |
| **Revenue** | Min/max revenue (last 30 days), min MRR, min 30-day growth, min profit margin, min active subscriptions, exclude pre-revenue |
| **Business** | Category, country, payment provider (Stripe, LemonSqueezy, Polar, Paddle, RevenueCat, Dodo, Whop, Creem, Shopify…), B2B / B2C, mobile apps only or excluded, founded after, founder X handle, keywords |
| **Profile** | Tech stack (e.g. Next.js, Supabase), marketing channels (e.g. SEO, YouTube), funding, max team size (e.g. 1 for solo founders), min domain rating, min visitors, verified traffic only |

**Sort results** by best value, cheapest, highest revenue, fastest growing, newest listings or lowest multiple. Startups are saved to the dataset the moment they're found (in discovery order), and a sorted copy is saved at the end in the key-value store as `RESULTS_SORTED`.

Profile filters need full profiles; if you use one with full profiles off, the actor turns them on automatically and says so in the log.

**Value scores never depend on your filters or limits:** every startup for sale is compared with the whole market in TrustMRR's deals feed (in every mode), so a score is the same whether you ask for 3 startups or 50.

### Nothing is lost if a run stops

Every startup is **saved to the dataset the moment it's ready**, not at the end. If TrustMRR stops responding or a run is aborted, everything found up to that point is already in your results. The log says so, and change tracking keeps its progress (saved every 10 startups). A single startup whose page can't be read is skipped with a warning instead of stopping the run.

### Progress log

The run log shows each step: what was read from the feed or sitemap, each profile (name, revenue, asking price), how many startups matched your filters, the typical asking multiple per category, the **top 3 deals found**, changes since the last run, and a final summary.

### Output

Every number comes **twice**: a plain number for sorting, filtering and spreadsheets, and readable text (`USD $5.07K`, `1.3x`, `+9.0%`, `15 months (1.3 years)`).

```json
{
  "type": "startup",
  "slug": "flint",
  "url": "https://trustmrr.com/startup/flint",
  "name": "flint",
  "category": "Artificial Intelligence",
  "onSale": true,
  "daysOnMarket": 3,
  "askingPrice": 60000,
  "askingPriceText": "USD $60K",
  "priceDropText": "14% off (was USD $70K)",
  "revenueLast30Days": 5067.62,
  "revenueLast30DaysText": "USD $5.07K",
  "mrrText": "USD $1.56K",
  "profitMarginText": "78%",
  "estimatedMonthlyProfitText": "USD $3.95K",
  "revenueMultipleText": "1.0x",
  "profitMultipleText": "1.3x",
  "paybackText": "15 months (1.3 years)",
  "vsCompsText": "29% cheaper than similar listings",
  "valueScore": 91,
  "valueRating": "Great deal",
  "verifiedBy": "Stripe (API key)",
  "changeText": "Price dropped 14% (USD $70K → USD $60K)",
  "missingFields": [],
  "dataNote": null,
  "attribution": "Data: TrustMRR (revenue verified via payment providers)"
}
```

**Values a seller hasn't published** are never silent blanks: the text says "Not disclosed", `missingFields` lists them, and `dataNote` explains why, e.g. "Asking price not shown publicly (make an offer)" or "Stealth listing: the business name and website are hidden by the seller".

**Metrics TrustMRR keeps behind its login** (full churn, traffic and profit-margin timelines) are not included. This actor only uses public data.

### Daily deal alerts

1. Choose **Latest & best deals** and set filters, e.g. AI startups under $50K, profit margin of at least 80%, growing.
2. Turn on **Only output changes**.
3. Schedule the actor daily and connect Apify's email or Slack integration.

Each run returns only what changed: newly listed startups, price changes, and startups no longer for sale. A startup that just drops out of TrustMRR's feed but is still for sale is checked and **not** reported.

### Pricing

| Event | Price per 1,000 |
|---|---|
| Startup scraped | $3.00 |
| Actor start (per run) | $0.00005 |

In "only changes" mode you pay only for changes. Set a **Maximum cost per run** in Run options; when it's reached, the actor stops and keeps its results.

### Good to know

- **Value scores compare asking prices** of similar startups for sale; they're not sale prices. Use them to spot outliers, then do your own due diligence.
- **Revenue is verified by TrustMRR** through payment providers. Descriptions, insights and seller messages are written by founders.
- **Estimated profit** = 30-day revenue × the profit margin the seller reports.
- **Respectful by design:** about one request per second, public pages only, and every row links back to TrustMRR with attribution.
- **Full sweeps** read one profile per startup, so large sweeps take time. For deals, the default mode is fastest.
- Independent tool, not affiliated with TrustMRR.

# Actor input Schema

## `mode` (type: `string`):

Deals = the startups most recently listed for sale plus TrustMRR's best deals (ideal for daily alerts). Specific = paste startups below. Full sweep = every startup in TrustMRR's sitemap, read gently.

## `startups` (type: `array`):

TrustMRR links or slugs, one per line, e.g. https://trustmrr.com/startup/datafast or datafast.

## `maxStartups` (type: `integer`):

How many startups to return.

## `includeFullProfile` (type: `boolean`):

Adds revenue for 7 periods, the monthly revenue timeline, insights (pricing, audience, team, funding), tech stack, marketing channels, domain rating, GitHub activity and verification details. One extra request per startup.

## `includeDailyRevenue` (type: `boolean`):

Adds 30 daily revenue figures per startup.

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

Order of the startups in the results.

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

In a full sweep, return only startups currently for sale. Deals are always for sale.

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

Only these categories, e.g. Artificial Intelligence, SaaS, Developer Tools, Mobile Apps.

## `minAskingPrice` (type: `integer`):

Only startups asking at least this much.

## `maxAskingPrice` (type: `integer`):

Only startups asking at most this much.

## `minRevenueLast30Days` (type: `integer`):

Only startups with at least this much verified revenue in the last 30 days.

## `minGrowth30d` (type: `number`):

Only startups growing at least this much, e.g. 0 for flat or growing.

## `minProfitMargin` (type: `number`):

Only startups with at least this profit margin.

## `maxRevenueMultiple` (type: `number`):

Only startups priced at most this many times their annualized revenue, e.g. 3.

## `excludeStealth` (type: `boolean`):

Skip startups whose name and website are hidden by the seller.

## `keywords` (type: `array`):

Only startups mentioning any of these words (name, description, category, value proposition, pricing).

## `minMrr` (type: `integer`):

Only startups with at least this monthly recurring revenue.

## `maxRevenueLast30Days` (type: `integer`):

Only startups with at most this revenue (to find smaller deals).

## `minActiveSubscriptions` (type: `integer`):

Only startups with at least this many paying subscribers.

## `minVisitorsLast30Days` (type: `integer`):

Only startups with at least this much traffic (where shown).

## `excludeZeroRevenue` (type: `boolean`):

Hide pre-revenue listings.

## `minValueScore` (type: `integer`):

Only startups scoring at least this much versus similar listings, e.g. 60 for good deals or better.

## `maxDaysOnMarket` (type: `integer`):

Only startups listed for sale within this many days.

## `listingTiers` (type: `array`):

Only listings on these TrustMRR tiers. Leave empty for all.

## `countries` (type: `array`):

2-letter country codes, e.g. US, GB, IN, DE.

## `paymentProviders` (type: `array`):

Only startups whose revenue is verified by these, e.g. stripe, lemonsqueezy, polar, paddle, revenuecat, dodopayment, whop, creem, shopify.

## `targetAudience` (type: `string`):

Businesses selling to companies or to consumers (startups serving both are included).

## `mobileApps` (type: `string`):

Include, require or exclude mobile apps.

## `foundedAfter` (type: `string`):

Only startups founded on or after this date.

## `founderXHandles` (type: `array`):

Only startups by these founders, e.g. marclou.

## `techStack` (type: `array`):

Only startups using any of these, e.g. Next.js, Supabase, Laravel, Flutter. Uses full profiles.

## `marketingChannels` (type: `array`):

Only startups growing through any of these, e.g. SEO, X / Twitter, YouTube, Reddit, Newsletter.

## `funding` (type: `array`):

e.g. Bootstrapped, Pre-seed, Seed.

## `maxTeamSize` (type: `integer`):

Only startups with at most this many people, e.g. 1 for solo founders.

## `minDomainRating` (type: `integer`):

Only startups whose website has at least this SEO domain rating.

## `verifiedTrafficOnly` (type: `boolean`):

Only startups with Google Analytics or Search Console connected, so traffic numbers are verified too.

## `trackChanges` (type: `boolean`):

Marks newly listed startups and price changes since the last run, and reports startups no longer for sale.

## `onlyChanges` (type: `boolean`):

Return only newly listed startups, price changes and startups no longer for sale. Turns on change tracking. Ideal for a daily schedule with email or Slack alerts.

## `memoryName` (type: `string`):

Where changes are remembered. Use different names for different searches.

## `resetMemory` (type: `boolean`):

Forget previous runs and start fresh.

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

Not needed normally. Turn on only if a run reports that TrustMRR refused the request.

## Actor input object example

```json
{
  "mode": "deals",
  "maxStartups": 100,
  "includeFullProfile": true,
  "includeDailyRevenue": false,
  "sortBy": "default",
  "forSaleOnly": true,
  "excludeStealth": false,
  "excludeZeroRevenue": false,
  "targetAudience": "any",
  "mobileApps": "any",
  "verifiedTrafficOnly": false,
  "trackChanges": false,
  "onlyChanges": false,
  "memoryName": "trustmrr-monitor",
  "resetMemory": false
}
```

# Actor output Schema

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

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("dead00/trustmrr-scraper-verified-revenue-deals-alerts").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("dead00/trustmrr-scraper-verified-revenue-deals-alerts").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 '{}' |
apify call dead00/trustmrr-scraper-verified-revenue-deals-alerts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dead00/trustmrr-scraper-verified-revenue-deals-alerts"
        }
    }
}
```

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/9Sk2gy2K04kKlq1CQ/builds/WOIVHm6JbgnlTJ2O1/openapi.json
