Skip to main content
Stripe is a technology company that builds economic infrastructure for the internet, primarily focused on payment processing for online businesses. It provides APIs and tools for accepting payments, managing subscriptions, and handling financial transactions securely.

Configuring Stripe as a Source

In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Stripe option from the list of connectors. Click Next and you’ll be prompted to add your access.

1. Add account access

You’ll need to provide your Stripe API credentials to allow Nekt to access your data. The following configurations are available:
  • Client Secret: Your Stripe secret API key. You can find it in your Stripe Dashboard under Developers > API keys.
  • Account ID: (Optional) Your Stripe account ID. Required when authenticating on behalf of a connected account.
  • Start Date: The earliest date from which records will be synced.
  • Stripe Connect: (Default: false) Enable this if your Stripe account is a platform account that uses Stripe Connect features. When enabled, the following additional streams become available: Connect Accounts, Connect Application Fees, Connect Transfers, and Connect Subaccount Transfers.
  • Credit Balance: (Default: false) Enable this to retrieve Credit Balance data. When enabled, the Credit Balance Summary and Credit Balance Transaction streams become available.
Once you’re done, click Next.

2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.
Tip: The stream can be found more easily by typing its name.
Select the streams and click Next.

3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.
  • Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
  • Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
  • Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
  • Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
    • Incremental: every time the extraction happens, we’ll get only the new data - which is good if, for example, you want to keep every record ever fetched.
    • Full table: every time the extraction happens, we’ll get the current state of the data - which is good if, for example, you don’t want to have deleted data in your catalog.
Once you are done configuring, click Next.

4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Optionally, you can define some additional settings:
  • Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
  • Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
Once you are ready, click Next to finalize the setup.

5. Check your new source

You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.
For you to be able to see it on your Catalog, you need at least one successful source run.

Streams and Fields

Below you’ll find all available data streams from Stripe and their corresponding fields:
Stream for managing customer profiles and their associated data.Key Fields:
  • id - Unique identifier for the customer
  • name - Full name of the customer
  • email - Email address of the customer
  • phone - Phone number of the customer
  • description - Description of the customer
  • created - Timestamp when the customer was created
  • updated_at - Timestamp of the last update
Address & Shipping:
  • address - Billing address (city, country, line1, line2, postal_code, state)
  • shipping - Shipping details including address, name, and phone
Billing & Balance:
  • balance - Current balance on the customer’s account (in the smallest currency unit)
  • currency - Default currency for the customer
  • delinquent - Whether the customer has a past-due invoice
  • default_source - ID of the default payment source
  • invoice_prefix - Prefix for invoices generated from this customer
  • invoice_settings - Default invoice settings including default payment method and footer
Tax:
  • tax_exempt - Tax exemption status (none, exempt, or reverse)
  • tax_ids - Array of tax IDs associated with the customer
Metadata:
  • metadata - Set of key-value pairs for storing additional information
  • livemode - Whether the object exists in live mode or test mode
  • preferred_locales - Customer’s preferred locales for emails and invoices
Stream for managing recurring subscription data, including billing cycles, statuses, and associated items.Key Fields:
  • id - Unique identifier for the subscription
  • customer - ID of the customer associated with this subscription
  • status - Subscription status (e.g., active, canceled, incomplete, past_due, trialing, unpaid)
  • created - Timestamp when the subscription was created
  • updated_at - Timestamp of the last update
Billing Cycle:
  • current_period_start - Start of the current billing period
  • current_period_end - End of the current billing period
  • billing_cycle_anchor - Determines the date of the first full invoice
  • collection_method - How payment is collected (charge_automatically or send_invoice)
  • days_until_due - Number of days until invoice is due (for send_invoice)
Cancellation:
  • cancel_at - Scheduled cancellation date
  • cancel_at_period_end - Whether the subscription is set to cancel at the end of the current period
  • canceled_at - Timestamp when the subscription was canceled
  • cancellation_details - Details about the cancellation (comment, feedback, reason)
  • ended_at - Timestamp when the subscription ended
