Start with the decision
- 01Which app and merchant problem are you trying to grow?
- 02Which source or campaign is in scope?
- 03Is the bottleneck discovery, installation, activation, payment or retention?
- 04What event would prove the next stage?
- 05Which merchant records support the aggregate?
- 06What will you change if the result is materially different?
Match evidence to the stage
- 01App Store discovery: Shopify listing GA4 events and URL surface parameters
- 02App-owned acquisition: Marlo page_view, UTMs, affiliate reference, click ID, landing URL and referrer
- 03Installation: authoritative server event after Shopify authentication
- 04Trial or direct paid intent: authoritative billing lifecycle event
- 05Payment: authoritative trial_converted or paid event plus Shopify revenue evidence
- 06Retention: synced subscription, lifecycle, merchant and revenue history
- 07Reviews and category position: source-linked public App Store snapshots
No single identifier reliably spans every Shopify, browser and billing surface. Preserve the opaque first-party handoff where permitted and leave the rest unattributed.
Use the smallest useful stack
- 01Connect Shopify Partner data for merchant, lifecycle and revenue evidence
- 02Install Marlo’s hosted script on an app-owned page
- 03Preserve the acquisition ID beside—not inside—Shopify OAuth security state
- 04Send install, trial and paid evidence from the server
- 05Use affiliate links or campaign UTMs only when they match the real source
- 06Configure Shopify’s listing GA4 integration if listing views and Install-button clicks are a decision input
- 07Connect Google Ads only when supported click evidence should receive an offline conversion
- 08Track a small competitor set only when public changes affect a live positioning decision
Run a measurable experiment
- 01Write one falsifiable hypothesis
- 02Choose one app, audience and source
- 03Record the current sequential funnel and cohort window
- 04Change one material variable such as destination promise, onboarding step or trial prompt
- 05Keep campaign UTMs distinct
- 06Wait for the cohort to mature before comparing paid outcomes
- 07Inspect the linked merchants and report exclusions
- 08Keep, iterate or remove the change based on observed commercial evidence
A before-and-after movement can suggest where to investigate. It does not by itself prove incrementality or causation.
Specific first investigations
- 01Many app-owned visitors, few installs: check intent alignment, installation completion and handoff
- 02Installs, little trial or paid intent: check onboarding and first useful outcome
- 03Intent, little paid: inspect plan fit, trial completion and billing friction
- 04Paid conversions, weak retention: compare churn and merchant quality by retained source
- 05High install counts, weak revenue: confirm development and non-commercial stores are excluded
- 06Ranking or review movement: open the public source before changing listing copy
Set up each source
Use the acquisition-to-paid methodology for the full first-party funnel. Use the tracking setup, affiliate setup, Google Ads setup, competitor setup and store-classification guide for each boundary.
Platform limits to keep visible
- 01Shopify App Store listing traffic belongs to the listing owner’s configured analytics property
- 02Query parameters can disappear across App Store or OAuth journeys
- 03Shopify OAuth state remains a CSRF control and must not be repurposed
- 04Browser events do not prove installation or payment
- 05An accepted ad conversion is not proof of incrementality
- 06App Store result positions vary by locale and context
- 07Public competitor timing does not prove an effect on your acquisition or revenue
- 08Small cohorts can move dramatically without supporting a general conclusion
Use the method on your own data