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:
- Live Stitching: Adobe uses the current ECID to immediately look up known links in the graph.
- 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
- User clicks Marketo email:
https://www.adb.com/resources?id=whitepaper&email=john.doe@company.com
- You read the email from the URL:
const email = new URLSearchParams(window.location.search).get("email");
if (email) localStorage.setItem("userEmail", email);
- 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 Type | ECID | Email in URL? | Email Reused? | Stitched? |
|---|---|---|---|---|
| 1st Visit via Email | ecid-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:
| Time | Persistent ID | Transient ID | Device | Source |
|---|---|---|---|---|
| 10:00 AM | ECID_001 | null | Laptop | Direct |
| 10:15 AM | ECID_001 | john@acme.com | Laptop | Form Fill |
β Field-Based Stitching Result:
- Adobe recognizes the transient ID
john@acme.comand stitches all ECID_001 events into a single stitched ID.
β Graph-Based Stitching Result:
- Identity Graph also maps
john@acme.comto 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:
| Time | Persistent ID | Transient ID | Device | Source |
|---|---|---|---|---|
| June 12 | ECID_002 | john@acme.com | Phone | Email 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:
| Time | Persistent ID | Transient ID | Device | Source |
|---|---|---|---|---|
| June 18 | ECID_003 | null | Work PC | Organic |
β 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/Factor | Field-Based Stitching (FBS) | Graph-Based Stitching (GBS) |
|---|---|---|
| Requires Identity Service | No | Yes |
| Works across datasets | Limited | Extensive |
| Uses Email or CRM IDs | Yes | Yes |
| Supports anonymous to known | Yes | Yes |
| Cross-device stitching | Only with matching email | Yes |
| Real-time stitching | Yes | Yes |
| Replay capabilities | Daily/weekly lookback | Full graph-driven replay |
| Complex journeys | Hard to track | Easy to resolve |
| Cost & setup complexity | Lower | Higher |
β Best Stitching Strategy for B2B Use Cases
| Scenario | Recommended Approach |
|---|---|
| Website with basic form tracking | Field-Based Stitching |
| Multi-touch journeys across systems | Graph-Based Stitching |
| Account-based marketing attribution | Graph-Based Stitching |
| Budget-sensitive or early stage setup | Field-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
identityMapin 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.
| Visit | Device | ECID | Source | Email Submitted? |
|---|---|---|---|---|
| 1 | Laptop | ECID_1 | β
Yes (john@acme.com) | |
| 2 | Mobile | ECID_2 | Direct | β 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 Type | Example | Does It Work? |
|---|---|---|
| Campaign Token | ?mkt_tok=abc123 | β Yes |
| Login Cookie | crm_id=crm_123 | β Yes |
| CRM Click Redirect | Salesforce 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
| Scenario | Can Adobe Stitch? | Notes |
|---|---|---|
| User fills form on ECID_1, then returns via Marketo email (ECID_2) | β Yes | Identity Graph can stitch via mkt_id or email |
| User fills form, then returns via CRM flow or chat integration (ECID_3) | β Yes | Identity Graph links CRM ID and email |
| User fills form, then returns directly on new device with ECID_4 | β No | No identifiers submitted again β no link can be made |
| User fills form, returns directly but cookies still present (same ECID) | β Yes | ECID persisted β identity retained |
π‘ What Adobe Recommends in This Case
- Donβt force form fill again, butβ¦
- Make soft identity collection easy (progressive form, subtle CTA)
- Enable longer lookback windows in field-based stitching (30 days)
- Push Marketo IDs and CRM IDs via Web SDK
identityMapif available - For anonymous revisits: Adobe doesn’t stitch, and that’s by design (privacy-focused)