How Revinho defines revenue, growth, and attribution
The evidence contract behind Revinho: source ownership, reporting periods, revenue and MRR definitions, currency handling, and attribution limits.
An analytics product becomes trustworthy when the same input produces the same answer and the reader can see why. That requires more than connecting APIs. It requires a written contract for source ownership, time, money, data freshness, and uncertainty.
This page is that contract for Revinho. It explains what each connected system contributes, how the primary business metrics are calculated, and where the evidence stops.
Which system owns each fact
Revinho does not average conflicting systems together. It assigns responsibility.
Stripe is the source of truth for revenue. Successful payments, refunds, subscriptions, products, prices, customers, and recurring-revenue movements come from Stripe records.
GA4 is the source for acquisition and behavior. Sessions, users, channels, sources, campaigns, landing pages, engagement, and configured key events come from the selected GA4 property.
Google Search Console is the source for organic search visibility. Queries, pages, clicks, impressions, CTR, and average position come from the selected Search Console property.
These responsibilities matter whenever totals disagree. A GA4 purchase event is useful behavior evidence, but it does not replace the Stripe payment ledger. Search Console impressions describe visibility on Google; they are not a general keyword-volume estimate.
How reporting periods work
Revinho stores timestamps in UTC and reports data using the workspace's configured timezone. A selected period is compared with the immediately preceding period of equal length.
For example, a 30-day report ending July 30 is compared with the previous 30 complete days. The product shows both absolute and percentage changes because either number can be misleading alone:
- A rise from 1 session to 2 sessions is a 100% increase but only one additional visit.
- A rise from 10,000 to 10,500 sessions is only 5% but represents 500 additional visits.
Search Console is a special case. Google assigns Performance data to Pacific Time, while GA4 uses the property's reporting timezone. A day-level comparison can therefore place the same real-world activity on adjacent dates. The Search Console data documentation describes this difference directly.
How revenue is calculated
Revinho's operating revenue view begins with successful, paid, non-disputed Stripe charges.
gross revenue = successful paid charges
net revenue = gross revenue - refunds
Refunds remain visible as their own measure. Netting them into revenue without showing them would hide an important change in customer behavior.
Every financial fact is stored as an integer in the currency's minor unit. For a two-decimal currency, 1000 represents 10.00. For a zero-decimal currency such as JPY, 1000 represents 1,000. Stripe documents these minor-unit rules.
How MRR is calculated
Monthly recurring revenue is a snapshot of normalized recurring commitments, not cash collected during a month.
Revinho includes fixed recurring amounts from subscriptions in active or past_due status. It excludes trials, free prices, metered prices, tax, and one-off invoice items.
Intervals are normalized to a month:
- A €20 monthly plan contributes €20 MRR.
- A €240 annual plan contributes €20 MRR.
- A one-off €240 payment contributes revenue but no MRR.
Subscription transitions create immutable new, expansion, contraction, reactivation, or churn movements. The current Revenue surface exposes new and churned MRR alongside the total. Stripe's own Billing analytics definitions also distinguish MRR from collected revenue and document how subscription status and discounts affect its figures.
How currencies are handled
Imported Stripe facts never lose their original amount or currency. Revinho converts them only at the reporting boundary into the workspace currency.
Production conversion uses dated Stripe reference-rate snapshots. The converted result is a reporting estimate, not a rewritten source fact or a settlement value. If a current rate cannot be fetched, Revinho can use a retained snapshot within its documented window and labels that context. If no valid rate exists, the native amount remains visible rather than being silently treated as zero.
This boundary avoids two common mistakes: adding unlike currencies together and permanently overwriting historical source amounts with today's exchange rate.
What attribution labels mean
Revinho defines three provenance levels:
Verified
A deterministic identifier or trustworthy ecommerce record connects the behavior to the commercial outcome. The join can be reproduced.
Modeled
A documented method estimates the relationship. Its assumptions, window, and confidence are explicit.
Associated
Facts share a reporting period, page, cohort, or segment without a deterministic user-level connection.
The current Revinho acquisition and page surfaces use associated revenue context. They can show that organic sessions increased while Stripe revenue also increased during the same period. They do not claim the traffic produced that revenue.
Verified and modeled are part of the provenance vocabulary, not a promise that every workspace currently receives those forms of attribution.
How opportunities are produced
Revinho begins with deterministic rules, not model-generated discoveries. Rules evaluate normalized data for patterns such as:
- material traffic changes;
- a falling visitor-to-key-event rate;
- revenue or MRR anomalies;
- fast-growing sources;
- high-traffic pages with weak conversion;
- hidden winners;
- organic decay;
- SEO striking-distance pages.
Each stored result contains the rule, reporting period, measurements, score, and evidence that produced it. The same inputs should reproduce the same result. Narrative summaries may make evidence easier to read, but they must not invent the underlying fact.
Freshness, corrections, and syncs
Provider data is not always final when it first appears. Google says GA4 processing can take 24–48 hours and that reports may change during that period. Search Console normally publishes collected data after a delay and can omit low-volume query rows for privacy.
Revinho imports normalized facts with stable provider identities, stored cursors, and idempotent writes. Scheduled imports update acquisition and search data. Stripe webhooks provide prompt commercial updates, while reconciliation repairs missed or out-of-order events.
The interface should show connection health, the last successful sync, and important partial or stale states. A dashboard without freshness context can look precise while describing an incomplete day.
What Revinho cannot prove
Without a deterministic identity path, Revinho cannot prove:
- that a specific channel caused a payment;
- that a page generated the revenue seen in the same period;
- that an annotation caused a chart movement;
- that a Search Console impression represents total market demand;
- why an individual customer upgraded, churned, or requested a refund.
Those limits do not make the combined data useless. They define the questions it can answer responsibly: what changed, which evidence moved with it, and where a founder should investigate next.