On this page

Documentation

Revmrr Open Data API

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.

Introduction

Revmrr exposes the same data that powers its leaderboard and marketplace through three read-only surfaces:

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.

Quickstart

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.

Plans & API keys

Your plan sets how many records one request returns and how many you get each month:

PlanWhoPer requestPer month
FreeFree API key, or no key at all10 (limit 1–10)100 records
ProAPI key of an account with an active Pro subscription50 (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.

Monthly allowance (Free)

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:

HeaderDescription
X-Revmrr-Quota-LimitRecords included this month (100).
X-Revmrr-Quota-RemainingRecords left this month.
X-Revmrr-Quota-ResetWhen 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"
  }
}

When you ask for more than your plan allows

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.

Conventions

TopicDetails
Base URLhttps://revmrr.com
AuthenticationOptional. Send a key as Authorization: Bearer rvm_…; without one you get Free limits counted per IP. Every endpoint is read-only.
FormatJSON (UTF-8). Field names are camelCase on /api/v1 and snake_case on /api/ai (schema.org-style).
MoneyWhole US dollars unless a currency field says otherwise — not cents.
DatesISO 8601 in UTC, e.g. 2026-10-05T13:18:08.208Z. Months are YYYY-MM.
Missing dataUnknown values are null, never omitted and never 0.
CORSAccess-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.

Verified vs self-reported revenue

Revmrr’s dataset mixes two kinds of numbers, and the API never blurs them:

KindWhere it comes fromHow to tell
VerifiedImported 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-reportedEntered 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

Errors use standard HTTP status codes and a JSON body:

{
  "error": { "code": "not_found", "message": "No startup with that slug." }
}
StatusMeaning
200Success.
400Malformed request (e.g. invalid JSON sent to the MCP server).
401invalid_api_key: the key is wrong or was revoked.
404No startup with that slug, or it isn't published to that surface.
405Wrong HTTP method (the MCP endpoint only accepts POST).
429monthly_quota_exceeded: the Free monthly allowance is used up. It resets on the 1st (UTC), or upgrade to Pro.
500Something 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.

Fair use

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.

List startups

GET/api/v1/startups

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

Query parameters

ParameterTypeDescription
pageintegerPage number, starting at 1. Default 1.
limitintegerResults per page. Default 10. Max 10 on Free, 50 with a Pro key.
sortstringmrr-desc (default), mrr-asc, name-asc, name-desc. Startups without MRR sort last.
qstringSearch text matched against name, category and description.
categorystringPartial, case-insensitive category match, e.g. SaaS or Artificial Intelligence.
onSalebooleantrue = only startups listed for acquisition, false = only those that aren’t. Omit for all.
minMrrnumberMinimum MRR in USD (inclusive).
maxMrrnumberMaximum MRR in USD (inclusive).

Request

curl "https://revmrr.com/api/v1/startups?category=Artificial%20Intelligence&minMrr=10000&sort=mrr-desc&limit=2"

Response

{
  "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" } }
}

Startup object

FieldTypeDescription
namestringStartup name.
slugstringStable identifier — use it with Get a startup.
iconstring | nullLogo URL.
descriptionstring | nullShort description.
websitestring | nullWebsite URL.
categorystring | nullPrimary category.
founderNamestring | nullA founder's name, when known.
revenue.mrrnumber | nullMonthly recurring revenue, USD.
revenue.arrnumber | nullAnnual recurring revenue, USD.
onSalebooleanListed for acquisition on the Revmrr marketplace.
rankintegerPosition by MRR within your filtered result set (1 = highest).

Pagination

FieldTypeDescription
meta.totalintegerMatching startups across all pages.
meta.pageintegerCurrent page.
meta.limitintegerResults per page.
meta.hasMorebooleanKeep incrementing page until this is false.
meta.planstringFree or Pro.
meta.maxLimitintegerMost records one request can return on your plan.
meta.quotaobject?Free only: limit, used, remaining, resetsAt for this month.
meta.noticestring?Present only when your limit was lowered to fit your plan or what’s left this month.

Get a startup

GET/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.

Path parameters

ParameterTypeDescription
slugstringThe startup’s slug, e.g. glean.

Request

curl "https://revmrr.com/api/v1/startups/glean"

Response

{
  "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 }
  ]
}

Additional fields

FieldTypeDescription
businessTypestring | nulle.g. B2B, B2C.
foundedinteger | nullYear founded.
countrystring | nullHeadquarters country.
teamSizestring | nullTeam size, e.g. "2 people".
founders[]object[]name, title, twitter, linkedin.
technologiesstring[]Tech stack.
socials[]object[]platform, url.
revenue.verifiedbooleanTrue when the numbers come from a connected payment provider.
verificationobject | nullProvider, verification level, MRR/ARR, total and last-30-day revenue, customers, months of history and a monthly gross/refunds/net series.
askingPricenumber | nullAsking price in USD, when listed for sale.
profileUrlstringPublic Revmrr profile page.

AI Discovery index

GET/api/ai/discovery

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

Query parameters

ParameterTypeDescription
categorystringCategory, e.g. saas.
industrystringIndustry, e.g. developer-tools.
verifiedbooleanOnly startups whose owner has a verified Revmrr account (true) or not (false).

Request

curl "https://revmrr.com/api/ai/discovery?verified=true"

Response

{
  "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
    }
  ]
}

AI profile

GET/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"
}

MCP server

POST/api/mcp

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

Connect

claude mcp add --transport http revmrr https://revmrr.com/api/mcp

Tools

ToolArgumentsReturns
search_startupsquery, category, industry, verified, limitCompact matches for free text plus filters.
get_startupslug (required)Full profile of one startup.
find_verified_startupslimitStartups whose owner account is verified.
search_by_categorycategory (required), limitStartups in a category.
search_by_industryindustry (required), limitStartups in an industry.
search_by_revenuemin_mrr, max_mrr, limitStartups in an MRR range (USD); excludes those without MRR.

limit defaults to 10, maximum 50.

Raw JSON-RPC call

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

GET/llms.txt

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