App Analytics

Stripe provides built-in analytics for published marketplace apps, giving you visibility into installs, listing performance, and user engagement. You can also build custom analytics using webhooks and the Stripe API.

Available Reports

The Stripe Dashboard provides the following analytics for your published app:

Install Metrics

MetricDescription
InstallsTotal number of new app installations in the selected period
UninstallsTotal number of app uninstallations in the selected period
Cumulative Net InstallsRunning total of installs minus uninstalls over time

Listing Performance

MetricDescription
Listing ViewsTotal page views of your app’s marketplace listing
Unique ViewsUnique visitors who viewed your marketplace listing
MoM Conversion RateMonth-over-month percentage of listing viewers who install the app

Growth Metrics

MetricDescription
MoM Growth RateMonth-over-month growth in net installs
Churn RatePercentage of installed users who uninstall per month

Data Freshness

Caution

Analytics data has a 48-hour lag. The data you see in the dashboard reflects activity from approximately two days ago. Plan your reporting windows accordingly.

  • Data is updated daily with a 48-hour processing delay
  • Historical data is available from the date your app was first published
  • Metrics are calculated in UTC timezone
  • Export data as CSV from the Stripe Dashboard for external analysis

Accessing Analytics via API

You can programmatically access app analytics using the Stripe Reporting API:

Install Data

Terminal window
# Fetch app install report
curl https://api.stripe.com/v1/reporting/report_runs \
-u sk_live_xxxxx: \
-d "report_type=app.installs.daily" \
-d "parameters[interval_start]=1709251200" \
-d "parameters[interval_end]=1711929600" \
-d "parameters[app_id]=com.tajo.brevo-integration"

Listing Views

Terminal window
# Fetch listing views report
curl https://api.stripe.com/v1/reporting/report_runs \
-u sk_live_xxxxx: \
-d "report_type=app.listing_views.daily" \
-d "parameters[interval_start]=1709251200" \
-d "parameters[interval_end]=1711929600" \
-d "parameters[app_id]=com.tajo.brevo-integration"

Programmatic Access (Node.js)

const stripe = require('stripe')('sk_live_xxxxx');
// Create a report run for app installs
const reportRun = await stripe.reporting.reportRuns.create({
report_type: 'app.installs.daily',
parameters: {
interval_start: Math.floor(new Date('2025-03-01').getTime() / 1000),
interval_end: Math.floor(new Date('2025-03-31').getTime() / 1000),
app_id: 'com.tajo.brevo-integration',
},
});
// Poll for report completion
const checkReport = async (reportId) => {
const report = await stripe.reporting.reportRuns.retrieve(reportId);
if (report.status === 'succeeded') {
// Download the report file
const file = await stripe.files.retrieve(report.result.id);
console.log('Report URL:', file.url);
return file;
}
if (report.status === 'failed') {
throw new Error('Report generation failed');
}
// Report still processing
return null;
};

Users Tab

The Users tab in your app’s analytics shows individual account-level data:

ColumnDescription
Account IDThe Stripe account that installed your app
Install DateWhen the app was installed
StatusActive or uninstalled
Uninstall DateWhen the app was uninstalled (if applicable)

Use this data to:

  • Track individual account activation status
  • Follow up with accounts that installed but haven’t completed onboarding
  • Identify accounts that uninstalled and understand churn reasons
  • Correlate install data with your own platform analytics

Custom Analytics with Webhooks

For real-time analytics and deeper insights, set up webhooks to track app events:

Webhook Events

Listen for these events to build custom analytics:

EventDescription
account.application.authorizedUser installed your app
account.application.deauthorizedUser uninstalled your app

Webhook Handler

