Google Tag Manager API v2

GTM API TOOL

Google Tag Manager API v2 — Automated Container Configuration. Four-script CLI pipeline for OAuth2 authentication, container discovery, tag setup, and full publish automation.

Explore Architecture

System Architecture

STEP 01 — ENTRY
Auth
auth.js
  • OAuth2 flow via googleapis
  • Loopback HTTP server :3333
  • 5 GTM API scopes
  • Persists tokens.json
  • Auto-refresh on expiry
STEP 02 — DISCOVERY
Discover
discover.js
  • accounts.list
  • containers.list
  • workspaces.list
  • tags / triggers / variables
  • clients (server only)
  • Outputs gtm-config.json
STEP 03 — CONFIGURATION
Setup Tags
setup-tags.js
  • Reads gtm-config.json
  • Server: GA4 client + vars
  • Server: GA4 forward tag
  • Server: Meta CAPI trigger
  • Web: Google Tag + sGTM URL
  • create_version (dry-run)
STEP 04 — AUTOMATION
Run 333d Fresh
run-333d-fresh.js
  • findContainerByPublicId
  • ensureTrigger / ensureTag
  • Meta Pixel HTML generation
  • 4 event tags (Purchase, etc)
  • GA4 forward + Google Tag
  • Server + web setup + publish
GTM API v2
googleapis.tagmanager({ version: 'v2', auth })
SCRIPT 01
auth.js
/var/www/.archive/gtm-api-tool/auth.js
  • authenticate()Main entry — checks existing tokens, refreshes if expired, or initiates OAuth2 flow
  • OAuth2 clientgoogle.auth.OAuth2 with client_id + client_secret from client_secrets.json
  • Loopback :3333HTTP server on 127.0.0.1:3333 captures OAuth2 redirect code
  • SCOPES[5]edit.containers, edit.containerversions, publish, readonly, manage.accounts
  • refreshAccessToken()Silent token refresh using stored refresh_token
  • tokens.jsonPersists access_token, refresh_token, expiry_date to disk
  • exec('open')Auto-opens browser for Google consent on macOS/Linux
SCRIPT 02
discover.js
/var/www/.archive/gtm-api-tool/discover.js
  • getAuthClient()Loads tokens.json, refreshes if expired, returns OAuth2 client
  • accounts.listEnumerates all GTM accounts for the authenticated Google user
  • containers.listLists web + server containers per account with publicId, type, domainName
  • workspaces.listLists workspaces per container with workspaceId + path
  • tags.listEnumerates existing tags: tagId, name, type, firingTriggerId
  • triggers.listEnumerates existing triggers: triggerId, name, type
  • variables.listEnumerates user-defined variables: variableId, name, type
  • clients.listServer containers only — lists GA4/custom clients: clientId, name, type
  • gtm-config.jsonOutputs full account/container/workspace/tag/trigger tree as JSON
SCRIPT 03
setup-tags.js
/var/www/.archive/gtm-api-tool/setup-tags.js
  • setupServerContainer()Configures server container: GA4 client check, built-in vars, triggers, tags
  • built_in_variables.createEnables CLIENT_NAME, EVENT_NAME, REQUEST_PATH, REQUEST_METHOD
  • triggers.createCreates "All GA4 Requests" (CUSTOM, MATCH_REGEX on Client Name) + "Meta CAPI Events"
  • tags.create (gaaw)Creates "GA4 - Forward All Events" server-side forwarding tag
  • setupWebContainer()Updates or creates Google Tag with server_container_url parameter
  • tags.get / tags.updateFetches full tag, injects server_container_url into configSettingsTable
  • createVersion()Calls workspaces.create_version — dry-run publish for review
  • SETTINGS promptInteractive prompts for GA4 ID, sGTM URL, Meta Pixel ID
SCRIPT 04
run-333d-fresh.js
/var/www/.archive/gtm-api-tool/run-333d-fresh.js
  • findContainerByPublicId()Iterates accounts → containers to find by publicId (GTM-TFL4C9SK / GTM-P9L5FPV4)
  • ensureTrigger()Idempotent trigger creation — checks existing before creating
  • ensureGa4ForwardTag()Creates "GA4 - Forward All Events" (type: sgtmgaaw) if missing
  • ensureGoogleTag()Updates or creates Google Tag with server_container_url + GA4 measurement ID
  • buildMetaBaseHtml()Generates Meta Pixel base code HTML — fbq init + PageView
  • buildMetaEventHtml(kind)Generates 4 event HTML scripts: purchase, begin_checkout, add_to_cart, view_content
  • upsertHtmlTag()Creates or updates Custom HTML tags with Meta Pixel event code + trigger binding
  • ensureServerContainer()Full server setup: built-in vars, GA4 trigger + forward tag, Meta CAPI trigger
  • ensureWebContainer()Full web setup: Google Tag, Meta Pixel base + 4 event tags with custom event triggers
  • SETTINGS (hardcoded)GTM-TFL4C9SK, GTM-P9L5FPV4, G-4HS2SDR7NC, gtm.333d.eu, Pixel 1587186012387664

Data Flow

client_secrets.json
OAuth2 credentials
auth.js
OAuth2 flow
tokens.json
Access + refresh tokens
discover.js
API enumeration
gtm-config.json
Account/container tree
setup-tags.js
Tag configuration
GTM API v2
Live containers
Parallel automation path
tokens.json
Shared auth tokens
run-333d-fresh.js
Hardcoded SETTINGS
GTM API v2
Direct container mutation

API Surface

GET accounts.list
List all GTM accounts accessible by the authenticated user
GET containers.list
List all containers (web + server) within an account
GET workspaces.list
List workspaces within a container
GET tags.list
List all tags in a workspace
POST tags.create
Create a new tag (gaaw, googtag, html, sgtmgaaw)
GET tags.get
Get full tag details including all parameters
PUT tags.update
Update an existing tag (inject server_container_url, update HTML)
GET triggers.list
List all triggers in a workspace
POST triggers.create
Create triggers (CUSTOM, customEvent with filters)
GET clients.list
List clients in server containers (GA4, custom)
GET variables.list
List user-defined variables in a workspace
POST built_in_variables.create
Enable built-in variables (CLIENT_NAME, EVENT_NAME, etc.)
POST workspaces.create_version
Create a container version for review (dry-run publish)

Stack

Node.js
ES Modules
googleapis v144
OAuth2
GTM API v2
CLI Only