Free for Craft CMS 5
Every conversion, counted once
Tape puts Google Ads, GA4, Meta, TikTok and nine more platforms on your Craft site, with the Commerce funnel behind them, Consent Mode v2 in front of them and server-side tracking underneath. The browser tag and the Conversions API send the same event with the same ID, so platforms deduplicate them — and orders the browser never reported are sent again from the server.
A store needs no template changes
With Commerce installed, add-to-cart, remove-from-cart, purchase and refund are wired to Commerce's own events — across the redirects a cart form and a payment gateway both involve. The tags inject themselves. Everything else is one line.
{# A lead, worth £50 to Google Ads, Meta and the rest #}
{% do craft.tape.track('generate_lead', { value: 50, currency: 'GBP' }) %}
{# Your own event, to every platform that takes one #}
{% do craft.tape.track('brochure_download', { format: 'pdf' }) %}
{# The funnel steps Commerce has no event for #}
{% do craft.tape.viewItem(product.defaultVariant) %}
{% do craft.tape.beginCheckout() %}
// And from JavaScript, after the page has rendered
tape.track('add_to_cart', { id: variantId, qty: 2 });
Features
Thirteen platforms, one event shape, and the parts of conversion tracking that usually go wrong.
Every platform from one event
Google Ads, GA4, Google Tag Manager, Meta, Microsoft Ads, TikTok, Pinterest, LinkedIn, Snapchat, Reddit, X, Clarity and Hotjar, plus a custom snippet and a signed webhook.
- Each funnel step mapped into each platform's own vocabulary
- Payloads built in PHP — a visitor cannot dictate what is sent
- Custom event names go to the platforms that take one
Browser and server, counted once
The browser tag and the Conversions API call are the same event with the same ID, derived from the order, so platforms deduplicate them instead of double-counting.
- Meta, TikTok, Pinterest, Snapchat and Reddit Conversions APIs, and the GA4 Measurement Protocol
- Sent through the queue — never during a checkout request
- A ledger with a unique key per conversion, so a refreshed confirmation page counts once
The Commerce funnel, wired
From view_item_list to refund, with prices looked up in Commerce rather than taken from the browser.
- Events survive cart-form and payment-gateway redirects
- Refunds sent server-side, full or partial, once each
- Product IDs that match your Merchant Center feed
Consent Mode v2, properly
All seven signals, region defaults, and bridges to ten cookie banners or an expression of your own. Unknown consent is not denied consent: events wait in the page and fire if the visitor accepts.
- Server-side sends honour consent through a first-party mirror cookie
- Per-destination consent categories
- Do Not Track and Global Privacy Control, when you want them
Recovery and the accuracy report
Orders whose conversion never reached a platform — an ad blocker, a closed tab, a gateway nobody came back from — are sent again from the server, with the same event ID. Pro.
- Never overrides a visitor who withheld consent
- Orders placed against conversions tracked, per day and per destination
- php craft tape/destinations/test sends a real event and prints the answer
Safe behind a full-page cache
Nothing Tape writes into a page varies by visitor, and it never opens a session to find out who someone is unless a setting depends on it.
- Consent read from a cookie by the runtime, not baked into the page
- Custom snippets inert in a <template> until consent allows them
- The ledger holds nothing about the customer
Tape in the control panel
Real screens from a Craft 5 install — the destinations list, a Meta destination with its server side switched on, and triggers set up without a deploy.
Screenshots from a live install, not mockups.
Frequently Asked Questions
The questions worth answering before you install it.
No. Without it you get page views, leads, sign-ups, custom events, triggers and everything else. With it you also get the whole checkout funnel, wired to Commerce's own events with no template changes.
Not when both carry the same event ID, and in Tape they always do, because they are the same event. The ID for an order is derived from the order itself, so the browser tag, the Conversions API call and a later recovery all carry the same one. Platforms deduplicate on it.
Tape reads Cookiebot, CookieYes, Complianz, Iubenda, OneTrust, Osano, Termly, Klaro, Usercentrics and Civic, or a JavaScript expression of your own. With your own banner, call tape.consent.update({ ads: true, analytics: false }) when the visitor answers.
They are held in the page. "Not yet answered" is its own state, so a destination waiting on consent queues its events and fires them if the visitor accepts, on the same page. If the visitor declines, they are never sent.
Not a valuable one. Payloads are built on the server, the endpoint behind tape.track() refuses purchase and refund outright and ignores any posted value, and it is throttled per IP. A visitor can say which product; the price comes from Commerce.
Yes. Nothing Tape writes into a page varies by visitor. Consent is read from a cookie by the runtime, custom snippets sit inside a <template> until consent allows them, and matching data appears only on pages that carry a conversion, which are not cached.
Nothing in its own table. The event ledger records what fired, per destination and channel, with no email, no hashes and no payloads. Matching data for enhanced conversions is hashed in Craft and never written to the page in the clear.
php craft tape/destinations/test sends a real event to every server-side API and prints each answer — a revoked token or somebody else's pixel ID looks like success from the browser. tape.debug() in the console shows what the runtime believes about consent and which tags booted.
Lite is free and covers Google Ads, GA4, GTM, Meta, Clarity, Hotjar, the full Commerce funnel and Consent Mode v2. Pro is $99 with a $59/year renewal, and adds the other seven platforms, server-side tracking, enhanced conversions, recovery, the accuracy report and triggers. The renewal buys updates; Pro keeps working if it lapses.
Start free, upgrade when you need the server
Lite is free and covers the six platforms most sites start with, the whole Commerce funnel and Consent Mode v2. Pro is $99 with a $59/year renewal, and adds server-side tracking, recovery, triggers and seven more platforms.