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.

Customers are created before payment completes: A Stripe Customer is created (or matched by email) the moment a visitor reaches the paywall, not after payment. This is what enables attribution and analytics tracking when a checkout is abandoned, when payment retries, or when a webhook arrives before the success page does.

Connect Stripe#

  1. Open Dashboard → Settings → Payments at dash.zellify.app/settings?tab=payments.
  2. Locate Stripe. Live and Sandbox connect independently.
  3. Click Connect next to the environment you want to wire up. You're redirected to Stripe Connect's OAuth flow to authorize.
  4. Approve the Connect request on Stripe.
  5. You're returned to Zellify with the integration active. A Disconnect option is available per environment.
Credentials verified: Zellify runs a live API check on save. A green badge next to "Stripe" means the connection works.

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.

  1. In Dashboard → Settings → Payments, locate the Express Checkout domain registration field.
  2. Enter your funnel domain (the domain a visitor's browser sees when the paywall renders).
  3. Click Submit for approval. Stripe verifies the domain for Apple Pay; once approved, Express Checkout appears on funnel paywalls served from that domain.
  4. Confirm the domain shows as registered. DNS propagation can take up to 24 hours.
  5. 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:

ObjectFields
Customermetadata.app_user_id, metadata.organization_id, metadata.funnel_id, metadata.campaign_id, metadata.experiment_id, metadata.fbp, metadata.fbc
Checkout Sessionmetadata.app_user_id, metadata.product_id
Subscriptionmetadata.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#

  1. Switch Stripe to test mode.
  2. Open a test funnel and advance to the paywall.
  3. Complete checkout with card 4242 4242 4242 4242.
  4. Confirm the payment in Stripe Dashboard → Payments.
  5. Confirm metadata.app_user_id is 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#

SymptomLikely causeFix
Apple Pay shows "Amount Pending"Domain not registered in StripeRegister in Stripe Dashboard → Settings → Payment methods → Apple Pay
Checkout errors with "No such price"Stripe account mismatch between test/liveConfirm the connected Stripe account mode matches the product mode
metadata.app_user_id missing on eventPayment created outside ZellifyExpected; only Zellify-created objects carry metadata
Connect OAuth errors on callbackBrowser blocking third-party cookiesRetry in a window with cookies allowed
Products
Create products bound to Stripe.
Upsell
One-click Stripe upsells.
Checkout metadata
Full metadata contract.
Payment events
Stripe event matrix per scenario.
Mobile app with custom backend
Wire your backend to Stripe events.