Beginner-Friendly Tutorials Jul 12, 2026

Your First Hour-One Demo Funnel Snapshot CSV From Steam Wishlist Clicks in One Evening - 2026

2026 beginner tutorial—hour-one demo funnel snapshot CSV from Steam wishlist clicks, F1–F6 gates, hour_one_funnel_snapshot_receipt_v1.json, jq diff vs prior fest day, BUILD_RECEIPT integration.

By GamineAI Team

Your First Hour-One Demo Funnel Snapshot CSV From Steam Wishlist Clicks in One Evening - 2026

Pixel-art hero for hour-one demo funnel snapshot CSV from Steam wishlist clicks one evening 2026

February fest hour one: wishlists jump, Discord celebrates, and someone asks whether players are launching the demo or only clicking the store page. By hour three, #fest-ops argues about a hotfix while nobody saved a single CSV row tying wishlist clicks → demo launches → first-session quits to visible build label.

February 2027 Steam Next Fest live week needs hour-one funnel truth—not another metadata parity checklist. Steamworks reporting and partner exports moved faster than Discord anecdotes; micro-studios that filed February live week timebox caps still need a D4 pager block dedicated to this snapshot. Refund dashboards answer 48-hour lag questions—this evening answers hour-one drop-off before refunds exist.

This Tutorials & Beginner-First pipeline produces hour_one_funnel_snapshot_receipt_v1.json with gates F1–F6, a normalized hour-one-funnel-2027.csv, and jq day-over-day diffs against the prior fest day row.

Non-repetition note: Wishlist UTM tagging experiment owns source attribution over weeks. Refund signal dashboard owns refund language + build_id. Hour-one parity checklists own store metadata surfaces. This URL owns one evening CSV for wishlist click → demo launch → first-session quit per fest day with receipt gates—analytics, not compliance copy.

Pair February live week timebox, February RC label evening, BUILD_RECEIPT beginner, forward blog #9 refund spike worksheet, Resource #35 forward, Help #37 forward, Course 277 forward.

Why this matters now (February 2027 live week)

  1. Wishlist spikes ≠ demo health — Store traffic can rise while launch rate falls after a bad setlive or broken depot.
  2. Hour-one quit rate leads refunds — Players who bounce in the first session refund two days later—funnel CSV is early warning; pair blog #9 threshold worksheet.
  3. Live week timebox D4February timebox reserves D4 for this pass—without CSV, pager hours become arguments.
  4. BUILD_RECEIPT correlationbuild_label on funnel rows must match RC label receipt or diffs lie.
  5. Partner stand-ups — One jq diff beats twelve screenshots of Steamworks graphs.

Direct answer: Export or transcribe wishlist clicks, demo launches, and first-session quits for fest day N hour 1, normalize into CSV, compute launch_rate and hour_one_quit_rate, file hour_one_funnel_snapshot_receipt_v1.json, jq diff against day N-1, set BUILD_RECEIPT hour_one_funnel_snapshot_ok: true when F1–F6 pass.

What you will finish tonight

Audience Outcome
Beginner One CSV row per fest day with plain column meanings
Solo founder Know if hour-one quit spiked before promoting a hotfix
Working dev Receipt + jq diff script for stand-ups
Producer Evidence for “wait until D2 data” vs panic patch

Time: 75–90 minutes first evening; 15 minutes per additional fest day.
Prerequisites: Live fest demo branch, Steamworks partner access, build_label from BUILD_RECEIPT, demo smoke GREEN on promoted build.

Beginner path — CSV schema

Create release-evidence/analytics/hour-one-funnel-2027.csv:

fest_day,utc_date,hour_window_start,hour_window_end,wishlist_clicks,demo_launches,first_session_quits,build_label,launch_rate,hour_one_quit_rate,notes
D1,2027-02-23T18:00:00Z,2027-02-23T18:00:00Z,2027-02-23T19:00:00Z,1240,310,92,fest-demo-2027-02-rc1,0.250,0.297,store page hero A
D2,2027-02-24T18:00:00Z,2027-02-24T18:00:00Z,2027-02-24T19:00:00Z,980,245,88,fest-demo-2027-02-rc1,0.250,0.359,threads mention menu hitch

Column definitions

Column Meaning Beginner tip
wishlist_clicks Store actions counting toward wishlist intent in window Use Steamworks export column name in notes
demo_launches Players who started demo install/play in window Not unique users unless export says so—document in notes
first_session_quits Quit before tutorial complete / 5 min / your golden path Define once in FUNNEL_DEFINITION.md
launch_rate demo_launches / wishlist_clicks Guard divide-by-zero
hour_one_quit_rate first_session_quits / demo_launches Honest denominator only
build_label Player-visible or BUILD_RECEIPT label Must match RC receipt

