Skip to main content

One customer, one journey

See the ad that found your customer, not just the one that closed the sale.

When a shopper's visits, clicks and order can't be tied together, one person looks like four strangers and the last click takes all the credit. NodeNarrative joins them back into one customer, so the ad that found them gets its share.

10 places · 40% off for 12 months · launching when our connector approvals clear

Joined identity gives the ad that found the customer its credit Left, without identity: four strangers, one per identifier (meta.paid known by click ID · a91f, klaviyo known by email · hashed, google known by second browser, direct known by order #1042). Last-click gives direct 1.00 for being last and meta.paid, the ad that found the customer, 0.00. Right, identity joined: certain matches (same browser, hashed email, same login, same email) are drawn solid, the visit from a second browser joining because the shopper logged in, and a second device is drawn dashed because cross-device stitching is planned, not live. The four identifiers become one customer and credit for the order is shared: meta.paid 0.31, klaviyo 0.24, google 0.17, direct 0.28. meta.paid goes from 0.00 to 0.31. WITHOUT IDENTITY 4 strangers 1 meta.paid click ID · a91f 0.00 2 klaviyo email · hashed 0.00 3 google second browser 0.00 4 direct order #1042 1.00 direct keeps all the credit for being last IDENTITY JOINED 1 customer same browser hashed email same login same email planned Ad click meta.paid Email sign-up klaviyo Second browser google Checkout direct Second device not live yet One customer Credit for one order, joined meta.paid 0.31 klaviyo 0.24 google 0.17 direct 0.28 meta.paid, the ad that found them 0.00 → 0.31
The same four touches, read twice. Without identity they are four strangers, and last-click gives the checkout all the credit. Joined, certain matches are drawn solid, the visit from a second browser joins because the shopper logged in, and a second device is dashed because joining devices is planned, not live. Illustrative: the credit split is not from a customer's data.

Where the credit goes wrong

A broken link hands the credit to whatever came next

Each of these strips an identifier from the journey. Lose one, and the journey appears to start at whatever came next.

  • The cookie that runs out

    Safari caps cookies set by scripts at 7 days. A shopper who clicks an ad and comes back on day 8 arrives as someone new.

  • The in-app browser

    A shopper taps your ad inside Instagram, then comes back later in Safari. Two browsers keep separate cookies, so they look like two people.

  • The second device

    A shopper who browses on their phone and buys on their laptop looks like two people. We don't join devices yet: see below.

Step one: capture

The visits your shoppers agree to, with their source attached

Nothing can be joined that was never collected. The pixel comes with the Shopify app, so it is on from the moment you connect, and each visit arrives with the link that brought it.

Switched on when you connect your store

Native Shopify Web Pixel

The pixel is part of the Shopify app, so connecting your store switches it on. It runs in Shopify's own pixel sandbox: no theme code to edit, no script tag to maintain.

  • Shopify Web Pixel Runs in Shopify's sandbox, not in your theme
  • Status you can see Your dashboard shows whether the pixel is active

Each visit keeps the link that brought it

Landing URL kept

Each page view the pixel sends keeps its landing URL, so the UTM tags and click IDs your ads add (fbclid from Meta, gclid from Google, ttclid from TikTok, sccid from Snapchat) travel with the visit. Every event is then written in one format, so a Meta click and a Shopify order sit on the same timeline.

  • Click IDs and UTM tags Kept in the landing URL of each visit
  • NodeNarrative Event Protocol One event format that every source is translated into: page views, add to carts, purchases and ad clicks alike.
Check it in the table: Click ID preservation

Shopify runs app pixels in a sandbox kept apart from your storefront's own code, so the pixel runs outside your theme code. Will install from the Shopify App Store once our listing is approved. No developer, no tag manager.

Step two: resolve

The ads that found the customer stay on the record

Certain matches today, scored matches next, all held on one customer in a knowledge graph that computes the attribution itself. The visits, clicks and orders it can connect land on the same customer, and all seven models read that joined-up journey.

  1. 01

    Known customers join up on their own

    Deterministic matching

    When a shopper gives an email or phone number, or logs in, every visit carrying that identifier joins their record. No guesswork: each match rests on an identifier you can verify.

    Hashed with SHA-256 before storage, so the raw email or phone number is never kept in plain text.

    Check it in the table: Deterministic identity matching
  2. 02

    Anonymous visits get matched, with a score

    Probabilistic identity scoring Planned

    Next: visits with no login will be scored against known customers on behaviour and session patterns, so you get a likely match with its confidence attached, not a silent guess. Today, visits join on a shared identifier.

    Planned on Splink, an open-source library that implements the Fellegi-Sunter method of record linkage (a published statistical method for deciding whether two records belong to the same person). Matching runs separately for each store, so a match never crosses into another account's data.

    Check it in the table: Probabilistic identity scoring
  3. 03

    The ad that found them can keep its place

    Knowledge graph identity

    Every identifier becomes a point in a graph, linked to the customer it belongs to, and every journey step becomes a link between them. Once a visit is joined to the customer, its first click stays attached to the order, so a model that credits the whole journey can credit it.

    Resolved in Neo4j, a graph database, and used to compute the attribution itself, rather than as a memory for an AI assistant.

    Check it in the table: Graph-based identity resolution
How our knowledge graph works

What's live, what's next

Where each piece stands

Joining devices is not built yet, and most ad platforms are still on the way: each one's status is listed here. You should know that before you apply, not after.

Cross-device stitching

Planned

Joining the same shopper across phone, tablet and desktop into one journey. Planned, not live.

Check it in the table: Cross-device stitching (marked Planned)

Sending joined-up conversions back to your ad platforms

More complete, correctly credited conversions give the platforms' bidding better input over time. Meta is live; the rest are listed with where they stand.

  • Meta Conversions API Live now
  • Google Ads Offline Conversions In development
  • TikTok Events API Planned
  • Snapchat Conversions API Planned

What each tool can join into one customer

Every tool here collects visits. What differs is whether the visits, clicks and orders then land on one customer.

Capability NodeNarrative GA4 Polar Analytics Triple Whale
Resolves Whether the visits land on one customer
Graph-based identity resolution
Deterministic identity matching Not confirmed
Probabilistic identity scoring Planned Not confirmed Not confirmed Not confirmed
Cross-device stitching Planned Not confirmed Via fingerprinting Not confirmed
Arrives Whether each visit keeps its source
Click ID preservation Not confirmed Not confirmed

Not confirmed: we could not confirm it either way, so we say so rather than guess. Polar's cross-device cell is from Polar's own Pixel and Lifetime ID feature page (checked October 2026). Every row label links to its evidence above.

Collecting the data is where these tools overlap. Of the four compared here, NodeNarrative is the one that resolves identity in a graph: certain matches today and scored matches planned, each matched identifier held on one customer. Our graph computes the attribution itself, rather than acting as a memory for an AI assistant.

See the full platform comparison

Questions about identity

What does the pixel collect, and how?
A native Shopify Web Pixel, switched on when you connect your store, records page views, campaign clicks and checkouts only where the shopper's consent settings allow analytics. Each visit keeps its landing URL, so UTM tags and click IDs (fbclid, gclid, ttclid, sccid) travel with it; personal details in a URL are stripped. The pixel never sends checkout email, phone or address; the order of record comes from Shopify's servers. Each event is written in the NodeNarrative Event Protocol, one format that every source is translated into.
Will the pixel slow down my Shopify store?
It is built not to. Shopify runs app pixels in a sandbox kept apart from your storefront's own code, so the pixel runs outside your theme code.
How does NodeNarrative know two visits are the same shopper?
Today, by shared identifiers: deterministic matching joins visits that share a verifiable identifier such as a hashed email, a phone number or a login. Probabilistic scoring, built on the open-source Splink library, is planned: it will score anonymous visits against known customers and attach a confidence. Matches land in a knowledge graph (built on Neo4j, a graph database) that computes the attribution itself, where each identifier links to the customer it belongs to. Matching runs separately for each store, so a match never crosses into another account's data. Joining one shopper across devices is planned, not live.
Can NodeNarrative send conversions back to my ad platforms?
Yes for Meta: the Conversions API connection is live and two-way. Google Ads Offline Conversions is in development; we will date it here once it is scheduled. TikTok and Snapchat are planned. Sending back more complete, correctly credited conversions gives each platform's bidding better input.
Do I need a developer to install the pixel?
No. The NodeNarrative pixel installs via the Shopify App Store with one click, once our listing is approved. No tag manager, no code changes, no developer resources required.

Give the ads that find new customers their share of the credit

In the example at the top of this page, the ad that found the customer goes from 0.00 to 0.31 of the credit once the journey is joined.