Skip to main content
Growth Opt Playbook
Growth Opt
Playbook
Library
◎Home
Learn & explore
▤Blog▧Guides & SOPs◇Start with a question
Analyze & review
⇧Start with my data▦Browse analyses
My workspace
◉My account◷My projects▣Data on this device▤Plans & service
Library
Marketing metric calculatorsTemplatesGlossaryMethod comparisons
Uploaded data is processed only in this browser.
Growth Opt PlaybookGrowth Opt Playbook/Guide 1 · Tracking Foundation/Guide 1-2 · In-App Event Taxonomy Spec
About Pro◷My projects
My account

How should in-app event names be defined?

Fix names, parameters, and firing timing in one source of truth the whole team reads.

Loading…

Related resources

Related guides and terms

Check this with your data
  • Aha-moment Finder→
Guide
  • Event Taxonomy & SDK Errors: Names, Gaps, and QA→
  • Conversion Rate Optimization: Find the Funnel Step That Leaks→
Key glossary terms
  • Funnel→
  • CVR (Conversion Rate)→
⌕
↑↓ move↵ openesc close
Growth Opt Playbook

A browser-only weekly decision workspace for performance marketers.

AnalyzeOperations dashboardPerformance varianceCreative fatigueBudget allocationMarketing metric calculatorsDiagnose performance
LearnMy projectsWeekly reportTemplatesMethod comparisonsMethodology manualsBlogGlossaryOperating guides
LegalPrivacyTermsContact
공드리공작소
Representative
신기훈
Business registration number
856-07-03210
Business address
서울특별시 동대문구 천호대로41길 26, 402호(용두동, 천우네오젠)
Customer service
010-8829-9034
Email
gondry.montauk@gmail.com
Growth Opt Playbook
Growth Opt
Playbook
Library
◎Home
Learn & explore
▤Blog▧Guides & SOPs◇Start with a question
Analyze & review
⇧Start with my data▦Browse analyses
My workspace
◉My account◷My projects▣Data on this device▤Plans & service
Library
Marketing metric calculatorsTemplatesGlossaryMethod comparisons
Uploaded data is processed only in this browser.
1 Foundation · 1-2

In-App Event Taxonomy Spec

The event spec that defines your core business funnel as a single source of truth (SSOT). It underpins network optimization signals, cohort analysis, and LTV validation — name, parameters, and firing timing are all standardized.

Owner · Growth + ProductNaming · snake_case12 Tier-1 events
Summary

This taxonomy compresses a 7-stage funnel (Install → Activate → Convert → Retain → Refer → Monetize → Reactivate) into 12 Tier-1 events. Every event enforces snake_case naming, lowercase English, and a verb+noun or noun+state structure. Tier-1 events feed network optimization signals (UAC/AAP/ASA tCPA) and SKAN Conversion Value mapping — changing them arbitrarily discards campaign learning data and forces retraining.

§1 Naming principles

  • snake_case enforced: addToCart (✗) → add_to_cart (✓). No mixing camel/Pascal/kebab case
  • Verb+noun or noun+state: prefer product_view over view_product (GA4-standard alignment)
  • Avoid reserved event names: session_start, first_open, in_app_purchase and other Adjust/Firebase reserved names can't be self-defined. Send revenue through a purchase event so Adjust's in_app_purchase maps automatically
  • Max length 40 chars, parameter keys 25, values 100
  • Absolutely no PII: never send email, phone, name, address, or device_token directly. If needed, hash (SHA-256) + salt before sending
  • currency is ISO 4217 3-letter (KRW, USD, JPY). Don't normalize revenue to a single currency client-side — always send the currency parameter alongside

§2 Event master list

Click a column header to sort. Tier-1 events are the core signals used for network optimization.

Event Name↕Funnel Stage↕Trigger↕Required Params↕Tier↕Source↕
session_startLifecycleApp enters foregroundplatform, app_version, network_typeTier-1auto
sign_upAcquisitionSignup completedmethod(email|kakao|apple), user_gradeTier-1manual
loginLifecycleReturning user loginmethod, days_since_last_loginTier-2manual
onboarding_completeActivationLast onboarding step finishedduration_sec, skipped(bool)Tier-1manual
product_viewFunnelProduct detail viewedproduct_id, category, price, currencyTier-2manual
add_to_cartFunnelAdded to cartproduct_id, quantity, priceTier-1manual
begin_checkoutFunnelCheckout screen enteredcart_value, item_countTier-1manual
purchaseRevenuePayment completed (transaction)transaction_id, revenue, currency, payment_methodTier-1manual
subscribeRevenueSubscription started (incl. trial)plan_id, trial(bool), revenueTier-1manual
refundRevenueRefund processedtransaction_id, refund_amountTier-2server
shareEngagementExternal share actionchannel(km|fb|link), content_typeTier-3manual
push_openRe-engagementPush notification openedcampaign_id, segmentTier-2manual

