Skip to content

t1k:marketing:analytics:greedygame-max-monthly-report

FieldValue
Moduleanalytics
Version1.16.0
Effortlow
Tools—
/t1k:marketing:analytics:greedygame-max-monthly-report

GreedyGame — MAX GAM Placement Monthly Report

Section titled “GreedyGame — MAX GAM Placement Monthly Report”

Pull one month of AppLovin MAX Google Ad Manager placement data and write a single Excel workbook. The breakdown grain is:

day × application × package name × platform × network × network placement × ad type

with impressions and estimated revenue (USD) summed per row, plus By Day and By App (incl. eCPM) summary tabs.

This is the placement-level companion to t1k:marketing:analytics:crawldata (which does account-wide spend-vs-revenue). Here the scope is narrowed to GAM placements (network_placement containing gampub/gamin) across both GAM network entries: standard GOOGLE_AD_MANAGER_NETWORK and GOOGLE_AD_MANAGER_NATIVE_NETWORK. The real network name is carried per row so standard vs native GAM stays distinguishable.

The pull and the table rendering are both fully specified before the run starts — no interpretation happens until the workbook is read — so this is cheap-tier work end to end (routing SSOT: rules/orchestration-rules.md § “Task-Type → Agent Routing”):

StepAgent
Run max_gam_placements.js for the stated month and report row/impression/revenue totalst1k-fact-fetcher
Assemble the By-Day / By-App summary tabs from the pulled rowst1k-metrics-reporter
Investigate why a day’s or app’s numbers look wrongt1k-debugger — reasoning tier, not cheap
  • Monthly GAM placement reporting for the GreedyGame MAX account
  • Any date range at day × placement × ad-format granularity (monthly is the common case)
  • Investigating which GAM placements / apps / ad formats drove impressions + revenue
  • Node 18+ (built-in fetch, fs, path — no npm install needed).
  • MAX Report Key for the target MAX account. Resolution order: --key, MAX_REPORT_KEY env var, or a .env file in the working directory holding MAX_REPORT_KEY=…. Never passed on a shared command line or committed — keep it in a gitignored .env. Get it from dash.applovin.com → Account → Keys → Report Key (NOT the Management or SDK key).

The runnable script is bundled under scripts/: max_gam_placements.js (+ its only dependency xlsx_lite.js). Both are pure Node built-ins — no third-party packages, cross-platform.

Point a .env with MAX_REPORT_KEY=… at the run directory (or export the env var), then give the first and last day of the target month:

Terminal window
# Example: report July 2026
node scripts/max_gam_placements.js \
--start 2026-07-01 --end 2026-07-31 \
--xlsx GAM_placements_2026-07.xlsx

To pick “last month” relative to today, use the previous calendar month’s first and last date (e.g. run in August → --start <prev-month>-01 --end <prev-month>-<lastDay>).

FlagMeaning
--start / --endRequired. Inclusive day range, YYYY-MM-DD.
--xlsxOutput path. Defaults to GAM_gampub_gamin_placements_<start>_<end>.xlsx.
--keyMAX report key (prefer MAX_REPORT_KEY / .env over this).

Days are fetched concurrently (pool of 5) and printed with per-day row counts. The run ends with the kept-row count, a Networks matched: line, and the impressions + revenue totals.

One .xlsx, three tabs:

TabColumns
GAM PlacementsDay · Application · Package Name · Platform · Network · Network Placement · Ad Type · Impressions · Est. Revenue (USD) · + TOTAL row
By DayDay · Impressions · Est. Revenue · + TOTAL
By AppApplication · Impressions · Est. Revenue · eCPM · + TOTAL

eCPM is recomputed as revenue / impressions × 1000 at the use site — never averaged across rows.

  • 45-day look-back (hard limit). The MAX Reporting API rejects any start older than 45 days: "Start date is beyond our 45 day look back period". Run the monthly report within 45 days of month-end or the placement-level data ages out permanently (local pre-aggregated archives have no network_placement dimension and can’t backfill). For older months the only route is a manual export from dash.applovin.com → Reports.
  • Account timezone is UTC+0. Days are the account’s UTC calendar days. This report does not re-bucket to a local offset; if you need a local-offset day boundary, apply the hourly-fetch + re-bucket pattern from the sibling crawldata skill.
  • Both GAM networks included. Native GAM (GOOGLE_AD_MANAGER_NATIVE_NETWORK) is counted alongside standard GAM. The Networks matched: console line shows the per-network row split so you can confirm the mix.
  • The most recent day may be partial if the month just ended.
  • Totals tie out to the cent. Revenue cells store the full-precision value with a 2-decimal display format, so Excel =SUM(column) equals the TOTAL exactly. Pre-rounding each cell under-counts the month — thousands of sub-cent placement rows each rounded down to $0.00 discard real revenue. The unrounded, round-once TOTAL is the correct figure; never re-round per cell before summing.
  • Never print, log, or commit the MAX report key. It lives only in a gitignored .env (or the MAX_REPORT_KEY env var) and is read at runtime.
  • This skill is read-only (MAX Reporting API) — no writes, no spend impact.
  • iOS apps may appear with an App Store id (id…) in the package field — that is expected, not a bug.
  • t1k:marketing:analytics:crawldata — account-wide spend-vs-revenue Profit/ROAS crawl (Mintegral, Google Ads, Adjust, AppLovin MAX) + CloudX First Look floors.
  • t1k:marketing:monetization:applovin-max — MAX mediation setup and concepts.