# TrustMRR Startup Revenue Scraper (`automation-lab/trustmrr-startup-revenue-scraper`) Actor

Search and export public TrustMRR startup profiles with revenue, MRR, verification context, descriptions, and acquisition status.

- **URL**: https://apify.com/automation-lab/trustmrr-startup-revenue-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.65 / 1,000 startup extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## TrustMRR Startup Revenue Scraper

Search and export public TrustMRR startup profiles as structured records for startup-market intelligence. Get company identity, profile URL, description, MRR and revenue values, verification context, and acquisition status without manually copying directory pages.

The Actor uses public TrustMRR pages only. It does not require a TrustMRR login, browser, proxy, or private API key.

### What does this TrustMRR scraper do?

TrustMRR Startup Revenue Scraper converts public startup listings and profiles into a consistent Apify dataset.

It can:

- search discovered startups by company name, slug, description, category, or country;
- scrape the main directory, category pages, acquisition listings, and exact profiles;
- export current MRR, latest 30-day revenue, total revenue, and growth when public;
- preserve payment-provider and synchronization context instead of labeling every number as verified;
- identify public acquisition listings, asking prices, and revenue multiples;
- enrich listing rows from profile pages when you enable detail fetching;
- return CSV, JSON, Excel, XML, RSS, or another Apify dataset export format.

### Who is it for?

- **Startup investors and acquirers** comparing revenue-bearing businesses and sale listings.
- **Market intelligence teams** creating repeatable snapshots of public startup metrics.
- **Founders and analysts** benchmarking categories, MRR, growth, and acquisition multiples.
- **Sales and partnerships teams** finding companies whose descriptions match a target market.
- **Data engineers** replacing manual TrustMRR exports with an API-ready dataset.

### Why use this Actor instead of manual browsing?

TrustMRR is designed for interactive browsing. A scheduled research workflow also needs stable field names, source URLs, timestamps, filters, and exports.

This Actor provides:

1. one normalized row per startup slug;
2. explicit nulls when TrustMRR does not publish a metric;
3. separate current MRR, 30-day revenue, and cumulative revenue fields;
4. public verification context such as provider and last-sync timestamp;
5. normalized `for_sale` and `not_for_sale` acquisition states;
6. provenance through `sourceUrl` and `scrapedAt`.

It never invents revenue for profiles that do not expose it.

### What TrustMRR data can I extract?

| Field | Meaning |
| --- | --- |
| `startupId` | Public internal TrustMRR identifier, when exposed |
| `name` | Startup or company name |
| `slug` | Stable TrustMRR profile slug |
| `profileUrl` | Canonical public TrustMRR profile |
| `description` | Public company description |
| `logoUrl` | Public logo URL |
| `category` | TrustMRR business category |
| `country` | Public country label |
| `founderName` | Public founder name |
| `founderXHandle` | Public founder X handle |
| `websiteUrl` | Public company website |
| `currentMrr` | Current monthly recurring revenue |
| `last30DaysRevenue` | Revenue in the latest public 30-day period |
| `totalRevenue` | Cumulative public revenue |
| `revenueGrowth30d` | Public 30-day revenue growth percentage |
| `customerCount` | Public customer count |
| `activeSubscriptions` | Public active subscription count |
| `revenueVerified` | Verification signal derived from explicit or provider-backed public fields |
| `verificationProvider` | Public payment/subscription provider |
| `revenueLastSyncedAt` | Public revenue or MRR sync timestamp |
| `isForSale` | Whether a public sale listing is present |
| `askingPrice` | Public asking price |
| `revenueMultiple` | Public acquisition revenue multiple |
| `listingTier` | Public TrustMRR listing tier |
| `acquisitionStatus` | `for_sale` or `not_for_sale` |
| `sourceUrl` | Page where the startup was discovered |
| `scrapedAt` | UTC extraction timestamp |

Nullable fields remain `null` when the selected page does not expose them. Enable `includeDetails` when a smaller, richer profile export is more important than request volume.

### How to scrape TrustMRR startup revenue

1. Open the Actor input page.
2. Keep `https://trustmrr.com/` for broad discovery, or add category, acquisition, or profile URLs.
3. Optionally enter search text such as `ai`, `analytics`, or `marketing`.
4. Set `maxItems` to the maximum matching startups you need.
5. Enable `includeDetails` only when profile-level enrichment is required.
6. Run the Actor.
7. Open the default dataset and export it or connect an integration.

The prefilled homepage input works without authentication.

### Input parameters

| Input | Type | Default | Description |
| --- | --- | --- | --- |
| `startUrls` | URL array | TrustMRR homepage | Public TrustMRR listing, category, acquisition, recent, search, or profile pages |
| `query` | string | empty | Case-insensitive text filter across identity and description fields |
| `maxItems` | integer | `50` | Maximum records, from 1 to 500 |
| `includeDetails` | boolean | `false` | Fetch bounded profile pages for additional public fields |
| `onSaleOnly` | boolean | `false` | Keep only public acquisition listings |
| `minMrr` | number | `0` | Minimum public current MRR; missing MRR is treated as zero |

