C
Requirement-by-Requirement Breakdown
01Unified subscription and discount management across Commerce Tools(B2C shopping cart) and Stripe to eliminate duplicate product catalogs and inconsistent coupon behavior
Native/ConfigIntegration Build
Stripe's response, "How to achieve this"
Stripe should serve as the single source of truth for all subscription pricing, products, and discounts. CommerceTools handles your e-commerce catalog and storefront, while Stripe owns the billing relationship.
- Define all subscription products and prices in Stripe — Create Product and Price objects in Stripe for each membership tier (Consumer, Pro, etc.) Native/Config
- Define all coupons and promotion codes in Stripe — This ensures discount logic is centralized and consistent regardless of where a customer checks out Native/Config
- Sync catalog data to CommerceTools via webhooks — Subscribe to product.updated, price.created, and price.updated webhook events to push pricing changes from Stripe to CommerceTools automatically Integration Build
- At checkout, pass the Stripe Price ID — When a customer selects a membership in CommerceTools, the checkout flow should reference the Stripe Price ID to create the subscription, ensuring pricing is always current Integration Build
- For bulk/scheduled sync, consider Stripe Data Pipeline to export product and pricing data on an ongoing basis to your data warehouse, which can feed CommerceTools Integration Build
Key benefit: Eliminating the duplicate catalog means all pricing and discount changes happen in one place (Stripe) and propagate automatically.
Relevant documentation: Products & Prices · Webhooks · Stripe Data Pipeline
02Flexible checkout and customer portal experience with customizable branding, messaging, and embedded subscription flows
Native/ConfigIntegration Build
Stripe's response, "How to achieve this"
Stripe provides both a hosted Customer Portal (for subscription management) and Checkout (for purchase flows), both of which are fully brandable with no custom development required.
- Configure branding in the Stripe Dashboard → Settings → Branding Native/Config
- Upload your PADI logo and icon
- Set brand colors (background, buttons, accent)
- Choose font and shape preferences
- Enable the Customer Portal → Settings → Customer Portal Native/Config
- Toggle which actions subscribers can take (upgrade, downgrade, cancel, update payment method, view invoices)
- Set messaging and configure available plans
- Choose your checkout integration model: Native/ConfigIntegration Build
- Embedded Checkout — Renders within your existing site via iframe for a seamless experience
- Hosted Checkout — Redirects to a Stripe-hosted page (fastest to implement, fully branded)
- Share the portal link — Provide subscribers a link or embed it in your member area. Customers authenticate via email verification (no passwords required). Native/Config
- Localization — The portal automatically adjusts language based on the customer's browser locale Native/Config
Key benefit: Full brand control with no frontend development required for standard flows.
Relevant documentation: Customer Portal Overview · Configure the Portal · Embedded Checkout Quickstart
03Native promotion and offer management capabilities without requiring extensive custom development work
Native/ConfigIntegration BuildValidate
Stripe's response, "How to achieve this"
Stripe Billing includes a complete promotion engine — no custom development required for standard promotional scenarios.
- Create Coupons (the discount definition): Native/Config
- Percentage off (e.g., 25% off) or fixed amount off (e.g., $10 off)
- Set duration: once (first invoice only), repeating (N months), or forever
- Restrict to specific products using applies_to (e.g., only Pro memberships)
- Set expiration dates and maximum redemptions
- Multi-currency support for global markets
- Create Promotion Codes (the customer-facing code): Native/Config
- Link one or more codes to a coupon (e.g., "WELCOME25" → 25% off coupon)
- Set restrictions: first-time customers only, minimum purchase amount, specific customer, expiration date
- Control max redemptions per code
- Customers can enter codes at Checkout or in the Customer Portal
- Enable promotion codes in the Customer Portal — Toggle in Dashboard → Customer Portal settings so existing subscribers can apply codes to their active subscription Native/Config
- For advanced discount logic (e.g., tiered discounts, conditional offers based on subscription length): Stripe's Custom Script Coupons allow you to define custom computation logic beyond standard percentage/amount discounts Integration BuildValidate
Key benefit: Full promotional lifecycle management through the Dashboard or API — create, distribute, track redemptions, and retire offers without engineering work.
Validate with Stripe: confirm Custom Script Coupons' GA status, plan tier, pricing, and limits before relying on it for tiered or subscription-length-based discounts.
Relevant documentation: Coupons · Promotion Codes · Custom Script Coupons
04Ability to create, target, and automate retention, winback, cohort-based, and subscriber-specific offers within the subscription platform
Native/ConfigIntegration Build
Stripe's response, "How to achieve this"
Stripe provides native cancellation-time retention offers plus a robust event system that powers lifecycle campaigns through your marketing platform.
A. Cancellation-time save offers (native in Stripe):
- Enable the cancellation page in Customer Portal settings Native/Config
- Select a retention coupon — When a subscriber initiates cancellation, they're presented with an offer to stay (e.g., "Stay and get 30% off for 3 months") Native/Config
- For per-customer targeting — Use the API to create portal sessions with flow_data.subscription_cancel.retention.coupon_offer to present different retention offers to different customer segments Integration Build
- Collect cancellation reasons — Enable reason collection to inform future retention strategies (data available in webhooks and reporting) Native/Config
B. Winback campaigns (Stripe events + your marketing platform):
- Subscribe to customer.subscription.deleted webhook — This fires when a cancellation is finalized Integration Build
- Route to your marketing platform (e.g., Salesforce Marketing Cloud) — Trigger a timed reactivation journey (e.g., Day 7, Day 30, Day 60 emails) Integration Build
- Include a Stripe Payment Link or Checkout link with a pre-applied promotion code — Makes it frictionless for the former subscriber to reactivate Integration Build
C. Cohort-based and subscriber-specific offers:
- Tag subscribers with metadata — Use Stripe's metadata fields on Customer or Subscription objects to identify cohorts (e.g., cohort: 2024-Q1, segment: pro-annual) Native/Config
- Use your CDP to identify target cohorts — Based on Stripe data (subscription age, plan type, usage patterns) Integration Build
- Apply subscriber-specific promotion codes via API — Promotion codes can be restricted to a single customer, enabling personalized offers Integration Build
Relevant documentation: Cancellation Page · Portal Sessions with Retention Offers · Subscription Webhooks
05Subscriber segmentation and lifecycle management capabilities integrated with marketing systems for personalized engagement and retention campaigns
Native/ConfigIntegration Build
Stripe's response, "How to achieve this"
Stripe provides real-time event streams and bulk data exports that feed your marketing and analytics systems with complete subscriber lifecycle data.
- Configure webhook endpoints for your CDP/marketing platform to receive real-time Stripe events: Integration Build
- customer.subscription.created — New subscriber
- customer.subscription.updated — Plan change, renewal, status change
- customer.subscription.deleted — Cancellation finalized
- customer.subscription.paused / resumed
- customer.subscription.trial_will_end — Trial ending soon
- invoice.payment_failed — Payment issue (at-risk subscriber)
- invoice.paid — Successful renewal
- Enable Stripe Data Pipeline for bulk data sync: Native/ConfigIntegration Build
- Automated, ongoing export of all subscriber data to your data warehouse (Snowflake, Redshift, S3, GCS, or Azure)
- Includes subscription status, plan details, payment history, discount usage
- Feeds your CDP for segmentation and audience building
- Use metadata for segmentation tagging: Native/Config
- Attach custom key-value pairs to customers and subscriptions
- Examples: membership_type, join_source, region, lifecycle_stage
- Available in all webhook payloads and data exports
- Build marketing journeys triggered by Stripe events: Integration Build
- New member welcome series → triggered by customer.subscription.created
- Upgrade nudge → triggered by subscription age milestone (via CDP logic)
- At-risk intervention → triggered by invoice.payment_failed
- Renewal celebration → triggered by invoice.paid on annual cycle
Relevant documentation: Subscription Webhooks · Data Pipeline · Customer Metadata
06Simplified membership upgrade, downgrade, pause, reactivation, and grandfathered pricing management across global markets and tax structures
Native/ConfigIntegration BuildValidate
Stripe's response, "How to achieve this"
All of these lifecycle operations are native to Stripe Billing with automatic proration handling.
Upgrades & Downgrades:
- Change the Price on a subscription item via API or let subscribers self-serve in the Customer Portal Native/Config
- Stripe automatically calculates prorations — charging the difference on upgrade, crediting on downgrade Native/Config
- Configure proration behavior: generate prorations immediately, at next invoice, or skip prorations entirely Native/Config
- Scheduled downgrades: Subscribers can select a lower tier that takes effect at the end of their current billing period Native/Config
Pause & Resume:
- Call pause_collection on a subscription — collection stops but the subscription remains active Integration Build
- Options: pause indefinitely or until a specific date (e.g., "pause for 2 months") Native/Config
- Configure what happens with invoices during pause: keep as draft, mark uncollectible, or void Native/Config
- Resume anytime via API — optionally reset or maintain the billing cycle anchor Integration Build
Reactivation (after cancellation):
- For subscriptions canceled at period end: simply remove the cancellation before the period ends Native/Config
- For fully canceled subscriptions: create a new subscription (optionally with a reactivation coupon) Native/Config
- Use Payment Links with pre-applied promotion codes for frictionless reactivation from email campaigns Integration Build
Grandfathered Pricing:
- Existing subscribers automatically remain on their current Price — Stripe never migrates them without your explicit action Native/Config
- Create new Price objects for updated rates; new subscribers get the new price, existing subscribers stay on the old one Native/Config
- When ready to migrate legacy subscribers, use Subscription Schedules to pre-program the transition: Native/ConfigValidate
- Example: "On January 1, move from legacy price to new price"
- Can schedule up to 10 phases of price changes per subscription
- For global markets: Stripe Tax automatically adjusts tax calculations based on subscriber location across 50+ countries Native/Config
Validate with Stripe: this is the "before/after pricing" question raised internally. Confirm how Subscription Schedules interact with proration for our specific grandfathered-price migration scenarios before assuming default behavior covers them.
Relevant documentation: Upgrade/Downgrade · Pause Subscriptions · Cancel Subscriptions · Subscription Schedules · Stripe Tax
07Centralized pricing management for Consumer and Pro memberships with synchronized updates across Stripe, Commerce Tools, and downstream systems
Native/ConfigIntegration Build
Stripe's response, "How to achieve this"
Establish Stripe as the authoritative source for all membership pricing, with automated propagation to downstream systems.
- Define all pricing in Stripe — Create Price objects for every membership variant (Consumer Monthly, Consumer Annual, Pro Monthly, Pro Annual, regional variants, etc.) Native/Config
- Subscribe to pricing webhooks: Integration Build
- product.updated — Product metadata or name changed
- price.created — New price tier added
- price.updated — Existing price modified (note: core price attributes like amount are immutable; new prices are created instead)
- Build a lightweight sync service (or use your integration platform) that: Integration Build
- Receives Stripe webhook events
- Transforms data for each downstream system
- Updates CommerceTools product catalog
- Updates SFMC subscriber attributes
- Updates any other systems that display or reference pricing
- For scheduled price changes to existing subscribers: Native/ConfigIntegration Build
- Use Subscription Schedules to program future transitions
- Example: "All Consumer Monthly subscribers move from $29/mo to $34/mo effective March 1"
- Combine with notification workflows to inform subscribers in advance
- Use Stripe Data Pipeline as a backup sync mechanism — bulk export ensures downstream systems stay current even if a webhook is missed Native/ConfigIntegration Build
Relevant documentation: Products & Prices · Manage Prices · Subscription Schedules
08Improved handling of subscription billing operations, including streamlined B2B annual renewal processing and reduced manual reconciliation effort
Native/Config
Stripe's response, "How to achieve this"
Stripe supports both automatic and manual payment collection for B2B billing, with built-in reconciliation capabilities.
- Set collection method to send_invoice for B2B customers: Native/Config
- Invoices are emailed to the customer for manual payment
- Configure payment terms (Net 30, Net 60, etc.) via days_until_due
- Supported payment methods: bank transfer, wire transfer, ACH Credit, check
- Configure automated reminders: Native/Config
- Set up to 3 reminder emails for overdue invoices
- Customize reminder timing (e.g., 7 days before due, on due date, 7 days past due)
- Leverage automatic reconciliation: Native/Config
- Stripe generates virtual bank account numbers for ACH Credit / bank transfer payments
- Incoming payments are automatically matched to outstanding invoices
- Eliminates manual matching for wire/ACH payments
- For auto-pay B2B customers, use charge_automatically — payment is collected on the renewal date from the stored payment method with Smart Retries handling any failures Native/Config
- Monitor with accounts receivable reporting: Native/Config
- AR aging reports in the Stripe Dashboard
- Invoice status tracking (draft → open → paid / void / uncollectible)
- All available via API and Data Pipeline for integration with your finance systems
- Automate renewal invoicing: Native/Config
- Stripe automatically generates the renewal invoice based on the subscription billing cycle
- No manual intervention needed — the invoice is created, finalized, and sent per your configuration
Axelerant follow-up (not in Stripe's response): confirm with the Club business team which subscriber segment this actually applies to. It's unclear whether this maps to a Pro or wholesale membership tier rather than individual Consumer subscribers.
Relevant documentation: Collection Methods · Stripe Invoicing · Revenue Recovery
09Reliable credit card management capabilities, including stored payment migration support, expiration handling, failed payment notifications, and branded recovery communications
Native/ConfigIntegration BuildValidate
Stripe's response, "How to achieve this"
Stripe provides a comprehensive suite of automated tools for managing the payment method lifecycle — from migration through expiration and failure recovery.
Stored Payment Migration:
- Work with Stripe's migrations team to transfer stored card credentials (PANs) from your current processor Integration BuildValidate
- Stripe supports direct PAN migration from most major processors Native/Config
- Subscribers experience no interruption — their stored card simply "appears" in Stripe Native/Config
Automatic Card Updater (no action required):
- Stripe automatically participates in Visa Account Updater (VAU) and Mastercard Automatic Billing Updater (ABU) Native/Config
- When a customer's card is reissued (new number or expiry), Stripe updates the stored details automatically Native/Config
- No subscriber action required; no failed payment Native/Config
Failed Payment Recovery (configure once in Dashboard):
- Enable Smart Retries — Stripe's ML model determines the optimal time to retry failed payments (recovers ~57% of failed recurring charges) Native/Config
- Enable failed payment emails — Branded notifications sent to subscribers when a payment fails, with a one-click link to update their payment method Native/Config
- Enable expiring card emails — Proactive notifications sent before a card expires Native/Config
- Enable upcoming renewal emails — Notify subscribers before they're charged Native/Config
- Customize email branding — Add your logo, colors, and messaging in Dashboard → Branding Native/Config
Hosted Recovery Page:
- When a payment fails, the email contains a link to a branded page where the subscriber can update their card immediately Native/Config
- No development required — Stripe hosts and brands this page Native/Config
Implementation timeline: Configure all of the above in the Stripe Dashboard in under 30 minutes. No code changes needed.
Validate with Stripe: given our Braintree-to-Stripe migration history (roughly 10,000 stored cards lost in that cutover), get a concrete migration plan, timeline, and rollback approach directly from Stripe before any further migration work, rather than assuming "no interruption" applies cleanly.
Relevant documentation: Request a Data Migration · Revenue Recovery · Automatic Collection · Import Payment Methods
10Clear system-of-record ownership and event orchestration between Stripe, Salesforce Marketing Cloud, CDP, and related platforms
Architecture DecisionNative/ConfigIntegration Build
Stripe's response, "How to achieve this"
Define clear system-of-record boundaries and use Stripe's event system to orchestrate data flow between platforms.
Recommended Architecture:
| Domain | System of Record | Role |
| Subscription billing & pricing | Stripe | Processes payments, manages subscription lifecycle, generates invoices |
| Customer identity & segmentation | CDP | Unifies subscriber profiles, builds audiences |
| Marketing campaigns & communications | Salesforce Marketing Cloud | Sends campaigns, manages journeys |
| CRM & account management | Salesforce | Manages accounts, tracks relationships |
| E-commerce catalog & storefront | CommerceTools | Handles product display and shopping experience |
Architecture Decision
Implementation Steps:
- Configure Stripe webhook endpoints — Point to your integration layer / event bus Integration BuildArchitecture Decision
- Recommended: Use Amazon EventBridge as an event destination for fan-out to multiple consumers
- Alternative: Direct webhook endpoints per consumer system
- Map events to system actions: Architecture DecisionIntegration Build
| Stripe Event | CDP Action | SFMC Action | Salesforce Action |
| customer.subscription.created | Create/update subscriber profile | Trigger welcome journey | Update account record |
| customer.subscription.updated | Update attributes | Trigger relevant journey | Log activity |
| customer.subscription.deleted | Update churn flag | Trigger winback journey | Update opportunity |
| invoice.payment_failed | Flag at-risk | Trigger recovery journey | Alert account owner |
| invoice.paid | Confirm active | — | — |
- Enable Stripe Data Pipeline for batch synchronization as a complement to real-time webhooks Native/ConfigIntegration Build
- Implement idempotency — Stripe webhooks may be delivered more than once; use the event ID to deduplicate on your end Integration Build
Relevant documentation: Webhooks Overview · Event Destinations · Subscription Webhooks · Data Pipeline
11Automated data validation and address quality controls at collection points to reduce manual cleanup and customer service issues
Native/ConfigIntegration BuildValidate
Stripe's response, "How to achieve this"
Stripe provides built-in address collection with validation and autocomplete, reducing data quality issues at the point of entry.
- Use Stripe's Address Element (for custom integrations): Integration Build
- Embeddable UI component for collecting complete billing and shipping addresses
- Built-in validation ensures all required fields are completed correctly
- Google Maps-powered autocomplete available in 25 countries — reduces typos and incomplete entries significantly
- Configurable for billing or shipping mode
- Optional phone number collection
- Use Stripe Checkout (for hosted flows): Native/Config
- Address collection with autocomplete is built into the hosted Checkout page
- No additional configuration needed beyond enabling address collection
- Leverage Stripe Tax validation: Native/Config
- When Stripe Tax is enabled, it validates customer tax location
- Requires a complete, well-formed address for tax calculation — this enforces data quality as a natural side-effect
- For postal-level deliverability validation (verifying the address physically exists): Integration BuildValidate
- Supplement with a specialized address verification service at the application layer if needed for physical mail/credential delivery
- Stripe's validation covers format correctness and completeness, plus autocomplete minimizes user error
Countries with autocomplete support: United States, United Kingdom, Canada, Australia, Germany, France, Japan, and 18 additional countries.
Validate with Stripe: our member base spans well beyond the 25 autocomplete countries. Confirm what a supplementary deliverability check would take if that matters operationally, since Stripe's own validation stops at format and completeness.
Relevant documentation: Address Element · Collect Addresses · Stripe Tax
12Ability to support mixed-cart transactions, subscription discounting, and cross-platform coupon compatibility for a seamless customer experience
Native/ConfigIntegration BuildValidateArchitecture Decision
Stripe's response, "How to achieve this"
Stripe Checkout natively supports purchasing subscription items and one-time items in a single transaction.
Mixed-Cart Checkout:
- Create a Checkout Session with mode: subscription Integration Build
- Include both recurring Price IDs (membership) and one-time Price IDs (gear, courses, etc.) in the line_items array Integration Build
- The customer completes a single payment — the subscription is created and one-time items are charged immediately Native/Config
- Alternatively, use add_invoice_items when creating a subscription to add one-time charges to the first invoice Integration Build
Cross-Platform Coupon Compatibility:
- Define all promotions in Stripe as the authoritative source Native/Config
- Stripe coupons apply to: Checkout Sessions, subscriptions, invoices, quotes, and the Customer Portal Native/Config
- For CommerceTools cart-level discounts on non-subscription items: Configure CommerceTools to recognize the same promotion code strings and apply equivalent discounts for items outside the Stripe billing scope Integration Build
- Reconciliation approach: When a customer applies a code at checkout, validate it against Stripe's Promotion Code API — if valid, apply it to the Stripe subscription items; separately handle any CommerceTools-only cart items with matched logic Integration BuildValidate
Key consideration: For a fully unified coupon experience, we recommend processing all transactional items through Stripe (subscriptions AND one-time purchases) where possible. This eliminates cross-platform coupon reconciliation entirely. Architecture Decision
Validate with Stripe: ask whether Stripe has tooling to reduce the CommerceTools-side reconciliation work, or whether it is fully a CommerceTools-side build.
Relevant documentation: Mixed Cart in Checkout · Add Invoice Items · Promotion Codes
13Configurable subscription offer triggers, including cancellation-based save offers, reactivation incentives, and future-dated promotions for active subscribers
Native/ConfigIntegration Build
Stripe's response, "How to achieve this"
A combination of Stripe's native portal capabilities, Subscription Schedules, and event-driven marketing automation.
A. Cancellation-Based Save Offers (Native — no code required):
- Go to Dashboard → Customer Portal → Cancellation page Native/Config
- Enable cancellation and select a retention coupon from the dropdown Native/Config
- When any subscriber clicks "Cancel," they see the offer before confirming Native/Config
- For segmented offers (different coupons for different subscribers): Use the API to create portal sessions with a targeted coupon_offer per customer Integration Build
- Track acceptance rates via cancellation reason data and subscription retention metrics Native/Config
B. Reactivation Incentives (Event-driven):
- Subscribe to the customer.subscription.deleted webhook event Integration Build
- Route to your marketing platform with a delay (e.g., 14 days, 30 days, 60 days) Integration Build
- Generate a personalized reactivation offer: Integration Build
- Create a Promotion Code restricted to that specific customer
- Generate a Payment Link or Checkout Session with the code pre-applied
- Include the one-click reactivation link in your winback email Integration Build
- The subscriber clicks, sees their discounted offer, and re-subscribes in one step Native/Config
C. Future-Dated Promotions for Active Subscribers (Subscription Schedules):
- Use Subscription Schedules to pre-program pricing changes: Native/Config
- Loyalty reward: "After 12 months at full price, apply 15% discount going forward"
- Promotional period: "Apply 30% off for months 1-3, then revert to full price"
- Anniversary offers: "On renewal anniversary, switch to a discounted Price for one cycle"
- Each schedule supports up to 10 sequential phases Native/Config
- Each phase can specify: different prices, different coupons, different quantities Native/Config
- Combine with duration: repeating coupons for time-limited discounts that auto-expire Native/Config
D. Upcoming Renewal Trigger:
- The invoice.upcoming webhook fires ~3 days before each renewal — use this to trigger pre-renewal offers or communications Integration Build
Relevant documentation: Cancellation Page · Subscription Schedules · Payment Links with Promotions · Subscription Webhooks