const express = require('express');
const stripe = require('stripe')('sk_live_xxxxx');
const app = express();
app.post('/webhooks/stripe-app', express.raw({ type: 'application/json' }), async (req, res) => {
const sig = req.headers['stripe-signature'];
const webhookSecret = process.env.STRIPE_APP_WEBHOOK_SECRET;
let event;
try {
event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);
} catch (err) {
console.error('Webhook signature verification failed:', err.message);
return res.status(400).send('Webhook signature verification failed');
}
switch (event.type) {
case 'account.application.authorized': {
const account = event.data.object;
console.log('App installed by:', account.id);
// Track in your analytics system
await trackEvent('app_installed', {
account_id: account.id,
timestamp: new Date(event.created * 1000),
});
// Trigger onboarding email
await sendOnboardingEmail(account.id);
break;
}
case 'account.application.deauthorized': {
const account = event.data.object;
console.log('App uninstalled by:', account.id);
// Track churn
await trackEvent('app_uninstalled', {
account_id: account.id,
timestamp: new Date(event.created * 1000),
});
// Clean up account data
await cleanupAccountData(account.id);
break;
}
default:
console.log('Unhandled event type:', event.type);
}
res.json({ received: true });
});

Connect List API

For Connect platforms, use the Connect List API to get information about accounts with your app installed:

const stripe = require('stripe')('sk_live_xxxxx');
// List all connected accounts with your app installed
const getInstalledAccounts = async () => {
const accounts = [];
let hasMore = true;
let startingAfter = null;
while (hasMore) {
const params = { limit: 100 };
if (startingAfter) {
params.starting_after = startingAfter;
}
const response = await stripe.accounts.list(params);
for (const account of response.data) {
// Check if your app is installed on this account
if (account.settings?.apps?.includes('com.tajo.brevo-integration')) {
accounts.push({
id: account.id,
email: account.email,
created: account.created,
});
}
}
hasMore = response.has_more;
if (response.data.length > 0) {
startingAfter = response.data[response.data.length - 1].id;
}
}
return accounts;
};

Building a Custom Analytics Dashboard

Combine Stripe analytics with your own data for a comprehensive view:

// Aggregate analytics for reporting
const getAppAnalytics = async (startDate, endDate) => {
const [stripeInstalls, brevoSyncStats, activationData] = await Promise.all([
// Stripe install data
getStripeInstallReport(startDate, endDate),
// Brevo sync metrics from Tajo
getBrevoSyncMetrics(startDate, endDate),
// Activation funnel from your database
getActivationFunnel(startDate, endDate),
]);
return {
// Acquisition
totalInstalls: stripeInstalls.installs,
totalUninstalls: stripeInstalls.uninstalls,
netInstalls: stripeInstalls.installs - stripeInstalls.uninstalls,
listingConversionRate: stripeInstalls.conversionRate,
// Activation
onboardingCompleted: activationData.completedOnboarding,
brevoConnected: activationData.connectedBrevo,
firstSyncCompleted: activationData.firstSyncCompleted,
activationRate: activationData.completedOnboarding / stripeInstalls.installs,
// Engagement
totalCustomersSynced: brevoSyncStats.totalCustomers,
totalEventsSynced: brevoSyncStats.totalEvents,
averageSyncFrequency: brevoSyncStats.avgSyncPerDay,
// Retention
churnRate: stripeInstalls.uninstalls / stripeInstalls.totalActive,
monthlyGrowthRate: stripeInstalls.momGrowth,
};
};

Key Metrics to Track

For the Tajo Brevo integration, focus on these metrics:

MetricTargetWhy It Matters
Install-to-Activation Rate> 70%Percentage of installers who complete Brevo setup
Time to First Sync< 5 minutesHow quickly users see value after installing
30-Day Retention> 80%Percentage of users still active after 30 days
Monthly Churn Rate< 5%Keep uninstalls low with a valuable integration
Listing Conversion Rate> 15%Percentage of listing viewers who install
Customers Synced per Account> 100Indicates depth of integration usage

Tip

Set up automated alerts for significant metric changes. A sudden spike in uninstalls or drop in activation rate may indicate a bug or UX issue that needs immediate attention.

AI Assistant

Hi! Ask me anything about the docs.

Start Free with Brevo