Pricing & Items:
  • items - Array of subscription items (each with id, price, quantity, and tax_rates)
  • default_payment_method - Default payment method for this subscription
  • currency - Currency for this subscription
Trial:
  • trial_start - Start date of the trial period
  • trial_end - End date of the trial period
  • trial_settings - Settings for the trial behavior
Metadata:
  • metadata - Set of key-value pairs for storing additional information
  • livemode - Whether the object exists in live mode or test mode
  • schedule - ID of the subscription schedule that manages this subscription
Stream for individual line items within subscriptions. This stream is a child of Subscriptions and requires the Subscriptions stream to be enabled.Key Fields:
  • id - Unique identifier for the subscription item
  • subscription - ID of the parent subscription
  • quantity - Quantity of the plan to subscribe to
  • created - Timestamp when the subscription item was created
  • updated_at - Timestamp of the last update
Price:
  • price.id - ID of the price
  • price.product - ID of the associated product
  • price.currency - Currency of the price
  • price.unit_amount - Unit amount in the smallest currency unit
  • price.recurring - Recurring billing settings (interval, interval_count, usage_type)
  • price.type - Whether the price is one_time or recurring
Billing:
  • billing_thresholds - Usage threshold that triggers invoice generation
  • tax_rates - Array of tax rates applied to this item
  • discounts - Discounts applied to this item
Stream for managing the lifecycle of subscriptions through multiple phases, allowing for future pricing changes and plan transitions.Key Fields:
  • id - Unique identifier for the subscription schedule
  • customer - ID of the customer
  • subscription - ID of the managed subscription
  • status - Schedule status (active, canceled, completed, not_started, released)
  • created - Timestamp when the schedule was created
  • updated_at - Timestamp of the last update
Phase Configuration:
  • phases - Array of schedule phases, each containing:
    • start_date - Start date of the phase
    • end_date - End date of the phase
    • items - Subscription items for this phase (price, quantity, tax_rates)
    • billing_cycle_anchor - Anchor for the billing cycle
    • collection_method - Payment collection method
    • currency - Currency for the phase
    • default_payment_method - Default payment method
    • discounts - Discounts applied in this phase
    • proration_behavior - How prorations are handled
Current Phase:
  • current_phase - Start and end dates of the current active phase
Behavior:
  • end_behavior - What happens when the schedule ends (cancel, release)
  • default_settings - Default settings applied to all phases
Metadata:
  • metadata - Set of key-value pairs for storing additional information
  • livemode - Whether the object exists in live mode or test mode
Stream for billing invoices generated for subscriptions and one-time charges.Key Fields:
  • id - Unique identifier for the invoice
  • customer - ID of the customer
  • charge - ID of the charge generated for this invoice
  • status - Invoice status (draft, open, paid, uncollectible, void)
  • currency - Currency of the invoice
  • updated_at - Timestamp of the last update
Amounts:
  • amount_due - Final amount due (in smallest currency unit)
  • amount_paid - Amount already paid
  • amount_remaining - Remaining amount to be paid
  • subtotal - Subtotal before taxes and discounts
  • total - Total after taxes and discounts
  • tax - Amount of tax applied
Billing:
  • collection_method - How payment is collected
  • due_date - Date by which payment is due
  • auto_advance - Whether the invoice will be automatically finalized
  • billing_reason - Reason for the invoice creation
Customer Details:
  • customer_email - Customer’s email at time of invoice creation
  • customer_name - Customer’s name at time of invoice creation
  • customer_address - Customer’s address at time of invoice creation
URLs:
  • hosted_invoice_url - URL for the hosted invoice page
  • invoice_pdf - URL for the invoice PDF
Metadata:
  • livemode - Whether the object exists in live mode or test mode
  • description - Description of the invoice
Stream for individual line items within invoices. This stream is a child of Invoices and requires the Invoices stream to be enabled.Key Fields:
  • id - Unique identifier for the line item
  • invoice - ID of the parent invoice
  • subscription - ID of the associated subscription
  • subscription_item - ID of the associated subscription item
  • description - Description of the line item
  • updated_at - Timestamp of the last update
