Graph-Based Identity Stitching for B2B Journeys Using Adobe Experience Platform

In today’s B2B digital landscape, prospects interact with your website across multiple sessions, devices, and marketing touchpoints. Stitching these fragmented interactions into a unified customer journey is essential for accurate attribution, nurturing, and personalization.

Adobe Experience Platform’s graph-based identity stitching, when combined with Adobe Web SDK, Customer Journey Analytics (CJA), and tools like Marketo, offers a powerful solution to this problem.

This blog post explores comprehensive, real-world examples to help you implement graph-based stitching for B2B websites, such as adb.com.


πŸ”„ What is Graph-Based Stitching?

Graph-based stitching allows you to connect multiple identities (ECIDs, email addresses, phone numbers, etc.) using Adobe’s Identity Graph.

It uses:

  • A persistent ID (typically the ECID) that is sent with every hit.
  • A transient ID (like an email) that is sent occasionally (e.g., during form submission or via email click).

Once Adobe sees both on a hit, it links them in the Identity Graph and reprocesses old and future hits to unify the identity.

How it works:

  1. Live Stitching: Adobe uses the current ECID to immediately look up known links in the graph.
  2. Replay Stitching: Older hits are reprocessed periodically (daily, weekly, biweekly, or monthly lookbacks).

🧠 Identity Handling Logic in Graph-Based Stitching

  • If multiple primary identities exist in different namespaces (e.g., ECID and CCID), Adobe sorts them lexicographically and selects the first.
  • If multiple primary identities exist in one namespace, Adobe also sorts lexicographically and picks the first.
  • Email and other identities used for stitching must be defined in the schema as identities.
  • The identityMap is the field group used to supply all identities.

Example identityMap payload:

"identityMap": {
  "ECID": [
    {"id": "ecid-3"},
    {"id": "ecid-2", "primary": true},
    {"id": "ecid-1", "primary": true}
  ],
  "CCID": [
    {"id": "ccid-1"},
    {"id": "ccid-2", "primary": true}
  ]
}

Sorted primary identities:

[
  {"id": "ccid-2", "namespace": "CCID"},
  {"id": "ecid-1", "namespace": "ECID"},
  {"id": "ecid-2", "namespace": "ECID"}
]

Selected identity: ccid-2 from namespace CCID


πŸ“© Stitching Through Email Clicks in B2B Journeys

Problem

If a user only fills out a form once and returns later without submitting a form or clicking a tracked link again, how can we recognize and stitch the identity again?

Solution

Use email tracking links and store email locally (post-consent), then reuse it to stitch new ECIDs if needed.


πŸ§ͺ Example Journey on adb.com

Scenario A: First Visit via Marketo Email

  1. User clicks Marketo email:
https://www.adb.com/resources?id=whitepaper&email=john.doe@company.com
  1. You read the email from the URL:
const email = new URLSearchParams(window.location.search).get("email");
if (email) localStorage.setItem("userEmail", email);
  1. Send identityMap to Adobe using Web SDK:
if (email && !sessionStorage.getItem("emailSent")) {
  sessionStorage.setItem("emailSent", "true");
  alloy("sendEvent", {
    xdm: {
      identityMap: {
        Email: [{ id: email }]
      }
    }
  });
}

βœ… Now ECID is linked to john.doe@company.com


Scenario B: User Returns Later (Same Device)

  • ECID remains the same β†’ stitching works automatically β†’ no extra action needed.

Scenario C: User Returns from New Device or Incognito

  • New ECID is generated.
  • If email is not in URL or submitted again, user appears anonymous.
  • Solution: reuse stored email (from first visit) if consented.
const storedEmail = localStorage.getItem("userEmail");
if (storedEmail && !sessionStorage.getItem("emailResent")) {
  sessionStorage.setItem("emailResent", "true");
  alloy("sendEvent", {
    xdm: {
      identityMap: {
        Email: [{ id: storedEmail }]
      }
    }
  });
}

πŸ“¦ Stitching with Form Submissions

If the user provides email on a form, use the email as a transient identity:

alloy("sendEvent", {
  xdm: {
    eventType: "web.formSubmit",
    identityMap: {
      Email: [{ id: "john.doe@company.com" }]
    },
    person: {
      email: "john.doe@company.com"
    }
  }
});

Now that ECID is linked to the email, all historical and future data is stitched.


πŸ“Š Replay Stitching Intervals

Replay stitching helps link older anonymous hits once a new identity is discovered. Options:

  • Daily replay: 24h lookback
  • Weekly replay: 7d lookback
  • Biweekly: 14d lookback
  • Monthly: 30d lookback

Select a longer lookback to allow more time for email identification.


πŸ” Privacy & Unstitching

  • Email must only be stored and reused after user consent (e.g., via cookie banner).
  • Adobe’s 2025 update ensures that once a privacy request is honored, events are no longer restitched with alternate identities.

βœ… Summary Table

Visit TypeECIDEmail in URL?Email Reused?Stitched?
1st Visit via Emailecid-123βœ…Storedβœ…
2nd Visit (Same Device)ecid-123❌Local ECIDβœ…
3rd Visit (New Device)ecid-999βŒβœ… via localStorageβœ…
4th Visit (New Device, No Email)ecid-888❌❌❌

🏁 Final Recommendations

  • Always capture email from Marketo URLs using query strings.
  • Send identityMap in Adobe Web SDK only once per session.
  • Safely reuse stored email (post consent) for new ECIDs.
  • Choose the right replay stitching frequency for your B2B journey.

In the B2B digital world, leads rarely follow a straight path. A potential buyer might visit your website anonymously, browse your solutions, return weeks later via a marketing email, attend a webinar, and finally engage with your sales teamβ€”spanning devices, platforms, and identity states.

Adobe Customer Journey Analytics (CJA) offers two powerful stitching methods to help organizations make sense of these fragmented journeys:

  • Field-Based Stitching (FBS)
  • Graph-Based Stitching (GBS)

This blog post will dive deep into both approaches, explaining their use cases with real B2B examples, visual graphs, and comparison tables, so you can choose the right stitching strategy for your organization.


πŸ” What is Stitching in CJA?

Stitching refers to connecting disparate data pointsβ€”such as anonymous browsing and known profile engagementβ€”into a unified profile. This unified view helps B2B marketers and analysts:

  • Understand the full funnel from anonymous interest to conversion.
  • Attribute marketing success more accurately.
  • Align sales and marketing insights on accounts and personas.

πŸ”— Field-Based Stitching (FBS) Overview

FBS uses two types of identifiers:

  • Persistent ID: Always available (e.g., ECID, cookie ID).
  • Transient ID: Available only when known (e.g., hashed email upon login/form submission).

FBS creates a stitched ID column in your dataset based on matches between persistent and transient IDs.

Benefits:

  • Works without Experience Platform Identity Service.
  • Simple implementation using Adobe Web SDK.
  • Ideal for website-only or initial B2B setups.

Limitations:

  • Can’t stitch beyond your dataset.
  • One-step rekeying only.
  • Transient ID must be present on at least one event.

🧠 Graph-Based Stitching (GBS) Overview

GBS uses the Adobe Experience Platform Identity Graph to connect identities across multiple datasets and systems. It links:

  • ECIDs
  • CRM IDs
  • Email addresses
  • Device fingerprints
  • Call center IDs, and more

Benefits:

  • Provides holistic identity resolution across systems.
  • Enables account-level insights.
  • Supports cross-device and cross-channel journeys.

Limitations:

  • Requires Experience Platform and Identity Service.
  • More complex to implement.

🎯 Use Case 1: First-Time Visitor β†’ Browses Pages β†’ Fills a Form (Email Collected)

πŸ”„ Journey Breakdown:

  • User visits the website via a LinkedIn ad.
  • Browses several solution pages anonymously (ECID_001).
  • Submits a contact form providing john@acme.com.

πŸ‘‡ Dataset Sample:

TimePersistent IDTransient IDDeviceSource
10:00 AMECID_001nullLaptopDirect
10:15 AMECID_001john@acme.comLaptopForm Fill

