Install guide

Add Velo to
Google Tag Manager.

Install the Velo cookie banner and Google Consent Mode v2 with one tag imported from the Velo CMP template. No code on the page, no Custom HTML — configure the tag, set the trigger, publish. About ten minutes end to end.

Choose your install

Two ways in.
Pick one.

Templates New Import "template.tpl" Save

One community template, imported from the Velo CMP repo. It sets the Consent Mode v2 default for the EEA, UK and Switzerland before any other tag fires, then loads the banner — which applies your regional policy, records every decision, and updates Google on each one.

Before you start

Three things
to have ready.

Publish access

A Tag Manager account with permission to add templates and publish the container. That is the only access the install needs.

Your Velo site ID

It is in the Velo dashboard. A single site account can leave the field as its default value and skip this entirely.

One consent stack

Remove any other CMP first. Two tools setting Consent Mode defaults produce conflicting signals — pause the old tag before publishing Velo.

The install

Six steps,
one publish.

01

Import the Velo CMP template

Download template.tpl from github.com/ampliodata/velo-cmp. In your container, open Templates → Tag Templates → New, then open the ⋮ menu at the top right of the editor and choose Import. Pick the file you just downloaded, save, and the Velo CMP tag is ready to configure. Velo CMP is awaiting its listing in Google’s Community Template Gallery — until it lands, importing the file is the way in, and the tag behaves identically.

02

Create the tag

Go to Tags → New and choose the Velo template. Enter your Velo site ID — lowercase letters, digits and dashes, exactly as the dashboard shows it — and pick the light or dark theme to match your site. Leave the API endpoint blank unless Velo issued one for your account: the banner and Consent Mode work fully without it, and when it is set the dashboard's remote configuration takes over copy and categories.

Google Tag Manager tag editor for the Velo CMP template: Tag Configuration card with Velo Site ID and banner theme fields, Triggering card set to Consent Initialization – All Pages, and the Save button
The whole tag: your site ID, a theme, and the Consent Initialization trigger.
03

Tick the two recovery options

Under Advanced, two checkboxes are worth switching on. url_passthrough lets ad click, client and session identifiers survive navigation through URL parameters while storage consent is denied — it recovers attribution for the traffic your banner would otherwise lose. ads_data_redaction additionally drops ad click identifiers and goes cookieless on requests while ad_storage is denied — recommended for strict EU setups. The copy override fields can stay empty; prefer editing copy in the Velo dashboard.

Advanced settings of the Velo tag in Google Tag Manager with the url_passthrough and ads_data_redaction checkboxes both enabled
Two checkboxes under Advanced — both worth switching on.
04

Fire it on Consent Initialization – All Pages

This is the trigger Google provides specifically for consent defaults: it runs before every other trigger in the container, which is what guarantees the denied default is in place before any measurement tag can fire. Do not use Initialization or All Pages — both run too late. This one choice is most of what a correct consent install comes down to.

Google Tag Manager Choose a trigger dialog with Consent Initialization – All Pages selected, while Initialization and All Pages are marked as running too late
One correct choice: Consent Initialization – All Pages. The other two run too late.
05

Turn on consent overview under Admin

In Admin → Container Settings, tick Enable consent overview. This switches the container’s consent features on: the shield icon in the Tags view that shows each tag’s consent status, and the consent state readings you are about to check in Preview. Do it before you open Preview — without it, GTM gives you no consent overview to debug against.

Google Tag Manager Admin Container Settings with the Enable consent overview checkbox ticked under Additional Settings
Admin → Container Settings → Enable consent overview. Flip it on before you debug.
06

Preview, then publish

In Preview, check three things: the Velo tag fired on Consent Initialization before every other tag; the Consent tab in Tag Assistant shows every signal except security_storage denied by default from an EEA, UK or Swiss location; and accepting or declining in the banner flips the matching update row while a velo_consent_update event lands in the data layer. Then Submit → Publish. The banner is live on the next page load, and the Velo console flips to installed on its own when the first real signal arrives.

Tag Assistant preview of the Consent tab: every consent type denied on page load and granted after accepting the Velo banner, with the velo_consent_update event
What Preview should show: denied by default, granted after the choice, one event per decision.
Beyond Google tags

Gate any tag on
the decision.

GA4, Google Ads and Floodlight need nothing extra — Consent Mode's built in consent checks hold and release them automatically. For everything else, a chat widget, a heatmap script, a pixel without Consent Mode support, the SDK pushes a velo_consent_update event to the data layer every time consent becomes effective, including a stored decision reapplied for a returning visitor. Three pieces wire it up:

01

A variable

Create a Data Layer Variable named velo_categories. It is an object of booleans — analytics, ads, functional, personalization — reflecting the visitor's current decision.

02

A trigger

Create a Custom Event trigger on velo_consent_update with a condition on the category you care about — for example, velo_categories.analytics equals true.

Google Tag Manager Custom Event trigger on velo_consent_update with the condition velo_categories.analytics equals true
Gate any tag: one event name, one condition on the category you care about.
03