§3 Standard parameter spec

Parameter↕Type↕Example↕Required↕Description↕
transaction_idstringtx_20260525_a91b3Yes (purchase)Unique payment transaction ID. Dedup key against duplicate sends
revenuedecimal(10,2)29900.00Yes (purchase)Revenue incl. VAT. Negative values only for refunds
currencystring(3)KRWYes (purchase)ISO 4217 currency code
product_idstringsku_88421Yes (commerce)Internal SKU. Catalog matching key
categorystringouterwearNoL1 category. Slash-separated down to L2 allowed
quantityinteger2Yes (cart)Quantity. Integer ≥ 1
pricedecimal(10,2)14950.00Yes (cart)Unit price. revenue = price × quantity
payment_methodstringcard_visaYes (purchase)card_* / kakaopay / naverpay / applepay / googlepay
user_gradestringvipNo4 levels: guest / new / regular / vip
screenstringhome_mainNoScreen name at firing time. Screen names managed in a separate dictionary

§4 Reference payload

All client SDKs serialize into the JSON structure below and map it onto Adjust's ADJEvent / AdjustEvent. Server-side sends deliver the same payload to the S2S endpoint.

Event Payload · purchase
{
  "event_token": "p4q7zx",
  "event_name": "purchase",
  "timestamp_ms": 1779360000000,
  "user": {
    "user_id_hashed": "sha256:8a7d...e1c2",
    "user_grade": "regular",
    "is_logged_in": true
  },
  "params": {
    "transaction_id": "tx_20260525_a91b3",
    "revenue": 29900.00,
    "currency": "KRW",
    "payment_method": "kakaopay",
    "item_count": 2,
    "products": [
      { "product_id": "sku_88421", "category": "outerwear", "price": 14950.00, "quantity": 2 }
    ],
    "screen": "checkout_complete"
  },
  "context": {
    "platform": "android",
    "app_version": "4.12.0",
    "network_type": "wifi",
    "ab_variant": "ckt_v3_B"
  }
}

4.1 Adjust mapping (Kotlin)

TaxonomyMapper.kt
fun trackPurchase(tx: Transaction) {
    val event = AdjustEvent("p4q7zx").apply {
        setRevenue(tx.revenue, tx.currency)
        setOrderId(tx.id)                      // dedup key
        addCallbackParameter("payment_method", tx.method)
        addCallbackParameter("item_count", tx.items.size.toString())
        addPartnerParameter("ab_variant", tx.abVariant)
    }
    Adjust.trackEvent(event)
}

§5 Versioning & governance

  • v{major}.{minor} format. Adding/removing a Tier-1 event bumps major; adding a parameter bumps minor
  • Deprecation policy: keep a 60-day dual-write window, then stop sending the old event. Network optimization models need retraining on the new event
  • Change requests go only through the Taxonomy Change Request template in the Notion DB. Requires sign-off from Growth Lead + Data Eng + iOS/Android Leads

§6 Troubleshooting / pitfalls

!
Revenue always reports as 0 in network dashboards

1) currency missing before the setRevenue call. 2) The event token isn't checked as a Revenue Event in the Adjust dashboard. 3) FX conversion missing when client currency and network reporting currency differ. Recommend unifying every network's reporting currency to a single KRW or USD.

!
Duplicate purchase events inflate ROAS

StoreKit/Play Billing payment callbacks retry and re-send the same transaction. Force-map transaction_id to Adjust's orderId and delegate dedup to the SDK. Also gate the client so the event only fires after server-side receipt validation completes.

!
A UAC tCPA campaign never exits the learning phase

With fewer than ~30 Tier-1 event firings per week, machine learning can't converge. If volume is short, temporarily switch the conversion definition to an upper-funnel event (purchase → add_to_cart or begin_checkout) to build learning volume, then switch back.

i
PII leaked into a parameter

Emails/phone numbers sneak into product_id, or free-text lands in search_keyword. Before release, scan Adjust raw exports with regex filters (@, 010, +). If found, hash or remove the parameter immediately and start the network-side data deletion process.

가이드 1-2. In-App Event Taxonomy Spec Last updated · 2026-05-22
Contents
Naming principlesEvent master listStandard parameter specReference payloadVersioning & governanceTroubleshooting
Sources & reviewReviewed · 2026-08-09

Growth Opt Playbook editorial review

  • Google Analytics 4 event reference ↗
  • Firebase Analytics event documentation ↗