One way to tag every link. One record of every link you ship.
Tag Docket is the campaign-link registry for agencies. Buyers mint tagged URLs and QR codes from the values the agency approved, on one screen with no wizard and no save dialog, and every link lands in a history the whole team can search.
It replaces the shared spreadsheet of UTM strings, and the GA4 report where
facebook,
Facebook and
fb are three
different sources.
The warning arrives before the link ships. The page check found a redirect that would have stripped the tagging off every click. It warns; it never blocks. The buyer decides.
Minted. The destination clears and the taxonomy stays, because the next link is usually the same campaign pointed somewhere else.
What it does
- Mints tagged links and QR codes from the values your agency approved, lowercased every time
- Filters out combinations that should never exist, like email traffic from facebook
- Keeps every link in one searchable history: who made it, when, and where it points now
- Gives printed pieces a short code you can point somewhere new after they ship
- Hands a client their whole link history whenever they ask. Export is always free
What it doesn’t
- Run your ads or log in to your ad accounts. You paste the link where it goes
- Grant itself access to a client’s GA4. Google requires a person to do that
- Change a link after it ships. A minted link is frozen, byte for byte
- Charge per link or per seat. The meter is clients
Monday
Forty links before lunch. None of them typed by hand.
A buyer is building a client’s spring push. She picks Facebook ads and the platform and channel fill themselves; season, offer, service and market come from dropdowns of values the agency approved. The link composes as she goes. After each mint the destination clears and everything else stays put.
When she sets the channel to email, the agency’s pairing rule stops facebook being offered as a source, and the field says which choice narrowed it. The thirty-nine links after that go in as one pasted list, where one bad URL does not hold up the other thirty-eight and a duplicate is caught before it ships.
Which values go together
When Channel is Email, Platform is one of MailchimpHubSpot
Not offered with Email: Facebook, Google, TikTok, Nextdoor.
Wednesday
One of them goes on a yard sign. It gets a short code first.
The same campaign needs a postcard and a sign on the lawn. A printed piece gets a short code, and its QR is drawn from that instead of the full tagged URL. That is not vanity, it is geometry: printed 30 cm wide, the full URL needs a 61×61 grid of 4.92 mm squares. The short link needs 33×33, at 9.09 mm. Bigger squares scan from further down the drive.
Before the print run, Tag Docket reports the grid, the printed width and the module size, and warns when they fall below what print holds. A yard sign gets the highest error correction because it will spend a season in the rain. A link still carrying an unfilled ad macro is refused a QR outright, since nothing fills it in when someone scans a sign.
- Grid
- 33×33 modules
- Recovery
- H (~30%)
- Scan from
- 300 cm
- Printed at
- 30 cm wide
- Module
- 9.09 mm
app.tagdocket.com/r/k7m2qx
Full tagged URL
61×61 · 4.92 mm modules
Short link
33×33 · 9.09 mm modules
Both printed 30 cm wide, for a 3 m scan.
Friday
The landing page moves. The postcards follow.
The client’s web team renames the page, and the mailer is already in ten thousand letterboxes. Open the link in history, point its code somewhere new, and every printed piece follows. The tagging is not touched, so GA4 goes on seeing one campaign instead of two halves of one.
Codes redirect with a 302, never a 301, so the change reaches phones that scanned last week. A code you are done with is retired, never deleted, and anyone who scans an old print is told the piece is out of service and their phone is fine.
- Code
- app.tagdocket.com/r/k7m2qx
- Was
- https://cedarroofing.example/spring-inspection
- Now
- https://cedarroofing.example/gutters
- Tagging
- utm_source=directmail &utm_medium=print &utm_campaign=spring26_freeinspect_gutters &utm_content=cedarrapids Unchanged since minted
The tagging never changes, so GA4 keeps seeing one campaign. Anything already printed follows.
- retargeted priya@fieldworkmedia.example · today
- minted priya@fieldworkmedia.example · 3 days ago
And all week
The client’s GA4 sees one facebook.
GA4 treats Facebook and
facebook as two different sources. A real audit
of a live property found 13,494 sessions split across
social and
Social alone.
So Tag Docket lowercases every value, unconditionally, and there is no setting to turn it off. Changing a value later tells you how many links carried the old one before the change lands, and never rewrites a link that already shipped.
GA4 · SESSION SOURCE
Tagged by hand
- fb
Three rows. One platform.
Tagged through the registry
One row, Monday to Friday.
The honest comparison
What the spreadsheet does now, and what changes.
Most agencies do not arrive from another tool. They arrive holding a spreadsheet: a tab of UTM strings, a column somebody colour-coded, and a builder page bookmarked by whoever set it up. That is the thing worth comparing against, so here it is, row by row.
The spreadsheet
With Tag Docket
The spreadsheet
Someone types "Facebook", someone else types "facebook", and GA4 reports them as two different sources.
With Tag Docket
Values come from an approved list, and everything is lowercased with no setting to turn it off. Impossible combinations, like email traffic from facebook, are filtered out of the builder.
The spreadsheet
A campaign gets renamed in the sheet, and nobody can say which version of the string actually went live.
With Tag Docket
A mint is frozen. The parameters are stored exactly as composed and never recomputed, so renaming a campaign changes how it is displayed and never a string already published.
The spreadsheet
A mailer is in ten thousand letterboxes and the landing page it points at is about to move.
With Tag Docket
A short code for print can be retargeted: the destination moves, the tagging stays, and GA4 keeps seeing the same campaign. A retired code shows a page that says the phone is fine.
The spreadsheet
A copied Meta URL half-works on Snapchat, a macro gets URL-encoded, and nothing looks broken until an ad serves.
With Tag Docket
Platform macros pass through byte for byte, unresolved tokens are checked against the platform’s pack, and every mint records the pack version it was built against.
The spreadsheet
The destination redirects and drops the query string, or already carries its own UTMs, and nobody checks.
With Tag Docket
The landing page is fetched and you are warned — never blocked — when it does not load, redirects, has no analytics tag, or already carries UTM parameters.
The spreadsheet
Finding every link for one client means filtering a sheet with forty tabs and one person who understands it.
With Tag Docket
One always-visible filter row across person, campaign and every dimension, with the filter state in the URL — sharing a view is pasting the address bar.
The spreadsheet
A client moves agencies and their link history stays behind in somebody else’s spreadsheet.
With Tag Docket
The client owns the records about them. Export is always free, and a transfer is approved by the client — the outgoing agency cannot block it, and every frozen mint arrives byte for byte.
Every row on the right is something the product does today. Nothing here is on a roadmap.
“What did we ship for them last spring?” One search.
A spreadsheet can hold the links. It cannot tell you what a colleague shipped last Tuesday, which code is on the postcard about to reprint, or whether the gutters campaign was ever tagged at all. History can: one filter row, always visible, across the campaign string, the destination, the person and every dimension.
The filters live in the address bar, so sharing a view with an account manager is pasting a link. People who have left the agency still appear against the work they did. And the links you import from the old spreadsheet arrive as they ran, with the ones that never matched anything flagged rather than refused.
More on history and import- Morespring26_freeinspect_gutters Spring storm /r/k7m2qx
https://cedarroofing.example/gutters?utm_source=directmail&utm_medium=print&utm_campaign=spring26_freeinspect_gutters&utm_content=cedarrapidspriya@fieldworkmedia.example · today - Morespring26_freeinspect_gutters Spring storm
https://cedarroofing.example/gutters?utm_source=facebook&utm_medium=paidsocial&utm_campaign=spring26_freeinspect_gutters&utm_content=cedarrapidspriya@fieldworkmedia.example · today - MoreSpring_Gutters_FINAL
https://cedarroofing.example/gutters?utm_source=Facebook&utm_medium=Social&utm_campaign=Spring_Gutters_FINALjordan@fieldworkmedia.example · imported Imported as it ran · does not match the taxonomy - Morewinter26_seasonaldiscount_gutters Winter /r/p4hvw9 · retired
https://cedarroofing.example/gutters?utm_source=yardsign&utm_medium=offline&utm_campaign=winter26_seasonaldiscount_gutters&utm_content=cedarrapidssam@fieldworkmedia.example · 12 Jan 2026
Who ends up using it
The media buyer shipping forty links before lunch
If minting is slower than typing into the spreadsheet, the spreadsheet wins, whoever signed for the tool. So it is one screen, a preview that updates as you type, warnings beside the field, and a keyboard path from paste to minted.
Starts with the builder and a pasted list.
The agency owner who has to answer for the data
You want every client’s links tagged the same way, a record of who shipped what, and a clean hand-over when a client leaves. You also want the tool to look like yours: paste your website in settings and the app takes on your colour and logo.
Starts by importing the spreadsheet.
Priced by client. Never by link or seat.
Charging per record makes people avoid recording, so the meter is the number of clients. Seats are uncapped and export is always free.
A freelancer, or a small shop with a handful of accounts.
A paid-media team running a full roster for one office.
Several buyers, several teams, one taxonomy they all mint against.
A large book of business across offices or brands.
More than sixty clients, or terms agreed with us directly.
How do we get started?
Do we have to retag everything we already have?
Can it connect to a client’s GA4 for us?
What happens if a client moves to another agency?
Does it work with platform macros like {campaignid}?
Can we use our own short domain?
Bring the spreadsheet. We’ll bring the registry.
Tell us about your agency and the clients you tag for. We set up your organisation, and your team signs in with an emailed link.