Tag Docket

What it does

Seven jobs, one registry.

Tag Docket is the system of record for every tagged URL and QR code an agency produces for its clients. Building a link is how a record gets made; everything else keeps that record honest. Here is each part in detail.

01

Build

One screen, from paste to minted.

No modal, no wizard, no save dialog and no confirmation step. The preview updates as you type, warnings sit beside the field that caused them, and there is a keyboard path from paste to minted. Composition happens on the server, so the preview cannot disagree with what gets stored.

  • Picking a channel fills the fields it knows, and adds that platform’s placement advice
  • After a mint the destination clears and the taxonomy stays, because the next link is usually the same campaign pointed somewhere else
  • Paste a list of destinations: each row stands alone, so one bad URL does not reject the other thirty-nine
  • Duplicates are caught within the pasted batch and against everything already in history
  • The page check loads the destination and warns about a page that does not load, a redirect that drops the query string, a missing analytics tag, or UTM parameters already on the URL. It warns; it never blocks
  • Length checks: 2,048 characters is a real platform limit and is treated as one. 512 is a judgement about email wrapping and QR density, and is described as one
  • Campaigns nest exactly two levels, and are optional at mint time. Filing a link later is cheap
  • Platform variables: an admin chooses which of a platform’s own macros fill utm_content, utm_term and utm_id — {{ad.id}} for Meta, {creative} for Google — and that platform’s links carry them automatically. IDs are recommended over names, each with the reason. Off until turned on
  • Source, medium and campaign never take a platform variable, your naming template wins over one, and links marked for print never get them
  • Choosing the platform in the dropdown applies its pack, the same as a channel shortcut. For platforms with a separate parameters field — Meta’s URL parameters, Google’s and Microsoft’s final URL suffix — the builder copies just the parameters
02

Govern

Approved values only, and a mint that never changes.

The agency edits the values; buyers pick from them. Everything is lowercased, unconditionally, with no setting to turn it off, because GA4 treats Facebook and facebook as different sources — a real audit found 13,494 sessions split across social and Social alone.

  • Starter values for sixteen kinds of business — marketing, e-commerce, retail, B2B, manufacturing, healthcare, real estate and more — so a new client starts with offers, products and platforms instead of an empty list
  • Or create your own: give a client’s website and Tag Docket reads it for the products and services it links to, the offers it names and the platforms it already uses. Every value is reviewed before it is added
  • Pairing rules say which values go together: “email comes from Mailchimp or HubSpot”. The builder filters out the rest, and a narrowed field says which selection narrowed it
  • Links arriving by the API, a bulk paste or an import are warned about a broken rule, never refused
  • A value may never contain the agency’s separator, enforced when it is saved, so every composed string can be parsed back later
  • Changing a value reports, inline, how many links carried the old one before the change lands. Values are archived, never deleted
  • A mint is frozen: the parameters as composed are stored and never recomputed. Renaming a campaign changes what the app displays, never a string already published
  • Seven platform packs as data. Macros like {campaignid}, {{campaign.name}} and __CAMPAIGN_NAME__ pass through byte for byte, and unresolved tokens are checked against the pack
  • Every mint records its pack version, so a platform change becomes a query rather than an audit
The seven packs, and how each one is watched
03

Print

Whether the yard sign scans is decided before the print run.

The QR picture is the easy half. The numbers are the point: the grid size, the minimum printed width for a scan distance, and the module size in millimetres, with a warning when they fall below what print holds. Printed pieces get a short code, and a short code can be pointed somewhere new after ten thousand of them are in letterboxes.

  • Measured at 30 cm wide for a 3 m scan: the full tagged URL needs a 61×61 grid of 4.92 mm modules, a short link 33×33 at 9.09 mm
  • Error correction set by surface, so nobody has to know what Q means: H for a yard sign, L for a screen
  • The quiet zone is preserved. A designer who crops to the black edge ships a code that fails in the field
  • Every QR is drawn from the frozen mint, and a link with an unresolved ad macro is refused one
  • Short codes on app.tagdocket.com/r/, from an alphabet with no 0/O, 1/I/L or U, resolving to the fully tagged URL
  • Retargeting moves the destination and leaves the tagging alone. Redirects are 302, never 301, so people who already scanned follow the change
  • A code is disabled, never deleted. A retired code shows a friendly page that says the phone is fine
  • No branded or custom short domains. That is not built, so it is not for sale
  • Placements: log each postcard drop, sign batch, billboard or radio flight with its dates, quantity, cost, area, vendor and the short code printed on it
  • Scans are read live from the code, never copied, and each placement shows cost per scan and cost per lead
  • Pieces nobody scans, like radio and TV, carry a promo code, a tracking number and hand-counted leads instead
04

History

What a colleague shipped last Tuesday, in one search.