Amounts:
  • amount - Amount of the line item (in smallest currency unit)
  • amount_excluding_tax - Amount excluding tax
  • unit_amount - Unit amount
  • unit_amount_excluding_tax - Unit amount excluding tax
Period:
  • period.start - Start of the billing period for this line item
  • period.end - End of the billing period for this line item
Price:
  • price.id - ID of the price
  • price.product - ID of the associated product
  • price.currency - Currency
  • price.unit_amount - Unit price amount
  • price.recurring - Recurring billing settings
Adjustments:
  • proration - Whether this is a proration
  • proration_details - Details about the prorated amount
  • discount_amounts - Applied discount amounts
  • pretax_credit_amounts - Credit amounts applied before tax
Stream for pending invoice items that haven’t yet been included in an invoice.Key Fields:
  • id - Unique identifier for the invoice item
  • customer - ID of the customer
  • invoice - ID of the invoice this item is associated with (if finalized)
  • subscription - ID of the associated subscription
  • subscription_item - ID of the associated subscription item
  • description - Description of the item
  • updated_at - Timestamp of the last update
Amounts:
  • amount - Amount of the item (in smallest currency unit)
  • currency - Currency
  • unit_amount - Unit amount
  • quantity - Quantity
Period:
  • period.start - Start of the service period
  • period.end - End of the service period
Price:
  • price.id - ID of the price
  • price.product - ID of the associated product
  • price.recurring - Recurring billing settings
Flags:
  • proration - Whether this is a proration item
  • discountable - Whether discounts can be applied
Stream for payment attempts, both successful and failed. Each charge represents a single attempt to move money into your Stripe account.Key Fields:
  • id - Unique identifier for the charge
  • customer - ID of the customer
  • payment_intent - ID of the associated payment intent
  • invoice - ID of the associated invoice
  • status - Charge status (succeeded, pending, failed)
  • created - Timestamp when the charge was created
  • updated_at - Timestamp of the last update
Amounts:
  • amount - Amount charged (in smallest currency unit)
  • amount_captured - Amount that was captured
  • amount_refunded - Amount that has been refunded
  • currency - Currency of the charge
Payment Method:
  • payment_method - ID of the payment method used
  • payment_method_details - Details about the payment method (card, bank transfer, etc.)
  • billing_details - Billing information (name, email, phone, address)
Status & Outcome:
  • captured - Whether the charge was captured
  • paid - Whether the charge was paid
  • refunded - Whether the charge has been fully refunded
  • disputed - Whether the charge has been disputed
  • outcome - Network outcome of the charge (network_status, risk_level, risk_score)
  • failure_code - Error code explaining the charge failure
  • failure_message - Human-readable message explaining the failure
Shipping:
  • shipping - Shipping information (address, carrier, name, tracking_number)
Refunds:
  • refunds - Array of refund objects associated with this charge
Metadata:
  • metadata - Set of key-value pairs
  • description - Description of the charge
  • statement_descriptor - Text appearing on the bank statement
Stream for payment intents, which represent the full lifecycle of a payment from creation to completion.Key Fields:
  • id - Unique identifier for the payment intent
  • customer - ID of the customer
  • invoice - ID of the associated invoice
  • latest_charge - ID of the latest charge attempt
  • status - Payment intent status (requires_payment_method, requires_confirmation, requires_action, processing, requires_capture, canceled, succeeded)
  • created - Timestamp when the payment intent was created
  • updated_at - Timestamp of the last update
Amounts:
  • amount - Total amount intended to be collected (in smallest currency unit)
  • amount_capturable - Amount that can be captured
  • amount_received - Amount that was received
  • currency - Currency
Payment Configuration:
  • payment_method - ID of the payment method
  • payment_method_types - Array of allowed payment method types
  • capture_method - When to capture the payment (automatic or manual)
  • confirmation_method - Confirmation method (automatic or manual)
  • setup_future_usage - How the payment method will be used in the future
Error Handling:
  • last_payment_error - Details about the last payment failure
  • cancellation_reason - Reason for cancellation
  • canceled_at - Timestamp of cancellation
Shipping:
  • shipping - Shipping details
