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.
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.
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.

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 typehero_banner_v2acceptedNobody 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 AdsmetaMetaHierarchical
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
emeaspring_salefy26computed
emea_spring_sale_fy26Approved campaigns
Automated picklist
emea_spring_sale_fy26approvedglobal_launch_fy26approvedapac_q4_pushin reviewLocal team
Paid social form
Campaign
dropdownpicked, not typed
emea_spring_sale_fy26paid_socialfacebookcomputed
?utm_campaign=emea_spring_sale_fy26&utm_medium=paid_social&utm_source=facebookEvery 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.
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.
now
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.