Attach it

Put that trigger on the tag you want gated. Because the event also fires for returning visitors with a stored decision, the tag fires on every pageview where consent is granted — no "only fires once after the click" gap.

If something
looks off.

The banner does not appear.

Almost always one of two things: the tag is not on the Consent Initialization – All Pages trigger, or the container version was never published. Open Preview and check where the tag fires — the fix is usually visible in ten seconds.

Signals show granted by default in the EU.

Something else is racing Velo — an old CMP tag, a consent default snippet in a Custom HTML tag, or a gtag default hard coded in the page. Only one thing in the stack may set defaults. Find the other one and remove it.

Two banners show at once.

The direct velo.js snippet is also installed in the page markup. Use one install path, not both. If both are present, the attributes on the inline snippet win over the tag's configuration, which makes debugging confusing — remove one.

My gated tag never fires.

Check the event name on the Custom Event trigger is exactly velo_consent_update — underscores, no typos — and that regex matching was not switched on by accident. Then confirm the condition reads the velo_categories variable, not the event name.

Is a Tag Manager install different from the snippet install?

No. Same banner, same Consent Mode wiring, same audit log, same dashboard. The template route just keeps the whole measurement stack in one container — which is why it is the path we recommend on every platform guide.

Can an agent do this for me?

Yes. Copy the prompt in Install with agents, just below, into Claude, ChatGPT, Cursor or whichever assistant you already use. It carries the template, the trigger, the gating pattern for tags Consent Mode does not cover, and the checks the agent has to run before it tells you the job is done.

Install with agents

Or hand it
to an agent.

Copy the prompt below into Claude, ChatGPT, Cursor or whichever assistant you already use. It carries everything on this page — the gallery template, the Consent Initialization trigger, how to gate the tags Consent Mode does not cover, and the checks that prove it worked — so the agent can walk the container with you and tell you exactly what it changed.

Install prompt · Google Tag Manager
# Install Velo in Google Tag Manager — banner + Consent Mode v2

You are installing Velo, a consent management platform, in my Google Tag
Manager container. Velo sets the Consent Mode v2 defaults before any
other tag fires, shows the cookie banner, and records every decision.
Nothing goes into the page markup.

Ask me for these before you touch the container:

- My Velo site id — it is in the Velo dashboard. No account yet? Send me
  to https://veloconsent.com/get-started and wait for the id.
- The container id, and whether I can publish or only submit for review.
- Which consent tool is live on the site today.

## The install

1. Templates → Tag Templates → New, then ⋮ → Import. Import the
   template.tpl from github.com/ampliodata/velo-cmp ("Velo CMP").
2. Create a tag from that template. Set my Velo site id and pick the
   light or dark theme.
3. Fire it on the "Consent Initialization – All Pages" trigger. Not
   Initialization, not All Pages — both run too late to set consent
   defaults.
4. Preview, then Submit and Publish.

## Gating tags that are not Google tags

GA4, Google Ads and Floodlight need nothing extra — their built in
consent checks hold and release them on their own. For a chat widget, a
heatmap or a pixel without Consent Mode support:

1. Create a Data Layer Variable named velo_categories. It is an object of
   booleans: analytics, ads, functional, personalization.
2. Create a Custom Event trigger on velo_consent_update, with a condition
   such as velo_categories.analytics equals true.
3. Put that trigger on the tag. The event also fires for returning
   visitors with a stored decision, so the tag is not limited to the one
   pageview where the click happened.

## Rules

- Install one path only. If the velo.js snippet is also in the page
  markup, remove it — two installs means two banners.
- Only one tool may set Consent Mode defaults. If another CMP tag is in
  the container, pause it before publishing Velo. Leave no hard coded
  gtag('consent', 'default', ...) in the page or in a Custom HTML tag.
- Change no other tag, trigger or variable. Tell me first if one has to
  move.

## Verify, then report back

- The banner renders on a fresh load in a private window.
- Before I choose, every consent signal except security_storage is denied
  from an EEA, UK or Swiss location.
- Accepting and rejecting each flip the matching signals, and a
  velo_consent_update event lands in the data layer.
- Google tags stay in their cookieless mode until consent is granted, and
  any tag gated by hand fires only after it.
- window.Velo is defined, and Velo.open() reopens the preferences panel.
- On a Tag Manager install, Tag Assistant shows the Velo tag firing on
  Consent Initialization ahead of every other tag.

Tell me what you changed, where you changed it, and what each check
showed. If a check fails, fix it and run the checks again.

Full guide: https://veloconsent.com/google-tag-manager
More context for agents: https://veloconsent.com/llms.txt

Working with an agent that reads the web? Point it at veloconsent.com/llms.txt and /install.md for the same context in plain text.

Compliant on Google Tag Manager.
Signal recovered.

The banner, the regions, the audit log and Consent Mode v2,
working together from one tag in your container, live in minutes.