Metadata:
  • metadata - Set of key-value pairs
  • description - Description
  • statement_descriptor - Text appearing on bank statement
Stream for all transactions that have contributed to or will contribute to the Stripe account balance.Key Fields:
  • id - Unique identifier for the balance transaction
  • source - ID of the source object (charge, refund, payout, etc.)
  • type - Type of transaction (charge, refund, payout, payment, transfer, etc.)
  • status - Transaction status (available, pending)
  • reporting_category - Category for reporting purposes
  • created - Timestamp when the balance transaction was created
Amounts:
  • amount - Gross amount of the transaction (in smallest currency unit)
  • fee - Fees paid for this transaction
  • net - Net amount of the transaction
  • currency - Currency
Fee Details:
  • fee_details - Itemized fee breakdown (amount, application, currency, description, type)
Exchange:
  • exchange_rate - Exchange rate used for currency conversion
  • available_on - Date when the funds become available in the account balance
Stream for products and services offered for sale.Key Fields:
  • id - Unique identifier for the product
  • name - Name of the product
  • active - Whether the product is currently available for purchase
  • default_price - ID of the default price for this product
  • description - Description of the product
  • created - Timestamp when the product was created
  • updated_at - Timestamp of the last update
Details:
  • features - Array of product features (name)
  • images - Array of image URLs
  • url - URL for the product
  • unit_label - Label used on invoices and receipts
  • statement_descriptor - Text appearing on bank statements
  • tax_code - Tax code for the product
Shipping:
  • shippable - Whether the product is shipped
  • package_dimensions - Physical dimensions (height, length, weight, width)
Metadata:
  • metadata - Set of key-value pairs
  • livemode - Whether the object exists in live mode or test mode
Stream for pricing configurations for products. A product can have multiple prices for different billing intervals or currencies.Key Fields:
  • id - Unique identifier for the price
  • product - ID of the associated product
  • active - Whether the price can be used for new purchases
  • type - Price type (one_time or recurring)
  • currency - Currency for the price
  • created - Timestamp when the price was created
  • updated_at - Timestamp of the last update
Amount:
  • unit_amount - Unit amount in the smallest currency unit
  • unit_amount_decimal - Same as unit_amount but with decimal precision
  • billing_scheme - How the price is calculated (per_unit or tiered)
Recurring Settings (for recurring prices):
  • recurring.interval - Billing interval (day, week, month, year)
  • recurring.interval_count - Number of intervals between billing
  • recurring.usage_type - How usage is aggregated (licensed or metered)
  • recurring.aggregate_usage - Aggregation mode for metered usage
  • recurring.trial_period_days - Number of trial days
Tiered Pricing:
  • tiers - Array of pricing tiers (flat_amount, unit_amount, up_to)
  • tiers_mode - How tiers are applied (graduated or volume)
Other:
  • lookup_key - A lookup key for the price
  • nickname - A brief description
  • tax_behavior - How tax is applied (exclusive, inclusive, unspecified)
  • metadata - Set of key-value pairs
Stream for discount coupons that can be applied to customers or subscriptions.Key Fields:
  • id - Unique identifier for the coupon
  • name - Name of the coupon
  • valid - Whether the coupon can be redeemed
  • created - Timestamp when the coupon was created
  • updated_at - Timestamp of the last update
Discount Configuration:
  • amount_off - Fixed amount to discount (in smallest currency unit)
  • percent_off - Percentage to discount
  • currency - Currency for amount_off discounts
  • duration - How long the discount applies (forever, once, repeating)
  • duration_in_months - If repeating, number of months it applies
  • applies_to - Products the coupon can be applied to
Usage:
  • max_redemptions - Maximum number of times the coupon can be redeemed
  • times_redeemed - Number of times it has been redeemed
  • redeem_by - Date after which the coupon can no longer be redeemed
Metadata:
  • metadata - Set of key-value pairs
  • livemode - Whether the object exists in live mode or test mode
Stream for shareable promotion codes that customers can apply when checking out.Key Fields:
  • id - Unique identifier for the promotion code
  • code - The actual code customers enter
  • active - Whether the promotion code can be used
  • coupon - The coupon this promotion code applies
  • customer - Customer this code is restricted to (if any)
  • created - Timestamp when the promotion code was created
  • updated_at - Timestamp of the last update
