Feature adoption is what separates successful product launches from features that quietly collect dust. Without clear visibility into how many of your users are actually using a new feature, you're flying blind on product decisions. Amplitude makes it straightforward to measure adoption by analyzing event data.
Set Up Event Tracking for Your Feature
The foundation of adoption measurement is accurate event tracking. You need to emit an event every time a user interacts with your feature.
Define your feature event
Pick a clear event name that represents the core action—something like feature_used or export_completed. Avoid generic names like button_clicked. Include relevant properties that will help you segment later, like feature version or user plan tier.
amplitude.logEvent('csv_export_completed', {
feature_name: 'bulk_export',
feature_version: 'v2',
user_plan: 'pro',
export_size: 1500
});Verify events are flowing
Go to Analytics > Events and search for your event name. Click on it to view the event details, properties, and a sample of recent occurrences. Make sure the properties are being captured correctly before building adoption calculations on top.
// Validate events via REST API
fetch('https://api.amplitude.com/2/events', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}).then(res => res.json())
.then(data => console.log(`Event count: ${data.data.length}`));Calculate Adoption Rate Using SQL
Once events are flowing, use SQL to compute the exact adoption percentage. This gives you precise control over the calculation and time windows.
Write a basic adoption query
Query the events table to count distinct users who triggered your feature event. Divide by total active users to get the adoption rate. Use DATE_TRUNC to specify a time window (last 30 days, last quarter, etc.).
SELECT
COUNT(DISTINCT user_id) as feature_users,
(SELECT COUNT(DISTINCT user_id) FROM events
WHERE event_time >= DATE_TRUNC('day', NOW() - INTERVAL '30 days'))
as total_users,
ROUND(100.0 * COUNT(DISTINCT user_id) /
(SELECT COUNT(DISTINCT user_id) FROM events
WHERE event_time >= DATE_TRUNC('day', NOW() - INTERVAL '30 days')), 2)
as adoption_rate_percent
FROM events
WHERE event_type = 'csv_export_completed'
AND event_time >= DATE_TRUNC('day', NOW() - INTERVAL '30 days');Track adoption trends over time
Add time-based grouping to see if adoption is climbing, plateauing, or declining. This is critical for understanding whether your feature is gaining momentum or losing interest.
SELECT
DATE_TRUNC('week', FROM_UNIXTIME(event_time/1000)) as week,
COUNT(DISTINCT user_id) as adopters_this_week,
ROUND(100.0 * COUNT(DISTINCT user_id) /
(SELECT COUNT(DISTINCT user_id) FROM events
WHERE DATE_TRUNC('week', FROM_UNIXTIME(event_time/1000)) =
DATE_TRUNC('week', FROM_UNIXTIME(event_time/1000))), 2)
as weekly_adoption_rate
FROM events
WHERE event_type = 'csv_export_completed'
GROUP BY DATE_TRUNC('week', FROM_UNIXTIME(event_time/1000))
ORDER BY week DESC;Segment Adoption by User Cohorts
Raw adoption numbers don't tell you everything. Break down adoption by user segment—pricing tier, signup date, region—to identify where traction is strongest.
Create a cohort of feature adopters
Go to Cohorts and click Create new cohort. Add a rule: Event = csv_export_completed. Set the time window (e.g., last 30 days). Name it clearly, like CSV Export Adopters - 30d. This creates a dynamic list of users who completed the action.
// Query cohort membership via API
fetch('https://api.amplitude.com/api/3/cohort/YOUR_COHORT_ID/members', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
}).then(res => res.json())
.then(data => console.log(`Cohort size: ${data.results.length} users`));Compare adoption across segments
In Analytics > Segmentation, add your feature event. Use Add property to break down adoption by user properties like plan tier, signup cohort, or country. Create side-by-side cohorts for each segment to compare adoption rates directly.
SELECT
user_properties['plan_tier'] as plan,
COUNT(DISTINCT user_id) as total_users_in_plan,
COUNT(DISTINCT CASE WHEN event_type = 'csv_export_completed'
THEN user_id END) as adopters,
ROUND(100.0 * COUNT(DISTINCT CASE WHEN event_type = 'csv_export_completed'
THEN user_id END) / COUNT(DISTINCT user_id), 2) as adoption_rate
FROM events
WHERE event_time >= DATE_TRUNC('day', NOW() - INTERVAL '30 days')
GROUP BY user_properties['plan_tier']
ORDER BY adoption_rate DESC;Common Pitfalls
- Using vague event names like
clickedorviewedthat overlap across multiple features. Namespace them clearly (e.g.,csv_export_completed,bulk_delete_initiated) so you measure the right action. - Conflating 'viewed' with 'adopted.' Users might see your feature in the UI but never actually use it. Define adoption as completing a meaningful action, not just exposure.
- Forgetting to filter out internal users, test accounts, or QA activity from adoption calculations. Add filters like
user_id NOT IN ('test_user_1', 'test_user_2')oruser_properties['is_internal'] = false. - Checking adoption metrics too early. Features take 2-4 weeks to build momentum. Measuring adoption in week one can give you false negatives and lead to premature kills.
Wrapping Up
You now have multiple ways to measure feature adoption in Amplitude: track it with events, calculate rates with SQL queries, and break down adoption by user cohorts. The key is defining adoption clearly from the start (viewed vs. used vs. loved) and checking trends regularly to catch momentum shifts early. If you want to track this automatically across tools, Product Analyst can help.