Without SourceLoop
UntaggedKayden Floyd
- SourceUnknown
- MediumUnknown
- CampaignUnknown
- Landing pageUnknown
Free tool
Paste a list of URLs and generate tagged UTM links in bulk. Standard mode applies one set of UTMs to every URL. CSV mode lets you vary utm_content per row. No signup, runs in your browser.
Tagged URLs
Paste URLs above to generate tagged links.
How it works
Paste, set UTMs, copy the tagged output. Standard mode for identical tagging, CSV mode for per-row variants.
example.com/pricing example.com/demo example.com/blog/post-1 example.com/contact
One per line, or a CSV with URL and utm_content. Existing query parameters stay intact.
Source, medium, campaign apply to every URL. utm_content can be shared (standard mode) or per-row (CSV mode).
example.com/pricing?utm_source=... example.com/demo?utm_source=... example.com/blog/...?utm_source=...
Copy all tagged URLs to clipboard, or download a CSV with original and tagged URL per row for handoff.
What it handles
Every behavior here is the default. No toggles, no settings buried in a menu.
Standard mode
Paste one URL per line, set utm_source/medium/campaign once, get every URL tagged identically. Perfect for shipping the same ad campaign across dozens of landing pages.
CSV mode
Paste comma-separated rows: URL, utm_content. Each URL gets its own utm_content while sharing source, medium, and campaign. Useful for creative variants on the same campaign.
Preserved query params
Existing query strings on your URLs (like ?ref=partner) survive the tagging. UTMs append cleanly without nuking your other parameters.
Lowercase auto-fix
All UTM values get lowercased automatically. GA4 treats utm_source=Google and utm_source=google as different sources, so this saves you from the most common UTM bug.
Encoded space replacement
Spaces in values become underscores, not %20. 'spring sale' becomes 'spring_sale' so your reports stay clean and the URL doesn't look ugly.
Runs in your browser
Every URL is processed locally in JavaScript. Nothing is sent to a server, logged, or stored. Paste internal staging URLs or sensitive partner links without leaving any trace.
Best practices
Stick to a fixed naming convention
Pin a sheet to your team Slack with the agreed values for utm_medium and the utm_campaign format. Bulk generation amplifies inconsistency at scale.
Test one URL before generating fifty
Run a single URL through the validator first. Confirm GA4 buckets it correctly. Then bulk-generate the rest with confidence.
Use utm_content for variants, not utm_campaign
Same campaign, different ad creatives or links → use utm_content (CSV mode) to differentiate. Don't fragment the campaign-level rollup.
Lowercase, underscores, no spaces
The generator handles this automatically, but build the habit on the input side too. Mixed case in your source data tends to leak into other places.
Skip UTMs on internal site links
Internal UTMs reset the original source on click and break multi-touch attribution. Bulk-tag external campaigns only (ads, emails, partner placements).
Built by the team behind SourceLoop
FAQ
Paste your list of URLs (one per line) or a CSV with URL and per-row values. Set the UTM parameters that should apply to all URLs in the form. The tool generates a list of tagged URLs you can copy and paste into your ad platform, email tool, or partner instructions. Everything runs in the browser, no data leaves your machine.
Standard mode applies the same UTM values to every URL. CSV mode reads a second column from each row as utm_content, so you can vary creative-level tagging per row while keeping source, medium, and campaign consistent. Use standard for 'tag every link in this newsletter the same way'; use CSV for 'tag each ad variant with its own content label'.
Format: url,utm_content per line. For example: 'https://example.com/pricing,headline_a'. The first column is always the URL. The second column is whatever you want utm_content to be for that specific URL. Spreadsheet apps like Google Sheets export CSVs by default; just paste the contents directly.
Invalid URLs (missing scheme, malformed) are flagged with an error in the output but the tool still processes the rest. Duplicates are not removed automatically, since you may legitimately want the same URL tagged multiple times with different content variants. The output shows one row per input row.
The new UTM values overwrite the existing ones. If your URL has utm_source=meta and you set utm_source=google in the form, the output will use google. Other (non-UTM) query parameters are preserved exactly. This is the safe default for cleaning up legacy tagging.
Yes, click 'Download CSV' to get a file with original URL, tagged URL, and (if used) utm_content per row. Useful when you need to hand the tagged URLs to a creative team or paste them into your ad platform's bulk import.
Yes. No signup, no email gate. We host it because the same teams generating UTMs in bulk usually need real attribution to know whether the tagged URLs actually drive revenue, which is what SourceLoop does.
Capture and send full attribution data from every signup, lead, booking, and sale to your CRM and ad platforms, so you know exactly what's driving revenue.
Without SourceLoop
UntaggedKayden Floyd
With SourceLoop
Auto-taggedKayden Floyd