GASP
Product Usage Metrics Leading

Trial-to-Paid Conversion Rate

Trial-to-Paid Conversion Rate: The percentage of trials that ended in the period and became paying customers.

Formula

Trial-to-Paid Conversion Rate = Trials converted / Trials ended (converted + expired + cancelled) × 100

Computable definition

The canonical formula in the GASP formula grammar. The MCP server compiles it to SQL over the datasets listed below.

count_distinct(field.trial_id where field.trial_status = 'converted' and in_period(field.trial_end_date)) / count_distinct(field.trial_id where field.trial_status in ('converted', 'expired', 'cancelled') and in_period(field.trial_end_date))

Unit: percent (the formula yields an unscaled ratio)

By start date variant
all_time(count_distinct(field.trial_id where field.trial_status = 'converted' and in_period(field.trial_start_date))) / all_time(count_distinct(field.trial_id where in_period(field.trial_start_date)))

Notes: Trials are counted by the date they ended (the trial dataset's date), so every trial in the denominator has an outcome; a trial that converts ends on the day it converts. The by_start_date variant counts trials started in the period, lifting the end-date period filter with all_time(); it understates recent periods while trials are still running.

Data requirements

Grain: Per event, aggregate monthly · Frequency: Daily · Aggregation: aggregate (month) · Staged: no · Main source: Billing.

Field Dataset Type
trial_end_date trial date
trial_id trial string
trial_status trial string
Example SQL (Postgres)
SELECT (CAST((SELECT COUNT(DISTINCT trial_id) FROM trial WHERE trial_end_date >= :period_start AND trial_end_date <= :period_end AND (trial_status = 'converted' AND (trial_end_date >= :period_start AND trial_end_date <= :period_end))) AS DOUBLE PRECISION) / NULLIF((SELECT COUNT(DISTINCT trial_id) FROM trial WHERE trial_end_date >= :period_start AND trial_end_date <= :period_end AND (trial_status IN ('converted', 'expired', 'cancelled') AND (trial_end_date >= :period_start AND trial_end_date <= :period_end))), 0)) AS trial_to_paid_conversion_rate

Access: recommended sensitivity tier internal, access scope unscoped. Guidance your policy engine enforces.

From an agent: with the GASP MCP server, call lookup_metric({ "name": "Trial-to-Paid Conversion Rate" }) or generate_query({ "metric": "Trial-to-Paid Conversion Rate", "adapter": "<your adapter JSON>" }).

Benchmarks

  • Opt-in free trial (no card): 10-25% (per OpenView / Lenny's PLG benchmarks)
  • Opt-out trial (card required): 40-60%
  • Freemium to paid: 2-5%

What It Tells You

Whether the product sells itself once someone tries it. It is the first conversion metric of a product-led motion. Read it with [Activation Rate](#activation-rate), since trials that never activate rarely convert.

Connected in the GASP relationship graph.

Downstream: what this drives

  • Trial-to-Paid Conversion Rate drives New Customers (Core)
  • Trial-to-Paid Conversion Rate measures Customer (Entity)

Try searching for:

↑↓navigate↵select