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 is the primary supported platform. When installed correctly, all tracking is automatic — sessions, group assignment, purchases, and returning users. No manual triggers required after setup.
Shopify 2024–2026: Purchase tracking MUST use Customer Events (Pixels). The Additional Scripts field in Settings → Checkout is bypassed by Shop Pay, accelerated checkout, and headless setups. Customer Events is the only guaranteed method for all payment scenarios.
Step 1 — Part 1 + Part 3 on every store page
Online Store → Themes → Edit code → Layout → theme.liquid
1
Shopify Admin → Online Store → Themes → three dots (⋯) → Edit code
Log in to Shopify admin. Left sidebar → Online Store → Themes. Next to your live theme click ⋯ → Edit code. Do NOT click Customize — that opens the visual editor, not the code editor.
2
Layout → theme.liquid → find </head> → paste Part 1 then Part 3 above it
File tree → Layout → theme.liquid. Press Ctrl+F / Cmd+F and search </head>. Click the line immediately above </head>. Paste Part 1 (Shopify). Then paste Part 3 (Shopify) directly below Part 1. Do NOT delete any existing code. Click Save.
Part 1 captures the Intentua session when visitors arrive from your gate and bridges it through product pages, cart, and checkout. Part 3 handles CTA deep-link scroll. Both run on every page automatically.
Shopify Plus with checkout.liquid: If your store uses a custom checkout.liquid, you may need to also paste Part 1 in checkout.liquid to bridge sessions through checkout. Standard Shopify stores do NOT need this — theme.liquid applies to all pages except checkout on non-Plus plans.
Step 2 — Part 2 via Customer Events (mandatory for purchase tracking)
Settings → Customer events → Add custom pixel
3
Settings → Customer events → Add custom pixel → name it "Intentua Purchase Tracker"
Shopify admin bottom-left → Settings → Customer events. Click Add custom pixel. Name: Intentua Purchase Tracker. A code editor opens.
4
Clear default code → paste the full Shopify Part 2 Customer Events pixel script
Select all default code in the editor (Ctrl+A / Cmd+A) and delete it. Paste the full Shopify Part 2 script from the Tracking Bundle Scripts section below. This script listens for the checkout_completed event and automatically reads your Intentua identity from localStorage.
5
Permissions → enable Analytics → Save → Connect
In the pixel settings right panel under Permissions, enable Analytics. This grants the pixel access to browser localStorage where Intentua stores the identity token. Click Save. Then click Connect. Status should show Connected.
The Analytics permission allows this pixel to read localStorage. Without it, the identity token cannot be read and returning purchase tracking will not work.
6
Test with Shopify's Bogus Gateway
Settings → Payments → Manage → use Bogus Gateway for test orders (no real charge). Place a test order. Open browser DevTools → Console on the order confirmation page. Look for:

[Intentua] ✅ Tracked: trackPurchase — purchase tracked in your session
[Intentua] ✅ Tracked: trackReturningPurchase — returning visitor purchase
[Intentua] No Intentua session or identity — visitor not from your gate (expected)
When testing, make sure to visit your Intentua gate URL first (the intentua.com subdomain) before going to your store. This creates the session that the Customer Events pixel will read at checkout.
Shop Pay and accelerated checkout: Shop Pay shows a popup overlay — it does NOT navigate to a separate checkout URL. The Customer Events pixel fires correctly after Shop Pay completion because it hooks into Shopify's server-confirmed event, not page navigation. No additional setup needed.

Method A (WPCode Plugin) — Recommended. Zero coding, works with any theme, survives caching plugins and CDNs. Method B (functions.php) — Developers only. Do NOT use both methods simultaneously.

