Fri 09-10 to Thu 15-10 · excludes China unless stated · queries dashboard/weekly_sql_1016/
IAP revenue rose to $1,029 (+68%) on 468 DAU (-7%). Without the week's top payer it is $882 vs $546 (+62%), so this is not one whale. The payer count did not move (39 vs 40); each payer spent more.
v36 replaced v34 over 10–11 Oct and carried 51% of the week's DAU. It shipped 10 new packs; together they earned $89, 9% of IAP. Existing packs went from $608 to $940.
| week from (Fri) | DAU | installs | IAP $ | ad $ | total $ | eCPM |
|---|---|---|---|---|---|---|
| 09-11 | 818 | 1,688 | 1,298 | 146 | 1,443 | 54.4 |
| 09-18 | 639 | 1,115 | 878 | 121 | 999 | 53.9 |
| 09-25 | 527 | 925 | 597 | 113 | 710 | 57.0 |
| 10-02 | 501 | 851 | 613 | 174 | 788 | 80.0 |
| 10-09 | 468 | 843 | 1,029 | 185 | 1,214 | 87.4 |
Week starts Friday. IAP is gross (no refunds in the export). Payers: 39 this week, 40 last week.
-- One row per day x app version x China flag, 2026-09-04 .. 2026-10-16: DAU, installs, IAP, payers, ads.
WITH ev AS (
SELECT PARSE_DATE('%Y%m%d', event_date) d, user_pseudo_id u, event_name e, event_timestamp ts,
app_info.version v, geo.country = 'China' cn, event_value_in_usd usd,
(SELECT COALESCE(value.double_value, value.float_value, CAST(value.int_value AS FLOAT64))
FROM UNNEST(event_params) WHERE key='value') val
FROM `tiny-knightfall-idle-rpg-game.analytics_538412813.events_intraday_*`
WHERE _TABLE_SUFFIX BETWEEN '20260904' AND '20261016'
),
ud AS (
SELECT d, u,
ARRAY_AGG(v IGNORE NULLS ORDER BY ts DESC LIMIT 1)[SAFE_OFFSET(0)] v,
LOGICAL_OR(cn) cn,
COUNTIF(e='first_open') > 0 installed,
SUM(IF(e='in_app_purchase', usd, 0)) iap_usd,
COUNTIF(e='in_app_purchase') iap_buys,
SUM(IF(e='ad_impression_MAX', COALESCE(val, 0), 0)) ad_usd,
COUNTIF(e='ad_impression_MAX') ad_imps
FROM ev GROUP BY d, u
)
SELECT d, v, cn, COUNT(*) dau, COUNTIF(installed) installs, SUM(iap_usd) iap_usd, SUM(iap_buys) iap_buys,
COUNTIF(iap_buys > 0) payers, SUM(ad_usd) ad_usd, SUM(ad_imps) ad_imps, COUNTIF(ad_imps > 0) ad_watchers
FROM ud GROUP BY d, v, cn-- IAP per payer, ex-China, two report weeks (02-08 Oct, 09-15 Oct). SELECT IF(event_date >= '20261009', 'this', 'prev') wk, user_pseudo_id u, ANY_VALUE(geo.country) country, ANY_VALUE(app_info.version) v, COUNT(*) buys, SUM(event_value_in_usd) usd FROM `tiny-knightfall-idle-rpg-game.analytics_538412813.events_intraday_*` WHERE _TABLE_SUFFIX BETWEEN '20261002' AND '20261015' AND event_name = 'in_app_purchase' AND geo.country != 'China' GROUP BY 1, 2
| build | avg DAU | installs | IAP $ | ad $ | share of DAU % | first seen |
|---|---|---|---|---|---|---|
| 36 | 237 | 608 | 617 | 137 | 50.6 | 10-07 |
| 34 | 142 | 207 | 412 | 47.2 | 30.4 | 09-25 |
| 10 | 18.7 | 1 | 0 | 0 | 4.0 | 09-04 |
| 21 | 11.1 | 13 | 0 | 0 | 2.4 | 09-04 |
| 9 | 9.4 | 1 | 0 | 0 | 2.0 | 09-04 |
| 24 | 7.9 | 0 | 0 | 0 | 1.7 | 09-04 |
| 26.2 | 7.3 | 0 | 0 | 0.123 | 1.6 | 09-11 |
| 29 | 7 | 7 | 0 | 0.850 | 1.5 | 09-17 |
Builds with at least 5 average DAU. Builds other than v34 and v36 still hold ~90 DAU combined, all with zero IAP.
| day | v34 DAU | v36 DAU |
|---|---|---|
| 10-06 | 330 | 0 |
| 10-07 | 353 | 6 |
| 10-08 | 398 | 2 |
| 10-09 | 415 | 0 |
| 10-10 | 316 | 31 |
| 10-11 | 120 | 304 |
| 10-12 | 55 | 361 |
| 10-13 | 31 | 343 |
| 10-14 | 30 | 324 |
| 10-15 | 28 | 293 |
SKUs whose first tap or purchase in the export is on or after 25 Sep, totals to 15 Oct.
| pack | first seen | first purchase | players who tapped | buys | revenue $ | builds |
|---|---|---|---|---|---|---|
| premium.pass.flameborn | 10-11 | 10-15 | 1 | 1 | 30.7 | 36 |
| package.hero.growth | 10-07 | 10-11 | 6 | 2 | 22.5 | 35, 36 |
| premium.pass.milestone | 10-11 | 10-13 | 3 | 2 | 21.0 | 36 |
| special.hero.soul.stone | 10-05 | 10-05 | 1 | 2 | 10.9 | 34, 36 |
| package.hero.toy | 10-11 | 10-11 | 0 | 1 | 5.6 | 36 |
| campaign.20 | 10-12 | 10-12 | 3 | 1 | 3.3 | 36 |
| premium.pass.flameborn.plus | 10-11 | – | 3 | 0 | 0 | 36 |
| campaign.20.plus | 10-14 | – | 1 | 0 | 0 | 36 |
| campaign.65 | 10-14 | – | 1 | 0 | 0 | 36 |
| daily.challenge.key.3 | 10-14 | – | 1 | 0 | 0 | 36 |
-- One row per product SKU x day x version (ex-China): store taps and purchases, plus each SKU's first day in the export.
WITH ev AS (
SELECT PARSE_DATE('%Y%m%d', event_date) d, user_pseudo_id u, event_name e, app_info.version v,
event_value_in_usd usd,
COALESCE((SELECT value.string_value FROM UNNEST(event_params) WHERE key='product_id'),
(SELECT value.string_value FROM UNNEST(event_params) WHERE key='position')) sku
FROM `tiny-knightfall-idle-rpg-game.analytics_538412813.events_intraday_*`
WHERE event_name IN ('in_app_purchase', 'purchase_click', 'first_purchase')
AND geo.country != 'China'
),
x AS (SELECT * FROM ev WHERE sku LIKE 'com.idle.tiny.%'),
first_seen AS (SELECT sku, MIN(d) first_day, MIN(IF(e='in_app_purchase', d, NULL)) first_buy_day FROM x GROUP BY sku)
SELECT x.sku, f.first_day, f.first_buy_day, x.d, x.v,
COUNTIF(e='purchase_click') taps, COUNT(DISTINCT IF(e='purchase_click', u, NULL)) tappers,
COUNTIF(e='in_app_purchase') buys, COUNT(DISTINCT IF(e='in_app_purchase', u, NULL)) buyers,
SUM(IF(e='in_app_purchase', usd, 0)) usd
FROM x JOIN first_seen f USING (sku)
WHERE x.d >= '2026-09-04'
GROUP BY 1, 2, 3, 4, 5| existing pack | this week $ | last week $ | change $ |
|---|---|---|---|
| pass.tiny.guide | 55.5 | 0 | 55.5 |
| package.combo.mythic | 46.2 | 0 | 46.2 |
| skip.ad.permanent | 133 | 88.9 | 43.8 |
| special.loot.storage | 42.4 | 10.0 | 32.4 |
| skip.ad.30days | 105 | 74.0 | 30.9 |
| weekly.promotion | 30.0 | 0 | 30.0 |
| daily.challenge.key.1 | 28.7 | 36.2 | -7.5 |
| package.adventure | 4.0 | 11.7 | -7.8 |
| daily.promotion | 22.7 | 33.1 | -10.4 |
| package.hero.doom | 30.4 | 42.6 | -12.2 |
| wk | installs | d1_users | D1 % |
|---|---|---|---|
| 09-18 | 2,042 | 232 | 11.4 |
| 09-25 | 1,528 | 154 | 10.1 |
| 10-02 | 1,481 | 189 | 12.8 |
| 10-09 | 1,027 | 135 | 13.1 |
| install build | installs | d1_users | D1 % |
|---|---|---|---|
| 34 | 296 | 36 | 12.2 |
| 36 | 705 | 98 | 13.9 |
Returned on the day after install (any engagement). Installs on 15 Oct are excluded because their day 1 is incomplete. This query's definition differs from the earlier reports' first-session D1, so compare weeks within this table only.
-- Day-1 return by install day and install build, ex-China, installs 2026-09-18 .. 2026-10-15.
WITH ev AS (
SELECT user_pseudo_id u, PARSE_DATE('%Y%m%d', event_date) d, event_name e, event_timestamp ts,
app_info.version v, geo.country country
FROM `tiny-knightfall-idle-rpg-game.analytics_538412813.events_intraday_*`
WHERE _TABLE_SUFFIX BETWEEN '20260918' AND '20261016'
),
inst AS (
SELECT u, MIN(d) install_d, ARRAY_AGG(v ORDER BY ts LIMIT 1)[OFFSET(0)] v, ANY_VALUE(country) country
FROM ev WHERE e = 'first_open' GROUP BY u
)
SELECT i.install_d, i.v, COUNT(*) installs,
COUNT(DISTINCT IF(a.d = DATE_ADD(i.install_d, INTERVAL 1 DAY), i.u, NULL)) d1_users
FROM inst i LEFT JOIN (SELECT DISTINCT u, d FROM ev WHERE e = 'user_engagement') a USING (u)
WHERE i.country != 'China' AND i.install_d <= '2026-10-15'
GROUP BY 1, 2No event name was first seen between 2 and 15 Oct. The new packs log through the existing purchase_click /
in_app_purchase events.
-- Event names first seen on or after 2026-10-02 (whole export), with the build they first appear in.
WITH e AS (
SELECT event_name, app_info.version AS v, PARSE_DATE('%Y%m%d', event_date) AS d, user_pseudo_id AS u
FROM `tiny-knightfall-idle-rpg-game.analytics_538412813.events_intraday_*`
),
first_seen AS (
SELECT event_name, MIN(d) AS first_day, ARRAY_AGG(v ORDER BY d LIMIT 1)[OFFSET(0)] AS first_version
FROM e GROUP BY event_name
)
SELECT f.event_name, f.first_day, f.first_version,
STRING_AGG(DISTINCT e.v ORDER BY e.v) AS versions_seen, COUNT(*) AS events, COUNT(DISTINCT e.u) AS users
FROM first_seen f JOIN e USING (event_name)
WHERE f.first_day >= '2026-10-02'
GROUP BY 1, 2, 3
ORDER BY f.first_day, events DESC