Core concepts

Metrics & ownership

Two tools will happily report visitors, and their numbers will disagree. Rather than average them, add them, or pick one at random, every canonical field has exactly one owner — and the rest is context.

One owner per field

Each day's snapshot records which source wrote each field. A repeated sync replaces that provider's own fields; it never adds to them, so a sync that runs twice cannot double your MRR.
MetricOwner, in order of precedence
MRR, churn, new customers, failed payments, refundsThe active primary billing source: Stripe → Polar → Paddle → Lemon Squeezy → Dodo → Easytools.
Unique visitors, pageviews, visitor growthSeiton snippet → GA4 → PostHog.
Active days, stickiness, activationPostHog → Seiton snippet.
Organic clicks, impressions, CTR, positionGoogle Search Console.
Error volume, checkout errors, crash-free sessionsSentry.
Deploy success rate, deploy failuresVercel → GitHub.
Database and platform incidentsSupabase → Cloudflare.
Edge error rateCloudflare.
Operating margin, estimated profitBilling MRR minus the monthly costs you enter.

The rules this enforces

  • Never summed. The snippet and GA4 both counting visitors does not produce twice the traffic — the snippet wins and GA4 stays context.
  • Cloudflare requests are not visitors. Edge request volume never becomes a traffic number.
  • CRM contacts are not customers. HubSpot writes no billing field, ever.
  • Easytools does not double-count Stripe. It runs on your Stripe account, so with Stripe primary it adds checkout context and no MRR.
  • Issue counts are not engagement. Linear and Resend connect for context and write no health metric at all.

Freshness decides what counts

A field is only used while the source that owns it is still trusted.
StateMeaningEffect on the score
HealthyLast successful sync is inside the provider's staleness window.Counted.
PartialThe source is degraded but still reporting.Counted, with lower confidence.
StaleNo successful sync inside the window — six hours for billing, two for error and infra sources, a day for Search Console.Dropped. The dimension goes back to insufficient data.
Error / revokedCredentials rejected, or you revoked them at the provider.Dropped, and the Integrations page says why.
No dataNever synced.Nothing to drop — the dimension has never scored.

Dropped means missing, not zero

When an owner stops being trusted its fields disappear from scoring instead of decaying to 0. That is the difference between "we cannot see your revenue" and "your revenue is gone", and only one of those should wake you up.

Windows and comparisons

Metric tiles carry their own window — now for MRR, 30d for churn, visitors and organic, 24h or 7d for errors. Deltas compare against the baseline snapshot, which is the previous week, and are shown in percent for counts and in percentage points for rates.

Every window is computed in the project's timezone, so "today" means the same thing to you and to the engine. Per-source detail — what each provider writes and how fast it goes stale — is on the integration pages.