Usage:
  • max_redemptions - Maximum total number of redemptions
  • times_redeemed - Number of times this code has been redeemed
  • expires_at - Date after which the code expires
Restrictions:
  • restrictions.first_time_transaction - Whether it can only be used for first-time transactions
  • restrictions.minimum_amount - Minimum cart value required
  • restrictions.minimum_amount_currency - Currency for the minimum amount
Metadata:
  • metadata - Set of key-value pairs
  • livemode - Whether the object exists in live mode or test mode
Stream for billing credit grants issued to customers. Available when Credit Balance is enabled in the source configuration.Key Fields:
  • id - Unique identifier for the credit grant
  • name - Name of the credit grant
  • customer - ID of the customer receiving the credit
  • category - Category of the credit grant (paid or promotional)
  • created - Timestamp when the grant was created
Amount:
  • amount.monetary.value - Credit value (in smallest currency unit)
  • amount.monetary.currency - Currency of the credit
  • amount.type - Type of credit amount
Applicability:
  • applicability_config.scope.price_type - Which price types the credit applies to
Lifecycle:
  • effective_at - When the credit becomes effective
  • expires_at - When the credit expires
  • voided_at - When the credit was voided (if applicable)
Metadata:
  • livemode - Whether the object exists in live mode or test mode
Stream for the current credit balance summary for each customer. This is a child of Customers and only available when Credit Balance is enabled in the source configuration.Key Fields:
  • customer - ID of the customer
  • updated_at - Timestamp of the last update
Balances: Each entry in the balances array contains:
  • available_balance.monetary.value - Available credit value (in smallest currency unit)
  • available_balance.monetary.currency - Currency of the available balance
  • available_balance.type - Type of the available balance
  • ledger_balance.monetary.value - Total ledger balance value
  • ledger_balance.monetary.currency - Currency of the ledger balance
  • ledger_balance.type - Type of the ledger balance
Metadata:
  • livemode - Whether the object exists in live mode or test mode
Stream for individual transactions that affect a customer’s credit balance. This is a child of Customers and only available when Credit Balance is enabled in the source configuration.Key Fields:
  • id - Unique identifier for the transaction
  • customer - ID of the customer (derived from parent context)
  • type - Transaction type (credit or debit)
  • credit_grant - ID of the credit grant associated with this transaction
  • created - Timestamp when the transaction was created
  • effective_at - When the transaction takes effect
  • updated_at - Timestamp of the last update
Credit (for credit transactions):
  • credit.type - Reason for the credit
  • credit.amount.monetary.value - Credit amount (in smallest currency unit)
  • credit.amount.monetary.currency - Currency
  • credit.credits_application_invoice_voided - Invoice details if a previously applied credit was reversed
Debit (for debit transactions):
  • debit.type - Reason for the debit
  • debit.amount.monetary.value - Debit amount (in smallest currency unit)
  • debit.amount.monetary.currency - Currency
  • debit.credits_applied - Invoice and line item the credit was applied to
Metadata:
  • livemode - Whether the object exists in live mode or test mode
Stream for connected accounts on a Stripe Connect platform. Only available when Stripe Connect is enabled in the source configuration.Key Fields:
  • id - Unique identifier for the connected account
  • email - Email address of the account
  • country - Country of the account
  • type - Account type (standard, express, or custom)
  • created - Timestamp when the account was created
Status:
  • charges_enabled - Whether charges can be processed
  • payouts_enabled - Whether payouts can be made
  • details_submitted - Whether account details have been submitted
Business Info:
  • business_type - Entity type (individual, company, etc.)
  • business_profile - Business details (name, URL, support contact, MCC)
  • capabilities - Payment capabilities status for each payment method
Verification:
  • requirements - Currently outstanding requirements to enable capabilities
  • future_requirements - Requirements that become required in the future
Metadata:
  • metadata - Set of key-value pairs
  • default_currency - Default currency for the account
