Files
2025-11-29 18:32:45 +08:00

182 lines
5.2 KiB
Markdown

---
name: gtm-api
description: Expert guidance for Google Tag Manager REST API v2 including authentication, programmatic container management, automation scripts, bulk operations, and GTM configuration backup/export. Use when automating GTM operations, managing multiple containers, building GTM tools, syncing configurations, exporting GTM data programmatically, working with Python or Node.js GTM automation, or using service account JSON credentials. Requires google-api-python-client and google-auth packages for Python implementations.
---
# GTM API Automation
## Overview
This skill provides comprehensive expertise for the Google Tag Manager REST API v2, enabling programmatic management of GTM containers, tags, triggers, variables, and configurations.
## When to Use This Skill
Invoke this skill when:
- Automating GTM container management
- Building tools for GTM configuration backup/restore
- Syncing tags across multiple containers
- Bulk creating or updating tags, triggers, variables
- Exporting GTM configuration to JSON
- Migrating containers between accounts
- Programmatically publishing GTM versions
- Building custom GTM management dashboards
- Implementing GTM configuration as code
- Integrating GTM with CI/CD pipelines
## GTM API Basics
### Authentication
Use OAuth 2.0 with service accounts (recommended for automation):
```python
from google.oauth2 import service_account
from googleapiclient.discovery import build
SCOPES = ['https://www.googleapis.com/auth/tagmanager.edit.containers']
SERVICE_ACCOUNT_FILE = 'service-account-key.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('tagmanager', 'v2', credentials=credentials)
```
### API Resource Hierarchy
```
Account → Container → Workspace → Tags/Triggers/Variables
```
## Common Operations
**List Containers:**
```python
containers = service.accounts().containers().list(
parent='accounts/123456'
).execute()
```
**Create Tag:**
```python
tag_body = {
'name': 'GA4 Event',
'type': 'gaawe',
'parameter': [
{'key': 'eventName', 'value': 'click', 'type': 'template'}
],
'firingTriggerId': ['trigger_id']
}
service.accounts().containers().workspaces().tags().create(
parent=workspace_path, body=tag_body
).execute()
```
**Publish Version:**
```python
version = service.accounts().containers().workspaces().create_version(
path=workspace_path,
body={'name': 'API Version', 'description': 'Auto-deployed'}
).execute()
service.accounts().containers().versions().publish(
path=version['containerVersion']['path']
).execute()
```
## Automation Patterns
### Backup Container
```python
def backup_container(workspace_path, output_file):
tags = service.accounts().containers().workspaces().tags().list(
parent=workspace_path
).execute()
triggers = service.accounts().containers().workspaces().triggers().list(
parent=workspace_path
).execute()
variables = service.accounts().containers().workspaces().variables().list(
parent=workspace_path
).execute()
with open(output_file, 'w') as f:
json.dump({
'tags': tags.get('tag', []),
'triggers': triggers.get('trigger', []),
'variables': variables.get('variable', [])
}, f, indent=2)
```
### Bulk Operations
```python
def disable_all_tags(workspace_path):
tags = service.accounts().containers().workspaces().tags().list(
parent=workspace_path
).execute()
for tag in tags.get('tag', []):
tag['paused'] = True
service.accounts().containers().workspaces().tags().update(
path=tag['path'], body=tag
).execute()
```
## Error Handling
```python
from googleapiclient.errors import HttpError
try:
tag = service.accounts().containers().workspaces().tags().create(
parent=workspace_path, body=tag_body
).execute()
except HttpError as error:
if error.resp.status == 404:
print("Resource not found")
elif error.resp.status == 403:
print("Permission denied")
```
## Best Practices
- Use service accounts for automation
- Implement rate limiting
- Always backup before modifications
- Test in workspaces before publishing
- Log all operations
- Handle errors gracefully
- Version control your configs
## References
- **references/api-overview.md** - Complete API reference
## Integration with Other Skills
- **gtm-general** - Understanding GTM concepts and architecture
- **gtm-tags** - Understanding tag structure for API operations
- **gtm-triggers** - Understanding trigger structure for API operations
- **gtm-variables** - Understanding variable structure for API operations
- **gtm-datalayer** - Creating data layer variables via API
- **gtm-custom-templates** - Managing templates programmatically
- **gtm-setup** - Container setup concepts for API automation
## Quick Reference
**Install:** `pip install google-api-python-client google-auth-oauthlib`
**List:** `.list(parent=parent_path)`
**Get:** `.get(path=resource_path)`
**Create:** `.create(parent=parent_path, body=resource_body)`
**Update:** `.update(path=resource_path, body=resource_body)`
**Publish:** `.create_version()` then `.publish()`