executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
attribution-scopeGA4 has three distinct attribution scopes. Using the wrong scope gives misleading results. Choose based on the question you are answering.
Independent GitHub snapshot · Automated classification · Original documentation governs
GA4 has three distinct attribution scopes. Using the wrong scope gives misleading results. Choose based on the question you are answering.
| Scope | Dimension prefix | Question it answers | When to use |
|---|---|---|---|
| Session | session | Where did THIS session come from? | Traffic Acquisition — volume, engagement, conversions by source |
| First-user | firstUser | Which channel originally acquired this user? | User Acquisition — who brought in new users |
| Event/attribution | (no prefix) | Which channel gets credit for this conversion? | Advertising reports — AI-weighted conversion credit allocation |
Session scope — use for traffic analysis:
sessionDefaultChannelGroupsessionSourcesessionMediumsessionCampaignNamesessionSourceMediumFirst-user scope — use for acquisition analysis:
firstUserDefaultChannelGroupfirstUserSourcefirstUserMediumfirstUserCampaignNameEvent/attribution scope — use only in advertising/conversion contexts:
defaultChannelGroup (no prefix)source (no prefix)medium (no prefix)"Where is my traffic coming from?" → session scope
dimensions: ["sessionDefaultChannelGroup", "sessionSource", "sessionMedium"]
metrics: ["sessions", "totalUsers", "engagedSessions", "keyEvents"]
"Which channels are bringing in new users?" → first-user scope
dimensions: ["firstUserDefaultChannelGroup", "firstUserSource"]
metrics: ["newUsers", "totalUsers"]
"How should I attribute conversion credit across channels?" → event scope (Use only with advertising campaign analysis; this is AI-weighted attribution.)
A user acquired via Instagram who later converts via Google Organic will show:
sessionDefaultChannelGroup = "Organic Search" (where this session came from)firstUserDefaultChannelGroup = "Organic Social" (where they were first acquired)These are different questions. Mixing scopes in one query produces meaningless results.
Never combine sessionSource with firstUserMedium in the same report.
When filtering, use the same scope as your dimensions:
// Filtering traffic acquisition report — use session-scoped dimension
{"filter": {"fieldName": "sessionDefaultChannelGroup", "stringFilter": {"value": "Organic Search", "matchType": "EXACT"}}}
// NOT source (attribution scope) — wrong scope for this report
{"filter": {"fieldName": "source", "stringFilter": {"value": "google", "matchType": "EXACT"}}}