Plausible: the product plan

A product plan on ProductBrain: 5 goals, 15 needs, 41 approaches, 47 jobs. Goals hold the why, needs the user problems, approaches the bets, jobs the checkpoints. This is a live, read-only ProductBrain plan; the interactive tree and matrix load when scripts run.

how this plan was built (the full agent transcript) · all public plans · ProductBrain

Goal: Measure the web without surveilling people

Privacy-first analytics that stays accurate and trustworthy without cookies, personal data, or cross-site tracking.

  • need: Count visitors accurately without cookies or personal data

    Sessionize and count real humans from raw requests alone — no cookies, no identifiers, no IP storage.

    • approach: Cookieless sessionization & pageview counting (resolved)
    • approach: Bot, spam & datacenter-IP filtering (validation)
    • approach: Interaction-aware bounce & engagement accuracy (development)
      • job: Custom events can be flagged non-interactive in the tracker and events API (done, phase: Later)
      • job: A session with fewer than 2 pageviews and no interactive event counts as a bounce (done, phase: Later)
      • job: Non-interactive events no longer flip a session to interactive (phase: Deeper, more trustworthy reporting)
  • need: Stay compliant with privacy law by design

    GDPR, CCPA and PECR compliance must be a property of the data model, not a consent banner bolted on top.

    • approach: Zero-PII, cookieless data model (resolved)
    • approach: EU-only data processing for Cloud (resolved)
  • need: Let site owners control what gets measured

    Owners need to exclude their own and unwanted traffic so the numbers they act on are clean.

    • approach: Traffic shields: exclude by IP, country, page & hostname (resolved)

Goal: Give teams answers at a glance

Every key insight on one fast, clutter-free dashboard that needs no training or custom report-building.

  • need: Surface every key insight on one fast page

    All the metrics a team acts on — top stats, trend, sources, pages, audience, goals — on a single page with no menu-diving.

    • approach: Audience: geography & device breakdowns (resolved)
    • approach: Realtime visitors view (resolved)
    • approach: Goals, conversions & custom properties (resolved)
    • approach: Single-page dashboard: top stats & main graph (resolved)
    • approach: Sources & acquisition reporting (development)
      • job: Sources report breaks traffic down by referrer and UTM campaign/source/medium (done, phase: Later)
      • job: Search terms appear for sessions arriving from search engines (done, phase: Later)
      • job: Traffic is grouped into recognizable acquisition channels (done, phase: Later)
      • job: 'AI Assistants' appears as an acquisition channel (phase: Deeper, more trustworthy reporting)
      • job: Top referrers and Search terms render beside the other Sources tabs (phase: Deeper, more trustworthy reporting)
    • approach: Pages, entry/exit & content reporting (development)
      • job: Pages report can break down by full URL (hostname + path), not just path (phase: Deeper, more trustworthy reporting)
      • job: Page-filtered Top Stats show bounce rate even when imported data is included (phase: Deeper, more trustworthy reporting)
      • job: Page-filtered Top Stats show time on page even when imported data is included (phase: Deeper, more trustworthy reporting)
      • job: Top pages, entry pages and exit pages each report with per-page metrics (done, phase: Later)
  • need: Let analysts slice, compare and roll up the data

    Filter, save segments, compare periods, and aggregate across sites without leaving the dashboard.

    • approach: Filtering & saved segments (validation)
    • approach: Time periods & comparisons (development)
      • job: Any period can be compared against the previous period with up/down deltas (done, phase: Later)
      • job: 'Last 24 Hours' is selectable in the dashboard picker and Stats API v2 (phase: Dashboard & graph refresh)
      • job: Comparisons against 'Today' align to the same time range (phase: Dashboard & graph refresh)
      • job: Incline/decline percentages render in top stats in comparison mode (phase: Dashboard & graph refresh)
    • approach: Consolidated views across multiple sites (development)
      • job: An owner can define a consolidated view over a chosen set of sites (phase: Later)
      • job: The dashboard aggregates stats across all sites in a consolidated view (phase: Later)
      • job: Stats API v2 /query accepts a consolidated view as its target (phase: Later)
  • need: Keep the dashboard fast, legible and modern

    The interface itself is the product; it must stay quick, readable in light and dark, and pleasant to look at.

    • approach: Dashboard & graph UI refresh (development)
      • job: Dark mode uses the refined darker color scheme with clearer hierarchy (done, phase: Later)
      • job: Top bar and top stats use the redesigned styling (phase: Dashboard & graph refresh)
      • job: Graph interval picker, export, imports toggle and notices live in one top-bar options menu (phase: Dashboard & graph refresh)
      • job: A vertical indicator line marks the hovered or selected point on the graph (phase: Dashboard & graph refresh)
      • job: Graph tooltip anchors to the top of the chart beside the hovered point (phase: Dashboard & graph refresh)
    • approach: Timeline annotations on the graph (development)
      • job: A user can add a dated annotation to a site (phase: Timeline annotations)
      • job: Annotations render as markers on the visitors graph (phase: Timeline annotations)
      • job: Clicking an annotation marker shows its note (phase: Timeline annotations)
      • job: Annotations can be edited and deleted (phase: Timeline annotations)
  • need: Deliver and share insight beyond the dashboard

    Push insight to people who never open the app — scheduled reports, alerts, and public share links.

    • approach: Weekly & monthly email and Slack reports (resolved)
    • approach: Traffic spike & drop notifications (resolved)
    • approach: Shared links & public dashboards (validation)

