Skip to content
YAS.SH
URL & Links🔒 Browser (client-side)API available📴 Works offlinebeginner

UTM Builder

Builds campaign URLs with UTM parameters for marketing tracking.

Data stays in your browser
Ready to runInstant execution
All tools →
https://example.com?utm_source=newsletter&utm_medium=email&utm_campaign=launch

What does this tool do?

Builds campaign URLs with UTM parameters for marketing tracking.

Why would I use it?

  • You want consistent, trackable campaign links for Google Analytics.
  • You are launching a newsletter, social or ad campaign.
  • You want to stop mis-tagging links by hand.

Real-life example

Input
base: https://example.com, source: newsletter, medium: email, campaign: launch
Output
https://example.com/?utm_source=newsletter&utm_medium=email&utm_campaign=launch

Each UTM parameter is encoded and appended.

Input → Process → Output → Next

Input
Enter the base URL and UTM fields.
Process
The browser builds and percent-encodes the query string.
Output
A ready-to-share campaign URL.
Next action
Use it consistently; create a short link and QR for sharing.

Common mistakes

  • Inconsistent capitalization (utm_source=Google vs google).
  • Renaming campaigns mid-flight (splits analytics).
  • Using spaces in values (they get encoded, breaking exact-match filters).
  • Forgetting utm_source entirely.

What the result means

Each UTM parameter is attributed to that click in your analytics tool.

Privacy & security

Your input is processed entirely in your browser and never sent to a YAS server.

API

Endpoint
POST https://yas.sh/api/v1/tools/utm-builder
Request Header
Content-Type: application/json
cURL
curl -X POST "https://yas.sh/api/v1/tools/utm-builder" \
  -H "Content-Type: application/json" \
  -d '{"input":"https://yas.sh/pricing","params":{"utm_source":"newsletter","utm_medium":"email","utm_campaign":"launch"}}'
JavaScript
const res = await fetch("https://yas.sh/api/v1/tools/utm-builder", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
  "input": "https://yas.sh/pricing",
  "params": {
    "utm_source": "newsletter",
    "utm_medium": "email",
    "utm_campaign": "launch"
  }
}),
});
const data = await res.json();
Python
import requests

r = requests.post("https://yas.sh/api/v1/tools/utm-builder", json={"input":"https://yas.sh/pricing","params":{"utm_source":"newsletter","utm_medium":"email","utm_campaign":"launch"}})
data = r.json()
FieldTypeRequiredDescription
inputstringYesBase http/https URL
params.utm_sourcestringNo≤ 200 chars
params.utm_mediumstringNo≤ 200 chars
params.utm_campaignstringNo≤ 200 chars
params.utm_termstringNo≤ 200 chars
params.utm_contentstringNo≤ 200 chars
Success response
{ "slug": "utm-builder", "result": "https://yas.sh/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=launch" }

Append UTM parameters to a base URL.

Error responses
  • 400 VALIDATION_ERROR — invalid input or unsupported option.
  • 413 PAYLOAD_TOO_LARGE — input exceeds the 64 KB limit.
  • 429 RATE_LIMIT_EXCEEDED — rate limit exceeded (60 req/min).
Limits
  • Maximum input: 64 KB per request.
  • Rate limit: 60 requests/min per IP address.
  • Authenticated accounts benefit from higher tier quotas.

UTM Builder: technical reference, use cases and FAQ

How UTM Builder works

UTM parameters are five conventional query keys — utm_source, utm_medium, utm_campaign, utm_term and utm_content — appended to a destination URL. They are not part of any web standard; they are a convention introduced by Urchin (which Google acquired in 2005) that analytics platforms agreed to read. The browser sends them like any other query parameter, and the analytics script on the landing page records them against the session.

Only source and medium are load-bearing. Analytics tools use them to classify the channel: utm_medium=cpc lands in Paid Search, utm_medium=email in Email. A misspelled medium creates a new channel rather than an error, which is how reports end up with 'Email', 'email' and 'e-mail' as three separate rows — the values are case-sensitive on ingest.

The parameters travel through redirects only if each hop preserves the query string, and they persist into the analytics session but not into subsequent direct visits. Fragments (#) are not sent to the server, so UTM parameters placed after a '#' are invisible to server-side analytics and to some client libraries.

When to use it: real-world scenarios

Measuring which newsletter section drives signups

Keep source and medium fixed (newsletter / email), vary utm_content per link position — hero, mid-body, footer. The campaign report then shows placement performance rather than just 'the email worked'.

Separating paid from organic social

Same source (linkedin), different medium (cpc versus social). Without the distinction, paid spend and organic reach are aggregated and the cost per acquisition is meaningless.

Attributing offline and QR-code traffic

A conference poster gets its own campaign and a short link with UTM parameters baked in. Generate the QR code from the tagged URL so scans are attributable; the QR Generator accepts the finished link.

Auditing links a partner published

Paste a partner's link into the URL Parser to read back the tags they actually used. Mismatched or missing tags explain traffic that shows as Direct instead of Referral.

Pro tips

  • Fix a lowercase, hyphenated naming convention and write it down. Casing inconsistency is the single largest source of dirty campaign data.
  • Never put UTM parameters on internal links. Doing so restarts the session attribution and overwrites the original acquisition source with your own site.
  • Keep utm_term for paid keyword data and utm_content for creative or placement variants. Overloading campaign with all four dimensions makes the report unfilterable.
  • Strip UTM parameters from canonical tags and from anything you paste into documentation; the URL Tracking Cleaner removes them and prevents duplicate-URL reporting in Search Console.

Limitations and edge cases

What this tool deliberately does not do, and where it will disagree with other implementations.

  • UTM data is client-side and trivially editable. Anyone can change the tags before visiting, so treat the numbers as directional rather than authoritative.
  • Ad blockers and tracking-prevention features may strip parameters or block the analytics script, undercounting tagged traffic.
  • Tagged URLs are ugly and are frequently shared verbatim, which pollutes attribution when a user copies the link from the address bar. Use short links for anything a human will see.
  • The parameters describe the click, not the conversion path. Multi-touch attribution requires session stitching that UTM tags alone cannot provide.

Frequently asked questions

Which UTM parameters are required?
utm_source and utm_medium in practice — analytics channel grouping depends on them. utm_campaign is strongly recommended, while utm_term and utm_content are optional dimensions for paid keywords and creative variants.
Are UTM parameters case-sensitive?
Yes on ingest. 'Email' and 'email' become two separate rows in most platforms, so adopt lowercase everywhere and enforce it in your link-building process.
Do UTM parameters hurt SEO?
Only if crawlers index the tagged variants as separate URLs. Set a self-referencing canonical tag on the clean URL and the duplicate-content risk disappears; never use UTM tags on internal navigation.
Can I put UTM parameters on a URL that already has a query string?
Yes — append them with '&' rather than '?'. The builder detects an existing query string and joins the parameters correctly.
Ask YAS AI
🍪 Cookies & privacy. Essential cookies keep you signed in and remember language and theme. Google AdSense and reCAPTCHA are Google technologies: AdSense runs only after Accept All; reCAPTCHA loads on sign-in and contact forms. See how Google uses data: https://policies.google.com/technologies/partner-sites cookie policy · privacy policy.
Settings