βœ… Field-Based Stitching Result:

  • Adobe recognizes the transient ID john@acme.com and stitches all ECID_001 events into a single stitched ID.

βœ… Graph-Based Stitching Result:

  • Identity Graph also maps john@acme.com to a CRM ID (CRM_56789) and possibly to previous email campaigns.

πŸ” Graph Diagram:

[ECID_001] β†’ [john@acme.com] β†’ [CRM_56789]

🧠 Insight Unlocked:

Both methods link sessions, but GBS allows marketing attribution back to email, sales stage, and lead score.


🎯 Use Case 2: Second Visit from Email β†’ Site Visit β†’ Form Submission

πŸ”„ Journey Breakdown:

  • Same user receives a Marketo email.
  • Clicks the link to visit the website (ECID_002 on a new device).
  • Fills the form again with the same email.

πŸ‘‡ Dataset Sample:

TimePersistent IDTransient IDDeviceSource
June 12ECID_002john@acme.comPhoneEmail Link

βœ… Field-Based Stitching:

  • Stitching connects ECID_001 and ECID_002 using the same email.

βœ… Graph-Based Stitching:

  • Uses email + CRM link + campaign metadata from AEP.

πŸ” Graph Diagram:

[ECID_001] ← john@acme.com β†’ [ECID_002] β†’ [CRM_56789]

🧠 Insight Unlocked:

You can attribute engagement back to the Marketo campaign without user submitting the form again if GBS is used.


🎯 Use Case 3: Third Visit on New Device β†’ No Login or Form

πŸ”„ Journey Breakdown:

  • Same user visits again (ECID_003), no login, no form.

πŸ‘‡ Dataset Sample:

TimePersistent IDTransient IDDeviceSource
June 18ECID_003nullWork PCOrganic

❌ Field-Based Stitching:

  • Cannot stitch due to absence of transient ID.

βœ… Graph-Based Stitching:

  • May still stitch using:
    • IP address
    • Device fingerprint
    • Historical CRM links

πŸ” Graph Diagram:

[ECID_001] β†’ [john@acme.com] β†’ [CRM_56789] β†’ [ECID_003 (probable match)]

🧠 Insight Unlocked:

GBS recognizes this visit as likely being John Doe based on device/IP, providing more comprehensive tracking.


βš–οΈ Field-Based vs. Graph-Based: Comparison Table

Feature/FactorField-Based Stitching (FBS)Graph-Based Stitching (GBS)
Requires Identity ServiceNoYes
Works across datasetsLimitedExtensive
Uses Email or CRM IDsYesYes
Supports anonymous to knownYesYes
Cross-device stitchingOnly with matching emailYes
Real-time stitchingYesYes
Replay capabilitiesDaily/weekly lookbackFull graph-driven replay
Complex journeysHard to trackEasy to resolve
Cost & setup complexityLowerHigher

βœ… Best Stitching Strategy for B2B Use Cases

ScenarioRecommended Approach
Website with basic form trackingField-Based Stitching
Multi-touch journeys across systemsGraph-Based Stitching
Account-based marketing attributionGraph-Based Stitching
Budget-sensitive or early stage setupField-Based Stitching

Pro Tip πŸ’‘:

Start with FBS for immediate insights, then scale to GBS as your identity architecture matures.


🧩 Technical Best Practices for B2B Stitching

  • Always hash transient IDs like emails before sending.
  • Use identityMap in Adobe Web SDK to track both ECID and custom IDs.
  • Ensure mutual exclusivity of namespaces for persistent and transient IDs.
  • Avoid dummy transient values like “undefined” or inconsistent casing.
  • Use longer replay lookback windows (e.g., biweekly/monthly) for B2B sales cycles.
  • Work with your AEP architect to build identity graphs including CRM, Marketo, and event systems.

🎯 Final Thoughts

B2B customer journeys are long, complex, and multi-channel. Stitching gives you the power to follow the buyer across their lifecycleβ€”from first anonymous click to closed won deal.

  • Use Field-Based Stitching for simple setups and fast wins.
  • Use Graph-Based Stitching for deep account-level insights, CRM integration, and long-term optimization.

