Skip to main content
Terminus
Contents
Field GuidesAgency Playbook · ~7 min read

Agency Playbook

Onboarding a client, one master list or a copy per client, making links across clients, reading clients side by side, and the hybrid splits between agency and client.

On this page

An agency runs the same practice many times over. Every client gets the letter from the Introduction: a channel, a source, an initiative, a product, a launch month. What changes is whose values fill it, which tools open it, and who writes each link.

Onboarding a client

Two things get built for a new client: an inventory of what already exists, and the client’s list, started from the agency’s base.

The inventory

What it holds, gathered before a single new link:

  1. The questions the client’s reports have to answer. The dimensions come from those, not from the parameters (Chapter 1).
  2. Every source, medium and campaign value already in the client’s analytics, pulled unfiltered (Chapter 8), with each old value mapped to its new one (When You Inherit a Mess).
  3. Every place a link gets written for them: the email platform’s tagging settings, the ad platforms’ campaign and ad names (Chapter 5, Chapter 6).
  4. Every tool that reads the values: analytics, the CRM and its lead forms, any warehouse and its spend join (Chapter 7).
  5. The links that live long: printed QR codes, saved email templates, bios (Chapter 10).
  6. Who on the client’s side makes links today, and who approves a new value.

The base template

The base is the part of the list every client shares. Each client’s list starts as a copy of it, or as a workspace narrowed from it (Chapter 9, Chapter 10).

PartIn the baseEach client fills
Mediumsthe closed list: cpc, paid_social, email and the restwhich ones it runs
Formatlowercase; _ inside a value, - between segments(none)
Campaign[initiative]-[product]-[yyyy_mm]its initiatives and products
Sourcesthe shape, as in partner-acmeits own values
Empty segmentna, never a closed gap(none)

Two invented clients on the same base, a B2B software company and a shoe retailer:

Client and slotValue
Software sourceslinkedin, newsletter, partner-acme
Software campaignwebinar-api-2025_04
Retailer sourcesinstagram, tiktok, affiliate-jane_smith
Retailer campaignsummer_sale-sandals-2025_06

A campaign with no product keeps the place with na in both: brand_awareness-na-2025_05. The mediums and the pattern come from the base; the sources and products are each client’s own.

A region is where the base gets a choice. If any client sells in more than one market, the pattern can carry a region for every client, as Chapter 10’s region-first version does (europe-summer_sale-sandals-2025_06), with single-market clients carrying us or na. Every name then splits the same way, at the cost of a segment some clients never use. Or only those clients get the region, and each client’s names are parsed by their own segment count (Chapter 4).

What reads the values, client by client

The letter stays the same from client to client. What opens it doesn’t. Vendor behavior, each row from the vendor’s own page:

Client’s toolWhat it does with UTM valuesSource
GA4Builds its default channels from rules on source and medium: Paid Social is a social source with a paid medium.Google, checked 2026-10-06
GA4 with Google Ads auto-taggingOn a click with a gclid, source, medium and campaign come from auto-tagging; your utm_content and utm_term go to Manual Ad Content and Manual Term.Google, checked 2026-10-06
Adobe AnalyticsRecords a tracking code only where the implementation sets its campaign variable, typically from a parameter such as cid. Classifications group it; rule-based classifications are to be deprecated after February 28, 2027.Adobe, Adobe, checked 2026-10-06
MatomoDetects utm_ parameters. By default it keeps two campaign dimensions, name and keyword; its Marketing Campaigns Reporting plugin keeps six.Matomo, checked 2026-10-06
MixpanelThe JavaScript SDK adds the page’s UTM values to its events, and stores the first ones seen for an identified user as initial_utm_ properties.Mixpanel, checked 2026-10-06
AmplitudeThe Browser SDK tracks attribution by default and sets initial_utm_ user properties the first time it sees a user’s values.Amplitude, checked 2026-10-06
HubSpotIts own tracking sets Original and Latest Traffic Source in its own categories, with utm_campaign in a drill-down. Your exact values on a lead take custom properties and hidden form fields (Chapter 7).HubSpot, HubSpot, checked 2026-10-06