Only `trustmrr.com` URLs are accepted. Unsupported hosts fail with a clear error instead of silently scraping unrelated pages.

### Example input: search startup profiles

```json
{
  "startUrls": [{ "url": "https://trustmrr.com/" }],
  "query": "ai",
  "maxItems": 10,
  "includeDetails": false
}
```

This performs client-side filtering over public records found on the selected TrustMRR page. It does not claim a private or official TrustMRR search API.

### Example input: acquisition intelligence

```json
{
  "startUrls": [{ "url": "https://trustmrr.com/acquire" }],
  "onSaleOnly": true,
  "maxItems": 25,
  "includeDetails": false
}
```

Use the input in a scheduled Task to take recurring snapshots. Compare datasets downstream by `slug`; the Actor does not send alerts or maintain history itself.

### Example input: one enriched startup

```json
{
  "startUrls": [{ "url": "https://trustmrr.com/startup/stan" }],
  "maxItems": 1,
  "includeDetails": true
}
```

### Example output

The following shape comes from a current local run against the public Stan profile. Values can change at the source.

```json
{
  "name": "Stan",
  "slug": "stan",
  "profileUrl": "https://trustmrr.com/startup/stan",
  "description": "Stan enables people to make living and work for themselves.",
  "category": "Content Creation",
  "country": "US",
  "currentMrr": 3569654.22,
  "last30DaysRevenue": 2844651.94697744,
  "totalRevenue": 76627685.07479446,
  "revenueVerified": true,
  "verificationProvider": "stripe",
  "isForSale": false,
  "askingPrice": null,
  "acquisitionStatus": "not_for_sale",
  "sourceUrl": "https://trustmrr.com/startup/stan",
  "scrapedAt": "2026-08-25T14:42:32.506Z"
}
```

### How much does it cost to export TrustMRR startup revenue?

The Actor uses pay-per-event pricing:

- one `start` event per run;
- one `item` event per startup saved;
- no item charge for filtered-out, duplicate, empty, or failed records.

The active start price is **$0.005 per run**. The BRONZE item price is **$0.00108 per startup**; higher usage tiers receive lower per-item prices. For example, 10 BRONZE results cost **$0.0158**, and 100 cost **$0.113**, excluding any account-level platform considerations.

Check the pricing panel for your account tier before a production run. Profile enrichment increases source requests but is included in the normal saved-startup charge.

### Recurring monitoring workflow

To monitor startup revenue or acquisition changes:

1. save one of the working inputs as an Apify Task;
2. schedule it daily, weekly, or monthly;
3. retain `slug`, revenue fields, acquisition fields, and `scrapedAt`;
4. compare the latest dataset with your previous snapshot in Make, Zapier, a webhook handler, or a warehouse;
5. alert only on changes that matter to your team.

TrustMRR controls update frequency. A new scrape timestamp does not mean every source metric changed.

### Data quality and verification context

`revenueVerified` is conservative:

- explicit TrustMRR verification fields are used when present;
- a public payment provider or revenue-sync timestamp can establish provider-backed context;
- otherwise the value remains `null`, not `false` and not an unsupported claim.

Revenue values are kept as published numbers. The Actor does not convert currencies, estimate annual recurring revenue, or infer missing months.

### Performance and limits

The Actor is HTTP-only and runs with 256 MB memory. It parses Next.js server-rendered data without downloading images, fonts, or browser assets.

- Direct listing extraction is fastest.
- `includeDetails` adds profile requests and takes longer.
- The hard per-run limit is 500 saved records.
- TrustMRR pages can naturally expose fewer records than `maxItems`.
- Multiple pages can contain the same startup; duplicates are merged by slug.
- Empty filter results succeed with an empty dataset.

### Failure behavior and troubleshooting

#### Why did the run return fewer startups than requested?

The selected page may expose fewer unique matching profiles. Remove restrictive filters, add another real TrustMRR category page, or use the homepage.

#### Why is MRR null while 30-day revenue is present?

TrustMRR pages expose different public field sets. Use `includeDetails: true` or an exact profile URL. The Actor preserves nullability rather than equating all revenue labels.

#### Why did my URL fail immediately?

Only public `trustmrr.com` URLs are supported. Check spelling and remove unrelated domains.

#### Why are some enrichment fields still null?

TrustMRR may not publish them for that startup. Profile enrichment cannot access private dashboard fields.

#### What happens on a temporary upstream failure?

Transient network errors, HTTP 429 responses, and server errors are retried with bounded backoff. Deterministic client errors are not retried indefinitely.

### Export and integration options

Open the run dataset to download JSON, CSV, Excel, XML, HTML, or RSS. You can also:

- send new datasets to Google Sheets;
- update Airtable acquisition pipelines;
- trigger Make or Zapier scenarios;
- load snapshots into BigQuery, Snowflake, or PostgreSQL;
- call a webhook that compares revenue fields by slug;
- use the Apify API from an internal research service.

