Handoff to a developer
You give the engineer what they need and get back what you need: your part takes about ten minutes, the engineer's integration from a few hours to a working day.
Before you start
- Pro or Business plan. On the free plan the section's fields are locked and you cannot choose a path.
- Project owner or admin role. A member and a retention manager can only view the section.
You can launch the funnel and connect the app later: until the connection is set up, the buyer gets access with the code from the email. There is one exception — a paywall with a “Return to app button” block: such a funnel will not publish until the section's settings are saved and every price on this screen has an access level (step 5).
Step 1. Answer the question on first entry
Open the “Settings” section → the “App connection” tab. The first entry asks one thing: who in your app decides that a person has a subscription — and offers four answers.
For the first launch, choose “Our library inside the app”: we give ready code, the engineer builds it in. Change the answer later with the “Change” button. The other three answers are for special cases:
| If you | Answer | What changes |
|---|---|---|
| the app has its own server, and it decides access | “Your own server” | there is no test mode on this path: the engineer checks with a test purchase — “Pricing and payments” |
| subscriptions are run by Adapty or RevenueCat | “Subscriptions live in an outside service” | in the “Where to deliver access” branch, choose the service; the engineer enters its keys — “Adapty and RevenueCat”. The cabinet does not remember this answer yet: after a reload, choose it again |
| the app does not need to be linked to funnels | “I am not connecting an app” | the tab is renamed “Keys and webhooks”: it keeps the key for requests from your server and events to your server — the engineer needs these — plus sales reports to a partner's tracker, whose address you enter: “Ad networks and pixels” |
The cabinet hides settings your answer does not need — skip the steps below about hidden ones.
Step 2. Fill in two app store links
The “Where the button leads after payment” section — two fields, App Store and Google Play. Nothing else in the section needs filling: the cabinet set the rest itself, or not everyone needs it.
Then click “Save settings” at the bottom of the tab. This button saves both the links and everything you change in the steps below, including test mode.
Step 3. Invite the engineer to the project
The “Send the instructions to the developer” button is drawn, but sends no email.
Instead, give the engineer the project admin role — see “Project and team”. Then they take everything for the integration on the “For developers” tab themselves, and you forward nothing by email.
These are our keys, not Stripe keys: they look similar but are taken here, and the Stripe dashboard does not have them.
We have no separate “developer only” role, so the engineer gets all project rights except transferring ownership and money: Stripe keys, cancellations and refunds stay with the owner — the roles table.
Step 4. Give the engineer two links and ask for three things
The engineer takes the rest on the “For developers” tab themselves. You pass them two links:
- The documentation address — the “For developers” tab, the “Reference” section, the “Open →” button: copy the address of the page that opens.
- The return link to the app — the “Main” tab, the “If the app is already installed — open it right away” branch, the “The link we use to bring the person back into the app” line, the “Copy” button. The engineer adds it to both builds, iOS and Android.
Ask in return for:
- The word by which the app recognizes paid access (for example, “premium”). The engineer chooses it in the code, so ask for the exact spelling, down to letter case. You will need it in step 5.
- Entering the build values in the “If the app is already installed — open it right away” branch: for iOS — Team ID and Bundle ID, for Android — the package name and the signing certificate fingerprint from Play Console. The signing key, not the upload key: a mixed-up fingerprint breaks the move into the app silently.
- A date and a message when they finish: on it you turn off test mode.
While the engineer works, turn on test mode: we answer the app “there is a subscription”, so they need not pay for real. Where to turn it on — at the end of the page.
Step 5. Assign an access level to the price
The engineer named the word — that is the access level. Open the “What to open in the app after the payment” branch. The working fields there are hidden behind the “I have several different levels” checkbox — tick it even if there is one level: the field at the top is locked. The price is chosen from the project catalog, one price — one pair. Save the finished pairs with the “Save settings” button.
Enter the word exactly as the engineer named it. We do not check or correct it: what you enter goes to the app as is — same spaces, same letter case.
Without such a pair the app receives the price identifier. If you raise the price, a new one appears in Stripe with a new identifier, and the app will not recognize it: the paid content will not open for the person who paid. So add a pair for every new price, even if the other pairs already exist.
How to tell everything is set up
At the top of the “Main” tab is a status bar:
- “The app has not contacted us yet.” — the engineer has not finished. The list of what is missing appears only after the app's first request. If the engineer reported done but the bar did not change, have them look at “Troubleshooting”.
- “What is missing for a full connection:” with a list — yours in it are only the store links (step 2); “The signing secret has not been issued” is closed by the engineer.
- “The connection works.” and the install date — everything is set up.
What else is in the section
The rest either works by itself or is for the engineer:
| Where | Do you need it |
|---|---|
| the “How the app recognises your buyer” branch | no, “Automatically, by the platform” is already set there. “Through an ad tracker” is chosen if you use AppsFlyer or Adjust — what to paste into the tracker's dashboard is in “Funnel analytics”. “Do not recognise by device” — the buyer gets into the app only with the code from the email or by the link |
| the “For developers” tab: access keys, events to your server | no, the engineer sets this up on their own track |
| the “Sales reports to the tracker” block there | yes, if traffic comes through a partner network: you enter the address from the partner's dashboard — “Ad networks and pixels” |
| the “SDK logs” tab — what the app sent | no, on a “paid but no access” complaint the engineer looks there — “Troubleshooting” |
Turn off test mode before the first buyers
The mode lives on the same “Main” tab, in the “What else the connection can do” group: expand the “Check the connection before the first payment” branch and click “Turn on” or “Turn off test mode”. Then click “Save settings” at the bottom of the tab — without it nothing changes on the server.
Turn it off once the engineer reports done, and before the funnel goes live. While it is on, we answer “there is a subscription” to any visitor of your funnels, even one who did not pay — that is, we give paid content away for free. It does not turn itself off and does not block publishing.
While the mode is on, an orange “Test mode is on.” bar hangs at the top of the section with a “Turn off” link. The link works the same as the button in the branch: the bar disappears at once, and the mode turns off only after “Save settings”.
Next
- Ad networks and pixels — connect Meta or TikTok so ads learn from your payments.
- A/B tests — bring traffic and compare funnel variants with each other.
- For developers: overview — the same connection through the engineer's eyes, three ways to connect.