Published definitions
How every figure on Shipped is computed
Shipped computes each figure itself from the records a provider hands over, rather than reading a provider’s own summary. These are the definitions it uses, in force since 8 Sep 2026 as version 1.0.0. Nothing here is decorative: the page is rendered from the same module the metrics engine imports.
Verified
Verified proves money moved through the named provider. It does not prove the customer was unrelated to the builder.
Verified means the money moved through the payment provider the builder connected, and we computed the figure ourselves from those transactions. It does not prove the customer was unrelated to the builder, that the product was delivered, or that the money was kept — a refund or chargeback later reduces the figure and reverses any milestone it proved. Derived means we calculated it from Verified records with the formula published here. Declared means the builder typed it and nobody checked.
Source:src/lib/metrics/provenance.tsDefinitions
Every figure Shipped publishes, and the arithmetic behind it.
- What Verified means
- Verified means the money moved through the payment provider the builder connected, and we computed the figure ourselves from those transactions. It does not prove the customer was unrelated to the builder, that the product was delivered, or that the money was kept — a refund or chargeback later reduces the figure and reverses any milestone it proved. Derived means we calculated it from Verified records with the formula published here. Declared means the builder typed it and nobody checked.Source:
src/lib/metrics/provenance.ts - Verified revenue
- Add up every customer payment, then subtract every refund and chargeback, each counted on the day it happened. Test-mode and sandbox records are dropped before anything is added.Source:
src/lib/metrics/revenue.ts - Monthly Recurring Revenue
- Take every active paid subscription, convert its charge to a monthly amount (weekly times 52 divided by 12, quarterly divided by 3, yearly divided by 12), and add them up. Subscriptions still in a trial, introductory, or promotional period are excluded until a paid renewal exists.Source:
src/lib/metrics/mrr.ts - 30-day MRR movement
- Compare today's subscriptions with the set of 30 days ago: new is what started, expansion is what grew, churned is what stopped or shrank.Source:
src/lib/metrics/mrr.ts - Currency conversion
- Every amount is converted to US dollars at the daily rate for the date of the transaction, not today's rate, and the original amount and currency are always kept and shown.Source:
src/lib/metrics/fx.ts - Traction Score
- A score out of 100 from six parts: recurring share of revenue (20), refund rate (15), customer concentration (15), 30-day revenue trend (20), 30-day search impressions trend (15), and ship streak (15). Each part scores between 0 and 1 and is multiplied by its weight. A trend whose previous 30 days were zero is treated as no data: it is dropped and the remaining weights are scaled back up to 100, so a first sale never reads as infinite growth. A trend scores full marks at double the previous period and half marks when flat.Source:
src/lib/metrics/score.ts - Flag: high refund rate
- Raised when refunds and chargebacks are more than 10% of gross revenue over the last 90 days.Source:
src/lib/metrics/flags.ts - Flag: customer concentration
- Raised when a single customer is more than 50% of revenue over the last 90 days.Source:
src/lib/metrics/flags.ts - Flag: single-day spike
- Raised when a single day is more than 60% of revenue over the last 30 days.Source:
src/lib/metrics/flags.ts - Flag: possible self-purchase
- Raised when a customer's email matches the builder's sign-up email, or shares its domain when that domain is not a public mailbox such as gmail.com. Emails are compared as one-way digests; we never store the address. Flags explain, they never hide a number.Source:
src/lib/metrics/flags.ts - Milestones
- First connection, first customer, first dollar, $100 / $1K / $10K MRR, 100 customers, 1K and 10K search impressions, and a 30-day ship streak. Each is stamped with the sync that found it and the payment that proved it. If that payment is later fully refunded or charged back the milestone is marked reversed — never deleted.Source:
src/lib/metrics/milestones.ts - Ship streak
- Consecutive days with at least one commit, counted back from today; a commit today or yesterday keeps the streak alive.Source:
src/lib/metrics/milestones.ts
Providers
The definitions above are the same for every provider, but providers do not all mean the same thing by an amount. A Merchant of Record collects and remits tax, so its total includes tax a gateway’s would not. Here is what Shipped reads from each one, and what it leaves out.
- Dodo Payments
- Dodo is a Merchant of Record, so the payment amount is what the customer paid including tax. Shipped counts that total as gross customer payment and does not subtract tax or Dodo's fee, because neither is reported per payment. MRR is Derived from subscription objects, since Dodo publishes no MRR figure.
- Stripe
- The charge amount is the gross customer payment. Stripe's processing fee lives on the balance transaction and is deliberately not read, so these are customer-paid figures rather than payouts. Refunds and disputes are counted separately and subtracted; a formal dispute counts against revenue from the moment it is raised, because the money has already left the balance, while an inquiry that has not become a dispute does not, because nothing has moved. A coupon in force on a subscription reduces its recurring amount, and a coupon that makes the plan free keeps it out of MRR entirely.
- Paddle
- Paddle is a Merchant of Record, so the transaction total is the gross customer payment with tax included, on the same basis as Dodo. Paddle's fee and your earnings are reported separately and are not subtracted. Refunds and chargebacks arrive as adjustments and are counted on the day they were raised, including Paddle's early chargeback warning, which has already taken the money back.
- Lemon Squeezy
- Lemon Squeezy is a Merchant of Record, so an order's total is counted as gross customer payment including tax, the same as Dodo. Lemon Squeezy has no refunds collection: a refund is reported on the order it reverses, so Shipped records it against that order and dates it by the refund date where there is one and by the order's last-updated time for a partial refund, which is the only date the API offers. Subscriptions carry no price, so the recurring amount and interval are read from the linked price object and the currency from the store.
- Polar
- Polar is a Merchant of Record, so an order's total is counted as gross customer payment including tax. A Polar refund reports its amount net of tax with the refunded tax beside it; Shipped adds the two back together so a full refund cancels the full payment exactly. Draft and void orders are never counted, because no money moved. MRR is Derived from subscription objects, since Polar publishes no MRR figure.
- RevenueCat
- RevenueCat reports what the customer paid in the App Store or Play Store, so the amount is the gross store price before Apple's or Google's commission, which RevenueCat does not break out per purchase. Sandbox purchases are dropped rather than stored. RevenueCat publishes its own MRR, which Shipped records beside the figure it computes itself so the two can be compared rather than silently reconciled.
Constants
Every threshold and weight the platform uses, from src/lib/metrics/constants.ts.
Flag thresholds
- High refund rate
- above 10% of gross over 90 days
- Customer concentration
- one customer above 50% of revenue over 90 days
- Single-day spike
- one day above 60% of revenue over 30 days
- Possible self-purchase
- a customer email matching the builder's, or sharing its domain when that domain is not one of gmail.com, outlook.com, yahoo.com, icloud.com, hotmail.com, proton.me
Traction Score weights, out of 100
- recurring share
- 20
- refund rate
- 15
- concentration
- 15
- revenue trend
- 20
- impressions trend
- 15
- ship streak
- 15
- Trend window
- 30 days against the 30 before them
- Full credit for a trend
- 2x the previous period
Milestone thresholds
- first connection
- 1
- first customer
- 1
- first dollar
- $0.01
- mrr 100
- $100
- mrr 1k
- $1,000
- mrr 10k
- $10,000
- customers 100
- 100
- impressions 1k
- 1000
- impressions 10k
- 10000
- ship streak 30
- 30 consecutive days with a commit
Changelog
Every change to a definition, with the date it took effect. Entries are never rewritten.
Version 1.0.0 · effective 8 Sep 2026
First published set of definitions.
- Verified revenue, MRR, 30-day MRR movement, and currency conversion published as computed by Shipped rather than read from a provider summary.
- Traction Score published with its six components and their weights, and with the rule that a trend against a zero baseline is dropped and the remaining weights renormalised.
- The four anomaly flags published with their thresholds: refunds above 10% of gross over 90 days, one customer above 50% of 90-day revenue, one day above 60% of 30-day revenue, and a customer email matching the builder's own.
- The ten detected milestones published, each stamped with the snapshot and the payment that proved it, and reversed rather than deleted when that payment is refunded.
Numbers on a project page carry a Verified, Derived, or Declared mark that links back here. See them in use on the leaderboard.