More tools, stage by stage, are in The Tool Landscape.

One master list, or a copy per client

Chapter 10 maps this choice for teams. With clients in the rows, it reads:

Set-upGivesCosts
One shared list, no boundariesevery value in one placeevery client’s values on every client’s menu
One master list, a workspace per clienta change made once; the same mediums everywherea client’s own rule has to fit inside the master
A copy per clienteach client its own rules, end to endevery change made once per copy; nothing keeps the copies matching

The first row is Chapter 10’s TechCrunch mix-up, a composite: a fintech’s partner-techcrunch picked for a hospital’s links, unnoticed for six weeks. The fix in that story was a workspace per client, each narrowed from one agency template.

Either way, each list needs one owner who makes every change and keeps its changelog (Chapter 10). If the client has one, the agency sits in the link builders’ row of Chapter 10’s roles table, building links from values the client defines. If not, the agency holds the pen for that client’s list as well as its own base.

An account manager who works for several clients in a morning switches lists each time. Where each client’s list is a workspace, the switch is a menu change: the previous client’s values aren’t on the new menu. Where it’s one shared list, nothing stops a value crossing over except someone noticing.

The campaign is the value every channel types. Where several teams build links for one client’s campaign, Chapter 9’s two-stage workflow defines it once, from fields, and every channel team picks it from a dropdown of defined campaigns (Chapter 9); where one team makes all of a campaign’s links, one stage with closed fields holds it. For an agency, the value defined once is also the client’s ad campaign name, the join key to that client’s spend (Chapter 6).

Some writers sit outside any builder. A client’s email platform may be set to write its own tags, and with Google Ads auto-tagging on, GA4 takes source, medium and campaign from Google Ads instead of your UTMs (Chapter 5). Those settings live in each client’s accounts, so they go in that client’s inventory, not the base.

Reading clients side by side

No link names the client. Each client’s links land on that client’s site and in its own analytics, so the client is known from where the data came from. Where several clients’ data meets in one place, each client’s rows get two columns as they land: the client, and its type.

From there, a portfolio view is a grouping: each client’s sessions by medium, then summed by client type. Example numbers, one month, share of sessions:

MediumSoftware clients (3)Retailers (4)
cpc34%22%
paid_social18%38%
email21%24%
social9%7%
referral15%3%
offline3%6%

Every row holds because every workspace takes its mediums from the same base list. One client typing paid-social adds a row the others don’t have, and its sessions drop out of the paid_social row. Until it’s mapped (When You Inherit a Mess), that client can’t be summed with the rest.

Mediums compare across clients because they share a list. Campaigns don’t: each client’s initiatives and products are its own. If a portfolio question needs initiatives side by side (every client’s webinars, say), the initiative values have to come from a shared list too, which is the first hybrid split below.

For each client’s own review, Chapter 8’s two numbers, kept from one audit to the next. Example numbers:

ClientUnapproved valuesNames on the pattern
Software client 1042 of 42
Retailer 2331 of 36
Retailer 4118 of 19

Chapter 8 reads them as a trend across audits.

The hybrid splits

Between “the agency’s base for everything” and “the client’s own list for everything” sit two splits. Each can be set per client.

By slot

Whose list each slot draws from:

SlotAgency baseClient’s list
Mediumthe closed listwhich ones it runs
Sourcethe shapethe values
Initiativea shared list, if clients are compared by itthe client’s own, if not
Product, region(none)the values

The more slots come from the base, the more of the portfolio view holds, and the more often a client’s own vocabulary has to fit someone else’s list.

Who makes which links:

Who makes themGivesCosts
The agency, all of them, finished in the briefthe client’s team never meets the taxonomyevery link waits on the agency
The client, in its own workspacelinks without waitinglinks for campaigns the agency may not hear about, until an audit
The agency for paid, the client for ownedeach side makes the links it runsone campaign, two makers, unless its value is defined once

Finished links travel as tagged URLs in the campaign brief, or as templates with the client’s values already filled in. The less an outside team has to interpret, the fewer ways a value can drift between the brief and the link.