Module 01 · Foundations

What Adobe Analytics
actually is.

Before we write a single line of tracking code, we need to know what we are tracking to. This module explains the pipeline from a browser click to a row in a report — and the surprisingly small number of moving parts you actually need to remember.

Reading20 min
LabNone
DifficultyBeginner
Pre-reqNone

1 · The ecosystem (and why this is confusing)

Adobe Analytics is one product inside a much larger family called the Adobe Experience Cloud. If you read older documentation you will see it referred to as SiteCatalyst, then Omniture; the product is the same, the names changed. The reason this matters for you, the implementer, is that Adobe documentation drifts across the years and you will find code samples in three different dialects sitting on the same web page.

Here is the map you should keep in your head:

ComponentWhat it doesWhere it runs
AppMeasurementThe JavaScript library that builds the request and sends it to Adobe.Browser
Tags (Launch)A tag management system that decides when AppMeasurement runs.Browser
Web SDK (Alloy)A newer replacement for AppMeasurement. Sends to the Edge Network instead.Browser
Adobe AnalyticsThe server-side product. Receives, processes, stores, reports.Adobe's servers
Customer Journey AnalyticsThe next-generation reporting layer, built on the Experience Platform.Adobe's servers

If you are new, you can ignore CJA for now. We will return to it in module 12. For the first eleven modules, "Adobe Analytics" means the classical product — the one whose reports look like Workspace and whose data lives in report suites.

A note on names

You will hear Launch, Tags, and DTM used interchangeably. DTM (Dynamic Tag Management) was the original tag manager, deprecated in 2020. Launch was its replacement. Tags is what Adobe now calls Launch inside the Experience Platform UI. The product hasn't really changed — only its address bar.

2 · The collection pipeline

Every implementation problem you will ever solve can be traced through this five-step pipeline. Memorise it. When something is broken in production, your debugging instinct will be to find which of these five steps is misbehaving.

┌────────────┐   ┌───────┐   ┌──────────────┐   ┌─────────┐   ┌─────────┐
│  USER      │ → │ TAG   │ → │ APPMEASURE-  │ → │ ADOBE   │ → │ REPORT  │
│  ACTION    │   │ MGR   │   │ MENT BUILDS  │   │ COLLEC- │   │ SUITE   │
│            │   │ FIRES │   │ THE REQUEST  │   │ TION    │   │         │
└────────────┘   └───────┘   └──────────────┘   └─────────┘   └─────────┘
     ①              ②              ③                 ④             ⑤

① User action

Someone loads a page, scrolls, clicks a button, completes a checkout. Something happens in the browser that we have decided is worth measuring.

② Tag manager fires

Launch is listening. A rule says: "when this happens, run this JavaScript." The rule fires. This is where you, the implementer, do most of your configuration work — defining what counts as a meaningful event, what data to collect about it, and what to do with that data.

③ AppMeasurement builds the request

The rule's action invokes AppMeasurement. Conceptually it is two steps: set variables (s.pageName = "Home", s.events = "event3", …), then send (s.t() for a page view, s.tl() for a link). AppMeasurement serialises every variable you've set into a query string and fires it as an HTTPS request.

④ Adobe's collection servers receive it

The request goes to a URL like metrics.example.com/b/ss/<rsid>/1/<version>/<aid>. Adobe's servers acknowledge it (a 1×1 transparent GIF historically; an HTTP 200 now) and queue the hit for processing.

⑤ Processing & storage in the report suite

The hit is shredded apart, run through processing rules and VISTA rules (server-side transformations you defined), enriched with classifications, joined to the visitor profile, and finally written into the report suite's data store, ready to be reported on in Workspace.

Why this matters

Three of the five steps happen in your code (① ② ③). The other two happen on Adobe's servers. When data is wrong, the question is always: did we send the wrong thing, or did Adobe do the wrong thing with what we sent? You can only answer that if you know what was on the wire.

3 · Report suites — the unit of accounting

A report suite is the database your hits land in. Think of it as a single ledger: every hit it receives is segmented and reported on independently from every other report suite.

You will work with three kinds in practice:

KindPurpose
ProductionThe real one. Customers' data lives here. Tread carefully.
Development (or QA, staging)The sandbox. Implementers fire test hits here.
Rollup / GlobalA combined view of multiple regional or product-line report suites.

Each report suite has an RSID — a short identifier like examplecorp or examplecorpprod. When you set s.account = "examplecorpprod", you are choosing which ledger to write to. This is the single most consequential variable in your implementation; sending production data to a dev suite makes it invisible, and sending dev data to a production suite pollutes it.

