intentua
Turn Intent Into Revenue

Login

intentua

Manage and track your published decision environments.

Campaigns
All active, draft and published environments
Campaign Analytics

RPV Analytics

to

Bubble Drop-Off

Where users leave the experience

Top Performing Bubbles

Highest revenue-driving content

Traffic Sources

Where verified visitors came from

Excluded Traffic

Automatically removed from RPV

Control Traffic Comparison

Used to calculate incremental lift

Recent Purchases

Verified purchases with exact time

Recent Activity

What happened and when

Returning Users Previously entered Intentua

Visitors who engaged with Intentua then returned later to purchase
Loading…
Setup Guide

Install Tracking Bundle

Choose your platform. Follow every step in order. No steps are optional.

Shopify 2024–2026: Shopify no longer reliably executes scripts on the Order Status / Thank You page via Additional Scripts. All purchase tracking now uses Customer Events (Pixels) — the only guaranteed method across all payment providers, Shop Pay, accelerated checkout, and headless Shopify.
Part 1 + Part 3 — every store page
Online Store → Themes → Edit code → theme.liquid
1
Online Store → Themes → three dots (⋯) → Edit code
Log in to your Shopify admin. Left sidebar → Online StoreThemes. Next to your live theme click the three dots (⋯)Edit code. Do not click Customize.
2
Layout → theme.liquid → find </head>
In the file tree click Layout → theme.liquid. Press Ctrl+F / Cmd+F and search for </head>.
3
Paste Shopify Part 1 then Part 3 just above </head>
Click the line just before </head>. Paste Shopify Part 1 first, then Shopify Part 3 directly below it. Do not delete anything already in the file. Click Save.
Part 1 bridges the session from the Intentua gate to your store pages. Part 3 powers CTA deep-link scroll. Both run on every store page automatically.
Part 2 — Purchase Tracking via Customer Events (Pixels)
Settings → Customer events → Add custom pixel
Why Customer Events? Shopify's Order Status page Additional Scripts field is unreliable in 2025–2026. It is bypassed by Shop Pay, accelerated checkout, and many third-party payment gateways. Customer Events fire server-confirmed after every real completed order — guaranteed regardless of payment method.
4
Settings → Customer events → Add custom pixel
In Shopify admin: bottom-left sidebar → SettingsCustomer events. Click Add custom pixel. Name it Intentua Purchase Tracker.
5
Paste the Shopify Part 2 (Customer Events pixel script) into the pixel code box
Clear the default code in the pixel editor. Paste the full Shopify Part 2 — Customer Events Pixel script from the tracking bundle below. This script subscribes to Shopify's checkout_completed event — guaranteed to fire on every confirmed order.
The pixel has access to sessionStorage and localStorage to retrieve your Intentua session, group, and returning identity automatically. No manual order variables needed.
6
Set permissions → Save → Connect
In the pixel settings panel on the right, under Permissions, enable:
Analytics (required for reading storage)
Click Save. Then click Connect. Status should show Connected.
📌
Customer pixels run in a sandboxed iframe. They have access to browser storage from your store domain because they execute in the context of your store's checkout pages — not a third-party iframe.
7
Test: place a real test order → check browser console on confirmation page
Place a test order using Shopify's Bogus Gateway (Settings → Payments → Manage → use Bogus Gateway). On the order confirmation page open browser DevTools console. You should see:
[Intentua] Purchase tracked ✅ or [Intentua] Returning purchase tracked ✅
If you see No session or returning identity — purchase not attributed it means the visitor arrived directly without going through an Intentua gate. This is expected and correct — only verified ad traffic is attributed.
Shopify Plus: If you use checkout.liquid customizations, the Customer Events pixel still fires reliably. No additional changes needed for Plus stores. The Additional Scripts field in Settings → Checkout is now deprecated on new Plus stores — use Customer Events only.

Method A (WPCode Plugin) — Recommended for all users, zero coding, 5 minutes. Method B (Theme hook) — Developers only. Choose exactly one method. Do not use both.

