Campaign Tracking Codes in Adobe Analytics: Why Classifications Break
Adobe Analytics classifies campaign tracking codes against an uploaded list. Here's why rows come back unspecified, and what to fix at campaign setup.

Adobe Analytics does not interpret a campaign tracking code. It matches the code against a classification list you upload. When a code arrives that is not on the list, the report shows it unclassified, and the row is unusable until somebody goes back and fixes the list.
That makes the failure an upstream one. The classification file can only describe codes it already knows about; codes are created earlier, in the campaign setup, often by an agency working in a different system. If the code was not built to an agreed standard at that moment, no amount of configuration inside Adobe will recover what it was supposed to mean.
How Adobe Analytics handles campaign tracking codes
The tracking code is a key; classifications are the lookup table it resolves against.
The mechanics are documented and unambiguous. A campaign tracking code lands in the Tracking Code dimension. A classification, in Adobe’s own words, is “a way of categorizing Analytics variable data, then displaying the data in different ways when you generate reports” — you “establish a relationship between a variable value and metadata related to that value,” per Adobe’s classifications overview (accessed 2026-09-13).
So a code like em_2026q3_ret_us arrives as an opaque string. The classification data is what turns it into channel email, quarter Q3 2026, initiative retention, region US. Those columns are not derived from the code. They are supplied alongside it, by you.
One piece of live vendor state worth knowing before you plan any of this: the legacy Classification importer is being phased out after 31 August 2026, with Classification sets as the current approach. If your documented process still describes the spreadsheet-template import, it describes a path Adobe is closing.
Why rows come back unspecified
Because a code reached Adobe that the classification file has never seen.
Adobe’s behavior here is deterministic and documented: a dimension item with no corresponding classification value is consolidated under Unspecified. The platform is not guessing and not failing. It is reporting, accurately, that it was handed a key with no entry.
What makes this expensive is where the key came from. Tracking codes are minted at campaign setup, frequently by an agency or a channel team working in a platform that has never heard of your classification file. The file is maintained by somebody else, usually in analytics, usually after the fact. Every unrecognized code is a message from one team to another that arrives weeks late and reads only as a blank cell.
“Every unspecified row is somebody’s afternoon, and it is the same afternoon every month.” — Kaden Carroll, Lead Solutions Architect, Claravine
The monthly part is what distinguishes this from an ordinary data-quality bug. Fixing the classification file repairs the codes already in it. It does nothing about the next campaign, because nothing upstream changed. The team that generates codes still generates them the same way, so the same gap reopens at the same point in the next cycle, and the fix is re-performed rather than completed.
One analytics team described the loop before it was closed.
“To download our campaign IDs (CIDs) for display advertising, we had a whole deduping process that we had set up with queries. We’d send it to our ad agency. They would append information, send it back to us, and we’d upload it to Adobe.” — Kimberly Whitehead, marketing technology manager, Vanguard
Count the handoffs in that sentence: four systems and two organizations, to move metadata that could have been attached when the campaign was created.
The same problem, platform-agnostic: Campaign tracking in analytics — how campaign tracking reaches any analytics tool.
Classifications, and what they cannot fix
A classification can describe a code; it cannot correct one that was malformed at creation.
This is the distinction most Adobe troubleshooting skips, and it decides where the work belongs.
| The problem | Classifications can fix it? | Why |
|---|---|---|
| Code is valid, metadata missing | Yes | That is exactly the job — attach columns to a known key |
Code has a typo (em_2026q3_ret_su) | No | It is a different key; classifying it labels the typo |
| Two codes for one campaign | No | Both classify correctly, into two rows, forever |
| Code omits a field you now report on | No | The information was never captured; nothing can recover it |
| Agency used its own convention | No | Every code is technically valid and none of them join |
Only the first row is a classification problem. The other four are campaign-setup problems that surface in Adobe, which is why they get assigned to analytics and stay unresolved there.
The third row is the one that quietly costs the most. Two codes for one campaign do not look like an error at any point — both resolve, both report, both produce plausible numbers. The campaign is simply measured as two smaller campaigns forever, and no report will tell you.
What has to be true at campaign setup
The code must be generated from an agreed standard, at the moment the campaign is built.
Three conditions, and they are ordered:
- The fields are agreed before the campaign exists. Which dimensions every code carries (channel, initiative, region, period) settled once, not negotiated per campaign.
- The values are closed. Each field resolves against a permitted list rather than free text. This is what makes two people produce the same code for the same campaign, and everything else here depends on it.
- The code is generated, not typed. A code assembled by a system from validated inputs cannot contain the typo in row two of the table above. A code typed into a brief can and eventually will.
Get those right and the classification file stops being a reconciliation artifact. It becomes a description of a standard that already exists, which is a far smaller document and one that does not need emergency updates. The same logic governs UTM parameters on the Google side; the platform differs, the upstream condition does not.
A digital analytics team described the change in the report itself.
“With Claravine, we’re capturing more information than we’ve ever had before. We’ve cleaned up that unspecified bucket to something more trackable, and we’re deploying campaigns in a more structured way, on top of having the data quality we need.” — unnamed, Digital Analytics Manager, a media & communications company
“That unspecified bucket” is the same bucket this page opened with. It is a named, visible line in an Adobe report, which is unusual. Most data-quality problems have no row of their own.
One campaign identity, everywhereApproved values applied where campaigns are created.Explore campaign tracking and measurementAdobe Analytics vs Google Analytics on campaign data
Both resolve a code against something; they differ in what they will accept.
Google Analytics reads structured parameters directly off the URL. The campaign parameters it collects (accessed 2026-09-13), namely source, medium, campaign, term and content, are self-describing, so a link carries its own meaning and no lookup file is required. The cost is that whatever was typed into those parameters is what you get, including five spellings of one channel.
Adobe resolves a compact tracking code against classification data you maintain. The code itself carries no meaning, which is more work and also more control. Change the classification and every historical row re-reads correctly, which URL parameters cannot do.
The trade is real in both directions and it is not the point. Neither platform can tell you whether two codes describe the same campaign, because neither has any way to know what the campaign was supposed to be called. That question is answered before either tool sees the data, or it is not answered at all.
Frequently asked questions
What is Adobe Analytics used for?
Measuring digital behavior across web and mobile, including campaign performance. Campaign reporting runs on the Tracking Code dimension and the classification data attached to it.
What is the difference between Google Analytics and Adobe Analytics?
Both resolve a campaign code against a reference. Google reads self-describing parameters off the URL; Adobe resolves a compact code against classification data you upload and maintain. Adobe is more configurable and more dependent on that file being right.
Why are my campaign reports showing unspecified?
Because a tracking code arrived that the classification file does not contain. Adobe consolidates dimension items with no classification value under Unspecified.
Can classifications fix a bad tracking code?
No. They can label a code, not correct one that was built wrongly. A typo classifies perfectly well as a typo.
Is Omniture the same as Adobe Analytics?
Yes. Omniture and SiteCatalyst are the product’s former names, and both still appear in older documentation and job descriptions.
Sources
- Adobe Experience League, “Classifications overview” (accessed 2026-09-13) — the classification definition, the Unspecified behavior, and the Classification importer sunset.
- Adobe, “Adobe Analytics” (accessed 2026-09-11) — product scope.
- Google Analytics Help, “Collect campaign data with custom URLs” (accessed 2026-09-13) — the GA campaign parameter set, for the comparison section.