The Multi-Suite Tagging pattern

A common pattern is to send the same hit to two report suites at once — one global, one regional. You do this by setting s.account to a comma-separated list:

s.account = "examplecorpprod,examplecorpus";
s.pageName = "Home";
s.t();
// Adobe sends one hit, replicated to both report suites.

The hit appears in both suites — but each has its own retention, schema, and processing rules. The processing rules will probably differ. We will return to this in module 10.

4 · What a "hit" actually is

A hit is an HTTPS request. Specifically a GET to a path that looks like this:

https://metrics.example.com/b/ss/examplecorpprod/1/JS-2.20.0/s12345678
  ?pageName=Home
  &ch=Home
  &events=event1
  &v1=logged-in
  &c1=US
  &g=https%3A%2F%2Fexample.com%2F
  &mid=01234567890
  &aid=12345678-ABCDEF01

Read this URL the way a colleague would. The bits to the left of the ? say "this is an Adobe Analytics hit going to the examplecorpprod report suite using AppMeasurement version 2.20.0." Everything after the ? is your payload — every variable you set, in its compressed form (v1 means eVar1, c1 means prop1, etc).

There are exactly two kinds of hits:

Hit typeTriggered byBehaviour
Page views.t()Increments page views, sets pageName, allowed to set every variable.
Links.tl()Does not increment page views. By default sends almost no variables — you must whitelist with linkTrackVars.

Link hits come in three sub-types: custom link ('o'), download link ('d'), and exit link ('e'). These categorise the link in Adobe's link-tracking reports. Module 06 covers the distinction in detail.

A common mistake

Beginners often fire s.t() on a button click. It "works" in the sense that data arrives — but you have just inflated your page view count. The site looks busier than it is, every bounce rate report is wrong, and you have shifted the rest of the team's mental model of how traffic flows. Always reach for s.tl() on interactions.

5 · The three libraries — and why all three still exist

You will encounter implementations built with three different libraries, sometimes on the same website. Knowing which is which is half the job.

5.1

s_code.js (legacy)

The original. Before AppMeasurement was a separate file, the code that did the tracking was called s_code and lived inside every page. If you see s_code.js in an implementation, you are looking at something at least a decade old. It still works — Adobe never breaks backwards compatibility — but you should not write new code against it.

5.2

AppMeasurement.js

The modern descendant of s_code. This is what Launch deploys for you when you add the "Adobe Analytics" extension to a property. The core library; the s object lives here. You will spend most of this course inside its model of the world.

5.3

Web SDK (Alloy)

The newest. Instead of building an Analytics-specific request and sending it to a metrics server, Alloy builds a generic event in XDM format and sends it to the Adobe Edge Network, which then routes it to Analytics, Target, Audience Manager, etc. We will spend module 08 on this. For now, just know that Alloy is the future and AppMeasurement is the present.

6 · The vocabulary you need before module 02

You will not learn all of these by reading the definitions. You learn them by using them. So skim this list now, then refer back as the rest of the course makes them concrete.

TermMeans
sThe AppMeasurement object — the API surface for all your tracking.
eVarCustom conversion variable. Persists across hits.
propCustom traffic variable. Reset every hit by default.
eventA success metric — a counter or a value you are incrementing.
RSIDReport Suite ID — the database your hits go to.
SDRSolution Design Reference. The spreadsheet that says "eVar4 = product category." Read it twice before changing anything.
HitA single request to Adobe's collection servers.
VisitA series of hits from one visitor with no 30-minute gap.
Unique visitorA device cookie, in practice. Not a person.
ECIDExperience Cloud ID. The cross-product visitor identifier.
Marketing channelA server-side bucket like Paid Search, derived by rules from campaign, referrer, etc.
Processing ruleA server-side rule that modifies hits after collection.
ClassificationA lookup table joined to a variable value at report time.

7 · Checkpoint

Before you continue to module 02, you should be able to answer these out loud:

  • What happens between a click in the browser and a row in a report?
  • What is the difference between a page view hit and a link hit?
  • Why does a report suite ID matter — and what is the cost of getting it wrong?
  • What's the difference between AppMeasurement and the Web SDK?
  • What is a hit, exactly, at the network level?

If any of those are fuzzy, scroll back. There is no rush.

Next up

Module 02 builds the data layer — the structured JavaScript object your tracking will read from. Get it right and the rest of your implementation falls into place. Get it wrong and you will be repairing it for years.