MRR Ledger

Bezogene Umsatzdaten von echten KI-Agenten-Unternehmen. Jede Zahl verlinkt auf ihre Quelle. Read-only-API + MCP, kein Schlüssel erforderlich.

Gehosteter MCP-Server

npx add-mcp 'https://mrrledger.com/mcp'

Installiert in Claude Code, Codex, Cursor und mehr

Dokumentation

For agents

MRR Ledger is built to be read by machines. Free, CC BY 4.0, no key needed for the static endpoints.

Endpoints

GET /api/v1/businesses.jsonAll businesses with sourced metrics
GET /api/v1/businesses/{slug}.jsonOne business
GET /api/v1/leaderboard.jsonRanked by annualized revenue
GET /api/v1/leaderboard.csvSame ranking as CSV (one row per ranked business: headline label, raw value_usd and value_text, basis, as_of, source_url, profile_url). Opens in Sheets/Excel/pandas.
GET /api/v1/categories.jsonCategory insights: id/slug, label, count, ranked_count, median_annualized_usd (among ranked), median_annualized_by_tier, members[{slug,name,rank,annualized_revenue_usd,url_profile}], method. Leaderboard deep-link /leaderboard/?category=<slug>. MCP list_categories / get_category.
GET /api/v1/tags.jsonTag insights: slug, label, count, ranked_count, median_annualized_usd (among ranked), median_annualized_by_tier, members[{slug,name,rank,annualized_revenue_usd,url_profile}], method. Sorted by count desc then label. HTML /tags/ shows count≥2 only. Leaderboard deep-link /leaderboard/?tag=<slug>. MCP list_tags / get_tag.
GET /api/v1/feature.jsonToday's featured business
GET /api/v1/features.json14-day feature rotation (entries, card_url, is_today)
GET /api/v1/stats.jsonHub totals: businesses, chartable, lessons, tiers/categories, stale counts, median annualized by tier and by category, revenue_disclosed_count / revenue_undisclosed_count, agent_native_count / agent_added_count
GET /badge/{slug}.svgEmbeddable 20px SVG badge: rank + raw headline metric (marks reported / last synced). /badge/{slug}-plain.svg = "listed", no number. URLs also on each record as badge_url / badge_plain_url.
GET /api/v1/newsletter.jsonThis week's issue: feature, new businesses, number moves, indie corner, lesson, upcoming, and paste-ready markdown
GET /api/v1/growth.jsonBusinesses with multi-point growth series
GET /api/v1/growth.csvEvery growth_series point as CSV (slug, as_of, label, value_usd, annualized_usd, basis, confidence, source_url, profile_url, growth_json_url). Free under CC BY 4.0. Full all-metrics history CSV stays Pro.
GET /api/v1/growth/{slug}.jsonDated annualized revenue points for one business
GET /api/v1/lessons.jsonEvery lesson, attributed, with keyword-tagged themes (rules included)
GET /api/v1/insights.jsonPricing-model buckets with medians, and time to $100M (with sources and method)
GET /api/v1/sources.jsonEvery cited source, which businesses use it, and its last automated link check
GET /api/v1/changes.jsonDated change log: businesses added, new sourced points, revisions (newest first)
GET /api/v1/pricing.jsonPlans, prices and Stripe checkout links (paid plans fulfilled by email)
GET /api/v1/compare.json?a=&b=Compare two businesses by slug (briefs + diff). Needs the Vercel compare function; also MCP compare_businesses
GET /api/v1/search.json · ?q=&category=&tier=&verified_only=&limit=&offset= (or &cursor=)Substring search over name, slug, one_liner, tags, lessons. Paged: total = all matches, limit default all (max 100), next page via next_offset or next_cursor (has_more; null on the last page). verified_only=true keeps only businesses whose headline figure is payment-processor verified (headline_verification not null). Static file = full index; query params need the Vercel search function. MCP search_businesses covers the same job for agents.
/openapi.json · /openapi-3.0.jsonOpenAPI 3.1 spec, plus an OpenAPI 3.0.3 copy for tools that only import 3.0
/llms.txt, /llms-full.txtLLM-friendly summaries
/playbook/Human page: lessons library, pricing models, time to $100M
/compare/Human page: side-by-side compare (?a=&b= deep links)
/features/Human page: 14-day featured rotation archive
/mcpMCP server (Streamable HTTP, no key). Canonical endpoint: https://mrrledger.com/mcp (POST JSON-RPC, answered directly; /mcp/ also works). Tools (all read-only, annotated readOnlyHint): search_businesses, benchmark_business, get_business, leaderboard, compare_businesses, get_growth, whats_new, get_category, list_categories, search_lessons, hub_stats, todays_feature, get_tag, list_tags. Resources: mrrledger://llms.txt, mrrledger://leaderboard, mrrledger://stats, mrrledger://changes
/.well-known/mcp-server.jsonMCP Registry manifest (server.json format) for registries and clients

