Growthbook Experiments Tracker avatar

Growthbook Experiments Tracker

Pricing

Pay per usage

Go to Apify Store
Growthbook Experiments Tracker

Growthbook Experiments Tracker

Rising star

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Tomáš Katz

Tomáš Katz

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

17 days ago

Last modified

Categories

Share

Internal Apify Actor that fetches experiments from the GrowthBook REST API, runs a set of health checks on them, and posts a status digest to Slack. Built to keep the experiments used by apify-core and apify-web honest — following the practices from the "GrowthBook at Apify" wiki page.

What it reports

Each run covers three groups (all filterable by tags, owner, and project):

  • Running experiments — the core status list, with owner, days running, traffic coverage, and exposed users. Experiments whose rule is not enabled in the production environment are marked staging only and exempt from the running-too-long check. Because GrowthBook records no date for the production switch, the tracker remembers it itself (named key-value store growthbook-experiments-state): for experiments first seen as staging-only, "days running" starts the day the production rule turns on; for experiments already in production when first tracked, it falls back to the phase start.
  • Stale drafts — drafts created long ago but never launched (optional).
  • Recently stopped — experiments stopped within the lookback window (optional).

Health checks

CheckSeverityMeaning
decided-but-running🔴 criticalResult is documented (won/lost/inconclusive) but the experiment still runs — burning billed exposure events
running-too-long🟠 warningCurrent phase exceeds maxRunningDays (escalated wording at 100% traffic)
high-exposure🟠 warningMore users exposed than maxExposedUsers
sample-ratio-mismatch🟠 warningSRM p-value < 0.001 in the latest analysis — bucketing is likely broken (e.g. missing hash attribute)
overdue-status-update🟡 attentionThe scheduled status update date has passed
stale-draft🟡 attentionDraft older than staleDraftDays, never launched
stopped-without-conclusion🟡 attentionStopped recently with no documented winner/conclusion
missing-hypothesis🔵 hygieneRunning without a hypothesis
no-tags🔵 hygieneRunning without tags (convention: tag with team + surface)
no-owner🔵 hygieneNo owner assigned

Input

See the Input tab / .actor/input_schema.json. The important ones:

  • growthbookToken (required, secret) — GrowthBook REST API secret key (secret_...). Org-scoped, created under GrowthBook → Settings → API Keys.
  • tags, owner, projectId — optional GrowthBook filters.
  • includeStagingOnly — set false to hide running experiments not yet enabled in production (their production start is tracked either way).
  • maxRunningDays, staleDraftDays, recentlyStoppedDays, maxExposedUsers — health-check thresholds.
  • slackToken (secret) + slackChannel — when both set, the report is posted to Slack. Without them, the run just logs the report and fills the dataset. The bot needs chat:write (plus users:read and users:read.email to @mention experiment owners by their GrowthBook email) and must be a member of the channel.

Output

  • Slack: one channel message (summary counts, issues sorted by severity with owner mentions, running-experiments list) and per-experiment detail cards in its thread.
  • Dataset: one record per experiment with status, phase, exposure, result, and detected issues[] — usable by other integrations.

Development

npm install
npm test # unit tests for the health checks
npm run lint
apify run # local run; input from storage/key_value_stores/default/INPUT.json
apify push # deploy

The local INPUT.json is gitignored-friendly — never commit real tokens.