Step 1 — Part 1 + Part 3 on every page
WPCode → Header & Footer → Header section
1
Install WPCode (free) from WordPress plugin directory
WordPress admin → Plugins → Add New → search WPCode → Install → Activate. This is the most stable way to inject scripts independently of theme updates.
2
WPCode → Header & Footer → Header → paste Part 1 then Part 3
Left sidebar → Code Snippets → Header & Footer. In the Header box paste Part 1, then Part 3 directly below it. Click Save Changes. Both scripts run on every page including product, cart, checkout, and thank-you pages.
WPCode Header injection is unaffected by caching plugins — it injects at PHP render time before any cache layer.
Step 2 — Part 2 on order-received page only
WooCommerce thank-you page — order-received URL
3
WPCode → + Add Snippet → PHP Snippet → paste this exact PHP
Click + Add Snippet → Add Your Custom Code (New Snippet) → PHP Snippet. Name it Intentua WooCommerce Purchase Tracker. Paste the ENTIRE block below into the code box:
<?php
/**
* Intentua WooCommerce Purchase Tracker
* Fires ONLY on the WooCommerce order-received page
* Compatible with: Classic checkout, Block checkout, HPOS, all payment gateways
*/
add_action( 'woocommerce_thankyou', function( $order_id ) {
  if ( ! $order_id ) return;

  $order = wc_get_order( $order_id );
  if ( ! $order || ! $order->is_paid() ) {
    /* For orders that need payment (e.g. BACS) fire anyway — order is confirmed */
    if ( ! $order ) return;
  }

  $total = (float) $order->get_total();
  $order_num = $order->get_order_number();
  $currency = $order->get_currency() ?: 'USD';
  ?>
  <!-- PASTE THE FULL WORDPRESS PART 2 <script> BLOCK HERE -->
  <script>
    /* Set order data BEFORE fireIntentuaPurchase is defined */
    /* The Part 2 script auto-reads these on load */
    window.__order_id = "<?php echo esc_js( $order_num ); ?>";
    window.__order_value = <?php echo (float) $total; ?>;
    window.__order_currency = "<?php echo esc_js( $currency ); ?>";
  </script>
  <?php
}, 20 ); /* priority 20 — fires after WooCommerce default output */
?>
IMPORTANT: Replace the comment line <!-- PASTE THE FULL WORDPRESS PART 2 --> with the actual Part 2 script block from the Tracking Bundle Scripts section below. The window.__order_* variables are set first so Part 2's auto-fire logic picks them up immediately on script load.
This works with WooCommerce HPOS, Block Checkout (Gutenberg), Classic Checkout, and all payment gateways including PayPal, Stripe, and bank transfer. The woocommerce_thankyou hook fires on confirmed order only.
4
Set Insert Method → Body → Save → Activate
Under Insertion set Location to Run Everywhere (the PHP hook itself limits to thank-you page). Toggle snippet to Active. Click Save Snippet. Test with a real test order using WooCommerce Cheque (offline) gateway to avoid real charges.
5
Verify: browser console on thank-you page should show ✅
Place a test order. Open browser DevTools → Console. You should see:
[Intentua] ✅ Tracked: trackPurchase
or for a returning visitor:
[Intentua] ✅ Tracked: trackReturningPurchase

If you see No session or identity — the visitor did not arrive through an Intentua gate. This is correct and expected.
Caching plugins (WP Rocket, W3TC, LiteSpeed Cache): Part 1 and Part 3 in WPCode Header are PHP-rendered and are NOT cached by page caching plugins. They always execute fresh. Your campaign ID will always be current.
Developers only — requires child theme
A
Child theme header.php → paste Part 1 then Part 3 before </head>
Appearance → Theme File Editor → header.php (child theme ONLY — never parent theme). Find </head>. Paste Part 1 then Part 3 above it. Save.
Parent theme edits are overwritten on every theme update. Always use a child theme. If you do not have a child theme, use Method A (WPCode) instead.
B
Child theme functions.php → add woocommerce_thankyou hook
Add the same PHP hook from Method A Step 3 above to your child theme's functions.php. Replace the comment with the full Part 2 script block. Save. Test with a real test order.
Wix: Partial Support Only
Wix restricts script execution environment. The following is guaranteed to work: Session tracking (Part 1) and CTA scroll (Part 3). Purchase tracking accuracy depends on your Wix plan and setup complexity. Do not expect automatic purchase tracking without developer involvement.
What definitely works on Wix
1
Session tracking — Part 1 (guaranteed)
manage.wix.com → Settings → Custom Code. Click + Add Custom Code. Name: Intentua Session Bridge. Paste Part 1. Place: Head. Pages: All Pages. Click Apply. This reliably stores the Intentua session when visitors arrive from your gate.
Part 1 in Wix Custom Code Head runs before page render on all pages. Session storage is available. This part works reliably.
2
CTA scroll — Part 3 (guaranteed)
Click + Add Custom Code again. Name: Intentua CTA Scroll. Paste Part 3. Place: Head. Pages: All Pages. Click Apply. This is a separate entry from Part 1.
Part 3 scroll targeting works on Wix. No limitations.
Purchase tracking — requires developer + Velo
Wix does NOT expose order data in Custom Code scripts. To track purchases you need Wix Business/eCommerce plan + Velo Dev Mode. Without Velo you cannot reliably read order ID or order total. If you are not a developer or do not have Velo enabled, stop here and contact your developer.
3
Enable Velo Dev Mode (requires Business plan or higher)
Open your site in the Wix Editor. Top menu → Dev Mode → Turn on Dev Mode. A code panel opens at the bottom. This is required to access real order data.
4
Order confirmation page Velo code — reads session and fires purchase tracker
In the Wix Editor open your Order Confirmation page. Click the page code tab at the bottom (Velo). Paste this Velo page code:
// Velo Page Code — Order Confirmation page only
import wixLocation from 'wix-location';
import { orders } from 'wix-ecommerce-backend';

