Skip to content

Organizational case study

Conversion rate: two dashboards, one label, incompatible truth

Marketing and Product both report “conversion rate” — and disagree by ~8pp.

In a SaaS/e-commerce org, Growth Marketing and Product Analytics both ship a tile named Conversion Rate. Leadership sees different numbers in the same weekly meeting. Neither definition is “wrong” in isolation — they answer different questions with the same label.

Conflicting definition

Growth Marketing

Dashboard tile: Conversion Rate · reported 4.8%

Formula
paid_orders / unique_users
Grain
user-month
Filters
exclude internal emails only
Numerator
Any paid order in the calendar month
Denominator
Unique users who visited the site that month

Mixes sessions and users; includes unpaid returning browsers; inflates the base and hides funnel drop-offs.

Conflicting definition

Product Analytics

Dashboard tile: Conversion Rate · reported 12.6%

Formula
completed_checkouts / qualified_sessions
Grain
qualified_session
Filters
exclude bots, staff, and incomplete tracking
Numerator
Sessions with a completed paid checkout
Denominator
Sessions that reached product detail with valid tracking

Narrower funnel — higher rate, but not comparable to Marketing’s user-month view.

Resolved by contract

Taxa de conversão

Keep one public label (“Taxa de conversão”) with an explicit session-grain contract. Marketing keeps a separate contract for “user-month purchase rate” if still needed — different slug, different tile.

Agreed formula
count(distinct paid_order_id) / count(distinct qualified_session_id)
Agreed grain
qualified_session (session that reached PDP with valid tracking)
Agreed filters
exclude bots, staff accounts, and sessions with incomplete tracking
Owner
Bruno Costa (Growth Analytics)
  • Stops board-meeting number fights caused by shared labels
  • Forces numerator/denominator and grain into a reviewable artifact
  • Creates a Markdown/dbt handoff so wiki and semantic layer stay aligned
  • Makes misuse explicit via incorrect-usage examples on the contract

3–5 minute demo script

  1. 01Show the two conflicting definitions side by side
  2. 02Open the resolved Taxa de conversão contract
  3. 03Point at grain, filters, and incorrect usage example
  4. 04Submit for review → show version history / diff
  5. 05Export Markdown + dbt YAML as the handoff artifact