Key takeaways
- Inherited Adobe Analytics setups should start with an audit of live campaign URLs, cid or UTM parameters, s.campaign population, classification rules, and creative asset tagging gaps.
- Adobe campaign parameters are the reporting source of truth because inconsistent Tracking Code values create unclassified buckets, failed classifications, polluted attribution, and unreliable ROI analysis.
- Teams must choose and document whether campaign data will use one structured cid value, multiple UTM-style parameters, or separate eVars before changing classifications or dashboards.
- UTM Smart Manager is the solution to teams inheriting the Adobe Analytics problematic setup as the platform provides a governed link-generation workflow for marketers and agencies to replaces spreadsheet-driven tracking codes with standardized approved values, templates, stored submissions, and self-serve forms.
- Clean Adobe reporting requires more than link tagging; teams also need classification governance, 255-byte guardrails, asset-level metadata, and clear storytelling that turns cleaned data into budget decisions.
Table of contents
There is nothing quite like inheriting someone else’s adobe analytics implementation. You open Adobe Analytics and confront an alphabet soup of tracking codes: utm_ here, cid there, random parameters sprinkled like unknown spices. Reports abound, but the numbers don’t quite add up. It’s the kind of mess that makes HiPPOs (the Highest Paid Person’s Opinion) distrust the data, causes marketers to blow budgets blindly, and leaves you pleading for more resources while your CFO rolls their eyes. You’ve seen this story before. Someone hands you the keys to a sophisticated platform, but nobody left a recipe. The first instinct might be to blame the tool (“Omniture cannot save you”!), but the reality is that bad data leads to bad decisions and smaller budgets.
In marketing operations, inheriting a messy adobe analytics setup is common. You’re tasked with proving ROI (justifying media spend, asking for bigger budgets, defending your job) but the data looks like goulash and you finally understand why marketing reports mostly have focused on impressions at a platform level. You suspect campaign tracking is misconfigured, creative assets are untagged, and you have no idea which links drive results. Worse, when the CMO asks, “Why did our revenue dip this quarter?” all you have are shrugs and broken dashboards. Borrowing the spirit of analytics evangelists who rail against data puking and beg us to focus on insights that drive cash, this article dives into how to reclaim your Adobe Analytics implementation. We’ll focus on campaign parameters such as CIDs and UTMs as the source of truth for every report, because if the codes are broken, your ROI calculations are wrong and your budget requests are dead on arrival. Governed link and asset management isn’t just nice to have; it’s the only path to bigger budgets and happy HiPPOs.
Why campaign parameters matter
Adobe calls its campaign‑tracking variable simply campaign. This variable populates the “Tracking Code” dimension and acts like an eVar: it persists across pages, participates in attribution, and can be broken down by any dimension. Unlike Google Analytics’ built‑in UTM parameters, Adobe doesn’t enforce a specific parameter name. Organizations choose their own query parameter (often cid) or concatenate UTMs into one value. The chosen parameter’s value is then assigned to s.campaign using a function like getQueryParam or Util.getQueryParam.
If you need to sort out whether your team is using CID, UTMs, Tracking Code, or separate eVars, start with the Adobe Tracking Code and UTM parameter guide before you redesign the workflow.
Here’s why this matters for you:
- Campaign codes are the backbone of marketing attribution. A properly set
s.campaignvariable allows you to attribute visits, conversions and revenue back to specific marketing activities. Without a consistent code, your reports will show unclassified buckets and meaningless codes. - Classification unlocks meaningful analysis. Adobe’s Classification Rules let you break a tracking code into categories (source, medium, content, creative). If the underlying codes are inconsistent, classification rules fail and you’ll never know which channel performed best.
- Tracking codes persist through sessions. Adobe’s
campaignacts like an eVar. It sticks around for subsequent hits until its expiration. That means one messy code can affect multiple sessions, polluting your data. - Character limits matter. The
s.campaignvariable has a maximum length of 255 bytes; values longer are automatically truncated. Long concatenated UTMs can break classification or cut off important information.
In short, the source of truth for your analytics isn’t just inside Analysis Workspace; it begins in the URL. Governed links and well‑structured parameters enable meaningful reporting.
Step 1: Audit the inheritance: map your current codes
Before adding new tags or designing fancy dashboards, you must understand what you’ve inherited. Start by auditing the current state of campaign tracking and asset tagging. A useful first step is to make your Adobe campaign tracking pattern explicit: which parameter is collected, how it is structured, and how Adobe turns it back into readable reporting fields.
1. Inspect existing URL parameters
Open your marketing links and inspect their query strings. Do you see utm_source, utm_medium, utm_campaign, or a cid? Are the values consistent? Make a list of all parameters used and note any irregular patterns (e.g., uppercase vs. lowercase, missing parameters, ad‑hoc codes).
2. Confirm how s.campaign is populated
To understand how your tracking codes are being captured, you need to inspect how the campaign variable is set in your implementation. Follow these steps:
If you use Adobe Experience Platform Data Collection (formerly “Launch”):
- Log in to Adobe Experience Platform Data Collection.
- In the left navigation, click Tags, then choose your tag property.
- Click Data Elements. Look for a Data Element that uses the Common Web SDK Plugins extension or Common Analytics Plugins extension with the
getQueryParamData Element type. This Data Element extracts query parameters from the URL. - Examine its configuration. Note which query parameter names are being captured (e.g.,
cid,utm_campaign,utm_source). If multiple parameters are listed, check the Delimiter field to see how they are concatenated (for example,:). The data element name might be something like “Campaign Code.” - Go to Rules in the same tag property and locate the rule that initializes plug‑ins or sets Analytics variables. Open the rule and review the Actions section. In a Set Variables action, look for an entry where Campaign or the corresponding XDM field is assigned to the Data Element you identified. This mapping determines which parameter values populate
s.campaign. - If your organization uses the Web SDK, check the XDM mapping for
marketing.trackingCode(which maps tocampaignin Analytics) and verify that your Data Element feeds into it.
If you use hard‑coded AppMeasurement on your site:
- Locate your
AppMeasurement.jsors_code.jsfile in your website’s source code. - Search for the assignment to
s.campaign. You might see code likes.campaign = getQueryParam('cid')ors.campaign = s.Util.getQueryParam('utm_campaign'). - Identify which parameters are being pulled and whether multiple parameters are concatenated using a delimiter. Also note whether the assignment uses
getQueryParam(plug‑in) orUtil.getQueryParam(built‑in). - If your organization captures multiple UTM parameters separately, search for assignments to
s.eVar1,s.eVar2, etc., which may store each parameter into its own variable.
Document the parameter names, delimiter and variable mapping. This information will help you design classification rules later.
3. Evaluate classification rules
Campaign codes are only useful if you can translate them into meaningful categories like Source, Medium and Creative. To evaluate your existing classification setup:
- Verify classification columns:
- In Adobe Analytics, open the Admin menu and select Report Suites.
- Choose your report suite and click Edit Settings > Conversion Classifications (or Traffic Classifications if your
campaignis a prop). - Find the
campaignvariable (Tracking Code) and ensure that classification columns exist for each category you plan to report on, such as Source, Medium, Campaign, Content and Creative. If they are missing, add them and save your changes.
- Review rule sets in the Classification Rule Builder (legacy experience):
- From the Admin menu, open Classification Rule Builder.
- Browse the list of rule sets and locate one associated with your
campaignvariable. If none exist, you may need to create one. - Click the rule set to open it. Review each rule’s condition (usually a regular expression or prefix match) and actions that populate your classification columns. Ensure the conditions align with how your codes are structured. For example, if your codes are formatted
source-medium-campaign-content, a rule might split the code by the hyphen and assign each part to the corresponding classification. - Use the Test feature within the Rule Builder to validate that your rules classify sample codes correctly before activating.
- Check classification results:
- After verifying or updating rules, allow time for processing. Then open Analysis Workspace, drag the Tracking Code dimension to a blank panel, and add metrics like Visits or Orders.
- Break down the Tracking Code dimension by your classification columns (Source, Medium, etc.). Confirm that your codes are classified as expected. Unclassified values indicate that either rules are missing or codes don’t match the defined patterns.
NOTE: The legacy Classification Rule Builder will be deprecated on 31 August 2026. Adobe has introduced Classification Sets, a new interface that combines classification columns and rule management into a single workspace. Because both experiences coexist, you need to choose a path for creating and managing classification rules. We’ll walk through each workflow in detail in Step 4.
4. Examine creative assets and tagging
Campaign attribution doesn’t stop at the click. To understand creative effectiveness, assets must carry the same metadata as links. If you’re using Adobe Experience Manager (AEM) Assets, check whether Smart Tags or manual tags align with your campaign taxonomy. Adobe’s taxonomy guidance emphasizes that a structured tagging system improves searchability and supports metadata‑driven automation. Tags act as a shared vocabulary so teams “speak the same language”.
However, AEM’s Assets Insights only tracks impressions and clicks for images and requires additional embed code and Analytics configuration. Few organizations implement this, leaving a gap in asset‑level measurement. This is where UTM Smart Manager’s Assets Studio shines by auto‑tagging creatives with governed campaign metadata at the moment of link creation, bridging the gap between links and assets.
Once you understand the current pattern, the next move is to create structured Adobe campaign values before reporting cleanup starts.
Step 2: Establish a tracking code generation process
Adobe’s official Campaign Tracking Workflow begins with a clear mandate: establish a tracking code generation process. Whether you’re a one‑person operation or a global enterprise with multiple agencies, this process is non‑negotiable. Here’s how to build one:
1. Define your taxonomy
Start by defining the dimensions you care about: Source, Medium, Campaign, Content, Creative, perhaps Audience or Placement. Give each a clear list of allowed values. For example:
- Source: facebook, google, linkedin, email, display
- Medium: cpc, social, email, referral
- Campaign: spring_sale_2026, product_launch, retargeting
- Content: hero_banner, carousel_ad, newsletter_cta
This taxonomy becomes the foundation for classification and reporting. Adobe’s guidelines stress that consistent tracking codes make it easy to group and analyze performance. If you don’t want to start from scratch, take a look at our public Adobe Analytics CID Builder template. This form uses our taxonomy, dependencies, and relies on CID and our delimiter “:”. If you want a simpler one that uses generic UTM parameters, you can also use this free public Adobe CID Builder template.
2. Choose your parameter strategy
Decide whether to use a single query parameter (commonly cid) or keep the familiar UTMs. Your choice affects implementation:
- Single parameter (e.g.,
cid): Concatenate your taxonomy values into one code, separated by a delimiter (e.g.,source-medium-campaign-content). Example:cid=fb-cpc-spring_sale_2026-hero_banner. This reduces URL length and is easy to capture withgetQueryParam, but requires classification to split the code later. - Multiple parameters (UTMs): Use separate parameters (
utm_source,utm_medium,utm_campaign, etc.). In Adobe, you can assign each UTM to its own eVar, which simplifies classification but uses more variables.
There’s no universal right answer. Multi‑parameter UTMs are intuitive for marketers but risk hitting the 255‑byte limit if combined into s.campaign. Single cid codes require disciplined naming and classification rules. Whichever approach you choose, document it in your Solution Design Document.
3. Build a governed link generator
To eliminate manual errors, create or adopt a governed link builder. This tool should:
- Provide drop‑downs populated with your approved taxonomy values.
- Enforce lowercase values and prevent prohibited characters or overly long codes (255‑byte limit!).
- Generate a shortened link if needed, and store the full governed link in a database.
- Offer templates for common campaign types (paid social, email, display) to speed up creation.
Many organizations hack this together with spreadsheets and macros. But spreadsheets are prone to human error and impossible to scale. Tools like UTM Smart Manager’s Adobe Analytics CID Builder address this by providing brandable forms, SmartLists for centralizing allowed values, and the ability to publish forms for agencies to use. They unify link governance and asset tagging in one workflow, reducing friction and errors.
4. Publish and enforce
Don’t keep your governed builder locked away in an Ops silo. Publish it as a self‑serve form for marketing teams and agencies. Make sure the form uses your brand colors and includes tooltips explaining each field. Encourage adoption by integrating it into campaign launch checklists. Your job is to make the right thing the easy thing.
Step 3: Configure your implementation properly
With a taxonomy and generator in place, you must ensure Adobe Analytics collects the codes correctly. Two methods exist for retrieving query parameters:
1. Using getQueryParam (plug‑in)
Adobe’s getQueryParam plug‑in is a JavaScript function that extracts query string values from a URL. It’s robust for complex URLs (hashes, multiple parameters) and supports capturing multiple parameters with a delimiter. To use it with the Web SDK or Analytics extension:
- Install the “Common Web SDK Plugins” extension in your tag property.
- Create a Data Element using the
getQueryParamdata element. - In your rule, set the
campaignvariable to the data element or callgetQueryParamdirectly: // Single cid parameter
s.campaign = getQueryParam(‘cid’);// Multiple parameters, concatenated with a colon
s.campaign = getQueryParam(‘utm_campaign,utm_medium,utm_source’, ‘:’); - Publish your changes. The function returns an empty string if no parameter exists or concatenates multiple values using the delimiter.
Pros: works with complex URLs, custom delimiters, and concatenated parameters. Cons: not supported in Web SDK manual implementation yet.
2. Using Util.getQueryParam (built‑in)
The s.Util.getQueryParam() method is built into AppMeasurement. It retrieves a single parameter from the URL or a custom string and optionally specifies a delimiter. Example:
// Retrieve the cid value
s.campaign = s.Util.getQueryParam('cid');// Search a custom string for query parameters
var customString = 'https://example.com?q=search';
s.eVar1 = s.Util.getQueryParam('q', customString);
You can also set each UTM into separate eVars:
s.eVar1 = s.Util.getQueryParam('utm_campaign');
s.eVar2 = s.Util.getQueryParam('utm_source');
s.eVar3 = s.Util.getQueryParam('utm_medium');
Pros: simpler to implement, supported out of the box. Cons: less flexible for concatenated parameters and complex URLs.
3. Configure expiration and attribution
By default, the Tracking Code dimension has a one‑week attribution window (the code persists for one week across visits). You can adjust this in your report suite settings. Ensure your expiration aligns with your campaign goals (e.g., extend to 30 days for longer campaigns). Remember that marketing channel processing rules can override tracking code attribution if they appear earlier in the rule order.
Step 4: Configure classification and reporting
Once data flows correctly, you must translate codes into business insights. Classification transforms cryptic tracking codes into readable categories like Source, Medium, Campaign, Content and Creative. Adobe provides two distinct workflows for automatic classifications. Choose the one that fits your environment and migration timeline.
4a. Using classification sets (new interface)
Classification sets combine all of the legacy classification interfaces into one streamlined experience. They let you define classification columns, rules, and subscriptions (report suite and dimension combinations) in one place. To configure tracking code classifications using classification sets:
- Open the Classification Sets manager. In Adobe Analytics, select Components from the top menu bar and then choose Classification sets. You’ll see a list of existing classification sets.
- Create or select a classification set. If you already have a classification set for your Tracking Code dimension, click its name to edit. Otherwise, click New to create one. Provide a meaningful name (e.g., “Tracking Code Governance”), a description, and choose the key dimension (usually Tracking Code or
campaign). Add the report suites you want to subscribe to this classification set. - Define classification columns. In the Schema or Classifications section, add columns for each category in your taxonomy, such as Source, Medium, Campaign, Content and Creative. Each column corresponds to a field that you’ll populate via rules or file uploads.
- Configure or migrate rules. Navigate to the Rules tab for the classification set. If this is your first time here, Adobe prompts you to choose how to start:
- Migrate existing rules: This option imports your current classification rule sets into the new interface. Select Migrate rules and confirm. After migration, all existing rules appear in the rule set interface where you can edit or extend them.
- Start fresh: Select Create new rules if you want to design new rules from scratch. Confirm the fresh start, then proceed to the rule set interface.
- Use legacy interface: Select Go to legacy interface if you’re not ready to migrate. This takes you to the Classification Rule Builder described in Step 4b.
- Build your rule set. In the Rule set interface, drag and drop functions from the Functions area into the builder. Common functions include:
- Split: Splits a tracking code into parts using a delimiter (for example,
:or-). You can assign each part to a classification column. - Regular expression: Matches patterns in your codes. For example, use the regex
^(.+):(.+):(.+)$to extract Source, Medium and Campaign from a colon‑delimited code. - Starts with or Contains: Checks if a code starts with or contains specific text, then assigns a classification.
For each rule, choose the classification column from the Set Classification drop‑down and specify the value to assign. You can add multiple operations to handle each part of the code.
- Split: Splits a tracking code into parts using a delimiter (for example,
- Test your rules and set a lookback. Use the Test options to paste sample tracking codes and verify that your rules output the expected classification values. Adjust the rules until the output matches your taxonomy. Specify a lookback window (from 1 month to 6 months) to retroactively apply rules to existing values, then select Perform lookback to run it.
- Activate the rule set. Once you’re satisfied, select Activate to enable the rule set. The rules will classify incoming tracking codes automatically. You can deactivate or modify the rule set at any time.
- Monitor and iterate. After activation, open Analysis Workspace to verify that your tracking codes populate the new classification columns. If you see “Unspecified” values, return to the Rules interface to refine your logic. You can also download classification data from the classification set, upload manual corrections, and consolidate multiple sets.
4b. Using the legacy Classification Rule Builder
If your organization hasn’t migrated to classification sets, you can still use the legacy Classification Rule Builder until August 31 2026. This workflow separates classification schema creation from rule creation. Follow these steps to classify tracking codes:
- Define your classification schema. In Admin > Report Suites > Edit Settings, choose Conversion Classifications (or Traffic Classifications if you’re using props). Select the
campaignvariable and add classification columns for Source, Medium, Campaign, Content, Creative and any additional categories. Save your changes. Variables must have at least one classification defined before they appear in the Rule Builder. - Create a rule set. From the Admin menu, select Classification Rule Builder. Click Add Rule Set. Name the rule set (e.g., “Tracking Code Rules”), assign the
campaignvariable, and specify overwrite settings. Click Create Rule Set. - Assign report suites and variables. Open your new rule set and click Select Report Suites and Variables. Choose the report suites and variables (e.g.,
campaign) to which the rule set should apply. A single variable in a report suite can belong to only one rule set. - Add classification rules. In the rule set, click Add Rule. Define conditions and actions:
- Use Matches Regular Expression, Begins With or Contains to identify parts of your tracking codes.
- Specify the classification column to populate (e.g., Source) and the value extracted from the code. For example, a rule might split
fb-cpc-spring_saleby hyphens and assign the first part to Source and the second part to Medium. - Repeat for each classification column.
- Test the rule set. Use the Test feature to paste sample tracking codes and verify how they are classified. Rules run in Draft mode during testing; they will not classify live data until activated.
- Activate the rule set. Once the rules classify your sample values correctly, click Activate to make them live. Rules process classification data daily and typically look back one month to classify new values.
- Monitor and maintain. Open Analysis Workspace to confirm that the classification columns populate as expected. If you see unclassified values, update or add rules, test, and re‑activate. You can also export unclassified values via FTP and manually classify them if the Rule Builder doesn’t pick them up due to volume limits.
When you don’t need classification
If you assign each UTM to its own eVar, you can skip classification entirely. For example, set utm_campaign to eVar1, utm_source to eVar2 and utm_medium to eVar3. Analysis Workspace lets you break down metrics by these eVars directly, though you’ll need to build calculated metrics and apply segments to replicate the convenience of a single Tracking Code dimension.
Step 5: Don’t forget the assets
We’ve talked a lot about links, but creative assets are often the largest investment in a campaign. If you can’t tie asset performance back to campaigns, you’re flying blind. Adobe’s AEM Assets provides Assets Insights, which fetches impressions and clicks from Analytics for images. However, this requires embedding page tracker code on every site where the image appears and only tracks images, not videos or other formats.
For marketers juggling multiple agencies and channels, manual asset tagging and embed codes are impractical. That’s why UTM Smart Manager built Assets Studio: when you create a link using an Adobe Analytics Campaign URL Builder form UTM Smart Manager, you can attach creative files (images, PDFs, etc). The system inherits the campaign parameters from the link and automatically tags the asset. This ensures that when the asset is served through your campaign (via your own CDN or a digital asset manager), both the link and the asset share the same governed metadata. Measuring Return on Assets (ROA) becomes as simple as joining your campaign performance data with asset metrics. No more guesswork.
Step 6: Common pitfalls and how to avoid them
Even with a well‑designed process, mistakes happen. Learn from others’ missteps:
- Ignoring the 255‑byte limit. Marketing teams sometimes concatenate five UTMs, plus random campaign names and dates, resulting in codes longer than 255 bytes. Adobe truncates these values, causing mis‑classification. Set guardrails in your builder to prevent long codes.
- Mixing cases and characters.
Spring_Sale≠spring-sale. Stick to lowercase and a single delimiter (hyphen or underscore). Enforce this via drop‑downs and validation. - Re‑using old tracking codes. Copy‑pasting links from previous campaigns leads to duplicate CIDs. Always generate new codes and store them in a central database to avoid attribution clashes.
- Using multiple query parameters without capturing them. Some email tools append their own parameters (e.g.,
mkt_tok). If your implementation only capturescid, you’ll miss these. Consider capturing all known parameters and storing them in separate eVars if necessary. - Neglecting mobile app links. If you track campaigns across web and apps, ensure your deep links include the same query parameters and that your mobile SDK collects them. Adobe’s Mobile SDK supports capturing query parameters on app opens.
Step 7: Embrace a narrative mindset: storytelling over data puking
Too many analysts spend their days generating dashboards and drowning leaders in metrics, then wonder why their budgets get slashed. The truth is that executives (and HiPPOs!) don’t care about charts; they care about decisions that make or save money. If you want bigger budgets, promotions and respect, you have to stop data puking and start storytelling. Your newly governed campaign parameters allow you to tell clear stories that answer the only questions that matter: Where did we make money? Where did we waste it? What should we do next?
- Which sources drive the most qualified visitors? Break down visits and conversions by Source (e.g., facebook vs. linkedin) and discuss why some channels perform better.
- Which creative assets resonate? With assets tagged to campaigns, compare ROA across images, videos and formats. Are static banners outperforming carousel ads? Use those insights to inform creative strategy.
- How does timing affect performance? Use the Campaign dimension’s persistence to analyze recency. Do users convert on the first visit or after multiple touches? Adjust attribution models accordingly.
- What should we stop doing? Identify campaigns or assets with low ROA or high bounce rates. Apply the 10/90 rule (90 % of analytics value comes from the people and process, not the tools) to challenge sacred cows and reallocate budget.
Wrap your insights in narrative. Start with a dramatic question tied to money or waste (e.g., “Why do 80 % of our clicks come from 20 % of campaigns?” or “How much profit did that $1 million spend actually generate?”). Present the data succinctly and end with clear recommendations (“Kill the bottom performers and double down on winners”). Sprinkle in rhetorical questions (“Are we investing in banners because they work, or because we’re afraid to challenge tradition?”) and analogies to keep readers engaged. The goal isn’t to wow your CMO with charts; it’s to free up budget for the things that work and build credibility that earns you more investment.
Conclusion: From soup to source of truth
Inheriting an Adobe Analytics implementation may feel like stumbling upon someone else’s recipe book. Half the ingredients are missing, measurements are off, and the soup tastes strange. But by focusing on campaign parameters as the source of truth, you can transform chaos into clarity.
- Audit your current setup. Identify which parameters are used, how
s.campaignis populated, and where classification breaks down. Examine creative assets and note gaps in tagging. - Build a tracking code generation process. Define your taxonomy, choose a parameter strategy (single
cidvs. multiple UTMs), and use a governed link builder that enforces naming standards and stores submissions. - Implement properly. Configure
getQueryParamorUtil.getQueryParamto capture parameters and sets.campaign, respect the 255‑byte limit, and decide on expiration rules. - Classify intelligently. Create rule sets or map UTMs to eVars. Prepare for Adobe’s shift from the legacy Rule Builder to new classification sets.
- Tag assets and measure ROA. Don’t stop at links; ensure creative assets inherit campaign metadata so you can evaluate asset performance and return on assets.
- Tell stories, not stats. Use your cleaned data to drive insights and recommendations, not to drown stakeholders in numbers.
By following these steps, you’ll move from a chaotic soup to a delicious stew where every ingredient is measured and managed. You’ll give your marketing teams self‑serve tools they enjoy using, while providing analysts with trustworthy data. And you’ll make the case to leadership that disciplined campaign governance isn’t overhead; it is the foundation for intelligent, data‑driven marketing.
Ultimately, this isn’t about bureaucracy; it’s about dollars. Clean campaign codes and well‑tagged assets unlock accurate ROI and ROA calculations. Accurate calculations let you prove which dollars work and which don’t. That proof earns you bigger budgets, greater trust from HiPPOs, and the freedom to innovate. So roll up your sleeves, fix the soup, and get ready to cook up insights that make money and delight your leaders.