Developers

One snippet,
then a dashboard.

Add one script tag, drop in a Google Tag Manager template, and you are done. Banners, regions, categories and Consent Mode v2 are configured in the dashboard, so the code you ship never has to change again.

Get your snippetRead the API

The consent layer behind 100+ marketing teams.

Live in two lines.

Paste the tag once, near the top of your head element. Velo loads asynchronously, blocks every tag until the visitor decides, and applies the right regional regime on its own.

<!-- Before your other tags. That order is the point. --> <script src="https://veloconsent.com/v1/velo.js" data-velo-site="your-site-id" defer></script>

Nothing Fires
Before A Choice

What happens when your page loads.

Three phases run in order, so nothing fires before your visitor has made a choice.

The snippet defers

Velo loads asynchronously and never blocks your render. The region is resolved at the nearest Cloudflare edge before the page finishes painting.

Tags wait for a choice

Every tag is gated by category. Analytics fires on analytics consent, your pixels fire on advertising consent, and nothing leaks before the visitor decides.

Consent Mode v2 fires

Default and update calls fire in the order that modelling depends on, so declined visitors are modelled reliably and your reports stay whole.

A tag template,
not a tag rewrite.

Import the Velo template into your Google Tag Manager workspace once. It reads consent state straight from the data layer and gates every tag by category, so analytics fires on analytics consent and your pixels wait for advertising consent.

tag assistant · yourstore.com
09:41:02.114 consent.default { ad_storage:"denied", analytics_storage:"denied" }
09:41:02.148 banner painted · 34ms · region=EEA
09:41:07.492 visitor choice · analytics · advertising
09:41:07.495 consent.update { analytics_storage:"granted" }
GA4 configuration — fired on analytics consent
Google Ads pixel — held, waits for advertising consent
consent default set before tags

Read consent,
react to changes.

One global queue, a handful of methods. Ask Velo for the current state, listen for updates, or reopen the preferences panel from anywhere on the page.

velo("state")
// synchronous, current visitor const s = velo("state"); // { region: "EEA", // analytics: true, // advertising: false }

Returns the current consent payload, synchronously. Returns the pending default before a choice is made.

velo("onChange", fn)
velo("onChange", s => { // runs on set + every change if (s.advertising) loadPixel(); });

Runs your callback the moment consent is set, and again on every change. Perfect for loading a tag the instant its category is allowed.

velo("open")
btn.onclick = () => velo("open"); // reopens the preference panel

Reopen the preferences panel from your own button or footer link, so visitors can change their mind without hunting for it.

velo("region")
velo("region"); // "EEA" | "UK" | "US-CA" | "ROW"

The region resolved at the edge. Use it to branch your own logic without a geo lookup.

Served from
the edge.

Velo runs on Cloudflare's global edge, so the banner is decided and painted near the visitor rather than round tripping to a far off server. The region is resolved at the edge too.

Banner deliveryOperational
Consent APIOperational
Audit log writesOperational
Region resolutionOperational

What's new
in Velo.

Recent releases of the consent layer. Each one rolls out to every site running Velo on its own, so the snippet never changes.

June 2026
v1.7 · Region rules at the edge

Velo reads the visitor's country at the edge and applies the right regime on its own: opt in across the EEA and the UK, opt out for US state laws, a light notice everywhere else.

May 2026
v1.6 · The embedded banner style

A third banner style joins the bar and the modal: an in page block that lives in your layout instead of floating on top of it, built for Webflow, Wix and sites that block overlays.

April 2026
v1.5 · A sharper Consent Mode v2 signal

Consent state is passed to Google the way its modelling expects, so declined visitors are modelled more reliably and your reports stay whole.

March 2026
v1.4 · Export the consent record

Every accept, reject and preference is written to an anonymised, time stamped log, now exportable on demand and ready for a regulator or a client question.

Two lines now.
Nothing to maintain.

Add the snippet, import the GTM template, and let the dashboard handle
the banner, the regions and Consent Mode v2. Live in minutes.