Beginner rule: If Steamworks does not expose hour granularity, use first calendar hour after fest open and document approximation in notes—F4 requires honesty, not fake precision.

Developer path — gates F1–F6

Gate Pass criterion
F1 CSV contains required columns + ≥1 row for target fest_day
F2 build_label matches BUILD_RECEIPT / RC label receipt
F3 Prior fest day row exists when fest_day > D1 (for jq diff)
F4 hour_one_quit_rate recomputed from raw counts—no hand-typed rate cells
F5 hour_one_funnel_snapshot_receipt_v1.json under release-evidence/analytics/
F6 hour_one_funnel_snapshot_ok: true on BUILD_RECEIPT (optional CI)

hour_one_funnel_snapshot_receipt_v1.json (template)

{
  "schema": "hour_one_funnel_snapshot_receipt_v1",
  "fest_window": "2027-02-next-fest-live",
  "fest_day": "D2",
  "generated_at": "2027-02-24T20:15:00Z",
  "csv_path": "release-evidence/analytics/hour-one-funnel-2027.csv",
  "funnel_definition": "first_session_quit = exit before tutorial_complete event",
  "row": {
    "wishlist_clicks": 980,
    "demo_launches": 245,
    "first_session_quits": 88,
    "build_label": "fest-demo-2027-02-rc1",
    "launch_rate": 0.25,
    "hour_one_quit_rate": 0.359
  },
  "prior_day_diff": {
    "fest_day_prev": "D1",
    "hour_one_quit_rate_delta": 0.062,
    "launch_rate_delta": 0.0
  },
  "hour_one_funnel_snapshot_ok": true
}

BUILD_RECEIPT pointer:

{
  "hour_one_funnel_snapshot_ok": true,
  "hour_one_funnel_snapshot_receipt": "release-evidence/analytics/HOUR_ONE_FUNNEL_SNAPSHOT_RECEIPT.json"
}

verify_hour_one_funnel_snapshot.sh

#!/usr/bin/env bash
set -euo pipefail
REC="${1:-release-evidence/analytics/HOUR_ONE_FUNNEL_SNAPSHOT_RECEIPT.json}"
CSV="${2:-release-evidence/analytics/hour-one-funnel-2027.csv}"

jq -e '.schema == "hour_one_funnel_snapshot_receipt_v1"' "$REC" || exit 1
jq -e '.row.build_label != ""' "$REC" || exit 2
test -f "$CSV" || exit 3
# Recompute quit rate
launch=$(jq -r '.row.demo_launches' "$REC")
quit=$(jq -r '.row.first_session_quits' "$REC")
rate=$(jq -r '.row.hour_one_quit_rate' "$REC")
python3 - <<PY
launch, quit, rate = $launch, $quit, float("$rate")
assert launch > 0
assert abs(quit/launch - rate) < 0.001
PY
jq -e '.hour_one_funnel_snapshot_ok == true' "$REC" || exit 6
echo "hour_one_funnel_snapshot verify: OK"

jq day-over-day diff

# Append rates from CSV into JSON lines for jq
tail -n +2 release-evidence/analytics/hour-one-funnel-2027.csv | \
  awk -F, '{printf "{\"fest_day\":\"%s\",\"hour_one_quit_rate\":%s,\"launch_rate\":%s}\n",$1,$10,$9}' | \
  jq -s '.'

# Diff D2 vs D1 quit rate
jq -s '
  (map(select(.fest_day=="D1"))[0].hour_one_quit_rate) as $p |
  (map(select(.fest_day=="D2"))[0].hour_one_quit_rate) as $c |
  {prev:$p, curr:$c, delta: ($c - $p)}
' <(tail -n +2 hour-one-funnel-2027.csv | awk -F, '{print "{\"fest_day\":\""$1"\",\"hour_one_quit_rate\":"$10"}"}')

Stand-up rule: If hour_one_quit_rate_delta > +0.08 with stable launch_rate, investigate gameplay before store copy—pair Bevy menu hitch or crash symbolicate evening.

One-evening schedule

Block Minutes Output
1 15 Write FUNNEL_DEFINITION.md (what counts as first-session quit)
2 25 Export Steamworks / partner CSV slices for hour window
3 20 Normalize into hour-one-funnel-2027.csv + recompute rates
4 15 Author receipt + prior-day diff
5 10 Run verify script + patch BUILD_RECEIPT
6 5 Post jq delta to #fest-ops stand-up

Steamworks export notes (working dev)

Steam partner reporting changes by app configuration—document your column mapping in receipt notes:

Source view Typical mapping Caveat
Store traffic / wishlist reports wishlist_clicks May be daily—split evenly only with notes: approximated
Demo / playtime activations demo_launches Confirm fest demo depot filter
Custom telemetry first_session_quits Requires privacy-safe telemetry if using PostHog/UGS

