Stripe
Follow our setup guide to connect Stripe to QUANTI.
Prerequisites
Before connecting Stripe to QUANTI, ensure you have:
Stripe Account: An active Stripe account (Standard or Express)
API Access: Administrator access to your Stripe Dashboard
API Keys: Ability to generate restricted API keys with read permissions
Live Mode: For production data, ensure you're using live mode API keys (test mode is also supported for development)
Setup Instructions
Generate Stripe API Key
Log into your Stripe Dashboard
Navigate to Developers > API keys
Click on Create restricted key
Stripe asks how you will use the key — choose Send this key to a third-party application. QUANTI is the third party
Stripe then asks for the name and the URL of that third party: enter
QUANTI Integrationandhttps://app.quanti.io. Both are labels — Stripe stores them next to the key in your API keys list so you can tell later who holds which key. Neither of them restricts where the key can be usedTick Customise permissions for this key, then configure the following read permissions:
Account: Read — required. QUANTI calls
/v1/accountto verify the key and identify your account; without this permission Stripe returns a 403 and the key is rejected as invalidCustomers: Read
Payment Intents: Read
Refunds: Read
Disputes: Read
Setup Intents: Read
Products: Read
Prices: Read
Shipping Rates: Read
Subscriptions: Read
Subscription Items: Read
Usage Records: Read — needed by the usage_record_summaries report
Orders: Read — needed by the order_returns report
Both reports are selected by default. If you leave out one of these two permissions, deselect the matching report at the next step, otherwise it fails with a 403 on every sync
Leave every other permission on None
Copy and securely store the generated API key
Select Prebuilt reports
Review the available Prebuilt reports (see section below for details)
All tables are selected by default - you can deselect tables you don't need
Recommended tables for most use cases:
Customers: Customer master data
Payment Intents: All payment transactions
Subscriptions: Recurring revenue tracking
Refunds: Refund analysis
Click Next
Finish setup
Define a sync period and a lookback window
Click Save
For the first sync, you have the following options:
Activate auto-sync for recurring syncs based on your sync settings by clicking the switch button
Launch a historical data recovery by choosing your desired dates in the historical data tab
Launch a manual sync immediately by clicking the Sync now button
Wait for the sync to complete. Then navigate to your data warehouse to verify that tables are populated
Check the connector dashboard for sync status and any potential errors
Prebuilt reports
Dimension Tables
customers: Customer master data including billing information, shipping addresses, discounts, and balance. Contains customer profile, contact details, default payment methods, and tax information.
products: Product catalog with descriptions, pricing information, shipping dimensions, and tax codes. Includes product images, URLs, and metadata for flexible categorization.
prices: Pricing plans for products, including one-time and recurring billing schemes. Defines currency, billing intervals, tiers, and trial periods for subscription products.
shipping_rates: Configured shipping rates with delivery estimates, pricing (fixed or dynamic), and tax behavior. Used for e-commerce order fulfillment.
subscription_items: Individual line items within subscriptions, linking prices to subscriptions. Tracks quantity, billing thresholds, and usage-based billing configuration.
Fact Tables
payment_intents: Complete payment transaction lifecycle including amounts, statuses (succeeded, failed, canceled), payment methods, and customer references. Core table for revenue analysis and payment tracking.
refunds: Refund transactions with amounts, reasons, statuses, and references to original payment intents. Essential for refund analysis and revenue adjustments.
disputes: Payment disputes and chargebacks with amounts, reasons, statuses, evidence submission deadlines, and associated charges. Critical for fraud monitoring and dispute management.
subscriptions: Subscription lifecycle data including billing cycles, trial periods, cancellation dates, and renewal information. Key for MRR (Monthly Recurring Revenue) analysis.
setup_intents: Payment method setup attempts for future charges, including status tracking and error details. Used to analyze payment method onboarding success rates.
order_returns: Product returns linked to orders (Beta API), including amounts, currencies, and refund references. For e-commerce return analysis.
usage_record_summaries: Aggregated usage data for metered billing subscriptions, tracking total usage per billing period. Essential for usage-based revenue reporting.
Notes
Historical Data: Stripe's API provides access to all historical data without date limitations. However, initial syncs of large datasets may take several hours.
Troubleshooting
apiKey — Which Stripe key to create, and with which permissions
Authenticates every call QUANTI makes to the Stripe API; the connector only ever reads, and never writes anything back to your Stripe account.
Where to find it
Stripe Dashboard > Developers > API keys > Create restricted key. Stripe first asks how you will use the key: choose Send this key to a third-party application — QUANTI is the third party. It then asks for that third party's name and URL: enter QUANTI Integration and https://app.quanti.io. Both are labels Stripe keeps next to the key in your API keys list; neither restricts where the key can be used. Then tick Customise permissions for this key and grant Read on: Account, Customers, PaymentIntents, Refunds, Disputes, SetupIntents, Products, Prices, Shipping rates, Subscriptions, Subscription items, Usage records and Orders. Usage records feeds the usage_record_summaries report and Orders feeds the order_returns report; both reports are selected by default, so if you leave one of these permissions out, deselect the matching report when you choose your prebuilt reports. Leave every other permission on None. Copy the key, which starts with rk_live_ (or rk_test_ in test mode). Account: Read is not optional: QUANTI calls /v1/account at the verification step to identify and name your Stripe account, so a key that cannot read account information is rejected as an invalid key.
Why it matters
Skipping Usage records or Orders because they look optional. The key is accepted and most reports sync, so the setup looks finished — but the usage_record_summaries and order_returns reports fail on every run with a 403 "Permission denied", and Stripe's error names the missing permission (usage_record_read, order_read). Add the permission to the existing key from Stripe's API keys page, or deselect the report. Pasting the plain secret key (sk_live_...) instead of a restricted one: QUANTI's field accepts it and the sync works perfectly, so nothing ever signals a problem — but that key carries full write access to your Stripe account, and it now sits inside a third-party integration. In the very first dialog, Power an integration you built and Authorize an AI agent both produce a usable key, so the wrong choice never surfaces as an error — only Send this key to a third-party application describes what QUANTI actually is, and keeps your Stripe audit trail truthful about who holds the key. Finally, the URL field looks like a security setting, so people either fill in their own website — which makes the key list unreadable the day they audit who holds what — or stop and ask support. It is a label, nothing more; what limits the key is the set of permissions you granted.
Last updated
Was this helpful?