Stream for transfers made to connected accounts. Only available when Stripe Connect is enabled.Key Fields:
  • id - Unique identifier for the transfer
  • destination - ID of the connected account receiving the transfer
  • amount - Amount transferred (in smallest currency unit)
  • currency - Currency of the transfer
  • created - Timestamp when the transfer was created
Stream for fees collected from connected accounts on your platform. Only available when Stripe Connect is enabled.Key Fields:
  • id - Unique identifier for the application fee
  • account - ID of the connected account the fee was collected from
  • charge - ID of the charge that the fee was taken from
  • amount - Amount of the application fee (in smallest currency unit)
  • currency - Currency of the fee
  • created - Timestamp when the fee was collected
Stream for transfers between the platform account and connected subaccounts. Only available when Stripe Connect is enabled.
Stream for all Stripe events, representing every change that occurs on your account. Useful for auditing and building event-driven workflows.
The events stream can only bring historical data from the last 30 days.
Key Fields:
  • id - Unique identifier for the event
  • type - The type of event (e.g., charge.succeeded, customer.subscription.updated)
  • created - Timestamp when the event was created
  • api_version - The Stripe API version used to render the event data
Event Data:
  • data_object - JSON string of the object associated with the event at the time it occurred
  • data_previous_attributes - JSON string of the fields that were changed and their previous values (only present for *.updated events)
Delivery:
  • pending_webhooks - Number of webhooks yet to be successfully delivered
  • request.id - ID of the API request that triggered the event
  • request.idempotency_key - Idempotency key of the API request
Metadata:
  • livemode - Whether the event occurred in live mode or test mode

Data Model

The following diagram illustrates the relationships between the core data streams in Stripe. The arrows indicate the join keys that link the different entities, providing a clear overview of the data structure.

Use Cases for Data Analysis

This guide outlines valuable business intelligence use cases when consolidating Stripe data, along with ready-to-use SQL queries that you can run on Explorer.

1. Monthly Revenue Overview

Track your monthly recurring and one-time revenue using invoice and charge data. Business Value:
  • Monitor revenue trends over time
  • Identify periods of growth or decline
  • Compare paid vs. outstanding invoices
WITH monthly_revenue AS (
   SELECT
      DATE_FORMAT(DATE(i.created), '%Y-%m') AS month,
      SUM(CASE WHEN i.status = 'paid' THEN i.amount_paid ELSE 0 END) / 100.0 AS paid_revenue,
      SUM(CASE WHEN i.status = 'open' THEN i.amount_due ELSE 0 END) / 100.0 AS outstanding_revenue,
      SUM(CASE WHEN i.billing_reason = 'subscription_cycle' THEN i.amount_paid ELSE 0 END) / 100.0 AS recurring_revenue,
      SUM(CASE WHEN i.billing_reason != 'subscription_cycle' THEN i.amount_paid ELSE 0 END) / 100.0 AS one_time_revenue,
      COUNT(DISTINCT CASE WHEN i.status = 'paid' THEN i.id END) AS paid_invoices,
      COUNT(DISTINCT i.id) AS total_invoices,
      COUNT(DISTINCT i.customer) AS paying_customers
   FROM
      nekt_raw.stripe_invoices i
   WHERE
      i.created >= CURRENT_DATE - INTERVAL '12' MONTH
   GROUP BY
      DATE_FORMAT(DATE(i.created), '%Y-%m')
)
SELECT
   month,
   ROUND(paid_revenue, 2) AS paid_revenue,
   ROUND(outstanding_revenue, 2) AS outstanding_revenue,
   ROUND(recurring_revenue, 2) AS recurring_revenue,
   ROUND(one_time_revenue, 2) AS one_time_revenue,
   paid_invoices,
   total_invoices,
   paying_customers,
   ROUND(paid_revenue / NULLIF(paying_customers, 0), 2) AS avg_revenue_per_customer
FROM
   monthly_revenue
ORDER BY
   month DESC
