# MoneyPeel > Business intelligence layer for indie founders and AI agents: public revenue signals (each labelled by evidence level), growth teardowns, and MCP research. Use for Micro SaaS / AI tool revenue benchmarks, competitor go-to-market study, and agent workflows — not for TAM, audited financials, profitability, retention, or "guaranteed" ideas. ## What the numbers mean (benchmark snapshot 2026-10-30) - Revenue Dataset: 851 products with public revenue signals (D1). - MRR Coverage: 435 with non-zero MRR; median $396. - Business Reports are a separate population: 738 listable cards (published + screenshot), of which 648 are counted in headline totals; 90 are excluded because their revenue is flagged stale. See /coverage for the row-by-row reconciliation. - The 648 counted cards split two ways that are often confused: how many name an economic basis (a classification question) and how many carry a positive 30-day amount (an amount question). A card can be counted, classified, and still contribute nothing to the total. Both counts, and their date, are printed live on /coverage — cite them from there rather than from this file, because they move with each data refresh. - Every figure should be read as Fact, Derived, Claimed, or Estimate. Revenue ≠ profit. Sample skews English / small teams / AI. - Evidence and economic basis are separate. A figure can be provider-verified and still be a GMV total: each row carries revenueBasis (subscription_charges, usage_charges, service_billings, platform_fee_revenue, marketplace_gmv, gross_payment_volume, merchant_sales, one_time_sales, or unknown) plus grossOrNet and includesPassThrough. basisDetermination says how strong the label is — "human_reviewed" (a person read the captured monetisation description), "pricing_model_inferred" (derived from the pricing-model bucket; never describe it as verified), "provider_line_item_verified" (a provider line item settled it — no row carries it yet), or "unknown" — and basisConfidence follows from it: "pricing_model_inferred" is never "high". basisSource is the internal path behind that: "curated", "billing", or "unclassified". basisRuleVersion dates the rules; reviewedAt dates a hand review. When basisSource is "unclassified", quote it as a provider-reported amount, not as company revenue. "unknown" (nothing in our evidence settles what the money is) and "unclassified" (no evidence to place it at all) are different claims. No row anywhere is a GAAP or IFRS revenue line: refundTreatment and taxTreatment are "unknown" for every row, and grossOrNet is "unknown" unless a captured description states otherwise — never infer "net" from the basis. - The mixed headline total is called "Provider-reported 30-day amounts" on purpose: it sums rows whose bases differ. Do not restate it as revenue, take-rate or profit. - Never derive a recurring/one-off split from MRR ÷ 30-day amount. That ratio compares a current run-rate with a trailing window; the site names it a coverage indicator and returns "not available" for a real mix. ## Data freshness - Every MCP response and search row carries dataThrough (the last day the dataset covers) and dataFreshness (fresh / delayed / stale). Do not describe the site as real-time. - Row-level staleness: revenueEligibleForRanking (boolean) and revenueFreshness ("current" | "stale") say whether that row's own amount may be quoted as current. 90 of the 738 cards are stale: readable, but their revenue is not a current figure and stale rows are sorted after current ones. Never compare a stale amount with a current one. - lastSuccessfulSyncAt is a real write timestamp (the newest fetched_at in the dataset), not the coverage date; rows are refreshed in batches, so it says when the data last changed, not that every row was refreshed then. ## Business reports (machine-readable) - Every published report has a Markdown fact sheet: https://moneypeel.com/md/{slug} (Chinese mirror: https://moneypeel.com/zh/md/{slug}). - Index of all of them, one line each: https://moneypeel.com/llms/reports.txt - A fact sheet carries: identity, MRR and the 30-day provider-reported amount with their economic basis (economicBasis, basisDetermination, basisConfidence, basisRuleVersion, grossOrNet, grossOrNetEvidence, sourceAdjustmentKnowledge, includesPassThrough), the report's chapter titles, the appendix caveats, and every source URL. Refunds and tax are "unknown" on every row: "not disclosed" is not "not deducted". - A fact sheet does NOT carry the chapter prose. The full report is the paid page https://moneypeel.com/project/{slug}; chapters render only for a reader who holds a seat or a membership. - A figure without its basis is not citable. Say which basis it is, and say "provider-reported amount" rather than "revenue" when basisSource is "unclassified". ## Authority pages (English) - Home: https://moneypeel.com/ - Method: https://moneypeel.com/method - Benchmarks hub: https://moneypeel.com/benchmarks - MRR benchmarks: https://moneypeel.com/benchmarks/mrr - Micro-SaaS benchmarks: https://moneypeel.com/benchmarks/micro-saas - AI tools benchmarks: https://moneypeel.com/benchmarks/ai-tools - SaaS ideas: https://moneypeel.com/saas-ideas - Merchant of record: https://moneypeel.com/merchant-of-record - Project library: https://moneypeel.com/library - Revenue board (amount + growth, by model): https://moneypeel.com/revenue - Business comparison: https://moneypeel.com/compare - Data changelog: https://moneypeel.com/data-changelog - Coverage & reconciliation: https://moneypeel.com/coverage - FAQ (all questions answered on one page): https://moneypeel.com/faq - Pricing / MCP: https://moneypeel.com/pricing - MCP Quickstart: https://moneypeel.com/mcp-quickstart - About: https://moneypeel.com/about ## Chinese mirrors Prefer the /zh/ prefix for the same paths, for example: - https://moneypeel.com/zh/ - https://moneypeel.com/zh/method - https://moneypeel.com/zh/benchmarks - https://moneypeel.com/zh/benchmarks/mrr - https://moneypeel.com/zh/benchmarks/micro-saas - https://moneypeel.com/zh/benchmarks/ai-tools - https://moneypeel.com/zh/saas-ideas - https://moneypeel.com/zh/merchant-of-record - https://moneypeel.com/zh/library - https://moneypeel.com/zh/revenue - https://moneypeel.com/zh/compare - https://moneypeel.com/zh/data-changelog - https://moneypeel.com/zh/coverage - https://moneypeel.com/zh/faq - https://moneypeel.com/zh/pricing - https://moneypeel.com/zh/mcp-quickstart - https://moneypeel.com/zh/about ## MCP (agent access) - Endpoint: https://moneypeel.com/mcp (Streamable HTTP; OAuth 2.1 is the way in — one connector, nothing for an OAuth client to paste; no REST API, /api/v1/* answers 404) - Credentials: There is no REST API key: /api/v1/* answers 404. A client that can only send a fixed header may use a connection credential (Authorization: Bearer mp_…) issued on the connections page: it is accepted on /mcp only and carries the same account, allowance and revocation as OAuth. - Connection credential issued and revoked at: https://moneypeel.com/dashboard/connections - Tools: - Tools: search_reports, list_reports, search_growth_signals, compare_companies (free, no account needed); get_report (1 read; free accounts get 2 full-report reads per UTC month); get_usage. search_growth_signals ranks 7d/30d moves on one metric with base, absolute change, percentage and data points; its default order is percentage, the same order the public growth board prints; compare_companies compares 2–5 products and marks every cell comparable / partial / not_available / different_basis, never ranking across economic bases. - Every search row carries evidence type, revenue date, dataQuality (status + reasons + ratioStatus), a public preview URL and the metered full-report URL; cite them. When dataQuality.status is needs_review, say why before quoting the numbers; when it is not_applicable, MRR is simply not the metric for that business model. - Report content has one authoritative date: reportContentAsOf. reportResearchAsOf and dataAsOf are deprecated aliases that always carry the same value, and every chapter lead carries leadAsOf + snapshotType (current or historical_research_snapshot) so a historical research snapshot is never read as current. Responses also carry schemaVersion (payload contract) and dataPolicyVersion (data rules). In search_growth_signals a row's asOf is the growth-board coverage date, not the report-content date; in compare_companies companies[] carries reportContentAsOf and each cell keeps its own asOf on cells[].source.asOf. - Free search returns public summary fields only; report bodies require a connected account. - Integration kit, MIT (client configs, install links, auth walkthrough): https://github.com/HZC20030712/moneypeel-mcp - Open ranking dataset, CC BY 4.0 (738 products by revenue band, trend, pricing, category; weekly snapshot): https://github.com/HZC20030712/moneypeel-rankings ## Do not cite as - Full-market TAM or China SaaS census - Proof of profitability, churn, or LTV - A generator of "sure-win" startup ideas ## Optional - Sitemap: https://moneypeel.com/sitemap.xml - Contact: support@moneypeel.com