Headlessly

Experiment

A/B test pricing, onboarding, and features. Roll out progressively. Measure with real revenue data.

Don't guess. Test. headless.ly connects experimentation directly to revenue -- because Experiments, FeatureFlags, Funnels, and Stripe billing all live in the same graph.

import { Experiment, FeatureFlag } from '@headlessly/experiments'

// A/B test pricing with real Stripe revenue as the metric
await Experiment.create({
  name: 'Pricing v2',
  type: 'ABTest',
  variants: ['$29', '$49'],
  metric: 'mrr',
})

// Progressive feature rollout
await FeatureFlag.create({ key: 'new-onboarding', rollout: 25 })
await FeatureFlag.rollout({ key: 'new-onboarding', percentage: 50 })
await FeatureFlag.rollout({ key: 'new-onboarding', percentage: 100 })

Key Entities

EntityPurposeKey Verbs
ExperimentA/B tests on pricing, onboarding, featuresstart, stop, declare
FeatureFlagProgressive rollouts, beta accessenable, disable, rollout
FunnelConversion flows -- signup to activate to payanalyze, compare

Real Revenue as the Metric

Most experimentation tools measure clicks and pageviews. headless.ly measures actual Stripe revenue:

import { Experiment } from '@headlessly/experiments'

// Analyze the pricing experiment
const result = await Experiment.analyze({ id: 'exp_qR7wNxBt' })
// {
//   variants: [
//     { name: '$29', conversions: 45, mrr_impact: 1305 },
//     { name: '$49', conversions: 31, mrr_impact: 1519 },
//   ],
//   winner: '$49',
//   confidence: 0.94,
// }

// Declare the winner
await Experiment.declare({ id: 'exp_qR7wNxBt', winner: '$49' })

Funnel Analysis

Track the full revenue pipeline:

import { Funnel } from '@headlessly/analytics'

await Funnel.analyze({ id: 'funnel_pK3xMwDv' })
// visitor -> signup -> activated -> trial -> paid
// 10,000 -> 890 -> 340 -> 120 -> 45
// Conversion: 0.45%

Events come from the browser SDK (forwarded to PostHog + stored in lakehouse). Revenue comes from Stripe. The funnel connects both.

On this page