If Advanced Consent Mode is autopilot, then Basic Consent Mode (BCM) is like driving stick with a broken clutch. Everything must be blocked and allowed manually, strictly after the user gives consent.

No shortcuts.

Simo put together a monumental guide, including a full mind map of the BCM setup process — so that even your tags have a fighting chance.

The gist:

1. Start with a Default call (all "denied") on Consent Initialization.

2. Immediately follow with an Update call if consent is already known.

3. After every Update, push a dataLayer event — otherwise your tags won’t know they’re allowed to fire.

Where things get tricky:

CMPs often load asynchronously, and GTM might get blocked by ad blockers. On top of that, many CMPs use gtag() instead of GTM’s custom templates, which leads to race conditions and timing issues.

The worst bug: if a tag is set to fire “Once per page” and it gets blocked the first time (because consent wasn’t granted yet), GTM thinks it has already fired. It won’t try again — even if consent is later granted. That’s a tough one.

What helps:

1. Use custom templates in GTM (like Simo’s from the Community Template Gallery).

2. Use Trigger Groups, for example: consent is granted and a purchase event is pushed.

3. Use OR-based triggers — like gtm_consent_update or virtual_pageview for initialization tags. This covers cases where consent and user actions happen at different times.

Bottom line:

BCM isn’t a setting — it’s an architecture of responsibility. Your CMP isn’t the conductor — it just hands over the sheet music. You’re the one orchestrating the timing. And if you want it to sound right, you’d better master your triggers and templates.

Based on Simo Ahava’s guide. Full article.

If you work with GA4 to BigQuery exports, be sure to check out my SQL cheat sheet.