Blog

How to Access Stripe Dashboard Data Programmatically

Learn how to access Stripe dashboard analytics, charts, and internal reports through shadow APIs discovered from browsing traffic — data the official API does not expose.

Lewis Tham
April 3, 2026

How to Access Stripe Dashboard Data Programmatically

Stripe has one of the best-documented APIs in the industry. If you need to create charges, manage subscriptions, or handle payouts, the official API is excellent. But there is an entire category of Stripe data that the API does not expose: the dashboard.

Stripe's web dashboard shows revenue charts, conversion funnels, dispute analytics, customer lifetime value breakdowns, MRR trends, churn analysis, and dozens of other computed metrics. This data is generated by Stripe's internal analytics pipeline and is only available in the browser. There is no official API endpoint for "give me my MRR chart data" or "show me my payment method distribution."

If you want to build a custom executive dashboard, pipe Stripe analytics into your data warehouse, or let an AI agent monitor your payment health, you need access to these internal endpoints. Unbrowse discovers them automatically.

What Are Shadow APIs?

Shadow APIs are the internal HTTP endpoints that web applications use to populate their interfaces. They carry real data, return structured JSON, and are authenticated through your browser session.

When you load the Stripe dashboard in your browser, it makes API calls to:

  • An analytics endpoint that returns revenue data over time with configurable granularity
  • A metrics endpoint that returns MRR, churn rate, ARPU, and other SaaS metrics
  • A payments summary endpoint that returns success rates, failure reasons, and volume by payment method
  • A disputes endpoint that returns dispute analytics beyond what the standard API provides
  • A customers endpoint that returns cohort analysis and retention data
  • A reporting endpoint that returns the raw data behind Stripe's built-in reports

These endpoints return the exact data that Stripe renders in its charts and tables. They support date ranges, filters, and groupings that the public API does not offer.

What Unbrowse Discovers on Stripe

Unbrowse captures all HTTP traffic during a browsing session and indexes the API routes. When you navigate the Stripe dashboard through Unbrowse, it discovers:

  • Revenue analytics endpoints — gross volume, net volume, and revenue over time with daily, weekly, or monthly granularity
  • MRR and subscription endpoints — monthly recurring revenue, new MRR, churned MRR, expansion MRR, and subscriber counts
  • Payment analytics endpoints — success rates, decline reasons, payment method distribution, and average transaction values
  • Customer analytics endpoints — new customers, returning customers, lifetime value, and cohort retention
  • Dispute and fraud endpoints — dispute rates, reason codes, win rates, and Radar rule performance
  • Payout endpoints — payout schedules, amounts, and bank account status
  • Report endpoints — the data behind Stripe's built-in financial reports

Each endpoint is stored with authentication headers, URL templates, and parameter schemas.

Getting Started

Install Unbrowse:

npm install -g unbrowse

Browse the Stripe dashboard to discover its internal APIs:

unbrowse browse "https://dashboard.stripe.com/dashboard"

Log into your Stripe account in the browser. Navigate through the dashboard sections — payments, customers, revenue, reports. Unbrowse captures every API call.

Resolve a discovered endpoint:

unbrowse resolve "stripe revenue analytics"

Execute the route:

unbrowse execute "stripe revenue analytics" --params '{"period": "last_30_days", "granularity": "daily"}'

Code Example: Custom Revenue Dashboard

Here is a Node.js script that pulls Stripe dashboard data for a custom analytics pipeline:

import Unbrowse from 'unbrowse';

const unbrowse = new Unbrowse();

// Resolve Stripe dashboard endpoints
const revenueSkill = await unbrowse.resolve('stripe revenue over time');
const mrrSkill = await unbrowse.resolve('stripe mrr breakdown');
const paymentsSkill = await unbrowse.resolve('stripe payment success rate');

// Pull revenue data
const revenue = await unbrowse.execute(revenueSkill, {
  period: 'last_90_days',
  granularity: 'weekly'
});

// Pull MRR breakdown
const mrr = await unbrowse.execute(mrrSkill, {
  period: 'last_12_months'
});

// Pull payment health
const payments = await unbrowse.execute(paymentsSkill, {
  period: 'last_30_days'
});

console.log('Revenue (last 90 days):');
for (const point of revenue.data) {
  console.log(`  ${point.date}: $${(point.amount / 100).toFixed(2)}`);
}

console.log(`\nCurrent MRR: $${(mrr.current / 100).toFixed(2)}`);
console.log(`  New: $${(mrr.new / 100).toFixed(2)}`);
console.log(`  Churned: -$${(mrr.churned / 100).toFixed(2)}`);
console.log(`  Expansion: $${(mrr.expansion / 100).toFixed(2)}`);

console.log(`\nPayment success rate: ${payments.successRate}%`);
console.log(`Top decline reason: ${payments.topDeclineReason}`);

This gives you the same data visible in the Stripe dashboard, structured for programmatic consumption.

Performance Comparison

Method Setup Time Dashboard Metrics Avg Response Time Custom Date Ranges
Stripe Official API Minutes No (compute yourself) 200-500ms Yes
Stripe Sigma (SQL) Hours Yes Seconds-minutes Yes
CSV Export Manual Partial N/A Limited
Unbrowse (Shadow API) 2 minutes Yes (pre-computed) 100-400ms Yes

The key advantage is accessing pre-computed metrics. To get MRR from the official API, you need to query all subscriptions and compute it yourself. The dashboard API returns it pre-calculated because Stripe's own analytics pipeline already did the work.

What Data Is Dashboard-Only

Several categories of Stripe data are only available through the dashboard, not the public API:

  • Revenue charts with configurable granularity — the API gives you individual charges; the dashboard gives you aggregated revenue over time
  • MRR components — new, expansion, contraction, and churned MRR are computed by Stripe's analytics, not available via API
  • Payment method distribution — what percentage of payments use cards vs. ACH vs. Apple Pay
  • Decline reason analytics — aggregated decline reasons with trends over time
  • Customer cohort retention — cohort-based retention curves that Stripe computes from your payment data
  • Radar fraud analytics — rule performance, review rates, and false positive rates

FAQ

Is this safe with financial data? Unbrowse accesses the same endpoints your browser accesses. Your Stripe session credentials are stored locally, never transmitted to third parties. All data stays on your machine unless you explicitly share it.

Do I need Stripe admin access? You need a Stripe dashboard login with permissions to view the data you want to extract. Unbrowse cannot access data your account does not have permission to see.

Can I use this for multiple Stripe accounts? Yes. Browse each Stripe account separately to index its dashboard endpoints. Unbrowse stores credentials per domain and session.

How often should I refresh the session? Stripe dashboard sessions typically last several hours. For automated pipelines, you may need to refresh the session daily by running a new browse step.

Is there a risk of affecting my Stripe account? Unbrowse makes read-only API calls. It does not create charges, modify subscriptions, or change any settings. The dashboard API calls are the same ones your browser makes when you view a page.