Goal: Fund the product through subscriptions, not surveillance

A sustainable, independent business: premium Cloud features, team accounts, and honest subscription billing instead of ad-tech.

  • need: Manage teams, roles and access

    Multiple people per account with scoped roles, invitations, and secure sign-in.

    • approach: Teams, roles & invitations (validation)
      • job: Owners invite members and guests with scoped roles (done, phase: Later)
      • job: A member can leave a team from Team Settings (done, phase: Later)
      • job: A site owner can transfer a site to another team (done, phase: Later)
      • job: Team switching happens from the topbar dropdown (standalone switcher page removed) (phase: Later)
      • job: Removing a member or changing a team role behaves correctly (phase: Later)
    • approach: Two-factor auth & account security (resolved)
  • need: Convert and bill Cloud subscribers

    Turn trials into paying subscriptions and handle plans, limits and dunning without friction.

    • approach: Paddle subscriptions & plan management (resolved)
    • approach: Usage quotas, limits & grace periods (resolved)
  • need: Justify premium with team-grade capabilities

    Give paying teams features worth paying for: funnels, revenue, enterprise SSO, and a provisioning API.

    • approach: Conversion funnels (premium) (resolved)
    • approach: Ecommerce revenue goals & attribution (premium) (validation)
    • approach: Enterprise SSO / SAML for teams (development)
      • job: A team admin configures a SAML integration with IdP metadata (phase: Enterprise SSO)
      • job: A team verifies ownership of an email domain for SSO (phase: Enterprise SSO)
      • job: Users at a verified domain sign in via SAML SSO (phase: Enterprise SSO)
      • job: A team can enforce SSO and centrally manage or revoke SSO sessions (phase: Enterprise SSO)
    • approach: Sites provisioning API (premium) (resolved)

Goal: Make adopting Plausible — and building on it — effortless

Two-minute install, painless migration off Google Analytics, and open APIs so anyone can build on their own data.

  • need: Get tracking live in minutes

    From sign-up to first pageview should take one snippet and a verification check — no developer required.

    • approach: Lightweight tracker script & snippet (resolved)
    • approach: Next-gen configurable tracker (validation)
      • job: A site-specific dynamic tracker script is generated and served per site (done, phase: Later)
      • job: The script tracks outbound links, file downloads and 404s from config with no code changes (done, phase: Later)
      • job: The script tracks form submissions when enabled (done, phase: Later)
      • job: plausible.init() overrides tracking options page-by-page (done, phase: Later)
      • job: Scroll-depth tracking uses ResizeObserver instead of polling (no forced reflows) (phase: Deeper, more trustworthy reporting)
    • approach: Guided installation & verification (validation)
  • need: Bring history and existing tools across

    Nobody switches if they lose their history; import GA and connect the tools teams already use.

    • approach: Google Analytics 4 import (resolved)
    • approach: CSV import/export & full-site export (resolved)
    • approach: Google Search Console integration (resolved)
  • need: Let developers build on the data

    Expose the stats and site management through documented, versioned APIs so teams can automate and integrate.

    • approach: Public Stats API v1 (resolved)
    • approach: Stats API v2 query language (validation)
      • job: POST /query returns composable metric+dimension+filter results validated against the JSON schema (done, phase: Later)
      • job: include.trim_relative_date_range trims empty trailing buckets for day/month/year (done, phase: Later)
      • job: Revenue metrics (total_revenue, average_revenue) can be queried with visit dimensions (phase: Stats API v2 depth)
      • job: views_per_visit can be queried with a time dimension (phase: Stats API v2 depth)
      • job: An empty filter-clauses list is rejected with a clear error (phase: Stats API v2 depth)
    • approach: Plugins API & outbound webhooks (resolved)

Goal: Serve managed Cloud and self-hosters from one codebase

Ship both a hosted service and an open-source Community Edition from the same code, and run Cloud reliably at scale.

  • need: Ship a self-hostable Community Edition

    A free, open-source build anyone can run on their own server, with the edition split kept clean.

    • approach: Community Edition distribution (resolved)
    • approach: Edition split & premium gating (resolved)
  • need: Operate Cloud reliably at scale

    Ingest and query high event volumes with headroom, and see what the system is doing in production.

    • approach: ClickHouse ingest & query pipeline (resolved)
    • approach: Observability: OpenTelemetry, PromEx & Sentry (resolved)

Make yours · Made with ProductBrain