Field notes

  • tier (venture, indie, experiment): Tier is about funding, not size: Venture-backed = raised outside venture money (even at under $1M annualized); Indie = bootstrapped or founder-funded; Experiment = agent-run or research project.
  • confidence: "reported" = press-reported, not company-confirmed (amber reported pill); "self-reported" = stated by the company itself (release, founder post), not independently verified (dashed self-reported pill).
  • confidence_label (every revenue metric, plus the record's headline): "payment-verified" (TrustMRR or another payment-connected source), "self-reported" (the company or founder), "reported" (press or another third party). source_type = trustmrr | self-reported | press. Derived at build time from the source; never changes a figure or a ranking.
  • headline_verification (records, leaderboard, search and MCP briefs): how the ranked figure itself is verified, {method: "payment-processor", processor, via} when it comes from a payment-connected source (e.g. TrustMRR via Stripe), else null. Use verified_only=true on /api/v1/search.json or MCP search_businesses / leaderboard to keep only those.
  • verified_corroboration: when the headline is self-reported or press-reported and a payment-verified point (e.g. a TrustMRR Stripe or Paddle snapshot) also exists, this object carries it (label, value_usd, annualized_usd, as_of, source_url, source_name, source_sync_stale_since, verification). Shown as a muted "Stripe-verified …" / "Paddle-verified …" line under the headline on the leaderboard and profile. Null otherwise.
  • source_sync_stale_since (YYYY-MM-DD, on metrics and on each record's headline): the source page says its live data connection stopped (e.g. an expired Stripe key on TrustMRR). The value is the last synced figure; treat it as dated that day. Also listed in sources.json summary.source_sync_stale.
  • ownership / independent: ownership appears only when a business was acquired ({status: "acquired", acquirer, as_of, source_url}); independent is then false. Tier still describes pre-sale funding, so a bootstrapped company sold for cash stays indie. Acquired rows show a purple acquired pill, are skipped in the newsletter indie corner and the home indie grid, and are left out of stats.json median_annualized_indie_independent.
  • last_ownership_check (YYYY-MM-DD or null): date of the latest active ownership search recorded in data/ownership_checks.json (verdict independent / acquired / watch). Present only when we have searched; unchecked rows stay null — never invented. Profiles with a ledger entry show a muted "Ownership checked YYYY-MM-DD" line.
  • ownership_watch: present only when the ownership ledger verdict is watch ({verdict, checked, note, source_url?}) — sale process or for-sale signal, no closed deal. Amber watch pill on profile + leaderboard; never invents acquisitions.
  • agentic_origin (optional string): agent-native = product is agents / an agent platform from the start; agent-added = established product that later added agents or MCP (amber agent-added pill on profile + leaderboard); unclear or omitted when not confident. Leaderboard filter ?origin=native / ?origin=added. stats.json has agent_native_count and agent_added_count.
  • revenue_disclosed (boolean): true iff the business has a rankable sourced annualized revenue figure (ARR / MRR×12 / Revenue with value_usd — same rule as leaderboard membership / annualized_revenue_usd). Funding or valuation alone is false. Leaderboard filter ?rev=disclosed / checkbox Revenue disclosed only; profiles and category cards show a muted no revenue figure pill when false. stats.json has revenue_disclosed_count and revenue_undisclosed_count.
  • older_figure / age_days: on each record and on each leaderboard row, older_figure is true when the headline revenue metric is over 365 days old and not superseded; age_days is build date minus as_of (month precision = mid-month). Same rule as the gray revenue >12 mo old pill. Leaderboard filter ?age=fresh / checkbox Fresh revenue only keeps only rows with disclosed revenue dated within 365 days. Also on each metric and in leaderboard.csv.
  • related (array, on each business record): up to 4 similar businesses scored by same category, shared tags, and nearby annualized scale. Each entry has compare_url for the side-by-side page. Profiles show the same list under "Similar on the ledger".

Free: leaderboard CSV + growth-series CSV (chartable points only). Paid tier paused while we confirm source permissions.

MCP tools

Endpoint https://mrrledger.com/mcp (Streamable HTTP, no key). Best first call: search_businesses {"query":"support","limit":3} (empty query = every business, highest revenue first), then get_business {"slug"}.

ToolReturnsExample
search_businessesSTART HERE. Briefs (slug, name, category, tier, one_liner, sourced annualized revenue, url_profile) + total and next page (offset / cursor){"query":"support","limit":3}
benchmark_businessYour MRR vs fresh same-category MRR peers: rank of N + 1 comparable (full answers: paid tier paused while we confirm source permissions){"category":"customer-support","mrr":2000}
get_businessThe full sourced record for one slug: every dated figure with source_url, lessons, growth, related{"slug":"cursor"}
leaderboardBusinesses ranked by most recent sourced annualized revenue, highest first{"category":"coding-agents","limit":5}
compare_businessesTwo businesses side by side + revenue ratio{"a":"cursor","b":"lovable"}
get_growthDated revenue points for one business, oldest first, each with its source{"slug":"lovable"}
whats_newChange log: businesses added, figures added / revised / re-dated / removed{"since":"2026-10-14"}
get_categoryOne category with its members{"slug":"customer-support"}
list_categoriesEvery category with medians and members{"limit":3}
search_lessonsBuilder lessons, attributed and themed{"theme":"pricing","limit":5}
hub_statsDataset totals, medians, verified share, latest change date{}
todays_featureToday's featured business (full record){}
get_tagOne tag with its members{"slug":"trustmrr"}
list_tagsEvery tag with medians and members (most used first){"limit":10}

Cost: every tool above is free for up to 100 tool calls per day per IP without a key.

Rate limits

No key needed: 100 requests per day per IP on /api/v1/search.json, /api/v1/compare.json, /api/v1/benchmark.json and /mcp (only tools/call counts). Static files under /api/v1/ stay free and are not metered. Paid keys: paid tier paused while we confirm source permissions.

Every metered response carries X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (Unix seconds, next UTC midnight) and X-RateLimit-Plan. Over the limit you get HTTP 429 with Retry-After. Counts are approximate.

Agent payments (x402)

Paid tier paused while we confirm source permissions. Every free endpoint and MCP tool works as before (100 requests per day per IP).

Benchmark your MRR

Where does your MRR sit among businesses like yours? GET /api/v1/benchmark.json?category=customer-support&mrr=2000 (MCP: benchmark_business {"category": "customer-support", "mrr": 2000}). Free: your rank of N, 1 comparable (name and link) and the method; no key needed (counts toward the free 100/day). Full answers: paid tier paused while we confirm source permissions.

Your MRR is used for that one answer only: never stored, published, ranked or badged.