Changelog v1.0.4
New Features — Google Revenue Fix
- Google Additional Consent (AC) Spec:
addtlConsentcookie is now set alongsideeuconsent-v2— 199 Google AC vendors (Google #229, Xandr #80, Index Exchange #126, Criteo #154, Amazon #7, LiveRamp #12 etc.) can now bid in auctions- GVL Import: Now also fetches Google's
commonly-used-providers.jsonand stores...
Why this major update?
Version 1.x included a custom-built IAB TCF 2.2 consent banner with full TC String encoding, cross-frame TCF API, Google Consent Mode v2 integration and vendor management. While technically compliant and validated by external tools (Kukie.io, Consentik, IAB TCF Decoder), real-world testing revealed a significant problem: Google's ad systems (AdSense, Ad Manager, GPT) consistently delivered lower bidding rates and served more non-personalized ads (npa=1) when...
XF\Db\Exception: MySQL statement prepare error [1054]: Unknown column 'device_type' in 'SELECT' in src/XF/Db/AbstractStatement.php at line 225
XF\Db\AbstractStatement->getException() in src/XF/Db/Mysqli/Statement.php at line 207
XF\Db\Mysqli\Statement->getException() in src/XF/Db/Mysqli/Statement.php at line 43
XF\Db\Mysqli\Statement->prepare() in src/XF/Db/Mysqli/Statement.php at line 61
XF\Db\Mysqli\Statement->execute() in src/XF/Db/AbstractAdapter.php at line 96
XF\Db\AbstractAdapter->query() in src/XF/Db/AbstractAdapter.php at line 157
XF\Db\AbstractAdapter->fetchAll() in src/addons/DEB/ConsentManager/Admin/Controller/ConsentDashboard.php at line 62
DEB\ConsentManager\Admin\Controller\ConsentDashboard->actionIndex() in src/XF/Mvc/Dispatcher.php at line 362
XF\Mvc\Dispatcher->dispatchClass() in src/XF/Mvc/Dispatcher.php at line 264
XF\Mvc\Dispatcher->dispatchFromMatch() in src/XF/Mvc/Dispatcher.php at line 121
XF\Mvc\Dispatcher->dispatchLoop() in src/XF/Mvc/Dispatcher.php at line 63
XF\Mvc\Dispatcher->run() in src/XF/App.php at line 2824
XF\App->run() in src/XF.php at line 814
XF::runApp() in admin.php at line 15
- Fixed: Database migration now ensures all required columns exist regardless of which version you upgrade from (device_type, country_code, referrer, adblock_detected)
- Fixed: Fresh installations now include all columns in the initial table creation
Hi,
Short answer:
With v1.0 I built my own IAB TCF 2.2/2.3 compatible CMP banner. It worked technically — TC String, Vendor Consents, addtlConsent cookie, Cross-Frame TCF API, Google Consent Mode v2 — everything was implemented and passed validation on external tools like Kukie.io.
The problem in practice:
Despite a technically correct implementation, I and my testers experienced significant problems with Google ad revenue. Ads were served, but often only as non-personalized ads (npa=1 instead of npa=0). Bidding rates were considerably lower than expected.
What I tried:
- Expanded TC String to 831 characters with full vendor consent bitfield (1567 vendors)
- Added Disclosed Vendors segment (TCF v2.3 mandatory since Feb 2026)
- Fixed Google Consent Mode v2 timing — consent default BEFORE gtag.js
- Corrected purpose mapping (ad_storage = Purpose 7, not P3+P4)
- addEventListener instead of polling for faster consent signals
- addtlConsent cookie with 381 Google AC vendors
- __tcfapiLocator iframe + postMessage cross-frame handler
- External validation with Kukie.io, Consentik, IAB TCF Decoder, UniConsent
- Comparison with sites using InMobi Choice and other CMPs
My finding:
The fundamental problem is: Google's own systems (AdSense, Ad Manager, GPT) trust their own CMP (Google Funding Choices, CMP ID 300) significantly more than any third-party CMP. Even when the TC String is technically identical, fewer bidders participate and revenue stays below expectations with a custom CMP.
This isn't a bug on my end — it's the reality of Google's ecosystem. Other third-party CMPs (Cookiebot, OneTrust) have this problem to varying degrees as well.
What I've built from that (v2.0.0):
I've completely restructured the addon. Instead of delivering my own banner, I now use Google Funding Choices as the banner provider and focus on what Google doesn't offer:
- Consent Analytics Dashboard — accept rates, device breakdown, referrer stats, trend alerts
- Google AdSense API Integration — revenue directly in the XenForo admin dashboard (today/7d/30d)
- Revenue Forecast — estimated monthly revenue based on current accept rate
- Ad Blocker Detection — detects and counts ad blocker users
- Cookie Scanner — hybrid scan (HTTP + browser JS) with automatic known cookie detection
- Consent Rate Email Alerts — automatic notification when accept rate drops below threshold
- GDPR Compliance Report — CSV export of all consent data for audits
- Google Publisher Tag (GPT) Loader — automatic head injection for Ad Manager users
- Scheduled Re-Consent — automatic renewal every X months (GDPR recommends 12 months)
- User/Page Criteria — controls who sees the banner
v2.0.0 Patch 1 is being released today and will be available shortly.
LogicException: Could not find repository 'DEB\ConsentManager\Repository\VendorRepository' for 'DEB\ConsentManager:Vendor' in src/XF/Mvc/Entity/Manager.php at line 296
[LIST=1]
[*]XF\Mvc\Entity\Manager->getRepository() in src/XF/Mvc/Controller.php at line 1068
[*]XF\Mvc\Controller->repository() in src/addons/DEB/ConsentManager/Pub/Controller/Consent.php at line 35
[*]DEB\ConsentManager\Pub\Controller\Consent->actionIndex() in src/XF/Mvc/Dispatcher.php at line 362
[*]XF\Mvc\Dispatcher->dispatchClass() in src/XF/Mvc/Dispatcher.php at line 264
[*]XF\Mvc\Dispatcher->dispatchFromMatch() in src/XF/Mvc/Dispatcher.php at line 121
[*]XF\Mvc\Dispatcher->dispatchLoop() in src/XF/Mvc/Dispatcher.php at line 63
[*]XF\Mvc\Dispatcher->run() in src/XF/App.php at line 2824
[*]XF\App->run() in src/XF.php at line 814
[*]XF::runApp() in index.php at line 23
[/LIST]
- Fixed: Cookie declaration page (/consent) crashed on fresh installations due to a reference to the removed Vendor repository

Some requested scopes were invalid. {valid=[https://www.googleapis.com/auth/adsense.readonly], invalid=[https://www.googleapis.com/auth/admanager.report]}
I was probably a bit too quick when reporting the error, and a cron job or something similar hadn't been processed yet. Anyway, it's gone now, and the correct date is displayed. Sorry for the confusion.Date display "27.12.1970"
Will be fixed in the next version.
I can't say for sure whether the add-on fully complies with all regulations in all countries. I'm not an expert. However, after a very short period of use, I can already say this: It's the first (free!) add-on for XenForo that seems to implement consent correctly. I deduce this, among other things, from the fact that the IAB TCF strings can be decoded correctly. Tests I conducted myself with various consent settings also produced the expected results. The values and data are understandable to me so far.I’m looking forward to hearing feedback from other admins.
We use essential cookies to make this site work, and optional cookies to enhance your experience.