### JavaScript API example

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/trustmrr-startup-revenue-scraper').call({
  startUrls: [{ url: 'https://trustmrr.com/acquire' }],
  onSaleOnly: true,
  maxItems: 25
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Python API example

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/trustmrr-startup-revenue-scraper').call(run_input={
    'startUrls': [{'url': 'https://trustmrr.com/startup/stan'}],
    'maxItems': 1,
    'includeDetails': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### cURL API example

```bash
curl -X POST \
  'https://api.apify.com/v2/acts/automation-lab~trustmrr-startup-revenue-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"startUrls":[{"url":"https://trustmrr.com/"}],"query":"analytics","maxItems":10}'
```

Never commit an Apify token to source control. Use environment variables or your platform secret manager.

### Use the Actor through MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/trustmrr-startup-revenue-scraper"
```

#### Claude Desktop setup

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/trustmrr-startup-revenue-scraper"
    }
  }
}
```

#### Cursor setup

Add the same remote MCP URL in **Cursor Settings → Tools & MCP → New MCP Server**.

#### VS Code setup

Add the same remote MCP URL to your VS Code MCP server configuration, then select the TrustMRR Actor tool.

Example prompts:

- “Export 10 public TrustMRR AI startups and compare their visible revenue fields.”
- “Get the current public TrustMRR record for Stan and explain the verification context.”
- “List acquisition targets from TrustMRR with asking price and revenue multiple.”

### Responsible use and legality

This Actor extracts information exposed on public TrustMRR pages. It does not bypass login, access private dashboards, solve CAPTCHAs, or recover hidden values.

You are responsible for:

- complying with TrustMRR terms and applicable law;
- choosing a reasonable schedule and run size;
- respecting privacy and marketing rules;
- verifying financial information before making investment or acquisition decisions;
- protecting exported datasets according to your organization's policies.

Public revenue data is research context, not financial advice or audited financial reporting.

### Limitations

- TrustMRR can change its public page structure.
- Output coverage depends on fields exposed by each selected page.
- Search filtering applies to records discovered from the supplied pages; it is not a complete-site search guarantee.
- The Actor does not log in or access private history.
- It does not generate alerts, valuations, forecasts, or investment recommendations.
- It does not guarantee a profile's figures are current beyond the source's own timestamps.

### FAQ

#### Is this an official TrustMRR API?

No. It is an independent extractor for public TrustMRR web pages.

#### Does it require a TrustMRR login?

No. Login-only and private dashboard data are outside the Actor's scope.

#### Can I scrape one exact startup?

Yes. Supply its `https://trustmrr.com/startup/<slug>` profile URL and set a small `maxItems` value.

#### Can I search companies by keyword?

Yes. Set `query` and choose pages broad enough to contain the companies you need. Matching covers public name, slug, description, category, and country fields.

#### Can I find startups for sale?

Yes. Use `https://trustmrr.com/acquire` with `onSaleOnly: true`.

#### Will repeated runs create history?

Each result has `scrapedAt`, so you can store and compare datasets. The Actor itself does not maintain a historical series between runs.

### Related Automation Lab Actors

- [Crunchbase Company and Funding Search Scraper](https://apify.com/automation-lab/crunchbase-company-funding-search-scraper) for company and funding discovery.
- [Product Hunt Scraper](https://apify.com/automation-lab/product-hunt-scraper) for product-launch research.
- [Y Combinator Scraper](https://apify.com/automation-lab/y-combinator-scraper) for accelerator company profiles.

Use related sources to enrich or cross-check a company record; do not assume their revenue labels are equivalent to TrustMRR fields.

### Support

If a public page stops producing expected fields, open an Actor issue with:

- the exact input with tokens removed;
- a public example URL;
- the run ID;
- the expected field and observed result.

That evidence makes source changes faster to reproduce and repair.

# Actor input Schema

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

Public TrustMRR listing, category, acquisition, recent, search, or startup profile URLs. The homepage is used when omitted.

## `query` (type: `string`):

Keep startups whose name, slug, description, category, or country contains this text.

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

Maximum number of matching startup records saved.

## `includeDetails` (type: `boolean`):

Fetch discovered startup profile pages to merge additional public revenue, verification, founder, and company fields.

## `onSaleOnly` (type: `boolean`):

Keep only startups with a public TrustMRR acquisition listing or asking price.

## `minMrr` (type: `number`):

Keep records whose public current monthly recurring revenue is at least this amount in USD. Missing MRR is treated as zero.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://trustmrr.com/"
    }
  ],
  "query": "",
  "maxItems": 20,
  "includeDetails": false,
  "onSaleOnly": false,
  "minMrr": 0
}
```

# Actor output Schema

## `dataset` (type: `string`):

Default dataset containing normalized startup records.

# 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://trustmrr.com/"
        }
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/trustmrr-startup-revenue-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://trustmrr.com/" }],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/trustmrr-startup-revenue-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://trustmrr.com/"
    }
  ],
  "maxItems": 20
}' |
apify call automation-lab/trustmrr-startup-revenue-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/trustmrr-startup-revenue-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/p7pofSKw1YD0Ayh3o/builds/HNIfJRopAUgUVDHRq/openapi.json