Part 1 + Part 3 — every page
WPCode → Header Scripts → all pages
1
Install WPCode plugin
WordPress admin → Plugins → Add New → search WPCode (by WPCode Team, formerly Insert Headers and Footers). Install and Activate. It is free and actively maintained as of 2026.
2
Code Snippets → Header & Footer → paste Part 1 + Part 3
Left sidebar → Code SnippetsHeader & Footer. In the Header section paste WooCommerce Part 1 first, then WooCommerce Part 3 directly below it. Click Save Changes.
These run on every page of your WordPress site including WooCommerce product pages, cart, and checkout.
Part 2 — order-received page only
WPCode → Add Snippet → PHP → woocommerce_thankyou hook
3
Code Snippets → + Add Snippet → PHP Snippet
Left sidebar → Code Snippets → + Add Snippet. Choose Add Your Custom Code (New Snippet). Select PHP Snippet as the type. Name it Intentua WooCommerce Purchase Tracker.
4
Paste this PHP — replace the comment with the full WooCommerce Part 2 script
In the code box paste the PHP below. Replace the comment line with the full WooCommerce Part 2 script from the tracking bundle:
add_action( 'woocommerce_thankyou', function( $order_id ) {
  $order = wc_get_order( $order_id );
  if ( ! $order ) return;
  $total = $order->get_total();
  $num = $order->get_order_number();
  ?>
  <!-- PASTE FULL WOOCOMMERCE PART 2 <script> BLOCK HERE -->
  <script>
    if(typeof fireIntentuaPurchase === 'function') {
      fireIntentuaPurchase(
        "<?php echo esc_js($num); ?>",
        <?php echo floatval($total); ?>
      );
    }
  </script>
  <?php
}, 10 );
The full WooCommerce Part 2 script block MUST come before the fireIntentuaPurchase() call. The function must be defined before it is called. Replace the comment with the entire Part 2 <script> block.
5
Set Insert Method → Run Everywhere → Save → Activate
Under Insertion: set Location to Run Everywhere (the PHP hook itself limits it to the thank-you page). Toggle the snippet to Active. Click Save Snippet. Place a test order to confirm [Intentua] Purchase tracked ✅ appears in browser console on the order-received page.
Developers only
Part 1 + Part 3 — every page
Child theme header.php
A
Child theme → header.php → paste before </head>
Appearance → Theme File Editor → header.php (child theme only — never parent). Find </head>. Paste WooCommerce Part 1 then WooCommerce Part 3 above it. Click Update File.
Only proceed if you have an active child theme. Edits to a parent theme are overwritten on every theme update.
Part 2 — order-received page only
B
Child theme functions.php → woocommerce_thankyou hook
Add the same PHP hook as Method A Step 4 above to your child theme's functions.php. Replace the comment with the full WooCommerce Part 2 script block.
Wix requires a Business or eCommerce Premium plan to add custom code. Free plans do not support this. Wix eCommerce purchase tracking requires Velo by Wix (dev mode) for real order data. Without Velo, the fire call uses a fixed test value — not suitable for live RPV tracking.
Part 1 + Part 3 — every page
Dashboard → Settings → Custom Code → Head → All Pages
1
manage.wix.com → Settings → Custom Code
Log into manage.wix.com and select your site. Left sidebar → Settings → scroll down → Custom Code. You must be in the Wix dashboard — not the Wix Editor drag-and-drop view.
2
+ Add Custom Code → Intentua Session Bridge → Head → All Pages → paste Wix Part 1
Click + Add Custom Code. Name: Intentua Session Bridge. Code box: paste Wix Part 1. Place: Head. Pages: All Pages. Click Apply.
3
+ Add Custom Code → Intentua CTA Scroll → Head → All Pages → paste Wix Part 3
Click + Add Custom Code again. Name: Intentua CTA Scroll. Paste Wix Part 3. Place: Head. Pages: All Pages. Click Apply.
Two separate entries — one for Part 1, one for Part 3. Wix handles each code block independently.
Part 2 — order confirmation page
Velo by Wix — Events & Hooks (for real order data)
4
Enable Dev Mode (Velo) in the Wix Editor
Open your site in the Wix Editor. Top menu → Dev Mode → Turn on Dev Mode. A code panel opens at the bottom. This enables Velo — Wix's JavaScript development environment. Required to access real order data.
5
Backend → events.js → wixStores_onOrderCreated hook
In the Velo code panel, on the left file tree open Backend → events.js (create it if it doesn't exist). Paste this backend hook — it fires server-side on every confirmed Wix Stores order and calls your brand website's purchase tracking endpoint:
// events.js (Backend)
import { fetch } from 'wix-fetch';

export function wixStores_onOrderCreated(event) {
  const orderId = event.entity._id;
  const total = event.entity.totals.total;
  // NOTE: intentua_session must be passed via buyer note or custom field
  // because backend hooks do not have browser context
  // For browser-side tracking use the Custom Code method below
  console.log('[Intentua Wix] Order confirmed:', orderId, total);
}
Wix backend hooks do not have access to browser sessionStorage or localStorage. For reliable purchase attribution, use the browser-side Custom Code method below in addition to or instead of the backend hook.
6
Browser-side: + Add Custom Code → Wix Part 2 → Body End → Order Confirmation page only
Back in Settings → Custom Code: + Add Custom Code. Name: Intentua Purchase Tracker. Paste Wix Part 2. Place: Body — end. Pages: Choose specific pages → select your Order Confirmation page. Then add this block after the Part 2 script:
<script>
  // Wix does not expose order variables in custom code
  // Use Velo $w.onReady to read order summary from the page
  // Or pass values via URL params from your Velo order confirmation page code
  // Example using URL params set by Velo:
  var params = new URLSearchParams(window.location.search);
  var orderId = params.get('orderId');
  var total = parseFloat(params.get('total') || '0');
  if(orderId && total > 0 && typeof fireIntentuaPurchase === 'function') {
    fireIntentuaPurchase(orderId, total);
  }
</script>
📌
In your Velo order confirmation page code (Page Code tab), use wixLocation.to() to append ?orderId=ORDER&total=TOTAL to the confirmation URL so the browser-side script can read real values.
Part 1 + Part 3 — every page
Designer → Project Settings → Custom Code → Head Code
1
Designer → top-left site name or ⚙ → Project Settings → Custom Code tab
Open your project in the Webflow Designer. Click the site name or gear icon (⚙) in the top-left. Select Project Settings. Click the Custom Code tab. You see Head Code and Footer Code text areas.
2
Head Code → paste Webflow Part 1 then Webflow Part 3
In Head Code paste Webflow Part 1 first, then Webflow Part 3 directly below. Do not remove any existing code. Click Save Changes.
Head Code injects into <head> on every published Webflow page — product pages, cart, checkout confirmation.
Part 2 — order confirmation page only
Pages panel → Order Confirmation → ⚙ Page Settings → Custom Code → Before </body>
3
Pages panel → hover Order Confirmation → ⚙ → Page Settings → Custom Code
In the Webflow Designer left sidebar click the Pages icon. Hover over your Order Confirmation page. Click the gear icon (⚙) that appears. Select the Custom Code tab.
4
Before </body> tag → paste Webflow Part 2 + fire call
In the Before </body> tag area paste Webflow Part 2. Then add the fire call below it. For Webflow Ecommerce use the dynamic embed approach:
<script>
  // For Webflow Ecommerce: order data is in window.Webflow.ecommerce (if available)
  // Or use a Webflow Embed element with dynamic bindings on the order confirmation page
  // The most reliable method is to pass values via URL query params from your
  // Webflow Ecommerce post-purchase redirect or use the Webflow order webhook
  var params = new URLSearchParams(window.location.search);
  var orderId = params.get('orderId') || ('WF-' + Date.now());
  var total = parseFloat(params.get('total') || '0');
  if(total > 0 && typeof fireIntentuaPurchase === 'function') {
    fireIntentuaPurchase(orderId, total);
  }
</script>
📌
For accurate order ID and total: In your Webflow Ecommerce order confirmation page, add a Code Embed element with dynamic bindings to Order Number and Order Total fields, then output them as JavaScript variables that the fire call can read.
Click Save. Then Publish (top right) to make all changes live.
Part 1 + Part 3 — every page
Site Settings → General → Custom Code → Start of <head>
1
Framer Editor → top-right ⚙ → Site Settings → General → Custom Code
Open your project in the Framer editor. Click the gear icon (⚙) top-right. Click Site Settings. Select General tab. Scroll to Custom Code. You see Start of <head> and End of <body> text areas.
📌
Alternative path: Framer dashboard → three dots (⋯) next to your project → Settings → same Custom Code section.
2
Start of <head> → paste Framer Part 1 then Framer Part 3
In Start of <head> paste Framer Part 1 first, then Framer Part 3 below it. Click Save.
Part 2 — thank-you page only
Pages panel → right-click Thank-You page → Page Settings → Custom Code
3
Pages panel → right-click Thank-You page → Page Settings → Custom Code
In the Framer editor left sidebar open the Pages panel. Right-click your Thank You / Order Confirmation page. Select Page Settings. Click Custom Code tab.
4
End of <body> → paste Framer Part 2 + fire call
In End of <body> paste Framer Part 2, then add the fire call below. For Framer with Lemon Squeezy, Stripe, or Paddle as payment:
<script>
  // Read order data from URL params (set by your payment provider redirect)
  // Lemon Squeezy: adds ?order_id=X&order_total=Y to success URL
  // Stripe: use payment_intent or checkout session ID from URL
  // Paddle: adds ?checkout_id=X to success URL — map to order value manually
  var params = new URLSearchParams(window.location.search);
  var orderId = params.get('order_id') || params.get('payment_intent') || params.get('checkout_id');
  var total = parseFloat(params.get('order_total') || params.get('total') || '0');
  if(orderId && total > 0 && typeof fireIntentuaPurchase === 'function') {
    fireIntentuaPurchase(orderId, total);
  }
</script>
📌
Configure your payment provider success URL to include order ID and total as query parameters. Each provider has a success URL redirect setting in its dashboard.
Click Save. Click Publish top-right to make live.
Code Injection requires a Business plan or higher. Squarespace Personal plan does not support custom code. Squarespace 7.1 (current) does not expose order variables in Code Injection — purchase values must be read from the page DOM or passed via URL redirect parameters.
Part 1 + Part 3 — every page
Website → Pages → Website Tools → Code Injection → Header
1
Website → Pages → Website Tools → Code Injection
In the Squarespace dashboard left sidebar click WebsitePages. At the bottom of the Pages panel click Website ToolsCode Injection. On older versions: Settings → Advanced → Code Injection.
2
Header box → paste Squarespace Part 1 then Part 3
In the Header text box paste Squarespace Part 1 first, then Squarespace Part 3 below it. Do not remove anything already in the Header box. Click Save.
Part 2 — order confirmation page only
Pages → Order Confirmed → ⚙ → Advanced → Page Header Code Injection
3
Pages list → hover Order Confirmed → ⚙ → Advanced → Page Header Code Injection
In the Pages list hover over your Order Confirmed page. Click the gear icon (⚙). Click Advanced. Find Page Header Code Injection.
4
Paste Squarespace Part 2 + DOM-read fire call
Paste Squarespace Part 2. Then add the fire call below. Squarespace 7.1 renders order summary data in the page DOM — this reads it directly:
<script>
  // Squarespace 7.1 renders order number in the page text
  // This DOM-read approach works without server-side variables
  (function tryFirePurchase(attempts) {
    var el = document.querySelector('.order-number, [data-order-number], .confirmation-order-number');
    if(!el && attempts > 0) {
      return setTimeout(function(){ tryFirePurchase(attempts - 1); }, 600);
    }
    var raw = el ? el.textContent.replace(/[^0-9]/g,'') : '';
    var orderId = raw || ('SQ-' + Date.now());
    // Total from DOM — Squarespace renders it in .order-total or similar
    var totalEl = document.querySelector('.order-total-amount, .total-amount, [data-total]');
    var total = totalEl ? parseFloat(totalEl.textContent.replace(/[^0-9.]/g,'')) : 0;
    if(total > 0 && typeof fireIntentuaPurchase === 'function') {
      fireIntentuaPurchase(orderId, total);
    }
  })(12);
</script>
DOM selectors vary by Squarespace template. If your template uses different class names, inspect the order confirmation page in browser DevTools to find the correct selector for the order number and total elements. Update the selectors in the script accordingly.
Click Save.
GTM fires after page load by default. Part 1 (Session Bridge) needs to execute as early as possible to capture link clicks on the page. If you observe missed CTA click attributions, move Part 1 to direct <head> installation instead of GTM, and use GTM only for Part 2 and Part 3.
Part 1 + Part 3 — All Pages tags
Tags → New → Custom HTML → All Pages trigger
1
Tags → New → Custom HTML → paste GTM Part 1 → Trigger: All Pages → Save
GTM workspace → Tags → New. Tag type: Custom HTML. Name: Intentua Session Bridge. Paste the full GTM Part 1 script (including <script> tags). Triggering: All Pages. Check Support document.write: No. Click Save.
2
Tags → New → Custom HTML → paste GTM Part 3 → Trigger: All Pages → Save
New tag → Custom HTML → Name: Intentua CTA Scroll. Paste GTM Part 3. Trigger: All Pages. Save.
Part 2 — create trigger first, then tag
Custom trigger on purchase event or thank-you URL
3
Option A (Recommended): Trigger on dataLayer purchase event
If your site pushes a purchase event to the GTM dataLayer (standard for GA4 ecommerce): GTM → Triggers → New → Type: Custom Event → Event name: purchase. Name: Intentua Purchase Event. Save. This fires on confirmed purchases regardless of URL.
4
Option B (URL-based): Page View trigger on thank-you URL
GTM → Triggers → New → Type: Page View → Fire on: Some Page Views → Condition: Page URL contains your thank-you path (e.g. /order-confirmation or /checkout/thank_you). Name: Intentua Thank You Page. Save.
5
Create Data Layer Variables for order ID and total
GTM → Variables → New → Data Layer Variable. Create two variables:
• Name: dlv - Order ID → Data Layer Variable Name: ecommerce.purchase.transaction_id (GA4) or transactionId (UA)
• Name: dlv - Order Total → Data Layer Variable Name: ecommerce.purchase.value (GA4) or transactionTotal (UA)
6
Tags → New → Custom HTML → GTM Part 2 + fire call → your purchase trigger
New tag → Custom HTML → Name: Intentua Purchase Tracker. Paste GTM Part 2. Then add the fire call after it using your GTM variables:
<script>
  var orderId = {{dlv - Order ID}};
  var total = parseFloat({{dlv - Order Total}}) || 0;
  if(orderId && total > 0 && typeof fireIntentuaPurchase === 'function') {
    fireIntentuaPurchase(String(orderId), total);
  }
</script>
Set Triggering to your purchase trigger (Option A or B from above). Click Save.
7
Preview → verify all 3 tags fire → Submit → Publish
GTM → Preview (top right). Open your store in the preview window. Navigate through a test purchase. Confirm all 3 Intentua tags show as Fired on the correct pages in the Tag Assistant panel. Return to GTM → Submit → Publish.

Tracking Bundle Scripts

Per-platform scripts — copy all 3 parts for your platform
▼ Shopify Part 1 — Session Bridge (paste in theme.liquid before </head>)

      
    
▼ Shopify Part 2 — Customer Events Pixel (Settings → Customer events → Add custom pixel)

      
    
▼ Shopify Part 3 — CTA Deep-Link Scroll (paste in theme.liquid before </head>, after Part 1)

      
    

Editing a live campaign

You are editing a live published campaign. Publishing again will update the existing live version — the subdomain and all analytics history will be preserved.