$w.onReady(function () {
  /* Read order from URL param — set by Wix after checkout */
  var params = wixLocation.query;
  var orderId = params.orderId || params.order_id || null;

  if (!orderId) {
    console.log('[Intentua] No orderId in URL — cannot track purchase');
    return;
  }

  orders.getOrder(orderId).then(function(order) {
    var total = parseFloat(order.totals.total) || 0;
    /* Inject values for browser-side Part 2 to pick up */
    wixWindow.openModal('', {}).catch(function(){});
    /* Set on window for the browser-side tracker */
    if (typeof window !== 'undefined') {
      window.__order_id = String(order._id);
      window.__order_value = total;
    }
  }).catch(function(err) {
    console.warn('[Intentua] Could not retrieve order:', err);
  });
});
Wix's Velo backend API has limitations. The orders.getOrder() call requires backend permissions. This is a best-effort implementation. Results may vary depending on your Wix template and checkout flow version. Contact a Wix Velo developer if you need guaranteed accuracy.
5
Add Part 2 to Order Confirmation page via Custom Code — Body End
Settings → Custom Code → + Add Custom Code. Name: Intentua Purchase Tracker. Paste Part 2 (WooCommerce version). Place: Body — end. Pages: Choose specific pages → Order Confirmation only. Click Apply. The Velo code above sets window.__order_id and window.__order_value which Part 2 reads automatically.
Webflow: Advanced Setup Required
Webflow does NOT provide order data in standard page scripts. Purchase tracking requires either (A) an external checkout that redirects with order data in the URL, or (B) manual embedding of order values using Webflow CMS/Ecommerce dynamic bindings. Session tracking and CTA scroll work reliably. Purchase tracking is setup-dependent.
Part 1 + Part 3 — every page (reliable)
Designer → Project Settings → Custom Code → Head Code
1
Project Settings → Custom Code → Head Code → paste Part 1 then Part 3
Webflow Designer → top-left site name → Project Settings → Custom Code tab → Head Code. Paste Part 1 first, then Part 3 below. Click Save Changes. Then Publish your site.
Part 1 and Part 3 work reliably in Webflow Head Code. They run on every published page including dynamic CMS pages, product pages, and animated pages.
Webflow SPA / animations: Webflow uses Webflow.js for page transitions and animations. Part 1's link interceptor handles this correctly because it uses capture-phase click events that fire before Webflow's handlers.
Part 2 — choose your checkout setup
2
Setup A (Recommended) — External checkout with redirect URL parameters
If you use Lemon Squeezy, Paddle, Stripe Checkout, or any external payment that redirects to a success URL:

1. Configure your payment provider's success URL to include order data:
https://yourdomain.com/thank-you?orderId={ORDER_ID}&total={TOTAL}&currency={CURRENCY}

2. Open your Thank You page in Webflow Designer. Pages panel → right-click Thank You → Page Settings → Custom Code → Before </body> tag. Paste Part 2 script, then add:
<script>
  /* Read order data from redirect URL — set by your payment provider */
  (function() {
    if (window.__itua_page_fired) return; /* prevent double fire */
    window.__itua_page_fired = true;
    var p = new URLSearchParams(window.location.search);
    var orderId = p.get('orderId') || p.get('order_id') || p.get('payment_intent') || p.get('checkout_id');
    var total = parseFloat(p.get('total') || p.get('order_total') || '0');
    var currency = p.get('currency') || 'USD';
    if (orderId && total > 0 && typeof fireIntentuaPurchase === 'function') {
      fireIntentuaPurchase(orderId, total, currency);
    } else if (!orderId) {
      console.log('[Intentua] No orderId in URL — ensure payment provider success URL includes orderId param');
    }
  })();
</script>
This is the most reliable Webflow purchase tracking method. Works with any external payment provider that supports success URL customization.
3
Setup B — Webflow Ecommerce native checkout (advanced)
Webflow Ecommerce does not expose order variables in page-level Custom Code. You must use a Code Embed element on the Order Confirmation page with dynamic bindings:

1. Add a Code Embed element on your Order Confirmation page template.
2. Set it to embed this code with Webflow's dynamic field bindings for Order ID and Total:
<script>
  /* Webflow Ecommerce dynamic bindings — set in Code Embed element */
  /* Replace WEBFLOW_ORDER_ID and WEBFLOW_ORDER_TOTAL with dynamic field values */
  window.__order_id = "[Webflow: Order ID field]";
  window.__order_value = [Webflow: Order Total field, number format];
</script>
Webflow's Code Embed dynamic bindings are only available on Ecommerce plan. The exact binding syntax depends on your Webflow version. In the Embed element settings, use the purple "+" button to insert dynamic field references. Contact Webflow support if dynamic bindings are unavailable in your plan.
4
Always Publish after any code change
Webflow does NOT apply Custom Code changes until you Publish. Click Publish (top right in Designer) after every change. Changes in Project Settings Head Code apply globally on publish. Changes in Page Settings apply to that page on publish.
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.