16 Free Steam Daily Export and Wishlist Velocity Tools for Post-Fest Follow-Through - 2026

March 2027, D+14 after February fest: #fest-ops still celebrates hour-one funnel GREEN rows from D1–D7. Steamworks wishlist graph flattened Tuesday. Nobody exported daily visits-to-wishlist ratio since Sunday closeout. Monday debrief facilitator card cited funnel CSV paths—but velocity needs fourteen consecutive daily exports, not one festival snapshot.
March 2027 post-fest sprints punish teams that ran plateau diagnostic once without daily velocity tooling. Funnel CSV proved hour-one health; D+14 stall is a different signal—wishlists per visit decay while feature work resumes. This Listicles & Resource Roundups post gives sixteen free tools (plus a four-tool minimum stack) to export Steam metrics daily, compute velocity, file post_fest_wishlist_velocity_receipt_v1.json with gates V1–V6, and wire a facilitator roster JSON for who owns the morning export ritual.
Non-repetition note: Plateau diagnostic playbook owns hypothesis branches when growth stalls. Hour-one funnel evening owns fest-hour analytics. Refund spike worksheet owns daily refund %. UTM wishlist experiment owns source attribution over weeks. This URL owns post-fest daily export + velocity receipt—tooling stack, not another plateau theory doc.
Pair plateau playbook, hour-one funnel #2, Monday debrief #1, Resource #35 forward, forward blog #5 partner-review empty annex case study, forward blog #4 March evidence sprint challenge.
Why this matters now (March 2027 post-fest weeks)
- Funnel GREEN ≠ velocity GREEN — D7
hour_one_quit_ratecan pass while D+14 wishlists per visit collapse. - Feature sprint blindness — Engineering ships March milestones while marketing lacks daily ratio—partners ask "what changed since debrief?"
- Plateau without exports — Diagnostic playbook needs week buckets; velocity needs day buckets first.
- Facilitator handoff — Monday debrief card names annex owners; velocity roster names who exports at 09:00 daily.
- BUILD_RECEIPT culture —
post_fest_wishlist_velocity_okproves fourteen-day export discipline before March evidence sprint (March cluster #4 — published).
Direct answer: Deploy four-tool minimum (Steamworks export + daily CSV + jq diff + roster), file post_fest_wishlist_velocity_receipt_v1.json with V1–V6 GREEN by D+14, set BUILD_RECEIPT post_fest_wishlist_velocity_ok: true when velocity jsonl has no gaps.
Who this listicle is for
| Audience | Outcome |
|---|---|
| Beginner | Four-tool stack in one afternoon |
| Solo founder | Stop guessing plateau from one weekly screenshot |
| Producer | Daily stand-up number with export path proof |
| Working dev | jq-validated velocity jsonl beside BUILD_RECEIPT |
Time: ~90 minutes to wire minimum stack; ~3 hours for full sixteen-tool pass + receipt before D+1 post-fest.
Beginner cheat sheet — four-tool minimum stack
| # | Tool | Post-fest job |
|---|---|---|
| 1 | Steamworks Marketing & Sales (native export) | Daily wishlists + visits CSV |
| 2 | Google Sheets or LibreOffice Calc | wishlists_per_visit column + chart |
| 3 | jq (CLI) | Diff today vs yesterday JSON row |
| 4 | Facilitator roster (velocity_roster_v1.json) |
Who exports at 09:00 local |
Rule: All four wired → ready for V1–V3. Tools 5–16 add git versioning, DuckDB SQL, CI reminders, Grafana sketches, and BUILD_RECEIPT wiring.
Developer path — gates V1–V6
| Gate | Pass criterion |
|---|---|
| V1 | velocity_roster_v1.json lists ≥1 facilitator with export_utc window + backup |
| V2 | post-fest-wishlist-velocity-2027.csv has ≥14 consecutive daily rows post-fest |
| V3 | wishlists_per_visit derived—not hand-typed—in every row |
| V4 | post_fest_wishlist_velocity_daily_log.jsonl one line per day with export file sha256 |
| V5 | post_fest_wishlist_velocity_receipt_v1.json committed under release-evidence/analytics/ |
| V6 | BUILD_RECEIPT post_fest_wishlist_velocity_ok: true matches receipt |
post_fest_wishlist_velocity_receipt_v1.json (template)
{
"schema": "post_fest_wishlist_velocity_receipt_v1",
"fest_window": "2027-02-next-fest-live",
"post_fest_start_utc": "2027-03-01T00:00:00Z",
"generated_at": "2027-03-15T09:00:00Z",
"roster_path": "release-evidence/analytics/velocity_roster_v1.json",
"csv_path": "release-evidence/analytics/post-fest-wishlist-velocity-2027.csv",
"jsonl_path": "release-evidence/analytics/post_fest_wishlist_velocity_daily_log.jsonl",
"velocity_definition": "daily_wishlist_delta / daily_visit_delta",
"gates": {
"V1": "GREEN",
"V2": "GREEN",
"V3": "GREEN",
"V4": "GREEN",
"V5": "GREEN",
"V6": "GREEN"
},
"cousin_receipts": {
"hour_one_funnel": "release-evidence/analytics/HOUR_ONE_FUNNEL_SNAPSHOT_RECEIPT.json",
"monday_debrief_facilitator": "release-evidence/post-fest/debrief/POST_FEST_DEBRIEF_FACILITATOR_RECEIPT.json"
},
"post_fest_wishlist_velocity_ok": true
}
velocity_roster_v1.json (facilitator roster)
{
"schema": "velocity_roster_v1",
"fest_window": "2027-02-next-fest-live",
"facilitators": [
{
"name": "producer@studio",
"role": "primary_export",
"export_local_time": "09:00",
"timezone": "America/Los_Angeles",
"backup": "analytics@studio"
},
{
"name": "analytics@studio",
"role": "backup_export",
"export_local_time": "09:30",
"timezone": "America/Los_Angeles",
"backup": "producer@studio"
}
],
"standup_channel": "#fest-metrics",
"sla_hours_if_gap": 24
}
verify_post_fest_wishlist_velocity.sh
#!/usr/bin/env bash
set -euo pipefail
REC="${1:-release-evidence/analytics/POST_FEST_WISHLIST_VELOCITY_RECEIPT.json}"
CSV="${2:-release-evidence/analytics/post-fest-wishlist-velocity-2027.csv}"
ROSTER="${3:-release-evidence/analytics/velocity_roster_v1.json}"
jq -e '.schema == "post_fest_wishlist_velocity_receipt_v1"' "$REC" || exit 1
jq -e '(.facilitators | length) >= 1' "$ROSTER" || exit 2
ROWS=$(tail -n +2 "$CSV" | wc -l)
test "$ROWS" -ge 14 || exit 3
jq -e '.post_fest_wishlist_velocity_ok == true' "$REC" || exit 6
echo "post_fest_wishlist_velocity verify: OK"
Daily CSV schema (beginner)
Create release-evidence/analytics/post-fest-wishlist-velocity-2027.csv:
utc_date,wishlist_total,visit_total,wishlist_delta,visit_delta,wishlists_per_visit,velocity_band,export_sha256,notes
2027-03-01,12400,89000,180,4200,0.043,GREEN,abc123…,D+1 post-fest
2027-03-02,12520,91200,120,2200,0.055,YELLOW,def456…,traffic tail lower
Column rules:
| Column | Meaning |
|---|---|
wishlist_delta |
Today total − yesterday total |
visit_delta |
Today visits − yesterday visits |
wishlists_per_visit |
wishlist_delta / visit_delta (guard divide-by-zero) |
velocity_band |
GREEN ≥0.04, YELLOW 0.02–0.04, RED <0.02 (tune in VELOCITY_DEFINITION.md) |
export_sha256 |
Hash of raw Steamworks export file for that day |
The sixteen tools
Tool 1 — Steamworks Marketing & Sales (native export)
Post-fest job: Source of truth for wishlist and visit totals.
Setup: Partner portal → Marketing & Sales → Wishlists / Traffic → export CSV for rolling window.
Pro tip: Export same UTC hour daily—roster export_utc prevents comparing 9 a.m. Monday to 6 p.m. Tuesday.
Outbound: Steamworks Marketing documentation
Tool 2 — Google Sheets (free tier)
Post-fest job: Live chart for wishlists_per_visit with fourteen-day sparkline.
Setup: Import CSV; add formula =IF(D2=0,"",C2/D2) for ratio column.
Beginner pitfall: Do not edit imported Steamworks raw file—derived sheet only.
Tool 3 — LibreOffice Calc (free desktop alternative)
Post-fest job: Offline velocity sheet when partner VPN blocks Google.
Pro tip: Pin post-fest-wishlist-velocity-2027.ods path in receipt notes if team uses Calc instead of Sheets.
Tool 4 — jq (CLI JSON processor)
Post-fest job: Append daily jsonl line; diff yesterday vs today receipt fields.
jq -n --arg d "2027-03-02" --arg sha "$(sha256sum raw-export.csv | awk '{print $1}')" \
'{utc_date:$d, export_sha256:$sha, wishlists_per_visit:0.055}' \
>> release-evidence/analytics/post_fest_wishlist_velocity_daily_log.jsonl
Working dev: Pair jq hourly fest ops pattern—jsonl integrity same discipline.
Tool 5 — csvkit (csvcut, csvstat)
Post-fest job: Validate CSV column counts before appending velocity row.
csvstat --nulls post-fest-wishlist-velocity-2027.csv
csvcut -c wishlist_delta,visit_delta post-fest-wishlist-velocity-2027.csv | head
Install: pip install csvkit (free).
Tool 6 — Python + pandas (scripted velocity)
Post-fest job: Recompute wishlists_per_visit for V3 audit—never trust hand-typed ratios.
import pandas as pd
df = pd.read_csv("post-fest-wishlist-velocity-2027.csv")
df["computed"] = df["wishlist_delta"] / df["visit_delta"].replace(0, float("nan"))
assert (df["computed"] - df["wishlists_per_visit"]).abs().max() < 0.001
Tool 7 — Git (daily export commits)
Post-fest job: Version raw Steamworks exports under release-evidence/analytics/raw/YYYY-MM-DD/.
Pro tip: One commit per export day—partner diligence can git log export discipline.
Tool 8 — GitHub Actions (scheduled export reminder)
Post-fest job: Cron workflow posts to #fest-metrics if today's export file missing by 10:00 UTC.
on:
schedule:
- cron: '0 17 * * *' # 09:00 Pacific
jobs:
remind-export:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: test -f "release-evidence/analytics/raw/$(date -u +%Y-%m-%d)/steamworks.csv" || exit 1
Tool 9 — DuckDB (local SQL on CSVs)
Post-fest job: Query fourteen-day rolling average without shipping data to cloud.
SELECT AVG(wishlists_per_visit) FROM read_csv('post-fest-wishlist-velocity-2027.csv') WHERE velocity_band IS NOT NULL;
Beginner: One SQL file velocity_rolling_avg.sql checked into repo.
Tool 10 — Google Looker Studio (free dashboards)
Post-fest job: Shareable dashboard for producers—connect Sheets source refreshed daily.
Pro tip: Dashboard is presentation; CSV + jsonl remain source of truth for V4.
Tool 11 — Grafana Cloud (free tier)
Post-fest job: Alert when wishlists_per_visit drops below RED threshold three days running.
Working dev: Push daily row via simple HTTP JSON API or manual CSV ingest—alert routes to #fest-metrics.
Tool 12 — Notion (free database)
Post-fest job: Facilitator-friendly view of velocity bands with notes field for "store page A/B" links.
Caution: Sync from CSV—do not make Notion the only export store (V4 requires jsonl on disk).
Tool 13 — PowerShell Import-Csv (Windows cousin)
Post-fest job: Same V3 recompute on Windows laptops without Python.
$rows = Import-Csv "post-fest-wishlist-velocity-2027.csv"
$rows | ForEach-Object {
if ([double]$_.visit_delta -le 0) { return }
$r = [double]$_.wishlist_delta / [double]$_.visit_delta
if ([math]::Abs($r - [double]$_.wishlists_per_visit) -gt 0.001) { exit 3 }
}
Tool 14 — VELOCITY_DEFINITION.md (team doc — free)
Post-fest job: Single definition of bands, export hour, and zero-visit handling.
# Post-fest wishlist velocity — March 2027
- Export UTC: 17:00 (09:00 Pacific)
- wishlists_per_visit: wishlist_delta / visit_delta; null if visit_delta = 0
- GREEN: >= 0.04 | YELLOW: 0.02–0.04 | RED: < 0.02
- Owner: producer@studio; backup analytics@studio
Tool 15 — Text Blaze / pinned Discord template (free)
Post-fest job: Daily stand-up post format:
## Velocity D+{N}
- wishlists_per_visit: {ratio} ({band})
- export: `raw/2027-03-02/steamworks.csv`
- action: {plateau branch or hold}
Pair plateau playbook hypothesis pick in {action}.
Tool 16 — BUILD_RECEIPT.json row (post_fest_wishlist_velocity_ok)
Post-fest job: Single boolean latch for Thursday row review and March evidence sprint cousin checks.
{
"post_fest_wishlist_velocity_ok": true,
"post_fest_wishlist_velocity_receipt": "release-evidence/analytics/POST_FEST_WISHLIST_VELOCITY_RECEIPT.json",
"velocity_last_export_utc": "2027-03-15T17:00:00Z"
}
Velocity band routing (post-fest)
| Band | Condition | Route |
|---|---|---|
| GREEN | wishlists_per_visit ≥ 0.04 |
Feature sprint continues; log in jsonl only |
| YELLOW | 0.02–0.04 | Run plateau playbook hypothesis #1 presentation branch |
| RED | < 0.02 three days | Pause feature promises; pair partner-review case study (#5 forward) if diligence scheduled |
Log routing in jsonl routing field—same pattern as hour-one funnel CSV.
Comparison pack (velocity vs cousins)
| Artifact | Owns | Granularity |
|---|---|---|
| Hour-one funnel | Fest hour one quit/launch | Hour |
| Refund spike worksheet | Refund % daily | Day (refund lag) |
| Plateau diagnostic | Hypothesis branches | Week |
| This listicle | Daily export + velocity receipt | Day |
Proof table
| Row | Evidence | GREEN when |
|---|---|---|
| P1 | post-fest-wishlist-velocity-2027.csv |
V2 ≥14 rows |
| P2 | velocity_roster_v1.json |
V1 facilitators named |
| P3 | pandas/jq recompute | V3 ratios match |
| P4 | daily jsonl | V4 no gap >24h |
| P5 | velocity receipt | V5–V6 pass |
| P6 | BUILD_RECEIPT boolean | Matches receipt |
Scenarios A–G
A — D+3 gap: vacation
Backup facilitator exports; document waiver in jsonl notes—gap >24h fails V4 unless producer waiver.
B — visit_delta zero (Steam reporting delay)
Mark row velocity_band: DEFERRED; do not divide by zero—V3 honesty.
C — Funnel CSV GREEN but velocity RED
Expected—route to plateau presentation branch, not pager hotfix.
D — Partner asks velocity proof
Send csv + jsonl + receipt—same bundle as Monday debrief card annex style.
E — October prep team reads this in July
Use fest_window: 2026-10-next-fest in receipt—do not copy February filenames blindly.
F — GitHub Action reminder fires daily
Tool 8 is nudge only—human still files export; Action does not replace Steamworks login.
G — Resource #35 ships expanded bookmarks
This blog owns V1–V6 policy; resource owns tool URLs—reciprocal demote duplicate prose.
Mid-post-fest roster change protocol
If primary facilitator unavailable:
- Update
velocity_roster_v1.jsonwithreplacement_forfield. - Bump
velocity_roster_sha256on BUILD_RECEIPT. - Post handoff in
#fest-metricswithin SLA hours (default 24). - Do not change export UTC hour without
VELOCITY_DEFINITION.mdversion bump.
BUILD_RECEIPT row catalog extension
| Column | When updated |
|---|---|
post_fest_wishlist_velocity_ok |
After V6 GREEN (typically D+14) |
post_fest_wishlist_velocity_receipt |
Path to receipt JSON |
velocity_last_export_utc |
Each daily export |
velocity_roster_sha256 |
Roster JSON changes |
Thursday row review can diff post_fest_wishlist_velocity_ok beside hour_one_funnel_snapshot_ok during March sprint.
Extended scenarios H–L
H — Steamworks UI changes column names
Document mapping in notes column—V3 uses normalized names only.
I — Wishlist total decreases (data correction)
Negative wishlist_delta allowed—log Steam correction in notes; do not hide row.
J — Multiple apps / demos
Split CSV per app_id—never blend SKUs in one velocity row.
K — March evidence sprint starts before V6
7-day challenge (#4) expects velocity receipt or documented waiver.
L — Empty closeout annex at partner call
Velocity csv does not replace annex—pair #5 recovery case study.
Beginner path — first export evening (step-by-step)
Prerequisites: Steamworks partner login, release-evidence/analytics/ folder in repo, roster JSON drafted.
- Create folders:
release-evidence/analytics/raw/,post-fest-wishlist-velocity-2027.csvwith header row from schema above. - Export Steamworks: Marketing & Sales → Wishlists → pick app → export last 7 days CSV to
raw/2027-03-01/steamworks-wishlists.csv; repeat for Traffic/Visits. - Normalize totals: Take latest day row wishlist total and visit total—compute delta vs prior day (first post-fest day uses fest closeout totals from Sunday closeout annex or manual snapshot).
- Append CSV row with derived
wishlists_per_visit—run Python snippet from Tool 6 to verify. - Append jsonl with jq one-liner from Tool 4.
- Post stand-up using Tool 15 template.
- Repeat daily until D+14, then file receipt V5–V6.
Time: 15 minutes per day after day-one setup (~90 minutes).
Partner diligence zip (D+14)
#!/usr/bin/env bash
set -euo pipefail
OUT="release-evidence/analytics/partner-velocity-d14-2027.zip"
zip -j "$OUT" \
release-evidence/analytics/POST_FEST_WISHLIST_VELOCITY_RECEIPT.json \
release-evidence/analytics/post-fest-wishlist-velocity-2027.csv \
release-evidence/analytics/post_fest_wishlist_velocity_daily_log.jsonl \
release-evidence/analytics/velocity_roster_v1.json
zip -r "$OUT" release-evidence/analytics/raw/
echo "partner velocity zip: $OUT"
Attach beside Monday debrief facilitator card when partners ask for post-fest metrics—not only fest-week funnel.
Steamworks export hygiene (working dev)
| Check | Why |
|---|---|
Same app_id filter daily |
Multi-SKU studios blend metrics accidentally |
| UTC date boundary documented | Steam totals shift at partner timezone settings |
| Raw file sha256 in jsonl | Proves export not hand-edited |
| Separate wishlist vs visit files | Merge in script with explicit join key utc_date |
Tool depth notes (5–16 quick reference)
| Tool | When to adopt | Skip when |
|---|---|---|
| csvkit | CSV validation fails mysteriously | Single-column exports |
| pandas | Team already runs Python analytics | Solo founder prefers Sheets only |
| Git raw/ | Partner diligence expected | Solo with local-only evidence |
| GitHub Actions | Missed exports happened before | Strict VPN-only export policy |
| DuckDB | Rolling SQL without cloud | <14 rows—eyeball enough |
| Looker Studio | Producer wants pretty charts | Receipt path is enough |
| Grafana | RED band alerts needed | Team checks Discord daily |
| Notion | Non-dev stakeholders read metrics | Notion becomes only store (forbidden) |
| PowerShell | Windows-only export machine | macOS/Linux primary |
| VELOCITY_DEFINITION | Always—free doc | Never skip |
| Text Blaze | Stand-up format drift | Pinned Discord template suffices |
| BUILD_RECEIPT | Always for V6 | Never skip |
Integration with March cluster siblings
| March row | Relationship |
|---|---|
| #1 Monday debrief card | Annex paths for fest-week; velocity is post-fest daily |
| #2 October RC label | July prep—different fest_window in receipt |
| #3 This listicle | Daily velocity tooling |
| #4 Evidence sprint (forward) | Nightly E gates may reference post_fest_wishlist_velocity_ok |
| #5 Empty annex case study (forward) | Recovery when closeout GREEN but annex empty |
CI hook sketch (D+14 gate)
jobs:
post-fest-velocity:
if: github.ref == 'refs/heads/march-sprint-2027'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: bash scripts/verify_post_fest_wishlist_velocity.sh
- run: jq -e '.post_fest_wishlist_velocity_ok == true' release-evidence/BUILD_RECEIPT.json
Fail-closed: March feature branches should not merge when D+14 velocity receipt missing and producer declared metrics SLA.
Worked example — D+1 through D+3 (synthetic)
| Day | wishlist_Δ | visit_Δ | ratio | band |
|---|---|---|---|---|
| D+1 | 180 | 4200 | 0.043 | GREEN |
| D+2 | 120 | 2200 | 0.055 | YELLOW |
| D+3 | 45 | 3100 | 0.015 | RED |
D+3 read: Ratio RED—run plateau playbook presentation branch before promising March feature trailer.
Stand-up post (Tool 15 template):
## Velocity D+3
- wishlists_per_visit: 0.015 (RED)
- export: raw/2027-03-03/steamworks.csv
- action: plateau playbook §presentation — capsule hero readability pass
Facilitator morning script (five minutes)
- Export Steamworks CSV to
raw/YYYY-MM-DD/. - Append normalized row to velocity CSV.
- Run jq jsonl append + sha256.
- Post Tool 15 template to
#fest-metrics. - If RED three days, tag producer for plateau branch pick.
Common mistakes
Weekly screenshots only — Fails V2 fourteen-day requirement.
Hand-typing ratios — V3 fails pandas/jq audit.
Mixing export times — False RED/GREEN bands; fix roster UTC.
Using SteamDB as source of truth — Tool 9 cousin for sanity only; Steamworks export for receipt.
Skipping roster — V1 fails; solo founders must list backup even if same person on vacation alert.
Replacing plateau playbook — This stack feeds diagnostics with daily data.
Key takeaways
- Post-fest velocity needs daily exports—not one plateau pass.
- Four-tool minimum: Steamworks + sheet + jq + roster.
post_fest_wishlist_velocity_receipt_v1.jsongates V1–V6.wishlists_per_visitmust be derived—V3 audit.- Pair hour-one funnel for fest-week cousin.
- Pair Monday debrief for annex path culture.
- March evidence sprint challenge (#4 published) consumes velocity receipt on Night 2.
- Forward partner empty annex case study (#5 published).
- Resource #35 forward expands tool bookmarks.
verify_post_fest_wishlist_velocity.shgives CI one exit code.- October RC label #2 is prep-era cousin—different fest window.
- March cluster #3 consumed—#4 evidence sprint next.
FAQ
Is this replacing the plateau diagnostic playbook?
No—playbook owns hypothesis branches; this listicle owns daily export tooling + receipt.
Do we need all sixteen tools?
No—four-tool minimum satisfies V1–V3; sixteen covers team preferences.
Same roster as moderation listicle?
Different file (velocity_roster_v1.json)—export SLA, not Discord shifts.
Can velocity be GREEN while funnel was RED during fest?
Yes—post-fest store fixes can recover conversion; log in notes.
What if we skipped D+1–D+5 exports?
Backfill from Steamworks historical if available; document gaps in jsonl—V2 may waive with producer note.
How does Resource #35 differ?
Resource = bookmark URLs; blog = V1–V6 policy + receipt schema.
Related GamineAI reads
- Post-Next-Fest wishlist plateau diagnostic
- Hour-one demo funnel snapshot CSV
- Monday post-fest debrief facilitator card
- Sunday February fest closeout
- February refund spike worksheet
- 7-day March post-fest evidence sprint (#4 — published)
- Forward: Partner review empty annex case study (#5)
Daily exports beat weekly panic—wire the four-tool stack, file post_fest_wishlist_velocity_receipt_v1.json, and give March stand-ups a ratio with a path—not a vibe.