amitdusane.com Adobe Analytics Learning

Start with the foundationsVariables: Props, eVars, and Events

Context Data Variables

There is a way to hand data to Adobe that does not commit to a numbered slot at collection time, and this is it. Every other variable, props, eVars, events, list variables, needs a number you must know in advance. Setting s.eVar5 = "premium" means your developer has to know that eVar5 is "membership tier," and the day you want it in eVar6 instead, someone edits and redeploys code. That hardwiring is the problem context data solves. Instead of assigning numbered variables, you send meaningful named pairs, and the mapping to props, eVars, and events happens later, in Processing Rules, with no code change.

JavaScript
// Developers send named, human-readable data
s.contextData["user.status"] = "logged-in";
s.contextData["user.tier"]   = "premium";
s.contextData["page.type"]   = "product";

// Analysts map it later, in Processing Rules (no deploy):
// contextData["user.status"] -> eVar5
// contextData["user.tier"]   -> eVar6
// contextData["page.type"]   -> prop1
Developers send meaning; you decide afterwards which variable it lands in
Data layer the page states a fact Context data named pairs, no numbers Processing rules you decide the mapping a prop an eVar an event The developer never has to know which eVar it ends up in Change your mind later and it is a rules change in the interface, not a code release

What it buys you

  • Separation of concerns: developers speak business language ("user.tier"), analysts own the variable mapping. Neither has to live in the other's world.
  • Re-map without a deploy: moving a value from eVar6 to eVar7, or sending one field to both a prop and an eVar, is a Processing Rules change, not a code release.
  • Future-proofing: send everything meaningful now, decide where it lands as reporting needs evolve.
Context data does nothing on its own

This is the catch that surprises people: context data is inert until it's mapped. Send s.contextData["user.tier"] and never write a Processing Rule for it, and it simply doesn't appear in any report, no error, no variable, nothing. The flexibility comes with a dependency: Processing Rules, which are admin-gated and require Adobe's processing-rules authorization. Context data is the input; Processing Rules are what turn it into data you can actually see.

On mobile, it isn't optional

On the web, context data is a choice. In a mobile app it's the only way. The Adobe mobile SDK (v4 and later) cannot set events, eVars, props, hiers, or lists directly at all, you pass everything as context data through trackState and trackAction, and Processing Rules do the mapping. There's one exception: the products variable, which the SDK sets directly via the special &&products context data key.

This changes how you fire events from an app, too. Since the app can't fire an event directly, you send a context data value and let a Processing Rule map it to an event. The increment rule is worth knowing: when context data is mapped to an event, a text value increments it by 1 (so a simple flag like "true" means "fired once"), while an integer value increments it by that number (a context data value of 5 adds 5). So a plain flag counts occurrences, and a number carries magnitude.

Default context data you already get

Some context data shows up without you sending it. Adobe reserves the a. prefix for its own automatically collected variables, and you don't write Processing Rules for these, they're mapped for you, and these mappings don't count against your processing-rules limit.

SourceExample reserved keysWhat they feed
Activity Map (web)a.activitymap.page, a.activitymap.link, a.activitymap.region, a.activitymap.pageIDTypeThe Activity Map link/region reports
Mobile lifecycle (auto-collected by the SDK)a.InstallEvent, a.LaunchEvent, a.Launches, a.OSVersion, a.DeviceName, a.AppID, a.DaysSinceFirstUseInstalls, Launches, Crashes, device/OS dimensions
The dots are just for humans

Names like page.type read as a hierarchy, but to Adobe they're flat, namespaced keys. The dot notation is a readability and organization convention, not a real object structure. Use it to keep your context data tidy and predictable, not because it changes how the value is stored.

Where this is heading

Context data is the AppMeasurement-era answer to "send meaning, map it later." The Web SDK world takes the same philosophy further: you send structured XDM to the Edge, and where it isn't auto-mapped, the Edge flattens it into context data (under an a.x. prefix) that Processing Rules can still pick up. If the idea of decoupling what developers send from where it lands makes sense to you here, you already understand the instinct behind the whole move to Web SDK and Customer Journey Analytics.

Never name context data after the variable it lands in

Whatever you name your context data, don't name it after the variable it might land in. A key called "eVar6" or "prop3" destroys the entire point of the abstraction and causes painful validation confusion when a report doesn't match the key. Name it for what it means ("user.tier"), not for where it goes.

That naming instinct, describe what a value means and decide where it lands deliberately, is the same discipline this whole module has been circling. The final section makes it formal: Variable Planning, and the solution design document that captures every one of these decisions in a single place.

Where to Find in Adobe Analytics

Map Context Data: Admin → Report Suites → Processing Rules

See available context data: Processing Rules → (it lists context data seen in recent hits)

Need implementation steps?

This article focuses on the concepts, architecture, and practical guidance behind the topic. For the latest UI walkthroughs and step-by-step implementation instructions, use the links below. They leave this site and open Adobe's own documentation in a new tab.