screens.qonversion.io and checkout runs through Stripe.
Prerequisites
- Stripe connected to your project: Project Settings → Stores → Stripe → Connect Stripe (Stripe OAuth — no API keys to paste). Web Funnels require Stripe; the Publish button stays disabled until Stripe is connected.
- A product mapped to a Stripe Price ID — set up below.
- A Stripe webhook with its signing secret added on the Stripe store card — see Set up the Stripe webhook.
Map a product to a Stripe Price
The checkout charges a Stripe Price (price_...), not a Product (prod_...). Connect one to a Qonversion product:
- In the Stripe Dashboard of your connected Stripe account (live mode), open Product catalog → Add product, set a recurring price, and save. (An existing product works too — every price lives on a product’s page, in the Pricing section.)
- Copy the Price ID — it looks like
price_.... - In the Qonversion dashboard, open Products in the left menu and open the product you want to sell on the web (or create one — for subscriptions pick the matching duration).
- Paste the Price ID into the Stripe Price ID field and save.
The price must live in the same Stripe account you connected to Qonversion — prices from any other account can’t be resolved at checkout. Mobile store IDs (App Store / Play) on the same product are unrelated and can stay as they are.
prod_... id is enough for that. A Web Funnel flips this: Qonversion runs the checkout for you, and Stripe requires an exact Price to start a checkout session. A Stripe product can carry many prices (monthly, annual, currencies), so you pin the one to sell in the Stripe Price ID field.
Set up the Stripe webhook
Qonversion records your web purchases by listening to events from your Stripe account — payment confirmations, subscription renewals, refunds. Every incoming event is verified with a webhook signing secret unique to your endpoint. Without it, purchase events can’t be verified, and Web Funnel purchases won’t reach your users. You never share Stripe API keys (sk_...) with Qonversion — account access is granted through Stripe Connect, and the signing secret can only be used to verify that events are authentic. Anyone with access to the Developers section of your Stripe Dashboard can set this up.
Step 1 — Create the webhook endpoint in Stripe
- Open your Stripe Dashboard → Developers → Webhooks → Add endpoint (in the newer Workbench UI: Add destination → Webhook endpoint).
- If asked for the destination scope, choose Your account (not Connected accounts).
- Set the endpoint URL to
https://api.qonversion.io/v1/stripe-s2s/. - Select the following events:
checkout.session.completed— confirms the purchase (required)customer.subscription.created,customer.subscription.updated,customer.subscription.deleted— subscription lifecycle (required)invoice.paid— renewals and trial conversions (required)charge.refunded— refundscharge.dispute.created,charge.dispute.funds_withdrawn,charge.dispute.closed— chargebacks
- Create the endpoint.
Create the endpoint in live mode (Test mode toggle off) — Web Funnel checkout runs against your live Stripe connection.
Step 2 — Add the signing secret to Qonversion
- On the endpoint page in Stripe, click Reveal under Signing secret and copy the
whsec_...value. - In the Qonversion dashboard, open Project Settings → Stores and on the Stripe card paste it into the Webhook signing secret field, then save.
1. Create a Web Funnel
- Go to No-Codes → Create Screen.
- Choose Web Funnel as the screen type.
- Design the screen in the Builder as usual (headings, products, buttons).
- Add a Product component to the screen, then bind it: open Settings → Products in the Builder and pick your Stripe-priced product from the dropdown for the screen’s product slot. This is what the checkout charges — a funnel without a Stripe-priced product cannot check out.
- Set the purchase button’s action to Make a purchase. On the web this opens the Stripe checkout for the bound product.
- Add a success page the buyer sees after paying (this is also where you can remind them to open the redemption email).
A Web Funnel is served on the web, so a few in-app-only actions don’t apply:
- Navigation actions (
Navigate to the screen) are no-ops on the web — use Go to page to move between funnel steps. Restoreis not supported on the web.
2. Publish
Open the Publish dialog. The readiness checklist confirms the funnel is ready:- Stripe connected — required (blocking).
- Success page and other checks — recommended.
prod_key) and the public checkout URL:
3. The purchase → redemption flow
- A user opens the funnel URL and completes the Stripe checkout. The email field on the Stripe payment page is where the buyer’s address is collected — there is no separate email step; the redemption email goes to that address.
- Qonversion emails them a one-time redemption link (
https://screens.qonversion.io/r/{project_uid}/{token}). - The user taps the link on their phone → your app opens and the purchase is redeemed, activating the entitlement.
The redemption email
After a successful payment, Qonversion automatically sends the buyer a redemption email — you don’t send anything yourself.- Trigger: sent once, right after the payment is confirmed. The buyer enters their email during checkout.
- Contents: a call-to-action button and a fallback link to
https://screens.qonversion.io/r/{project_uid}/{token}. - One-time & time-limited: the link works once and expires 30 days after purchase. After it’s used (or expires), it can’t be reused.
- Lost or expired link: the buyer can request a fresh one from your app, which sends a new email with a new link and a new 30-day window. See the redemption guide.
Sender & branding. The email is currently sent from Qonversion. Per-merchant branding (your app’s name / sender) is on the roadmap. If a buyer doesn’t see the email, ask them to check spam.
Testing
Payments are live-only
Web Funnel checkout always runs against your live Stripe connection — there is no sandbox / test-mode checkout yet, so Stripe test cards will not work, and connecting Stripe in Sandbox mode is not enough to check out. To validate the end-to-end flow, use a small product price and refund the charge in your Stripe dashboard afterwards.A dedicated sandbox/test-mode checkout (parity with mobile, Stripe and Paddle purchases) is planned so you can test with Stripe test cards without a real charge.
Testing the redemption link on Android
You can test redemption with a debug build from Android Studio — on a real device or an emulator with Google Play services:- Register the debug signing key. Debug builds are signed with the debug keystore, and Android verifies App Links against the certificate of the installed build. Get the fingerprint with
./gradlew signingReport(theSHA-256line underVariant: debug) and add it in Connect Apps — the fingerprints field accepts multiple values, so keep both your debug and release/Play App Signing keys there. - Match the application ID. If your debug build uses
applicationIdSuffix(e.g..debug), register the suffixed ID — otherwise verification won’t match the installed package. - Wait for the manifest, then (re)install. After you add or change an app in Connect Apps, allow a few minutes for
https://screens.qonversion.io/.well-known/assetlinks.jsonto refresh, then reinstall the app — Android checks App Links at install time. To force a re-check without reinstalling:
- Open a redemption link without the email. You can fire the link straight from the terminal to check that it opens your app (not the browser):