One filter row, always visible: search across the campaign string and the destination, then narrow by person, campaign and every dimension. It is the question asked on almost every visit, so the controls that answer it are never behind a disclosure.

  • Filter state lives in the URL. Sharing a view is pasting the address bar
  • Row actions: retarget, add a short code, retire a code, and read a link’s audit trail
  • People who have left the agency still appear against the links they made
  • Export is always available and always free, with values written out in full rather than as ids
05

Import and cold start

Every customer arrives holding a spreadsheet. Bring it.

An imported link is stored as it ran, not re-composed, because the string in the spreadsheet is what the ad platform served and what GA4 recorded. Nothing is written until you have seen what would be. A row the taxonomy cannot read is still imported, flagged, because it is the mess you bought this to find.

  • Columns are guessed from the header, and a file holding only the finished tagged URLs works
  • Re-importing your own export does not double the history
  • Composed strings parse back into dimension values, so a new client’s GA4 history can be reconstructed into the model
  • Backfill proposes and never writes, and proposes nothing when a string is ambiguous
  • Connecting a client’s GA4 is four steps, one address to copy and one button that verifies with a real query. Google requires a person to grant the access, so that step stays manual
  • Each agency gets its own service account rather than a shared one, and a broken connection surfaces on its own
06

Own and transfer

The client owns their link history. The agency owns its taxonomy.

Records about a client belong to the client; the taxonomy and templates an agency authored belong to the agency. When a client moves, the receiving agency requests the transfer and the agency holding the client approves it. If that agency declines or does not answer within 14 days, Tag Docket approves it at the client’s request, so the outgoing agency cannot hold it back.

  • Export is always available and always free
  • Frozen mints survive a transfer byte for byte, and control of the short codes moves exclusively to the new agency
  • The outgoing agency keeps a read-only archive that stops counting against its plan
  • Accepting a transferred client always completes, even over a plan limit. The upgrade prompt comes after
  • Retiring a client archives rather than deletes, and their codes keep resolving
07

Team and white label

Sign-in links, not passwords. Your colours, not ours.

Members sign in with an emailed link; there are no passwords. Paste the agency’s website in settings and the app takes on its colour and logo, previewed before anything is saved.

  • Roles, plus per-client access that narrows a member or an admin to specific clients
  • A role can only be granted at or below your own, and the last owner cannot be removed
  • A member list never reveals which other agencies someone belongs to, which matters for freelancers
  • Removing someone keeps their links and the attribution on them
  • Brand colours are adjusted to meet WCAG AA contrast, and the agency is told when they were
  • Status colours are never rebranded, so a warning still looks like a warning
  • Seats are uncapped on every plan

The honest part

What we deliberately don’t do

We never change a link after it ships. GA4 has already recorded the old value and the QR code is already on a yard sign. Renaming things changes what the app displays; retargeting moves a destination. Neither touches a published string.

We don’t grant ourselves GA4 access. Google requires a person to do that, and it always will. We make it four steps and one button, and tell you when a connection breaks.

We don’t publish platform changes on our own. Pack sources are monitored for changes, but detection is automated and publication is not: a change opens a review with the diff. Some platforms cannot be watched automatically at all, and the platforms page says which.

We don’t charge per link or per seat. Charging per record makes people avoid recording, which defeats the registry. The meter is clients.

We don’t use passwords. Sign-in is an emailed link, so there is no password to reuse, share or reset.

Questions

Questions about how it works

Anything else, ask us directly.

Does it work with Google Ads auto-tagging?
Yes. Keep auto-tagging on. With it on, GA4 takes source, medium and campaign from Google Ads itself, so the UTM values that reach your reports are utm_content and utm_term — the builder says so when you pick Google Ads. Microsoft Advertising is the opposite: GA4 does not read its click ID, so the UTMs are the reporting path.
Does Tag Docket ever change a link that is already live?
Never. A minted link is stored exactly as composed and never recomputed. Renaming a value or a campaign changes what the app displays, not a published string, because GA4 has already recorded it and the QR code may already be printed.
What if a printed QR code needs to point somewhere new?
Printed pieces get a short code, and a short code can be repointed after the print run. Retargeting moves the destination and leaves the tagging alone, so GA4 keeps seeing the same campaign.
How do we set up a new client’s values quickly?
Pick the client’s type of business — sixteen are built in, from e-commerce and B2B to manufacturing and healthcare — or give their website and Tag Docket reads it for the products, services and offers it names and the platforms it already uses. You review the list before anything is added.
Can someone be limited to one client?
Yes. Members and admins can be limited to particular clients, and other clients do not appear for them at all. A member can be view-only or an editor; a limited admin runs their own clients but not agency-wide settings such as billing or the shared taxonomy.

See it with your own taxonomy.

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.