Stripe Source
Connect Stripe as a source to sync billing objects from your Stripe account. Supaflow supports incremental sync for events and balance transactions, and full refresh for customers, subscriptions, invoices, products, prices, coupons, and your account.
For an overview of capabilities and use cases, see the Stripe connector page. To run pipelines natively inside Snowflake, see Snowflake Native ETL.
Prerequisites
Before you begin, ensure you have:
- A Stripe account with access to the Stripe Dashboard
- A Stripe secret key (test-mode or live-mode) with read access to the resources listed under Authentication
Supported Objects
| Object | Sync Mode | Description |
|---|---|---|
| Customer | Full Refresh | All customers in your Stripe account. |
| Subscription | Full Refresh | All subscriptions, including canceled ones. |
| Invoice | Full Refresh | All invoices. |
| Product | Full Refresh | Product catalog. |
| Price | Full Refresh | Price objects (the successor to the legacy Plan object). |
| Coupon | Full Refresh | Coupons (distinct from promotion codes, which are not synced in v1). |
| Account | Full Refresh | Your Stripe account settings and capabilities. |
| Event | Incremental | Stripe's event log -- every API change that produces a webhook event. |
| Balance Transaction | Incremental | Every charge, refund, payout, and fee that hits your Stripe balance. |
Not Yet Supported
The v1 connector does not sync Charges, PaymentIntents, Refunds, Disputes, Payouts, Transfers, SetupIntents, PaymentMethods, PromotionCodes, TaxRates, UsageRecords, SubscriptionItems, CreditNotes, or the legacy Plan object.
Contact us with the objects you need -- expansion is prioritized by customer demand.
Incremental Sync
Event and Balance Transaction sync incrementally on Stripe's created timestamp. Only records created after the last cursor are fetched on each run. Other resources (see Supported Objects) run full refresh.
Stripe's Event API exposes only records within Stripe's event retention window -- older events are not returned. For a complete event history, set Start Date to the earliest date you need and run the initial backfill soon after connecting.
Authentication
Stripe uses secret API key authentication. Supaflow calls the Stripe Python SDK with the key you provide; no OAuth flow is involved.
Get a Secret Key
- Sign in to the Stripe Dashboard
- Go to Developers > API Keys
- Use one of your Standard keys (live for production, test for test mode), or click Create restricted key for a scoped read-only key
For a restricted key, grant Read access only to the resources this connector actually calls:
- Account
- Balance transactions
- Coupons
- Customers
- Events
- Invoices
- Prices
- Products
- Subscriptions
The connector is read-only -- Write permissions are not required and should not be granted.
Test vs Live Mode
The key prefix determines which data the connector reads:
- Test-mode keys (prefix
sk_test_) read from Stripe test mode - Live-mode keys (prefix
sk_live_) read from your production Stripe data
You cannot mix test and live data in a single source. Create two separate Supaflow sources if you need both.
Configuration
In Supaflow, create a new Stripe source with these settings:
Stripe Secret Key*Your test-mode or live-mode secret key from the Stripe Dashboard.
Stored encrypted
ISO 8601 timestamp. The earliest date the connector will fetch for Event and Balance Transaction on the initial sync. Does not apply to full-refresh objects.
Example: 2024-01-01T00:00:00Z
Default: empty (all historical)
Seconds to roll the cursor back on each incremental run of Event and Balance Transaction. Stripe's event ordering is generally consistent, so 0 is safe for most accounts.
Default: 0 (no lookback)
Range: 0 to 86400 seconds (24 hours)
Test & Save
After configuring your secret key, click Test & Save to verify your connection and save the source.
Rate Limiting
Stripe enforces API rate limits per mode:
| Mode | Read Requests/Second |
|---|---|
| Live mode | 100 |
| Test mode | 25 |
See Stripe's rate limiting guide for the authoritative numbers. For very high-volume accounts, schedule syncs during off-peak hours or split streams across multiple pipelines.
Schema Evolution
Field lists are generated from Stripe's OpenAPI spec for API version 2022-11-15 and shipped with the connector.
- New fields added by Stripe after that API version are not included automatically and require a connector update
- New enum values on existing fields pass through as strings with no allow-listing
- New Stripe objects are not discovered automatically; they require a connector update
Troubleshooting
Authentication failed
Problem:
- "Stripe authentication failed" or "Invalid API Key provided" error at Test & Save
Solutions:
- Confirm you pasted a secret key (starts with
sk_) -- publishable keys (pk_) and webhook signing secrets (whsec_) are not accepted - Verify the key has not been rolled, revoked, or expired in Developers > API Keys
- For restricted keys, confirm Read access is granted on every resource listed under Authentication
- Check that the key is from the correct Stripe account if your organization has multiple (e.g., parent vs Connect sub-accounts)
Slow first sync
Problem:
- The initial sync takes a long time on a long-established Stripe account
Solutions:
- Stripe's maximum page size is 100 records, so an initial read of a million customers is roughly 10,000 sequential API calls. This is Stripe's limit, not Supaflow's.
- Set Start Date to cap the historical window for Event and Balance Transaction (does not apply to full-refresh objects)
- Start with a smaller subset of objects in the first pipeline, then add more in follow-up pipelines
Canceled subscriptions are missing
Problem:
- Stripe has canceled subscriptions that are not in your destination
Solutions:
- The Subscription stream includes canceled subscriptions by default. If they are missing, confirm the Test & Save succeeded against the same Stripe account that holds the canceled records
- Verify the canceled subscriptions exist in the same mode (live vs test) as your key
Cannot sync Charges, PaymentIntents, Refunds, or Payouts
Problem:
- The object you need is not in the schema selection list
Solutions:
- The v1 connector exposes only the nine objects listed under Supported Objects. Charges, PaymentIntents, Refunds, Disputes, Payouts, Transfers, SetupIntents, PaymentMethods, PromotionCodes, TaxRates, UsageRecords, SubscriptionItems, CreditNotes, and Plan are not included.
- Contact support with the object names you need
Test mode vs live mode mix-up
Problem:
- You expected production data but see only test transactions
Solutions:
- Check the key prefix -- test-mode keys (
sk_test_) return test data only, live-mode keys (sk_live_) return production - Replace the key via Edit Source > Stripe Secret Key, then run Test & Save again
- If you need both, create two separate sources, one per mode
Support
Need help? Contact us at support@supa-flow.io