Ad Conversion Tracking Setup
minhnv0807/ai-business-skills
Sets up and verifies conversion tracking before ad spend: Meta Pixel and CAPI, Google Ads, GA4, TikTok, server-side GTM, consent mode, UTMs and a pre-launch checklist.
Configuring Google Consent Mode v2 for privacy-compliant measurement and advertising.
$ npx skills add mukul975/Privacy-Data-Protection-Skills --skill google-consent-mode-v2 -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills google-consent-mode-v2 --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/privacy/google-consent-mode-v2 .claude/skills/google-consent-mode-v2 && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "google-consent-mode-v2" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/google-consent-mode-v2 into .claude/skills/google-consent-mode-v2/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-consent-mode-v2", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/google-consent-mode-v2Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mukul975/Privacy-Data-Protection-Skills --skill google-consent-mode-v2 -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills google-consent-mode-v2 --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/privacy/google-consent-mode-v2 .agents/skills/google-consent-mode-v2 && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "google-consent-mode-v2" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/google-consent-mode-v2 into .agents/skills/google-consent-mode-v2/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-consent-mode-v2", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mukul975/Privacy-Data-Protection-Skills --skill google-consent-mode-v2 -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills google-consent-mode-v2 --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/privacy/google-consent-mode-v2 .cursor/skills/google-consent-mode-v2 && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "google-consent-mode-v2" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/google-consent-mode-v2 into .cursor/skills/google-consent-mode-v2/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-consent-mode-v2", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mukul975/Privacy-Data-Protection-Skills.git --path skills/privacy/google-consent-mode-v2--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mukul975/Privacy-Data-Protection-Skills --skill google-consent-mode-v2 -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills google-consent-mode-v2 --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/privacy/google-consent-mode-v2 .gemini/skills/google-consent-mode-v2 && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "google-consent-mode-v2" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/google-consent-mode-v2 into .gemini/skills/google-consent-mode-v2/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-consent-mode-v2", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mukul975/Privacy-Data-Protection-Skills google-consent-mode-v2Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mukul975/Privacy-Data-Protection-Skills --skill google-consent-mode-v2 -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/privacy/google-consent-mode-v2 .github/skills/google-consent-mode-v2 && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "google-consent-mode-v2" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/google-consent-mode-v2 into .github/skills/google-consent-mode-v2/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-consent-mode-v2", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mukul975/Privacy-Data-Protection-Skills --skill google-consent-mode-v2 -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills google-consent-mode-v2 --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/privacy/google-consent-mode-v2 .opencode/skills/google-consent-mode-v2 && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "google-consent-mode-v2" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/google-consent-mode-v2 into .opencode/skills/google-consent-mode-v2/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-consent-mode-v2", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
google-consent-mode-v2Configuring Google Consent Mode v2 for privacy-compliant measurement and advertising.
Google Consent Mode V2 is an agent skill from mukul975/Privacy-Data-Protection-Skills. Configuring Google Consent Mode v2 for privacy-compliant measurement and advertising. Covers default and update commands, consent state mapping to GA4 and Google Ads, conversion modeling with cookieless pings, and EEA requirements effective March 2024.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including scripts, reference files and assets (for example `assets/consent_parameters.md`, `assets/template.md` and `references/standards.md`).
It sits in Marketing & SEO, covering Paid advertising and Privacy and GDPR. It works with Google Analytics and Google Ads. The repository describes itself as: 282+ structured privacy & data protection skills for AI agents. GDPR, CCPA, EU AI Act, HIPAA, LGPD, PIPL, DPDP Act. The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 9b2ef9e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
google-analytics.comgoogletagmanager.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Google Consent Mode V2 loads about 2.6k tokens when it runs, and up to ~3.7k if it reads all its reference files. Until then it costs about 69 tokens; SKILL.md has 921 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from mukul975/Privacy-Data-Protection-Skills at commit 9b2ef9e, republished under its Apache-2.0 licence (© mukul975). 921 words, ~2,645 tokens.
.claude/skills/google-consent-mode-v2/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Google Consent Mode v2 is a framework that adjusts the behavior of Google tags (Analytics, Ads, Floodlight) based on user consent status. Announced in November 2023 with enforcement beginning March 2024, Consent Mode v2 introduces two new parameters — ad_user_data and ad_personalization — alongside the existing analytics_storage and ad_storage parameters. For advertisers serving users in the European Economic Area (EEA), implementing Consent Mode v2 is required to maintain measurement and audience capabilities in Google Ads and GA4. Without it, Google will not process EEA user data for remarketing lists or conversion measurement.
| Parameter | Controls | Default | Description |
|---|---|---|---|
ad_storage | Advertising cookies | denied | Controls whether advertising-related cookies (gcl*, IDE) can be read/written |
ad_user_data | User data for advertising | denied | Controls whether user data can be sent to Google for advertising purposes |
ad_personalization | Ad personalization | denied | Controls whether data can be used for remarketing and personalized ads |
analytics_storage | Analytics cookies | denied | Controls whether analytics cookies (_ga, _gid) can be read/written |
functionality_storage | Functionality cookies | granted | Controls functionality cookies (language preferences) |
personalization_storage | Personalization cookies | denied | Controls personalization cookies (recommendations) |
security_storage | Security cookies | granted | Controls security-related cookies (authentication, fraud prevention) |
Map CMP consent categories to Consent Mode parameters:
| CMP Category | ad_storage | ad_user_data | ad_personalization | analytics_storage |
|---|---|---|---|---|
| All rejected (default) | denied | denied | denied | denied |
| Analytics only | denied | denied | denied | granted |
| Analytics + Advertising | granted | granted | granted | granted |
| Analytics + Advertising (no personalization) | granted | granted | denied | granted |
| All accepted | granted | granted | granted | granted |
Step 1: Set defaults before any Google tags load
Place this script in the <head> before the Google tag:
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
// Set default consent state — deny all non-essential before user interaction
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
'functionality_storage': 'granted',
'personalization_storage': 'denied',
'security_storage': 'granted',
'wait_for_update': 500 // Wait 500ms for CMP to load
});
// Enable URL passthrough for conversion measurement without cookies
gtag('set', 'url_passthrough', true);
// Enable ads data redaction when ad_storage is denied
gtag('set', 'ads_data_redaction', true);
</script>Step 2: Load the Google tag
<script async src="https://www.googletagmanager.com/gtag/js?id=G-PINNACLE123"></script>
<script>
gtag('js', new Date());
gtag('config', 'G-PINNACLE123');
</script>Step 3: Update consent state when user interacts with CMP
// Called by the CMP when user makes a consent choice
function updateGoogleConsent(consentState) {
gtag('consent', 'update', {
'ad_storage': consentState.advertising ? 'granted' : 'denied',
'ad_user_data': consentState.advertising ? 'granted' : 'denied',
'ad_personalization': consentState.personalization ? 'granted' : 'denied',
'analytics_storage': consentState.analytics ? 'granted' : 'denied'
});
}Step 1: Configure Consent Initialization trigger
In GTM, use the "Consent Initialization — All Pages" trigger type for the default consent tag. This fires before all other triggers.
Default Consent Tag (Consent Initialization trigger):
| Setting | Value |
|---|---|
| Tag type | Google tag: Consent configuration |
| Action | Default |
| ad_storage | Denied |
| ad_user_data | Denied |
| ad_personalization | Denied |
| analytics_storage | Denied |
| Wait for update | 500 ms |
| URL passthrough | Enabled |
| Ads data redaction | Enabled |
Step 2: Configure Consent Update tag
Create a custom HTML tag or use a CMP-specific template that fires on consent change:
Update Consent Tag (Custom Event trigger: consent_update):
| Setting | Value |
|---|---|
| Tag type | Google tag: Consent configuration |
| Action | Update |
| ad_storage | {{CMP - Ad Storage Consent}} |
| ad_user_data | {{CMP - Ad User Data Consent}} |
| ad_personalization | {{CMP - Ad Personalization Consent}} |
| analytics_storage | {{CMP - Analytics Storage Consent}} |
Step 3: Configure tag consent settings
For each Google tag in GTM, configure the built-in consent checks:
| Tag | Required Consent | Additional Consent |
|---|---|---|
| GA4 Configuration | analytics_storage | — |
| GA4 Event | analytics_storage | — |
| Google Ads Conversion | ad_storage | ad_user_data |
| Google Ads Remarketing | ad_storage | ad_user_data, ad_personalization |
| Floodlight Counter | ad_storage | ad_user_data |
| Floodlight Sales | ad_storage | ad_user_data |
Apply different defaults based on user geography:
// Strict defaults for EEA users
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
'region': ['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR',
'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL',
'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'IS', 'LI', 'NO']
});
// Less restrictive defaults for US users (adjust per state law)
gtag('consent', 'default', {
'ad_storage': 'granted',
'ad_user_data': 'granted',
'ad_personalization': 'granted',
'analytics_storage': 'granted',
'region': ['US']
});When consent is denied, Google tags still send cookieless pings that include:
Google uses these pings, combined with data from consenting users, to build machine learning models that estimate:
For Google to generate modeled conversions, Pinnacle E-Commerce Ltd must meet:
| Requirement | Threshold |
|---|---|
| Minimum consented conversions per day | 70+ per conversion action |
| Minimum total conversions per day | 100+ per conversion action |
| Consent Mode implemented for | At least 7 consecutive days |
| Tag coverage | All conversion-relevant pages |
GA4 behavioral modeling fills gaps in analytics data:
| Requirement | Threshold |
|---|---|
| Minimum daily consented users | 1,000+ per property |
| Minimum days of data | 7+ consecutive days |
| Consent Mode coverage | All GA4 pageview and event tags |
Use Google Tag Assistant (browser extension) to verify:
In GA4 DebugView, consent-impacted events display with:
Monitor network requests to https://www.google-analytics.com/g/collect:
| Parameter | Consent Granted | Consent Denied |
|---|---|---|
_p (Page ID) | Present | Present |
cid (Client ID) | From _ga cookie | Randomly generated per-hit |
gcs (Consent State) | G111 (all granted) | G100 (all denied) |
gcd (Consent Default) | Present | Present |
| Cookie set | _ga, _gid | None |
Google's Digital Markets Act (DMA) compliance requirements:
© mukul975, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files (scripts, references, assets) in skills/privacy/google-consent-mode-v2 of mukul975/Privacy-Data-Protection-Skills.
Open the folder on GitHubat commit 9b2ef9e
Google Consent Mode V2 next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Google Consent Mode V2 this skillmukul975/Privacy-Data-Protection-Skills | 301 | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Ad Conversion Tracking Setupminhnv0807/ai-business-skills | 609 | — | ~3.7k | Automated safety check: Pass | MIT | |
| Blog GoogleAgriciDaniel/claude-blog | 2.3k | 1 repos | ~3.3k | Automated safety check: Notes | MIT | |
| SEO Googleseranking/seo-skills | 161 | — | ~4.8k | Automated safety check: Pass | MIT | |
| Google Adsarnabbagxd/Brand-building-skills | 729 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Google Analytics Admin API Basicsgoogle/skills | 21k | — | ~1.9k | Automated safety check: Pass | Apache-2.0 |
minhnv0807/ai-business-skills
Sets up and verifies conversion tracking before ad spend: Meta Pixel and CAPI, Google Ads, GA4, TikTok, server-side GTM, consent mode, UTMs and a pre-launch checklist.
AgriciDaniel/claude-blog
Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…
seranking/seo-skills
Direct access to Google's own SEO data via Search Console (Search Analytics, URL Inspection, Sitemaps), PageSpeed Insights v5, CrUX field data with 25-week history, Indexing API v3, GA4 organic…
arnabbagxd/Brand-building-skills
Plan, build, and optimize Google Ads campaigns — Search, Shopping, Performance Max, Display, and YouTube — including keyword research, match types, bidding strategy, Quality Score, ad extensions…
google/skills
Manages Google Analytics account and property settings, enables the Analytics Admin API via the Cloud CLI, lists accounts and properties, and manages data streams, custom dimensions, conversion…
google/skills
Guides developers through implementing event and conversion ingestion to Google products using the Data Manager API /v1/events/ingest endpoint and its associated client libraries.
mukul975/Privacy-Data-Protection-Skills
Implements age-gating mechanisms for online services to restrict access based on user age.
mukul975/Privacy-Data-Protection-Skills
Manages AI model retention and machine unlearning requirements.
mukul975/Privacy-Data-Protection-Skills
Conducts Data Protection Impact Assessments for AI and ML systems per EDPB Guidelines 04/2025 on AI processing.
mukul975/Privacy-Data-Protection-Skills
Structures risk mitigation planning and residual risk tracking for Data Protection Impact Assessments under GDPR Article 35(7)(d).
mukul975/Privacy-Data-Protection-Skills
Guides implementation of the GDPR accountability principle under Articles 5(2) and 24, including documentation requirements for policies, DPIAs, RoPA, training records, and breach logs.
mukul975/Privacy-Data-Protection-Skills
Conducts pre-DPIA threshold screening to determine whether a full Data Protection Impact Assessment is required under GDPR Article 35.
Works with
Categories
Configuring Google Consent Mode v2 for privacy-compliant measurement and advertising. Google Consent Mode V2 is an agent skill from mukul975/Privacy-Data-Protection-Skills. Configuring Google Consent Mode v2 for privacy-compliant measurement and advertising.
Google Consent Mode V2 fits situations like: tasks that involve Paid advertising; tasks that involve Privacy and GDPR.
Run `npx skills add mukul975/Privacy-Data-Protection-Skills --skill google-consent-mode-v2 -a claude-code`. Or copy the skill folder (skills/privacy/google-consent-mode-v2 in mukul975/Privacy-Data-Protection-Skills) into .claude/skills/google-consent-mode-v2 in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mukul975/Privacy-Data-Protection-Skills --skill google-consent-mode-v2 -a codex`. Or copy the skill folder (skills/privacy/google-consent-mode-v2 in mukul975/Privacy-Data-Protection-Skills) into .agents/skills/google-consent-mode-v2 in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mukul975/Privacy-Data-Protection-Skills --skill google-consent-mode-v2 -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/google-consent-mode-v2, .gemini/skills/google-consent-mode-v2, .github/skills/google-consent-mode-v2 and .opencode/skills/google-consent-mode-v2 in your project.
Going by SKILL.md and its folder, Google Consent Mode V2 needs Python for the scripts in its folder. Our summary lists: Python 3.
SKILL.md names 2 domains. In commands or code: google-analytics.com and googletagmanager.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Google Consent Mode V2 is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Google Consent Mode V2: Ad Conversion Tracking Setup (minhnv0807/ai-business-skills, 609 stars), Blog Google (AgriciDaniel/claude-blog, 2.3k stars), SEO Google (seranking/seo-skills, 161 stars) and Google Ads (arnabbagxd/Brand-building-skills, 729 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mukul975 (a GitHub user) maintains it in mukul975/Privacy-Data-Protection-Skills, which has 301 GitHub stars. The repository holds 280 skills in this directory. The repository was last updated on March 16, 2026.
Source: mukul975/Privacy-Data-Protection-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.