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.
Related Metrics
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)