Start simple, grow strategically, and let Adobe CJA be your map through the B2B maze.

Perfect β€” this is the most challenging and important case in B2B identity stitching:


❓Use Case Recap

A user submits their email in Visit #1 β†’ leaves β†’ then later returns directly (no campaign) from a new device or incognito browser β†’ does not fill out the form again β†’ no email is submitted β†’ no link to the earlier session is visible in the data.

VisitDeviceECIDSourceEmail Submitted?
1LaptopECID_1Googleβœ… Yes (john@acme.com)
2MobileECID_2Direct❌ No

❗Can Adobe Stitch ECID_2 to ECID_1 in This Case?

πŸ‘‰ Short Answer:

❌ No, not unless ECID_2 can be linked to any known identity (email, CRM ID, Marketo ID, etc.)

Why?

Because Adobe never saw a signal that ECID_2 = John Doe.


βœ… What’s Needed for Graph-Based Stitching to Work

Graph-Based Stitching needs at least one bridge to link ECID_2 with the known graph for john@acme.com. This bridge can be:

Bridge TypeExampleDoes It Work?
Campaign Token?mkt_tok=abc123βœ… Yes
Login Cookiecrm_id=crm_123βœ… Yes
CRM Click RedirectSalesforce pixel/clickβœ… Yes
Same browser (ECID persisted)ECID_1 still presentβœ… Yes
Form Fill (again)Email submitted againβœ… Yes
Direct Visit w/ new ECID and no identity❌ No persistent info❌ No

So in your case:

If Visit #2 comes from a new browser/device, and there’s:

  • No email
  • No CRM ID
  • No Marketo token
  • No ID cookie carried forward

β†’ Adobe has no way to identify the user β€” this is true even with Graph-Based Stitching.


πŸ” Why This Limitation Exists (Even in GBS)

Adobe respects privacy-first identity β€” it won’t guess who a user is unless:

  • You send it a verifiable ID
  • Or that ECID was previously associated with a known identity

🧠 So What Should You Do in B2B?

You don’t want to force login every time β€” but here’s how smart B2B orgs solve this:

βœ… Strategy 1: Encourage gated content

  • Offer high-value downloads (whitepapers, webinars, etc.)
  • Ask for minimal re-authentication
  • Use progressive profiling (Marketo)

βœ… Strategy 2: Use Marketo email tracking + cookies

  • Even if user visits directly, prior Marketo visits often drop a mkt_id
  • Adobe can use that ID if it’s configured as an identifier

βœ… Strategy 3: CRM sync with visitor stitching

  • When Salesforce or CRM interaction is triggered (e.g., chat widget, pricing request), tie ECID back to CRM ID

βœ… Strategy 4: Use Adobe Real-Time CDP for identity enrichment

  • RTCDP can link anonymous ECID to known profiles over time as more data sources flow in

πŸ” The Replay Won’t Help Either

Replay stitching only helps when both ECIDs have the same transient ID β€” in this case, ECID_2 never submits any identifiable info, so replay can’t bridge it either.


βœ… Final Summary

ScenarioCan Adobe Stitch?Notes
User fills form on ECID_1, then returns via Marketo email (ECID_2)βœ… YesIdentity Graph can stitch via mkt_id or email
User fills form, then returns via CRM flow or chat integration (ECID_3)βœ… YesIdentity Graph links CRM ID and email
User fills form, then returns directly on new device with ECID_4❌ NoNo identifiers submitted again β†’ no link can be made
User fills form, returns directly but cookies still present (same ECID)βœ… YesECID persisted β†’ identity retained

πŸ’‘ What Adobe Recommends in This Case

  1. Don’t force form fill again, but…
  2. Make soft identity collection easy (progressive form, subtle CTA)
  3. Enable longer lookback windows in field-based stitching (30 days)
  4. Push Marketo IDs and CRM IDs via Web SDK identityMap if available
  5. For anonymous revisits: Adobe doesn’t stitch, and that’s by design (privacy-focused)


Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *