アプリのアナリティクス
Stripe は、マーケットプレイスに公開したアプリ向けの分析機能を標準で提供しており、インストール数、リスティングの成果、ユーザーのエンゲージメントを把握できます。さらに、Webhook と Stripe API を使って独自の分析基盤を構築することも可能です。
利用できるレポート
Stripe ダッシュボードでは、公開中のアプリについて次の指標を確認できます。
インストール指標
| 指標 | 説明 |
|---|---|
| インストール数 | 選択した期間中に新規インストールされた合計数 |
| アンインストール数 | 選択した期間中にアンインストールされた合計数 |
| 累計ネットインストール数 | インストール数からアンインストール数を差し引いた累計 |
リスティングの成果
| 指標 | 説明 |
|---|---|
| リスティング閲覧数 | マーケットプレイスのリスティングページの合計閲覧数 |
| ユニーク閲覧数 | リスティングを閲覧したユニークユーザー数 |
| 前月比コンバージョン率 | リスティング閲覧者のうちアプリをインストールした割合の前月比 |
成長指標
| 指標 | 説明 |
|---|---|
| 前月比成長率 | ネットインストール数の前月比の伸び |
| 解約率 | インストール済みユーザーのうち月あたりにアンインストールした割合 |
データの反映タイミング
Caution
分析データには 48 時間の遅延があります。ダッシュボードに表示されるのは、およそ 2 日前までのアクティビティです。レポートの集計期間はこれを踏まえて設定してください。
- データは 48 時間の処理遅延を伴って毎日更新されます
- 履歴データはアプリを最初に公開した日から利用できます
- 指標は UTC のタイムゾーンで算出されます
- 外部で分析する場合は、Stripe ダッシュボードから CSV としてエクスポートできます
API から分析データを取得する
Stripe Reporting API を使えば、アプリの分析データをプログラムから取得できます。
インストールデータ
# Fetch app install reportcurl 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"リスティング閲覧数
# Fetch listing views reportcurl 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"プログラムからのアクセス (Node.js)
const stripe = require('stripe')('sk_live_xxxxx');
// Create a report run for app installsconst 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 completionconst 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;};ユーザータブ
アプリの分析画面にあるユーザータブでは、アカウント単位のデータを確認できます。
| 列 | 説明 |
|---|---|
| アカウント ID | アプリをインストールした Stripe アカウント |
| インストール日 | アプリがインストールされた日時 |
| ステータス | 有効またはアンインストール済み |
| アンインストール日 | アプリがアンインストールされた日時 (該当する場合) |
このデータは次のように活用できます。
- アカウントごとの有効化状況を追跡する
- インストール済みでオンボーディングが完了していないアカウントにフォローアップする
- アンインストールしたアカウントを特定し、解約の理由を把握する
- インストールデータを自社プラットフォームの分析データと突き合わせる
Webhook によるカスタム分析
リアルタイムの分析やより深い洞察が必要な場合は、Webhook を設定してアプリのイベントを計測します。
Webhook イベント
カスタム分析を構築するには、次のイベントを受信します。
| イベント | 説明 |
|---|---|
account.application.authorized | ユーザーがアプリをインストールした |
account.application.deauthorized | ユーザーがアプリをアンインストールした |
Webhook ハンドラー
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
Connect プラットフォームでは、Connect List API を使ってアプリがインストールされているアカウントの情報を取得できます。
const stripe = require('stripe')('sk_live_xxxxx');
// List all connected accounts with your app installedconst 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;};カスタム分析ダッシュボードを構築する
Stripe の分析データと自社のデータを組み合わせると、全体像を一望できます。
// Aggregate analytics for reportingconst 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, };};重点的に追うべき指標
Tajo の Brevo 連携では、次の指標に注目してください。
| 指標 | 目標値 | 重要な理由 |
|---|---|---|
| インストールから有効化までの到達率 | 70% 超 | インストールしたユーザーのうち Brevo の設定を完了した割合 |
| 初回同期までの時間 | 5 分未満 | インストール後どれだけ早く価値を実感できるか |
| 30 日後の継続率 | 80% 超 | 30 日後も利用を継続しているユーザーの割合 |
| 月次解約率 | 5% 未満 | 価値ある連携を提供し、アンインストールを抑えます |
| リスティングのコンバージョン率 | 15% 超 | リスティング閲覧者のうちインストールした割合 |
| アカウントあたりの同期顧客数 | 100 件超 | 連携がどれだけ深く使われているかを示します |
Tip
指標が大きく変化したときに自動で通知が届くよう設定しておきましょう。アンインストールの急増や有効化率の低下は、早急な対応が必要な不具合や UX の問題を示している可能性があります。