Install the module: composer or manual.
Two paths. Composer is preferred for production-mode stores; manual app/code/ works today without any composer set-up.
A Magento 2 / Adobe Commerce module that fires GA4 purchase events server-to-server on sales_order_place_after. Same transaction_id as the client-side gtag fire so GA4 dedups natively. Closes the 30-50% gap from ad-blockers, Safari ITP, iOS 14.5+, and JavaScript errors. Ships with a reconciliation dashboard so you can see all three numbers side by side.
Two paths. Composer is preferred for production-mode stores; manual app/code/ works today without any composer set-up.
Free TagDrishti account at accounts.tagdrishti.com/sign-up. The workspace UUID is on your dashboard.
Magento admin → Stores → Configuration → Sales → TagDrishti → General:
| Field | What to enter |
|---|---|
| Enable TagDrishti | Yes |
| Workspace ID | UUID from your TagDrishti dashboard |
| Data residency region | EU for EU/UK (GDPR), APAC for India / SE Asia / MENA, US for Americas, AU for Australia / NZ |
| Monitoring notice URL | Your privacy-notice URL (recommended for GDPR Art. 13 / DPDP Rule 9) |
The GA4 Measurement Protocol needs both. The Measurement ID is public (format G-XXXXXXXXXX); the API secret authorises the server-side POST.
In Magento admin, under Stores → Configuration → Sales → TagDrishti → GA4 — close the revenue-tracking gap:
purchase event should appear in GA4 DebugView within 30 seconds with transaction_id = order increment_id.bin/magento cache:flush after every settings change.transaction_id (order increment_id) as the client-side gtag fire. GA4 dedups natively within a 4-hour window. Client blocked → server-side wins. Server-side network error → client-side wins. Never doubles, never misses.Optional but recommended — the dashboard at dashboard.tagdrishti.com/dashboard/magento-tag-trust only lights up once you wire this.
bin/magento cache:flush.Three checks. First two prove the event reached GA4; third proves the reconciliation dashboard is wired.
purchase event should arrive within 30 seconds with transaction_id matching the Magento order increment_id, plus value, currency, items[].Built from the order's authoritative server-side data — not a JS reconstruction. Items array, coupons, currency, tax, shipping, all there.
| GA4 param | Source |
|---|---|
transaction_id | order increment_id (also used for client/server dedup) |
value | order grand_total |
currency | order order_currency_code |
tax | order tax_amount |
shipping | order shipping_amount |
items[] | each order item: item_id (sku), item_name, price, quantity, item_category |
coupon | order coupon_code (if present) |
client_id | SHA-256(email) for logged-in customers, fallback quote.{quote_id} for guests |
bin/magento module:status TagDrishti_TagTrust should show enabled. If not, run bin/magento module:enable TagDrishti_TagTrust + setup:upgrade.<script> should be in the <head>. Missing means the workspace UUID is invalid OR you forgot the cache flush after saving config.window.dataLayer. Should include tagdrishti_cms = 'magento' + tagdrishti_store_code. Missing means the layout XML didn't load — flush cache, check production-mode static-content deploy.var/log/system.log for a tagdrishti_send_ga4_mp entry. Missing means the toggle is off OR sales_order_place_after didn't fire (rare; Magento 2.4+).purchase within 30 seconds. If not, the Measurement ID or API secret is wrong — regenerate the secret in GA4 admin.Composer install, paste GA4 credentials, place a test order. Within an hour the dashboard is showing you what GA4 missed and what TagDrishti server-side recovered. 14 days free, no card.