The speed-up calculator and the filler calculator now push usage events to the
dataLayer. Nothing shows up in Google Analytics until you wire the events
through in the GTM web UI — this is that checklist, and it is self-contained:
every step is spelled out here, nothing requires opening the earlier guides.
One-time setup of roughly 20 minutes.
Why: both tools are "grab a number and alt-tab back to the game" pages, so GA4's standard metrics can't tell successful 10-second visits from real bounces. These events measure actual tool usage — including visitors who compute a result and read it off the screen without ever clicking Copy.
Design guarantee: the site never fires a purchase event, and GA4 only
counts revenue from purchase — so nothing here can ever appear as revenue.
Monetization reports stay at $0.
/speed-up-calculator)| Event | Fires when | Notable data |
|---|---|---|
speedup_snapshot |
User leaves/hides the page after entering quantities (one snapshot per changed bag state — unchanged state never re-fires) | total_seconds, total_days (rounded to 0.1), items_count (total speed-ups entered), distinct_denoms (how many different denominations), per-type totals seconds_regular / seconds_research / seconds_wall / seconds_healing / seconds_training / seconds_merging / seconds_crafting, snapshot_trigger (visibilitychange or pagehide) |
/filler-calculator)| Event | Fires when | Notable data |
|---|---|---|
filler_copy |
The conversion: Copy-result button clicked with a valid result | comp (the composition as typed, e.g. 208), fill_size (number, e.g. 100000), ratio_t5 (e.g. 60), output_lang (en or localized — was the copied text English?), copy_ok (false = clipboard failed, worth watching on iOS) |
filler_snapshot |
User leaves/hides the page with a valid result on screen (deduped like the speed-up snapshot) | same comp / fill_size / ratio_t5, plus did_copy — false means the visitor computed a result but read it off the screen without copying; combined with filler_copy this answers "do visitors actually use the tool" |
filler_multi_generate |
Multi-comp generator produced output | comps_count, fills_count, ratios_count, line_count (lines generated) |
filler_multi_copy |
Copy on the multi-comp output | line_count, copy_ok |
filler_set_pref |
A display toggle changed | pref (output_thousands / input_thousands / english_output), pref_value (true/false) |
filler_edit_list |
A saved list was customized in Settings | list_type (comp / fill / ratio), list_action (add / delete / reorder / reset) |
Every page seeds page_locale onto the dataLayer before GTM loads and the
Google tag already forwards it, so all events above can be segmented by
language with no extra wiring.
Variables → User-Defined → New → Data Layer Variable (version 2). Create
one per name below, naming the variable the same as the data layer key. If a
variable with the name already exists from an earlier setup, skip it — do NOT
create a duplicate. (snapshot_trigger, items_count and page_locale will
already exist.)
Speed-up: total_seconds · total_days · distinct_denoms ·
seconds_regular · seconds_research · seconds_wall · seconds_healing ·
seconds_training · seconds_merging · seconds_crafting
Filler: comp · fill_size · ratio_t5 · output_lang · copy_ok ·
did_copy · comps_count · fills_count · ratios_count · line_count ·
pref · pref_value · list_type · list_action
Triggers → New → Custom Event →
speedup_snapshot|filler_copy|filler_snapshot|filler_multi_generate|filler_multi_copy|filler_set_pref|filler_edit_listTags → New → Google Analytics: GA4 Event:
G-… (find it on the existing Google tag in the
Tags list, or in GA4 under Admin → Data streams → your stream)** — this forwards each event under its own name. (If isn't offered: Variables → Built-In Variables → Configure →
tick Event.)snapshot_trigger and items_count), parameter name =
variable name, value = the : e.g. `total_days` → , comp → , `did_copy` → , …(Unused parameter rows on an event are harmless — GA4 drops parameters that aren't present in a given event's payload, so one tag covers all seven events.)
Nothing to configure: the new tag gets the same built-in consent checks
(analytics_storage) as the rest of the container — CookieYes + Consent Mode
already gate it. Visitors who decline analytics won't send these events.
https://lordstools.com/speed-up-calculatorspeedup_snapshot with the totals.https://lordstools.com/filler-calculator:
208) and a fill size (e.g. 100k) → click Copy →
filler_copyfiller_multi_generate,
then its Copy → filler_multi_copyfiller_set_pref; add an item
to one of the lists → filler_edit_listfiller_snapshot (with did_copy: true since you
copied earlier)page_locale)Marking filler_copy and speedup_snapshot as key events does two things:
they show up as conversions, and GA4 counts their sessions as engaged — so
the tool pages' bounce rate finally reflects reality instead of punishing
10-second successful visits.
(Google's April 2026 update removed the "Key events" admin page, hence the longer flow.)
filler_copy and speedup_snapshot appear in
Admin → Data display → DebugView.filler_copy row. (The list can lag DebugView by up to 24 h —
if it's missing, come back later.)speedup_snapshot.(If you later decide that read-off-the-screen usage should also count as
engagement, mark filler_snapshot as a key event the same way — left off by
default so the conversion list stays meaningful.)
Admin → Data display → Custom definitions:
Custom metrics (event scope, unit Standard):
total_daysfill_sizeline_countCustom dimensions (all event scope):
compratio_t5output_langcopy_okdid_copyprefpref_valuelist_typelist_action(snapshot_trigger, page_locale and the items_count metric are already
registered from the earlier setups — skip them. The seven seconds_* params
and the multi-comp *_count params are forwarded to GA4 but deliberately left
unregistered to keep the definition quotas clean; register one later if a
report needs it. Only registered parameters become usable in reports, and data
before registration isn't backfilled — do this right after publishing.)
While GTM Preview is connected: Admin → Data display → DebugView shows the
events live. Confirm filler_copy carries comp/fill_size/ratio_t5, the
snapshots carry snapshot_trigger, and Reports → Monetization still shows
$0 revenue.
Page path contains filler-calculator →
compare Sessions against sessions containing filler_copy or
filler_snapshot. Users with a snapshot but did_copy = false are the
read-off-the-screen crowd — real usage that every standard metric calls a
bounce. Once the key events are marked, the page's Engagement rate in
standard reports becomes trustworthy on its own.speedup_snapshot = real uses;
average total_days (your custom metric) shows how big visitors' stashes
are — useful for deciding which denominations/types deserve UI priority.filler_copy / filler_snapshot by comp
and ratio_t5 — which rally comps and T5/T4 splits players actually run.
Feed the winners back into the default suggestion lists.filler_multi_generate vs. users with
plain filler_copy — is the power-user feature earning its modal? Average
line_count shows how big the generated batches are.filler_copy with
output_lang = 'en' on non-English pages — how many non-EN players want
English paste-text for cross-language rallies.filler_edit_list by list_type/list_action and
filler_set_pref by pref — which customization features get used at all.copy_ok = false (typically
iOS in-app browsers) means the copy path needs attention.page_locale to compare language
audiences.