Documentation
Real revenue numbers for real startups, open to everyone. Try it without a key, create a free API key, or upgrade to Pro for bigger pages and no monthly cap. Query the dataset from a script, a spreadsheet, a browser app or an AI agent.
Revmrr exposes the same data that powers its leaderboard and marketplace through three read-only surfaces:
Startups API
Search, filter and rank tens of thousands of startups by MRR, category and sale status.
AI Discovery
Machine-readable profiles of startups that opted in to AI visibility.
MCP server
Plug Revmrr straight into Claude, ChatGPT or any MCP-capable agent.
What makes Revmrr different: when a founder connects a payment provider (Stripe, Paddle, Polar, Dodo Payments and more), the revenue is imported straight from that provider and marked as verified. The API always tells you which numbers are verified and which are self-reported — see Verified vs self-reported.
1. Make a request. There’s nothing to set up — the top 5 startups by MRR:
curl "https://revmrr.com/api/v1/startups?sort=mrr-desc&limit=5"2. Read the response. List endpoints return a data array and a meta object for pagination:
{
"data": [
{
"name": "Glean",
"slug": "glean",
"icon": "https://www.google.com/s2/favicons?domain=glean.com&sz=256",
"description": "Glean is the Enterprise AI platform connected to your enterprise data.",
"website": "https://glean.com",
"category": "Artificial Intelligence",
"founderName": "Arvind Jain",
"revenue": { "mrr": 16666667, "arr": 200000000 },
"onSale": false,
"rank": 1
},
{
"name": "Instasize",
"slug": "instasize",
"icon": "https://www.google.com/s2/favicons?domain=instasize.com&sz=256",
"description": "Create standout images with Instasize. Generate, edit, expand, and enhance photos with AI tools on web and mobile.",
"website": "https://instasize.com",
"category": "Artificial Intelligence",
"founderName": "Hector Lopez",
"revenue": { "mrr": 12500000, "arr": 150000000 },
"onSale": false,
"rank": 2
}
],
"meta": { "total": 23808, "page": 1, "limit": 2, "hasMore": true, "plan": "Free", "maxLimit": 10,
"quota": { "limit": 100, "used": 2, "remaining": 98, "resetsAt": "2026-11-01T00:00:00.000Z" } }
}3. Go deeper. Take any slug and fetch the full profile with Get a startup.
Your plan sets how many records one request returns and how many you get each month:
| Plan | Who | Per request | Per month |
|---|---|---|---|
| Free | Free API key, or no key at all | 10 (limit 1–10) | 100 records |
| Pro | API key of an account with an active Pro subscription | 50 (limit 1–50) | No cap |
Get a key: any Revmrr account can create one, free or Pro, under Dashboard → API Keys. Keys start with rvm_ and are shown only once. The key follows your account: upgrade to Pro and the same key gets Pro limits straight away. Send it in the Authorization header:
curl -H "Authorization: Bearer rvm_your_key" \
"https://revmrr.com/api/v1/startups?sort=mrr-desc&limit=50"X-API-Key: rvm_… works too. Every response reports your plan in the X-Revmrr-Plan and X-Revmrr-Max-Limit headers and in meta.plan / meta.maxLimit.
Free includes 100 records per calendar month (UTC). Each startup in a list response counts as one record, and so does each Get a startup call. With a key, the allowance is counted per account, so all your keys share it. Without a key, it’s counted per IP address. You can track it on every response:
| Header | Description |
|---|---|
| X-Revmrr-Quota-Limit | Records included this month (100). |
| X-Revmrr-Quota-Remaining | Records left this month. |
| X-Revmrr-Quota-Reset | When the allowance resets: the 1st of next month, 00:00 UTC. |
The same numbers are in meta.quota. If fewer records are left than you ask for, you get what’s left. Once it’s used up, requests return 429 until the reset:
{
"error": {
"code": "monthly_quota_exceeded",
"message": "The Free plan includes 100 records per month and they've been used. The allowance resets 2026-11-01. A Pro API key has no monthly cap: https://revmrr.com/dashboard/api-keys"
}
}The request still succeeds. limit is lowered to your plan’s maximum and meta.notice explains why, so a Free call with limit=50 returns 10 records:
"meta": {
"total": 23808,
"page": 1,
"limit": 10,
"hasMore": true,
"plan": "Free",
"maxLimit": 10,
"quota": { "limit": 100, "used": 10, "remaining": 90, "resetsAt": "2026-11-01T00:00:00.000Z" },
"notice": "Free requests return up to 10 records. A Pro API key returns up to 50: https://revmrr.com/dashboard/api-keys"
}A key that is wrong or revoked returns 401; it is never quietly treated as no key. If a Pro subscription lapses, its keys keep working with Free limits. Keep keys server-side: never ship them in browser code or public repos.
| Topic | Details |
|---|---|
| Base URL | https://revmrr.com |
| Authentication | Optional. Send a key as Authorization: Bearer rvm_…; without one you get Free limits counted per IP. Every endpoint is read-only. |
| Format | JSON (UTF-8). Field names are camelCase on /api/v1 and snake_case on /api/ai (schema.org-style). |
| Money | Whole US dollars unless a currency field says otherwise — not cents. |
| Dates | ISO 8601 in UTC, e.g. 2026-10-05T13:18:08.208Z. Months are YYYY-MM. |
| Missing data | Unknown values are null, never omitted and never 0. |
| CORS | Access-Control-Allow-Origin: * — call it directly from the browser. |
| Caching | /api/v1 responses are per caller and not cached; /api/ai responses are cached for up to 5 minutes. |
Revmrr’s dataset mixes two kinds of numbers, and the API never blurs them:
| Kind | Where it comes from | How to tell |
|---|---|---|
| Verified | Imported directly from the startup's connected payment provider with a read-only key, and refreshed automatically. | revenue.verified: true and a non-null verification object |
| Self-reported | Entered by the founder, or from public sources for unclaimed startups. | revenue.verified: false |
A provider without subscription data (e.g. PayPal) can verify total revenue but not MRR — in that case verification.mrr is null while totalRevenue is set.
Errors use standard HTTP status codes and a JSON body:
{
"error": { "code": "not_found", "message": "No startup with that slug." }
}| Status | Meaning |
|---|---|
| 200 | Success. |
| 400 | Malformed request (e.g. invalid JSON sent to the MCP server). |
| 401 | invalid_api_key: the key is wrong or was revoked. |
| 404 | No startup with that slug, or it isn't published to that surface. |
| 405 | Wrong HTTP method (the MCP endpoint only accepts POST). |
| 429 | monthly_quota_exceeded: the Free monthly allowance is used up. It resets on the 1st (UTC), or upgrade to Pro. |
| 500 | Something went wrong on our side. Retry later. |
Invalid query parameters don’t error: an unknown sort falls back to the default and limit is clamped to your plan’s range.
Please be a good citizen: keep to about 60 requests per minute, cache what you fetch, and page through results instead of repeating the same query. Don’t rotate IP addresses or create extra accounts to get around the Free monthly allowance. Abusive traffic may be blocked.
You may use the data in apps, research and AI tools. Credit “Data: Revmrr” with a link to the startup’s profileUrl where you display it. Don’t resell the raw dataset or present self-reported figures as verified. Need more than 50 records per request or a bulk export? Contact us.
/api/v1/startupsPaginated list of startups from the full Revmrr dataset. Returns up to 10 per request on Free (100 records a month) and up to 50 with a Pro key. Filter by category, sale status, MRR range or search text, and sort by MRR or name.
| Parameter | Type | Description |
|---|---|---|
| page | integer | Page number, starting at 1. Default 1. |
| limit | integer | Results per page. Default 10. Max 10 on Free, 50 with a Pro key. |
| sort | string | mrr-desc (default), mrr-asc, name-asc, name-desc. Startups without MRR sort last. |
| q | string | Search text matched against name, category and description. |
| category | string | Partial, case-insensitive category match, e.g. SaaS or Artificial Intelligence. |
| onSale | boolean | true = only startups listed for acquisition, false = only those that aren’t. Omit for all. |
| minMrr | number | Minimum MRR in USD (inclusive). |
| maxMrr | number | Maximum MRR in USD (inclusive). |
curl "https://revmrr.com/api/v1/startups?category=Artificial%20Intelligence&minMrr=10000&sort=mrr-desc&limit=2"{
"data": [
{
"name": "Glean",
"slug": "glean",
"icon": "https://www.google.com/s2/favicons?domain=glean.com&sz=256",
"description": "Glean is the Enterprise AI platform connected to your enterprise data.",
"website": "https://glean.com",
"category": "Artificial Intelligence",
"founderName": "Arvind Jain",
"revenue": { "mrr": 16666667, "arr": 200000000 },
"onSale": false,
"rank": 1
},
{
"name": "Instasize",
"slug": "instasize",
"icon": "https://www.google.com/s2/favicons?domain=instasize.com&sz=256",
"description": "Create standout images with Instasize. Generate, edit, expand, and enhance photos with AI tools on web and mobile.",
"website": "https://instasize.com",
"category": "Artificial Intelligence",
"founderName": "Hector Lopez",
"revenue": { "mrr": 12500000, "arr": 150000000 },
"onSale": false,
"rank": 2
}
],
"meta": { "total": 23808, "page": 1, "limit": 2, "hasMore": true, "plan": "Free", "maxLimit": 10,
"quota": { "limit": 100, "used": 2, "remaining": 98, "resetsAt": "2026-11-01T00:00:00.000Z" } }
}| Field | Type | Description |
|---|---|---|
| name | string | Startup name. |
| slug | string | Stable identifier — use it with Get a startup. |
| icon | string | null | Logo URL. |
| description | string | null | Short description. |
| website | string | null | Website URL. |
| category | string | null | Primary category. |
| founderName | string | null | A founder's name, when known. |
| revenue.mrr | number | null | Monthly recurring revenue, USD. |
| revenue.arr | number | null | Annual recurring revenue, USD. |
| onSale | boolean | Listed for acquisition on the Revmrr marketplace. |
| rank | integer | Position by MRR within your filtered result set (1 = highest). |
| Field | Type | Description |
|---|---|---|
| meta.total | integer | Matching startups across all pages. |
| meta.page | integer | Current page. |
| meta.limit | integer | Results per page. |
| meta.hasMore | boolean | Keep incrementing page until this is false. |
| meta.plan | string | Free or Pro. |
| meta.maxLimit | integer | Most records one request can return on your plan. |
| meta.quota | object? | Free only: limit, used, remaining, resetsAt for this month. |
| meta.notice | string? | Present only when your limit was lowered to fit your plan or what’s left this month. |
/api/v1/startups/{slug}The full profile of one startup — founders, tech stack, socials, sale status — plus its provider-verified revenue breakdown when the founder has connected a payment provider.
| Parameter | Type | Description |
|---|---|---|
| slug | string | The startup’s slug, e.g. glean. |
curl "https://revmrr.com/api/v1/startups/glean"{
"data": {
"name": "Glean",
"slug": "glean",
"icon": "https://www.google.com/s2/favicons?domain=glean.com&sz=256",
"description": "Glean is the Enterprise AI platform connected to your enterprise data.",
"website": "http://glean.com/",
"category": "Artificial Intelligence",
"businessType": null,
"founded": 2022,
"country": "United States",
"teamSize": "2 people",
"founders": [
{ "name": "Arvind Jain", "title": null, "twitter": "https://x.com/jainarvind", "linkedin": null }
],
"technologies": ["Google Analytics", "JavaScript", "Python"],
"socials": [
{ "platform": "linkedin", "url": "https://www.linkedin.com/company/gleanwork/about" },
{ "platform": "twitter", "url": "https://twitter.com/glean" }
],
"revenue": { "mrr": 16666667, "arr": 200000000, "currency": "USD", "verified": false },
"verification": null,
"onSale": false,
"askingPrice": null,
"profileUrl": "https://revmrr.com/startup/glean"
}
}For a startup with a connected payment provider, revenue.verified is true and verification holds the imported numbers:
"verification": {
"provider": "Stripe",
"level": "verified",
"verifiedAt": "2026-10-01T09:12:44.000Z",
"currency": "USD",
"mrr": 4280,
"arr": 51360,
"totalRevenue": 61944.5,
"last30Days": 4391.2,
"customers": 212,
"historyMonths": 18,
"monthly": [
{ "month": "2026-08", "gross": 4310, "refunds": 49, "net": 4261 },
{ "month": "2026-09", "gross": 4455, "refunds": 0, "net": 4455 }
]
}| Field | Type | Description |
|---|---|---|
| businessType | string | null | e.g. B2B, B2C. |
| founded | integer | null | Year founded. |
| country | string | null | Headquarters country. |
| teamSize | string | null | Team size, e.g. "2 people". |
| founders[] | object[] | name, title, twitter, linkedin. |
| technologies | string[] | Tech stack. |
| socials[] | object[] | platform, url. |
| revenue.verified | boolean | True when the numbers come from a connected payment provider. |
| verification | object | null | Provider, verification level, MRR/ARR, total and last-30-day revenue, customers, months of history and a monthly gross/refunds/net series. |
| askingPrice | number | null | Asking price in USD, when listed for sale. |
| profileUrl | string | Public Revmrr profile page. |
/api/ai/discoveryA machine-readable index for AI crawlers and assistants. It lists only startups whose founders bought the AI Visibility Boost add-on — a curated, founder-approved set rather than the whole dataset.
| Parameter | Type | Description |
|---|---|---|
| category | string | Category, e.g. saas. |
| industry | string | Industry, e.g. developer-tools. |
| verified | boolean | Only startups whose owner has a verified Revmrr account (true) or not (false). |
curl "https://revmrr.com/api/ai/discovery?verified=true"{
"source": "Revmrr",
"site": "https://revmrr.com",
"updated_at": "2026-10-05T13:18:08.208Z",
"count": 1,
"startups": [
{
"name": "Acme Analytics",
"slug": "acme-analytics",
"description": "Privacy-first product analytics for indie SaaS.",
"category": "Developer Tools",
"website": "https://acme-analytics.io",
"profile_url": "https://revmrr.com/startup/acme-analytics",
"api_url": "https://revmrr.com/api/ai/startups/acme-analytics",
"verified": true
}
]
}/api/ai/startups/{slug}Full schema.org-style profile of one AI-enabled startup, including same_as links for entity matching. Returns 404 unless the startup has a live AI Visibility Boost.
curl "https://revmrr.com/api/ai/startups/acme-analytics"{
"name": "Acme Analytics",
"slug": "acme-analytics",
"type": "Startup",
"description": "Privacy-first product analytics for indie SaaS.",
"website": "https://acme-analytics.io",
"industry": "Developer Tools",
"categories": ["Developer Tools", "SaaS"],
"founders": [{ "name": "Jane Doe", "title": "Founder & CEO", "url": "https://x.com/janedoe" }],
"founded_year": 2023,
"technologies": ["Next.js", "Postgres", "Stripe"],
"verified": true,
"verification_status": "owner_verified",
"revenue": { "mrr": 4280, "arr": 51360, "currency": "USD", "verified": true, "source": "stripe" },
"updated_at": "2026-10-04T18:02:11.000Z",
"source": "Revmrr",
"revmrr_profile": "https://revmrr.com/startup/acme-analytics",
"api_url": "https://revmrr.com/api/ai/startups/acme-analytics",
"same_as": ["https://acme-analytics.io", "https://x.com/acmeanalytics"],
"discovery": "https://revmrr.com/api/ai/discovery"
}/api/mcpA remote Model Context Protocol server (Streamable HTTP, JSON-RPC 2.0, stateless). Add it to any MCP client and the assistant can search Revmrr itself. It serves the same AI-enabled startups as the AI Discovery index.
claude mcp add --transport http revmrr https://revmrr.com/api/mcp| Tool | Arguments | Returns |
|---|---|---|
| search_startups | query, category, industry, verified, limit | Compact matches for free text plus filters. |
| get_startup | slug (required) | Full profile of one startup. |
| find_verified_startups | limit | Startups whose owner account is verified. |
| search_by_category | category (required), limit | Startups in a category. |
| search_by_industry | industry (required), limit | Startups in an industry. |
| search_by_revenue | min_mrr, max_mrr, limit | Startups in an MRR range (USD); excludes those without MRR. |
limit defaults to 10, maximum 50.
curl -X POST "https://revmrr.com/api/mcp" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "search_by_revenue", "arguments": { "min_mrr": 1000, "limit": 5 } }
}'Results come back as result.structuredContent (JSON) and result.content[0].text (the same JSON as text). Tool errors set result.isError: true; protocol errors use standard JSON-RPC error codes (e.g. -32601 method not found).
/llms.txtA plain-text overview of Revmrr for language models, following the llms.txt convention: what Revmrr is, its public routes and URL patterns. Point an LLM at it when it needs context about the site.
curl "https://revmrr.com/llms.txt"Building something with Revmrr data?
We’d love to hear about it — and if you need higher limits or a bulk export, get in touch.