Any billing system, full SaaS analytics
Built your own billing, or use a platform we don't connect to natively? Push customers, plans and invoices to the GrowPanel API. GrowPanel works out the subscriptions and movements for you.
- Free until $200k ARR
- No credit card needed
- Live in minutes
- EU hosted, GDPR compliant
// Push new invoices from your billing system await fetch('https://api.growpanel.io/data/invoices', { method: 'POST', headers: { Authorization: `Bearer ${GROWPANEL_API_KEY}` }, body: JSON.stringify([ // each invoice also carries date, start_date, end_date { id: 'inv_2201', customer_id: 'cust_411', type: 'subscription', amount_cents: 29900, currency: 'usd', plan_id: 'plan_scale' }, { id: 'inv_2202', customer_id: 'cust_519', type: 'subscription', amount_cents: 9900, currency: 'usd', plan_id: 'plan_pro' }, { id: 'inv_2203', customer_id: 'cust_207', type: 'cancellation', amount_cents: 0, currency: 'usd', plan_id: 'plan_pro' } ]) });
{ "result": [
{ "id": "inv_2201", "export_status": "inserted" },
{ "id": "inv_2202", "export_status": "inserted" },
{ "id": "inv_2203", "export_status": "inserted" }
] }Latest activity
From Custom API to live metrics in four steps
Three endpoints, JSON in, per-row results out. Most teams have it running in an afternoon.
Create the data source
Add a Custom API data source. GrowPanel shows the API key once, plus the data source ID.
Push your history
Your code sends customers, plans and invoices, in batches of a few hundred rows. Each row gets its own result.
Movements detected
No need to send subscriptions. GrowPanel compares each invoice with the customer's history and classifies the change.
Keep pushing
Send new invoices as they happen or in nightly batches. Rows are matched by your IDs, so resending is safe.
POST /data/invoices · 200 · insertedyour codePOST /data/customers · 200 · updatedyour codePOST /data/invoices · 200 · unchangedyour codeYou send invoices. GrowPanel does the rest.
You send invoices, GrowPanel does the subscription logic. Upgrades, downgrades, cancellations and reactivations are detected by comparing each invoice with what came before.
Three endpoints, every report
Every SaaS metric from your Custom API data
The moment the import finishes, every report is ready. No spreadsheets, no formulas to maintain.
- MRR, ARR and every movement: new, expansion, contraction, churn and reactivation
- Churn, retention and cohorts, down to the customer
- Cashflow, failed payments and refunds
- MRR and cashflow forecasts built from your own data
- GrowPanel AI answers questions about your numbers in plain English
Set up in minutes
- Add a Custom API data source
In GrowPanel, go to Settings, then Data sources, add Custom API and save.
- Store the API key
The key is shown once. Save it as a secret. You can rotate it later.
- Note the data source ID
Every record you push includes it, so GrowPanel knows where it belongs.
- Hand it to your engineer
The Building integrations guide has schemas, sync patterns and skeleton code in JavaScript and Python.
Custom API and GrowPanel, answered
Something else on your mind? Talk to a human, we reply within one business day.
When should I use the Custom API?
When your billing system isn't one of the native connectors, when you want to combine billing data with your own database, or when a platform creates one-off invoices instead of real subscriptions.
Do I need to send subscriptions?
No. You send customers, plans and invoices. GrowPanel reconstructs the subscription state from the invoice history.
Can I use it alongside Stripe or Chargebee?
Yes. For example Stripe for self-serve customers plus the Custom API for enterprise contracts. If Stripe also has records for customers you push, tag those Stripe customers to be excluded so they aren't counted twice.
What does the API return?
A result array with one entry per row: inserted, updated, unchanged or error, with the reason. A 200 with some errors is normal, so check the array.
What does it cost?
GrowPanel is free until you're above $200k ARR. After that, plans are priced by ARR, billed monthly or annually.