Skip to main content
Terminus Hub is here, the next generation of campaign governance.See how it compares to Classic

Your convention, as structure the product enforces

Define your fields, picklists, and taxonomies once, with the rules attached to them. Publish a revision, and every team builds against it, refused as they type if a value does not conform.

Define a field once

Medium

  • Dropdown
  • Required
  • Options from the Mediums picklist

Source

  • Dropdown
  • Required
  • Options depend on the medium

Defined once.

Mediumdropdownrequired
Sourcedropdownconditional
AaCampaigntextlower_snake
#Campaign IDauto_number0001
Tagged URLcomputedauto
Short URLcomputedauto
Conditional Rules
whenmedium = cpcsource: google, bing, meta
whenmedium = emailsource: newsletter, lifecycle
Live Output
example.com?utm_source=google&utm_medium=cpc&utm_campaign=spring_sale_2026
ter.link/spring26

One model, as many forms as you need

Different work needs different forms. You decide where the line goes.

  • Every form: Medium, Source, Campaign
  • Paid media adds: Ad group, Keyword, Match type
  • Email adds: ESP, List name, Send date
  • Social adds: Platform, Content type, Post ID

The shared fields are the same definitions, so the values line up even though the forms do not.

You define
Governance Model7 fields · 2 picklists · 2 rules
SourceMedium(cond.)AaCampaignAaContent#Auto IDTagged URLShort URL
rule: when medium = cpc → source shows google, bing, meta
Paid Media
Medium, Source, Campaign + Ad group, Keyword, Match type
Email
Medium, Source, Campaign + ESP, List name, Send date
Social
Medium, Source, Campaign + Platform, Content type, Post ID
US Marketing
12 members
EMEA
8 members
Agency
5 members
Every output: governed, consistent, valid

See the whole model at once

A list of fields tells you nothing. What matters is what they do to each other.

Every line here is a dependency: a picklist filling a dropdown, five fields assembling a campaign name, a tagged URL becoming a short link becoming a QR code. Click any field and the model shows you everything it touches.

The Terminus taxonomy visualizer. Static picklists on the left feed dropdown fields; Goal, Region, Brand, Title, and Date feed a Campaign field assembled by concatenation; Campaign, Medium, and Source become utm_campaign, utm_medium, and utm_source on a tagged URL, which becomes the destination of a short URL, which a QR code encodes.
One model, three taxonomies. Shaded areas are the fields each form uses.

A typo stops being possible

Whatever your convention says, the field either corrects the value or refuses it. Nobody has to remember the rule, and nobody has to fix it afterwards.

  • Required, length, and which characters are allowed or banned
  • Case and spaces put right on the way in: lowercase it, spaces to an underscore
  • Values that have to be unique across every record
  • URLs check the protocol and that the address parses

Content

lowercase, underscores, no spaces

Hero Banner V2refused as you type
hero_banner_v2accepted

Nobody types into a dropdown

Every dropdown draws from a list you control, so a value gets picked, never invented. Author the options, or link two lists so the first narrows the second.

Static

googleGoogle Ads
metaMeta

Hierarchical

socialfacebookinstagramtiktok
displaydv360criteo

One team names the campaign, every team uses it

A global team builds campaign names out of fields of its own: region, initiative, fiscal year. The model assembles the name, so every campaign is spelled the same way by construction rather than by agreement.

Approved campaigns become the Campaign dropdown on every local form. A local team picks one, fills in what its own channel needs, and the tag comes out carrying both.

Global team

Campaign taxonomy

Regiondropdownemea
Initiativetextspring_sale
Fiscal yeardropdownfy26

computed

emea_spring_sale_fy26

Approved campaigns

Automated picklist

emea_spring_sale_fy26approved
global_launch_fy26approved
apac_q4_pushin review

Local team

Paid social form

Campaign

dropdown

picked, not typed

emea_spring_sale_fy26
Mediumdropdownpaid_social
Sourcedropdownfacebook

computed

?utm_campaign=emea_spring_sale_fy26&utm_medium=paid_social&utm_source=facebook

Every way in, the same rules

Quick and Form for a single record, the grid for hundreds, a CSV round trip, or the API. All of them land in the same validation engine inside Terminus, the marketing taxonomy governance platform.

Nothing becomes a record until every rule passes, so a script cannot write what the form would have refused. From there the record is what your warehouse is loaded with, what your own systems query, and what every campaign is launched against.

all rules passanything failsback with the errorsHowever it arrivesUI buildersQuick, Form, GridCSV importa spreadsheet round tripAPIscripts and integrationsYour governance modelpublished, revision 7Validation engineRecordsevery link, UTM and campaign IDData warehousepushed by connectorsAPIqueried by your systemsCampaignsthe links teams launch

Edit in private, publish in one move

Your draft is private. The team keeps tagging against the published model while you edit.

Publish when you are ready. Every workspace moves at once.

live

now

draft
v6
v7
v8

from 12 June

since 3 July

your team is building here

2 changes

only you see it

Build your first model in an afternoon

Start from a template or import the convention you already have. 21 days, no credit card.