Stripe
For anyone connecting Stripe to Zellify for funnel payments. You'll have a live Stripe connection accepting one-time and subscription payments with the correct metadata. You need a Stripe account and admin access to Zellify.
What this integration does#
Zellify connects to Stripe via Stripe Connect (OAuth). Under the hood Zellify uses the Stripe Checkout Sessions API: on the paywall it creates a Stripe Customer and a Checkout Session, then renders the payment form inside the funnel with card input and express checkout buttons. Customers never leave your funnel for a Stripe-hosted page.
Zellify attaches checkout metadata to every Customer, Checkout Session, and Subscription so every payment can be linked back to a funnel session.
Connect Stripe#
- Open Dashboard → Settings → Payments at dash.zellify.app/settings?tab=payments.
- Locate Stripe. Live and Sandbox connect independently.
- Click Connect next to the environment you want to wire up. You're redirected to Stripe Connect's OAuth flow to authorize.
- Approve the Connect request on Stripe.
- You're returned to Zellify with the integration active. A Disconnect option is available per environment.
Apple Pay and Google Pay (Express Checkout)#
Stripe Express Checkout — the Apple Pay and Google Pay buttons — only renders on domains registered with Stripe. Zellify exposes the registration flow in Dashboard → Settings → Payments, alongside the Stripe connection.
- In Dashboard → Settings → Payments, locate the Express Checkout domain registration field.
- Enter your funnel domain (the domain a visitor's browser sees when the paywall renders).
- Click Submit for approval. Stripe verifies the domain for Apple Pay; once approved, Express Checkout appears on funnel paywalls served from that domain.
- Confirm the domain shows as registered. DNS propagation can take up to 24 hours.
- Open a funnel paywall in real iOS Safari to verify the Apple Pay button renders.
Google Pay works on any registered HTTPS domain without extra setup. The same domain registration covers both.
Checkout modes#
Set per paywall component:
- Popup — Stripe Checkout opens in a modal. Apple/Google Pay supported.
- Inline — Stripe Elements rendered in the funnel. Apple/Google Pay supported with additional setup.
Customer creation#
Zellify creates a Stripe Customer when a funnel visitor reaches the paywall, before the payment form is submitted. If a Customer with the same email already exists on the connected account, Zellify reuses it and updates its metadata; otherwise a new Customer is created. This early creation is what lets attribution and analytics correctly handle abandonment, retries, and out-of-order webhook delivery.
Metadata#
Zellify attaches the following on every Customer, Checkout Session, and Subscription:
| Object | Fields |
|---|---|
| Customer | metadata.app_user_id, metadata.organization_id, metadata.funnel_id, metadata.campaign_id, metadata.experiment_id, metadata.fbp, metadata.fbc |
| Checkout Session | metadata.app_user_id, metadata.product_id |
| Subscription | metadata.app_user_id, metadata.product_id |
fbp and fbc are the Meta browser and click identifiers, attached when present so you can stitch web ads to payments downstream. See Checkout metadata for the full contract and app_user_id for how to use it downstream.
Payment types#
- One-time payments
- Subscriptions (monthly, annual, weekly, custom interval)
- Subscription schedules (multi-phase billing)
- Upsells (see Monetization / Upsell)
Free trials#
Configure trial length on the Zellify product. Zellify creates the subscription with trial_end and collects payment method upfront. No extra Stripe setup.
Multi-phase subscription schedules#
For "first month free, then $29/month" or "$9 for 3 months, then $29/month", use Zellify's multi-phase pricing on the product. Zellify creates a Stripe Subscription Schedule with the phases.
Webhooks#
Zellify does not send payment webhooks. Stripe does. If you're building your own integration on top of these payments, see Payment events for the event matrix and Using existing webhooks for retrofitting an existing handler.
Products and pricing#
Create products in Zellify under Dashboard → Products. Zellify creates the underlying Stripe Product and Price objects. Attach products to paywall components in the funnel builder. See Products.
Test and verify#
- Switch Stripe to test mode.
- Open a test funnel and advance to the paywall.
- Complete checkout with card
4242 4242 4242 4242. - Confirm the payment in Stripe Dashboard → Payments.
- Confirm
metadata.app_user_idis present on the Checkout Session.
Going live#
Switch Stripe to live mode. Re-verify Apple Pay domain registration for the production domain. Run one real purchase to confirm the end-to-end flow.
Troubleshooting#
| Symptom | Likely cause | Fix |
|---|---|---|
| Apple Pay shows "Amount Pending" | Domain not registered in Stripe | Register in Stripe Dashboard → Settings → Payment methods → Apple Pay |
| Checkout errors with "No such price" | Stripe account mismatch between test/live | Confirm the connected Stripe account mode matches the product mode |
metadata.app_user_id missing on event | Payment created outside Zellify | Expected; only Zellify-created objects carry metadata |
| Connect OAuth errors on callback | Browser blocking third-party cookies | Retry in a window with cookies allowed |