Track MRR, NRR, churn, and customer concentration from Shopify Partner and Stripe.
Local-first. Your revenue data stays on your machine in SQLite. No third-party analytics service storing your financials.
CLI-driven. No browser, no dashboards to click through. Just run mrrmaid dashboard and get your numbers.
Agent-friendly. Built for automation and AI agents. Structured output, CSV exports, and scriptable commands.
Free. No SaaS fees, no tiers, no "contact sales." MIT licensed, run it forever.
$ mrrmaid dashboard
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāā Recurring Revenue āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā®
ā MRR: $75,252.03 | ARR: $903,024.36 ā
ā (Shopify: $66,605.18 | Stripe: $8,646.85) ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
āāāāāāāāāāāāāāāāāāāāā TTM Revenue (Last 12 Months Actual) āāāāāāāāāāāāāāāāāāāāāā®
ā $764,922.49 ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
- Multi-source - Combines Shopify Partner + Stripe in one view
- LTV analysis - Customer lifetime value with ARPU and churn-based calculations
- Customer history - Deep-dive into any customer's month-over-month revenue
- Cohort analysis - Track retention by customer vintage
- Concentration risk - Identify over-reliance on top customers
- Resumable sync - Full history backfills that survive interruptions
- Export everything - CSV exports for all data
# With pip
pip install mrrmaid
# Or clone and install locally
git clone https://github.com/ctrlaltdylan/MRRmaid.git
cd MRRmaid
pip install -e .# 1. Configure your API credentials
mrrmaid configure
# 2. Sync your data
mrrmaid sync
# 3. View your dashboard
mrrmaid dashboardmrrmaid configureCreate a .env file:
# Shopify Partner API
SHOPIFY_PARTNER_ACCESS_TOKEN=your_token_here
SHOPIFY_ORGANIZATION_ID=your_org_id
# Stripe API
STRIPE_API_KEY=sk_live_xxxShopify Partner API:
- Go to Shopify Partners ā Settings ā Partner API clients
- Create a client with "View financials" permission
- Copy the access token and organization ID (from URL:
partners.shopify.com/ORG_ID/...)
Stripe API:
- Go to Stripe Dashboard
- Create a restricted key with these read permissions:
- Customers
- Subscriptions
- Invoices
- Copy the key (
rk_live_...or use a secret keysk_live_...)
Overview of MRR, ARR, LTV, and retention metrics.
$ mrrmaid dashboard
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāā Recurring Revenue āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā®
ā MRR: $75,252.03 | ARR: $903,024.36 ā
ā (Shopify: $66,605.18 | Stripe: $8,646.85) ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
āāāāāāāāāāāāāāāāāāāāā TTM Revenue (Last 12 Months Actual) āāāāāāāāāāāāāāāāāāāāāā®
ā $764,922.49 ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā Subscriptions āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā®
ā Total Subscriptions 476 ā
ā Active 471 ā
ā Trials 0 ā
ā Canceled 0 ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāā Retention Metrics āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā®
ā ARPU $159.77 ā
ā LTV $2,056.62 ā
ā Churn Rate 7.8% ā
ā Net Revenue Retention 109.6% ā
ā Gross Revenue Retention 83.7% ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
$ mrrmaid dashboard --source shopify # Filter by sourceMRR breakdown and movement.
$ mrrmaid mrr
āāāāāāāāāāāāāāāāāāāāāāāāāāāāā MRR Breakdown āāāāāāāāāāāāāāāāāāāāāāāāāāāāāā®
ā Shopify MRR $64,384.18 ā
ā Stripe MRR $8,409.30 ā
ā Total MRR $72,793.48 ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
MRR Movement
āāāāāāāāāāāāāāāāāāāāā³āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Component ā Amount ā
ā”āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā©
ā New MRR ā +$8,234.00 ā
ā Expansion MRR ā +$2,891.50 ā
ā Contraction MRR ā -$1,205.00 ā
ā Churned MRR ā -$3,420.00 ā
ā Net New MRR ā +$6,500.50 ā
āāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
$ mrrmaid mrr --granularity week # Weekly breakdown
$ mrrmaid mrr --start 2025-01-01 # Custom date rangeNet Revenue Retention from existing customers.
$ mrrmaid nrr
āāāāāāāāāāāāāāāāāāāāāāāā Net Revenue Retention (Month) āāāāāāāāāāāāāāāāāāāāāāāāā®
ā 110.9% ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāā 2025-01-03 to 2025-02-02 āāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
Formula Components
Starting MRR (base for calculation)
+ Expansion MRR +$17,091.90
- Contraction MRR -$5,904.86
- Churned MRR -$4,360.58
Gross Revenue Retention 83.6%
Good! Revenue from existing customers is growing.
$ mrrmaid nrr --period quarter # Quarterly NRR
$ mrrmaid nrr --period year # Annual NRRCustomer Lifetime Value analysis.
$ mrrmaid ltv
āāāāāāāāāāāāāāāāāāāāāāā Customer Lifetime Value (Month) āāāāāāāāāāāāāāāāāāāāāāāā®
ā $2,056.62 ā
ā°āāāāāāāāāāāāāāāāāāāāāā LTV = ARPU / Monthly Churn Rate āāāāāāāāāāāāāāāāāāāāāāāāÆ
LTV Components
ARPU (Monthly) $159.77
Month Churn Rate 7.77%
LTV (ARPU/Churn) $2,056.62
Lifespan Analysis
Avg Customer Lifespan 12.3 months
LTV (Lifespan-based) $1,957.66
Health Indicators
LTV / ARPU Ratio 12.9x
Active Subscriptions 471
Good! Healthy customer lifetime value.
$ mrrmaid ltv --period quarter # Use quarterly churn rate
$ mrrmaid ltv --period year # Use annual churn rate
$ mrrmaid ltv --source shopify # Filter by sourceCohort-based retention analysis.
$ mrrmaid cohort
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā®
ā Cohort Analysis - Revenue Retention ā
ā Shows % retention relative to first month (M0 = 100%) ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
āāāāāāāāāāāā³āāāāāāā³āāāāāāāāāāā³āāāāāāāā³āāāāāāāā³āāāāāāāā³āāāāāāāāā
ā Cohort ā Cust ā Revenue ā M0 ā M1 ā M2 ā M3 ā
ā”āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā©
ā 2025-11 ā 263 ā $159,021 ā 100% ā 124% ā 135% ā 9% ā
ā 2025-10 ā 45 ā $12,016 ā 100% ā 102% ā 89% ā 85% ā
ā 2025-09 ā 38 ā $8,752 ā 100% ā 95% ā 90% ā 88% ā
ā 2025-08 ā 52 ā $15,737 ā 100% ā 89% ā 87% ā 80% ā
āāāāāāāāāāāā“āāāāāāā“āāāāāāāāāāā“āāāāāāāā“āāāāāāāā“āāāāāāāā“āāāāāāāāā
Average M1 Retention: 78.6%
Average M3 Retention: 53.8%
$ mrrmaid cohort --metric customers # Customer count retention
$ mrrmaid cohort --periods 12 # Track 12 months
$ mrrmaid cohort --export cohorts.csv # Export to CSVCustomer concentration and revenue distribution.
$ mrrmaid customers
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā®
ā Customer Revenue Analysis - Month ā
ā Total Revenue: $73,289.99 from 357 customers ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
ā High concentration risk: Top 10% of customers = 57.8% of revenue
Top 20% = 70.5% of revenue
āāāāāāā³āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā³āāāāāāāāāāāā³āāāāāāāā³āāāāāāāāāā³āāāāāāā
ā # ā Customer ā Revenue ā % Rev ā Cumul % ā Txns ā
ā”āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā©
ā 1 ā acme-store.myshopify.com ā $12,912.19ā 17.6% ā 17.6% ā 8839 ā
ā 2 ā widgets-inc.myshopify.com ā $2,858.77ā 3.9% ā 21.5% ā 1142 ā
ā 3 ā example-shop.myshopify.com ā $2,260.49ā 3.1% ā 24.6% ā 1493 ā
āāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāā“āāāāāāāā“āāāāāāāāāā“āāāāāāā
$ mrrmaid customers --period all # All-time analysis
$ mrrmaid customers --period quarter # Last 90 days
$ mrrmaid customers --cohort 2025-01 # Filter by cohort (first purchase month)
$ mrrmaid customers --limit 50 # Show more customers
$ mrrmaid customers --export cust.csv # Export to CSVDeep-dive into a specific customer's history and LTV.
$ mrrmaid customer "acme-store"
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā Customer Details āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā®
ā acme-store.myshopify.com ā
ā Active ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
Lifetime Value $30,446.61
Total Revenue $30,446.61
Monthly ARPU $8,661.63
Transactions 17487
Tenure 3.5 months
First Seen 2025-10-29
Last Seen 2026-02-09
Customer ID gid://partners/Shop/66133852249
Monthly Revenue History
āāāāāāāāāāā³āāāāāāāāāāāāā³āāāāāāā³āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Month ā Revenue ā Txns ā ā
ā”āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā©
ā 2025-10 ā $609.00 ā 420 ā ā ā
ā 2025-11 ā $2,308.34 ā 1526 ā āāāā ā
ā 2025-12 ā $8,601.09 ā 2619 ā āāāāāāāāāāāāāāāā ā
ā 2026-01 ā $13,062.99 ā 8943 ā āāāāāāāāāāāāāāāāāāāāāāāāā ā
ā 2026-02 ā $5,865.19 ā 3979 ā āāāāāāāāāāā ā
āāāāāāāāāāā“āāāāāāāāāāāāā“āāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
$ mrrmaid customer "cus_abc123" # Stripe customer by ID
$ mrrmaid customer "store" --source shopify # Filter by source
$ mrrmaid customer "acme" --export hist.csv # Export monthly historyChurn rate analysis.
$ mrrmaid churn
āāāāāāāāāāāāāāāāāāāāāāāāāā Churn Rate (Month) āāāāāāāāāāāāāāāāāāāāāāāāāā®
ā 5.2% ā
ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ
Churned MRR $3,420.00
Churned Customers 12
$ mrrmaid churn --period quarter # Quarterly churn
$ mrrmaid churn --period year # Annual churnCompare metrics between two periods side-by-side (YoY, QoQ, etc).
$ mrrmaid compare --period 2026-02 --vs 2025-02
Period Comparison: Feb 2026 vs Feb 2025
āāāāāāāāāāāāāāāāāāāāāāāāāā³āāāāāāāāāāāāāāā³āāāāāāāāāāāāāāā³āāāāāāāāāāāāāāāāāāāāāāāāā
ā Metric ā Feb 2025 ā Feb 2026 ā Change ā
ā”āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā©
ā MRR ā $32,737.05 ā $32,376.76 ā $-360.29 (-1.1%) ā ā
ā New MRR ā $6,383.93 ā $5,637.88 ā $-746.05 (-11.7%) ā ā
ā Expansion MRR ā $5,054.01 ā $1,233.35 ā $-3,820.66 (-75.6%) ā ā
ā Contraction MRR ā $694.37 ā $758.77 ā +$64.40 (+9.3%) ā ā
ā Churned MRR ā $5,137.03 ā $7,161.62 ā +$2,024.59 (+39.4%) ā ā
ā Net New MRR ā $5,606.54 ā $-1,049.16 ā $-6,655.70 (-118.7%) ā ā
ā ā ā ā ā
ā Active Customers ā 383 ā 387 ā +4 (+1.0%) ā ā
ā New Customers ā 57 ā 61 ā +4 (+7.0%) ā ā
ā Churned Customers ā 44 ā 48 ā +4 (+9.1%) ā ā
ā ā ā ā ā
ā Churn Rate ā 18.9% ā 21.4% ā +2.5pp ā ā
ā NRR ā 97.1% ā 80.0% ā -17.1pp ā ā
ā GRR ā 78.5% ā 76.3% ā -2.2pp ā ā
ā Revenue ā $52,342.02 ā $66,230.92 ā +$13,888.90 (+26.5%) ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāā“āāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāā
$ mrrmaid compare # Last month vs same month last year
$ mrrmaid compare --period 2025-Q4 --vs 2024-Q4 # Quarter comparison
$ mrrmaid compare --source stripe # Filter by sourceSync data from Shopify Partner and Stripe APIs.
$ mrrmaid sync
ā Synced 1200 records...
Sync Results
āāāāāāāāāāāāāāāāāāāāāāāā³āāāāāāāāāā
ā Source ā Records ā
ā”āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā©
ā Shopify Transactions ā 63598 ā
ā Stripe Subscriptions ā 174 ā
ā Stripe Invoices ā 6389 ā
āāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāā
$ mrrmaid sync --days 365 # Last year
$ mrrmaid sync --all # Full history (resumable)
$ mrrmaid sync --all --fresh # Start over from scratch
$ mrrmaid sync --source shopify # Single source onlySyncs are resumable - if interrupted, run again to continue where you left off.
View and export transaction history.
$ mrrmaid transactions
Recent Transactions (20)
āāāāāāāāāāāāāā³āāāāāāāāāā³āāāāāāāāāāā³āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Date ā Source ā Amount ā Customer ā
ā”āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā©
ā 2025-02-01 ā shopify ā $45.00 ā acme-store.myshopify.com ā
ā 2025-02-01 ā stripe ā $299.00 ā cus_abc123 ā
ā 2025-01-31 ā shopify ā $12.50 ā widgets-inc.myshopify.com ā
āāāāāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
$ mrrmaid transactions --limit 100 # Show more
$ mrrmaid transactions --source stripe # Filter by source
$ mrrmaid transactions --start 2025-01-01 --end 2025-01-31
$ mrrmaid transactions --export tx.csv # Export to CSVView active subscriptions.
$ mrrmaid subscriptions
Subscriptions (174 total)
āāāāāāāāāāāāāāāāāāāāāā³āāāāāāāāā³āāāāāāāāā³āāāāāāāāāā³āāāāāāāāāāāāā
ā ID ā Source ā Status ā MRR ā Created ā
ā”āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā©
ā sub_1abc123... ā stripe ā active ā $299.00 ā 2025-01-15 ā
ā sub_2def456... ā stripe ā active ā $99.00 ā 2025-01-10 ā
ā sub_3ghi789... ā stripe ā trial ā $0.00 ā 2025-02-01 ā
āāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāā“āāāāāāāāā“āāāāāāāāāā“āāāāāāāāāāāāā
$ mrrmaid subscriptions --status active
$ mrrmaid subscriptions --status canceled
$ mrrmaid subscriptions --export subs.csvSave and view historical metric snapshots.
$ mrrmaid snapshot --save
Snapshot saved for 2025-02-01
$ mrrmaid snapshot
MRR Snapshots
āāāāāāāāāāāāāā³āāāāāāāāāāāāā³āāāāāāāāāāāāāā³āāāāāāāāā
ā Date ā Total MRR ā Active Subs ā NRR ā
ā”āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā©
ā 2025-02-01 ā $72,793.48 ā 308 ā 110.9% ā
ā 2025-01-01 ā $68,421.00 ā 295 ā 108.2% ā
ā 2024-12-01 ā $65,102.33 ā 280 ā 105.4% ā
āāāāāāāāāāāāāā“āāāāāāāāāāāāā“āāāāāāāāāāāāāā“āāāāāāāāā| Metric | Formula | Good | Warning |
|---|---|---|---|
| ARR | MRR Ć 12 | - | - |
| TTM Revenue | Sum of last 12 months actual revenue | - | - |
| ARPU | MRR / Active Subscriptions | - | - |
| LTV | ARPU / Monthly Churn Rate | >$1000 | <$500 |
| NRR | (Start + Expansion - Contraction - Churn) / Start | >100% | <90% |
| GRR | (Start - Contraction - Churn) / Start | >90% | <80% |
| Churn | Churned MRR / Starting MRR | <5% | >10% |
| Concentration | Top 10% customer revenue / Total | <30% | >50% |
- App subscription charges
- App usage charges (metered billing)
- One-time app charges
- Service revenue
- Referral commissions
- Subscriptions (with line items)
- Invoices (for historical MRR)
- Metered billing usage
src/mrrmaid/
āāā api/
ā āāā shopify.py # Shopify Partner GraphQL client
ā āāā stripe_client.py # Stripe REST client
āāā models/
ā āāā database.py # SQLite via SQLAlchemy
ā āāā transaction.py # Data models
āāā services/
ā āāā metrics.py # MRR, NRR, Churn, Cohort calculations
ā āāā sync.py # Resumable data sync
āāā utils/
ā āāā config.py # Configuration management
āāā cli.py # Typer CLI
Data is stored locally in mrrmaid.db (SQLite).
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Format
black src/
# Lint
ruff src/Contributions welcome! Please open an issue first to discuss what you'd like to change.
MIT
Built for indie hackers who want to understand their revenue without paying for expensive analytics tools.