Fail-closed: If first_session_quits unavailable, set quits to unknown and F4 fails until telemetry lands—do not invent quits from refund proxies same hour.

Outbound: Steamworks documentation — sales and activations reporting.

Integration with live week timebox

February timebox assigns D4 pager outcome to this snapshot. Workflow:

  1. Complete funnel CSV before expanding D4 community cap for refund tone posts.
  2. If hour_one_quit_rate_delta RED, pager cap absorbs repro—defer creator DMs to batch window.
  3. Attach receipt path to nightly february-live-actuals-2027.csv notes column.

Forward refund spike worksheet (blog #9) when D2–D4 funnel RED two days in a row.

Proof table

Row Evidence GREEN when
P1 hour-one-funnel-2027.csv F1 pass
P2 FUNNEL_DEFINITION.md Quit definition signed
P3 HOUR_ONE_FUNNEL_SNAPSHOT_RECEIPT.json F1–F6 pass
P4 jq diff output saved Prior day present or D1 documented
P5 BUILD_RECEIPT hour_one_funnel_snapshot_ok Matches receipt
P6 RC label receipt Same build_label

Scenarios A–G

A — Launch rate collapses, quit rate flat
Suspect store/demo button or depot—not gameplay. Check fest-day setlive mismatch case study before hotfix.

B — Quit rate spikes, launch rate stable
Pager lane owns repro; community posts known issue template only.

C — Wishlist flat, launches flat
Marketing/community problem—not engineering pager; do not burn hotfix hours.

D — D1 only row (no prior day)
F3 waived with prior_day_diff: null and notes: first_fest_day in receipt.

E — Two build labels in same hour
Split rows—never blend quits across labels; violates F2.

F — Telemetry delayed 24h
Mark receipt YELLOW; repeat snapshot D5 with backfilled hour—document in Sunday closeout (blog #11).

G — Partner asks funnel proof
Export CSV + jq diff + receipt JSON—same bundle as Q4 diligence telemetry rows.

Engine telemetry hooks

Engine First-session quit signal
Unity tutorial_complete or session_end < 300s with scene_index==0
Godot Autoload SessionMetrics.first_quit on NOTIFICATION_WM_CLOSE_REQUEST
GameMaker Steam stat STAT_FIRST_QUIT increment on room0 exit
Construct Browser beforeunload + serverless counter—watch ad-block false negatives

Document event names in FUNNEL_DEFINITION.md—F4 audit compares to export.

PowerShell verify cousin

$rec = Get-Content "release-evidence/analytics/HOUR_ONE_FUNNEL_SNAPSHOT_RECEIPT.json" | ConvertFrom-Json
if ($rec.schema -ne "hour_one_funnel_snapshot_receipt_v1") { exit 1 }
$launch = [double]$rec.row.demo_launches
$quit = [double]$rec.row.first_session_quits
$rate = [double]$rec.row.hour_one_quit_rate
if ($launch -le 0) { exit 4 }
if ([math]::Abs(($quit / $launch) - $rate) -gt 0.001) { exit 4 }
if (-not $rec.hour_one_funnel_snapshot_ok) { exit 6 }
Write-Host "hour_one_funnel_snapshot verify: OK"

Comparison pack (funnel vs cousin analytics)

Artifact Owns Lag
UTM wishlist experiment Source tags over 21 days Days
Refund signal dashboard Refund language + build_id 24–72 h
Metadata hour-one parity Store copy compliance Pre-live
Hour-one funnel snapshot Click → launch → quit Hour 1

Common mistakes

Using refunds as quit proxy in hour one — Refunds lag; funnel receipt lies.

Hand-typing rates in CSV — F4 fails verify; always derive from counts.

Mixing build labels in one row — Breaks F2 and jq diffs.

Skipping FUNNEL_DEFINITION — Team debates quits vs crashes without schema.

Chasing trailer edits when launch_rate dropped — Fix depot/setlive first.

RED / YELLOW / GREEN routing rubric

Use after jq diff each fest morning:

Signal Condition Route
GREEN hour_one_quit_rate_delta ≤ +0.05 and launch_rate_delta ≥ -0.03 Community lane owns posts; pager holds hotfix
YELLOW Quit delta +0.05…+0.08 OR launch delta -0.03…-0.08 Pager investigates; no setlive without smoke
RED Quit delta > +0.08 OR launch delta < -0.08 Pager absorbs D4 cap; defer marketing promises; pair HOTFIX exception opinion (#10 consumed)

Log routing in receipt routing field:

"routing": {
  "band": "YELLOW",
  "action": "menu_hitch_repro_before_community_posts",
  "owner": "pager_lane"
}

FUNNEL_DEFINITION.md starter

# Hour-one funnel definition — February 2027

- **Window:** UTC hour starting at fest daily open (document offset in CSV notes).
- **wishlist_clicks:** Steamworks column `Wishlist` count in window (app id filter: fest demo parent).
- **demo_launches:** First demo play/start events in window (includes re-installs—document in notes).
- **first_session_quit:** Player exits before `tutorial_complete` OR before 300s in `MainMenu`—whichever occurs first.
- **Excluded:** Players who crash before menu (count in crash receipt, not quit funnel).
- **Owner:** Producer signs definition before D1; changes require receipt version bump.

Worked example — D1 through D3 (synthetic)

Day wishlist launches quits launch_rate quit_rate delta quit
D1 1240 310 92 0.250 0.297
D2 980 245 88 0.250 0.359 +0.062 YELLOW
D3 1100 220 66 0.200 0.300 -0.059 launch RED

D3 read: Launch rate drop with recovering quit rate suggests store/depot friction returning—check GameMaker setlive evening before gameplay hotfix.

Stand-up post:

## Funnel stand-up D3

- Receipt: hour_one_funnel_snapshot_ok true
- quit_rate: 0.300 (delta -0.059 vs D2)
- launch_rate: 0.200 (delta -0.050 vs D2) → RED launch band
- build_label: fest-demo-2027-02-rc1 (matches RC receipt)
- Action: verify setlive + depot before HOTFIX-003

Facilitator CSV hygiene

  • Store raw Steamworks export in release-evidence/analytics/raw/D2-wishlist-export.csv—do not edit raw files.
  • Normalized file is derived copy only.
  • Version hour-one-funnel-2027.csv with git—never overwrite prior fest day rows.
  • Attach receipt csv_sha256 when partners request integrity:
sha256sum release-evidence/analytics/hour-one-funnel-2027.csv

BUILD_RECEIPT row catalog extension

Column Type When updated
hour_one_funnel_snapshot_ok boolean After each D1–D7 snapshot
hour_one_funnel_last_fest_day string e.g. D4
hour_one_quit_rate_last number From receipt row
hour_one_funnel_routing string GREEN / YELLOW / RED

Thursday row review can diff hour_one_quit_rate_last across fest week—cousin to loudness_spot_ok diffs on playtest receipts.

Related GamineAI reads

Key takeaways

  1. Hour-one funnel truth is wishlist clicks → demo launches → first-session quits—not metadata parity.
  2. hour_one_funnel_snapshot_receipt_v1.json gates F1–F6 with honest rate recomputation.
  3. One evening wires CSV, FUNNEL_DEFINITION, verify script, and BUILD_RECEIPT column.
  4. jq day-over-day diff on hour_one_quit_rate drives live-week pager vs community split.
  5. Pair February live week timebox D4 block.
  6. Refund dashboard is downstream—funnel is hour-one early warning.
  7. build_label must match RC label receipt.
  8. Refund spike threshold worksheet when funnel RED persists—#9 consumed (daily D1–D7 % caps).
  9. Course 277 + Resource #35 forward own milestone receipts; this owns CSV evening.
  10. verify_hour_one_funnel_snapshot.sh gives CI one exit code.
  11. Define quit once in FUNNEL_DEFINITION.md—no moving goalposts mid-fest.
  12. Flat launch during CDN saturation pairs February live-week queue playbook Q4 comms_only—after label unity.

FAQ

Is this a Steamworks metadata checklist?
No—compliance copy lives in parity cluster URLs; this is analytics CSV.

Can we use Google Analytics instead?
Yes if first_session_quits is defined consistently—still file receipt with export mapping in notes.

What if wishlist_clicks is zero?
Do not compute launch_rate; mark YELLOW and fix store visibility before fest hour.

How does this relate to the live week timebox?
D4 pager outcome should complete this pass before community refund tone posts.

Does Help #37 forward apply?
Export parse failures are upstream—fix CSV ingest before funnel rates.

What ships next in February cluster?
Blog-Create #3 — 14 free February fest live-ops Discord/Steam moderation tools.

Can funnel CSV replace playtest VOD triage?
No—Whisper batch and local pipeline own qualitative repro; funnel is aggregate hour-one counts.

Should we publish funnel numbers publicly?
Optional—receipt is for internal stand-ups; round numbers in community posts unless legal approves precise metrics.

What if we run two demos during fest?
Split CSV rows by build_label and depot—never blend quits across SKUs in one row (scenario E).

How often to refresh hour-one snapshot?
Once per fest day minimum; some teams add hour 6 row after D1 RED—log second row with hour_window suffix in fest_day notes, not duplicate D1 without version note.

Where do raw exports live?
release-evidence/analytics/raw/ per fest day—normalized CSV is derived; sha256 the normalized file in receipt when partners ask for integrity proof.