monthpaid_revenueoutstanding_revenuerecurring_revenueone_time_revenuepaid_invoicestotal_invoicespaying_customersavg_revenue_per_customer
2025-0248,320.002,150.0042,800.005,520.00312328298162.15
2025-0145,680.001,890.0040,200.005,480.00295310281162.56
2024-1252,140.003,200.0046,300.005,840.00334355318163.96
2024-1143,920.001,560.0038,750.005,170.00280292267164.49

2. Subscription Churn Analysis

Identify subscription cancellations and churn trends to understand customer retention. Business Value:
  • Track monthly churn rates
  • Identify high-churn periods
  • Understand cancellation reasons to improve retention
  • Monitor trial conversion rates
WITH subscription_cohort AS (
   SELECT
      DATE_FORMAT(DATE(s.created), '%Y-%m') AS cohort_month,
      DATE_FORMAT(DATE(s.canceled_at), '%Y-%m') AS churn_month,
      s.id AS subscription_id,
      s.customer,
      s.status,
      s.cancel_at_period_end,
      s.cancellation_details.reason AS cancellation_reason,
      s.trial_start IS NOT NULL AS had_trial
   FROM
      nekt_raw.stripe_subscriptions s
),
monthly_churn AS (
   SELECT
      churn_month,
      COUNT(DISTINCT subscription_id) AS churned_subscriptions,
      COUNT(DISTINCT CASE WHEN cancellation_reason = 'cancellation_requested' THEN subscription_id END) AS voluntary_churn,
      COUNT(DISTINCT CASE WHEN cancellation_reason IN ('payment_failed', 'payment_disputed') THEN subscription_id END) AS involuntary_churn,
      COUNT(DISTINCT CASE WHEN had_trial THEN subscription_id END) AS churned_trials
   FROM
      subscription_cohort
   WHERE
      churn_month IS NOT NULL
      AND churn_month >= DATE_FORMAT(CURRENT_DATE - INTERVAL '12' MONTH, '%Y-%m')
   GROUP BY
      churn_month
),
monthly_active AS (
   SELECT
      DATE_FORMAT(DATE(created), '%Y-%m') AS month,
      COUNT(DISTINCT id) AS new_subscriptions
   FROM
      nekt_raw.stripe_subscriptions
   WHERE
      created >= CURRENT_DATE - INTERVAL '12' MONTH
   GROUP BY
      DATE_FORMAT(DATE(created), '%Y-%m')
)
SELECT
   mc.churn_month AS month,
   mc.churned_subscriptions,
   mc.voluntary_churn,
   mc.involuntary_churn,
   mc.churned_trials,
   COALESCE(ma.new_subscriptions, 0) AS new_subscriptions,
   ROUND(mc.churned_subscriptions * 100.0 / NULLIF(COALESCE(ma.new_subscriptions, 0) + mc.churned_subscriptions, 0), 2) AS churn_rate_pct
FROM
   monthly_churn mc
   LEFT JOIN monthly_active ma ON mc.churn_month = ma.month
ORDER BY
   month DESC
monthchurned_subscriptionsvoluntary_churninvoluntary_churnchurned_trialsnew_subscriptionschurn_rate_pct
2025-022819635434.15
2025-012215524831.43
2024-123121736233.33
2024-111913424131.67

Implementation Notes

Data Quality Considerations

  • All monetary amounts are provided in the smallest currency unit (e.g., cents for USD). Divide by 100 to get the standard value in queries.
  • Incremental sync uses the updated_at field for most streams. Use created for Balance Transactions.
  • Some streams (Subscription Items, Invoice Line Items) are children of parent streams and require the parent stream to be enabled.

Optional Features

  • The Connect streams are only available when Stripe Connect is enabled in the source configuration. Enable this if you manage a marketplace or platform using Stripe Connect.
  • The Credit Balance streams are only available when Credit Balance is enabled in the source configuration.

API Limits & Performance

  • Selecting all streams can increase extraction times significantly.
  • For faster extractions, select only the streams necessary for your analysis.
  • Parent-child stream pairs (e.g., Invoices + Invoice Line Items) require both to be selected if you need the child data.

Skills for agents

Download Stripe skills file

Stripe connector documentation as plain markdown, for use in AI agent contexts.