Bulk URL Shortener: 100 Links from One Excel Sheet
Turn an Excel file into 100 tracked short URLs in under a minute — bulk import schema, per-row UTM pattern, and the analytics view that follows.
A bulk URL shortener earns its keep on the day a campaign needs a hundred unique short links by tomorrow — each one with its own creator code, UTM string, and tracker that won’t blur into everyone else’s numbers. Doing that one link at a time is a one-hour job at best, and a one-mistake-away-from-rebuild job at worst.
There is a faster shape for this work: write the 100 rows in Excel, hand the file to a bulk import, and watch every short link, every QR, and every UTM tag land in the dashboard in under a minute. This post is the column template, the naming pattern that keeps the data clean, and the way to read the results once they start coming in.
Why Bulk-by-Spreadsheet Beats One-at-a-Time
Manual link creation has a worst case the math punishes. A hundred-link campaign at thirty seconds per link is fifty minutes of clicking — fine for one campaign, untenable for a team running four a month. More important than the time is the error surface. Every form field is a place to fat-finger a UTM, a destination URL, or a creator code, and the only way to spot the mistake later is to scan every dashboard row by eye.
A spreadsheet flips that around. Excel sorts, dedupes, and finds typos at a glance. Formulas can compose UTM strings from a single source column, so a creator’s name lives in exactly one cell and propagates to every URL that references them. When the file is right, the import is right. When it is wrong, you fix one row and re-run.
The Bulk Import Template, Column by Column
The Bublink bulk import accepts a single .xlsx file with one link per row. The only required column is the destination URL; everything else is optional and combines into the final short link. The shape that holds up across most campaigns:
| Column | Required | What it does |
|---|---|---|
original_url | Yes | The long URL to redirect to. One per row. |
slug | No | The short link path. Leave blank to auto-generate; fill it in to control branding (/yourbrand/creator-name). |
title | No | Internal label. Shows up in the dashboard list — easier to scan than slugs. |
tag | No | Grouping for filtering and reporting later. One per row; reuse the same tag for related rows. |
utm_source | No | Channel. Usually constant for the campaign. |
utm_medium | No | Medium. Also usually constant. |
utm_campaign | No | Campaign identifier. Constant for the run. |
utm_content | No | The variable that distinguishes rows — creator code, store ID, ad variant. |
utm_term | No | Keyword or audience slice when needed. |
The pattern most rows follow: original_url, utm_source, utm_medium, and utm_campaign stay constant for the campaign. utm_content is what changes from row to row, often paired with a matching slug.
A Naming Pattern for Influencer Campaigns
One row per creator, one UTM that names them, one slug a human can read.
| original_url | slug | title | tag | utm_source | utm_medium | utm_campaign | utm_content |
|---|---|---|---|---|---|---|---|
| shop.example.com/spring | mia | Mia · Spring | spring2026-creators | influencer | spring_2026 | mia | |
| shop.example.com/spring | jun | Jun · Spring | spring2026-creators | influencer | spring_2026 | jun | |
| shop.example.com/spring | sora | Sora · Spring | spring2026-creators | influencer | spring_2026 | sora |
A few things this layout buys you:
- One destination, many rows. Every creator points at the same landing page; the dashboard separates their numbers by
utm_content. - Slugs that read.
bublinks.com/yourbrand/miais something the creator will recognize when they paste it into a story. - One tag groups the whole run. Filtering the dashboard by
spring2026-creatorsgives the cohort view. Filtering byutm_content=miagives the individual view.
When the audience is multi-channel, append the channel to the slug (mia-ig, mia-tt, mia-yt) and let utm_source reflect it. Same creator, three rows, three trackable destinations.
After the Upload: Reading Per-Row Results
A clean import puts 100 rows into the dashboard with their tag, UTM, and click counter intact. Three actions on the resulting list cover most reporting needs.
Filter by tag. The cohort view. spring2026-creators returns the 100 rows from that run and nothing else. Sort by click count to rank creators in seconds.
Drill into one row. The individual view. Each row carries country, city, device, OS, browser, and referrer breakdowns — the same data every link in the dashboard gets. For a creator campaign that means you can see whether Mia’s audience is on iOS in Tokyo at 9 PM, or on Android in Seoul at lunch.
Export the cohort. CSV export on the Pro plan ($7/month) drops the filtered list — clicks, unique visitors, country breakdown — into a spreadsheet a reporting deck can paste from. The same file can be filtered again for any single creator without re-querying.
Three Patterns That Cover Most Campaigns
The same template adapts to more than influencers.
Multi-store / Multi-location
One brand, twenty stores, one “find us” page. The destination is the same; utm_content carries the store ID; the slug names the location for the print poster.
slug: store-gangnam utm_content: store_gangnam
slug: store-hongdae utm_content: store_hongdae
The tag groups them as one run (storefront-locations) and the dashboard ranks foot-traffic-driving stores at a glance. Pair each row with its auto-generated QR for the print poster — same redirect, same numbers, no second tool.
Cross-Channel Campaign Matrix
Same campaign, three channels, three creatives per channel. Nine rows, one file. utm_source separates channels; utm_medium separates email-vs-paid-vs-organic; utm_content carries the creative variant. The cohort view in the dashboard reads like a small matrix without ever opening a pivot table.
Recurring Weekly Sends
A weekly newsletter that links to four articles per week, fifty-two weeks a year. Build one row per article-per-week in advance and import the file once. The slug pattern article-slug_w26 keeps the redirect addressable years later, and the 7 × 24 heatmap on Pro shows which weekday and hour each article earned its clicks.
Five Mistakes That Re-Run the Whole File
- Duplicate slugs. Two rows with the same slug fail the import. A quick
=COUNTIF(B:B, B2) > 1in Excel before saving catches every collision in five seconds. - Mis-cased UTMs.
Spring_2026andspring_2026are two campaigns to GA4. Lower-case the UTM columns with=LOWER(...)once, and never again. - Trailing spaces in destination URLs. Copy-paste from a doc often brings a trailing space. The redirect still works; the analytics may split the same URL into two paths.
=TRIM(A2)removes the noise. - Forgetting the tag. A bulk import without a tag column is hard to filter as a cohort later. Add it before the first row goes in, not after the campaign is live.
- Crossing plan limits. Free covers 30 links a month; Pro covers 500. A 100-row import sits inside Pro comfortably; a 600-row monthly cadence should plan accordingly.
Where Bublink Fits
Excel is already where the campaign sheet lives. The bulk import accepts the same .xlsx with one row per link, mints the short URL and QR for every row, and folds the analytics into the same dashboard the rest of the team already reads. No API key, no engineering ticket, no separate analytics export — the campaign manager runs the whole thing from their own desktop.
The list view filters by tag, sorts by clicks, drills into a single row’s country and device split, and exports to CSV when a deck needs the cohort numbers. Custom domains on Pro mean the slug can read go.yourbrand.com/mia instead of a generic shortener — same template, branded redirect. What we kept: one file in, 100 trackable short links out.
In One Page
- One row per link. The only required column is the destination URL; everything else is optional.
- Keep
utm_source,utm_medium,utm_campaignconstant across the file. Letutm_contentand the slug change row by row. - Tag every row in the run with one shared label. Filtering by that tag later is the cohort view.
- Lower-case UTMs, no trailing spaces, no duplicate slugs. A
=COUNTIFcheck before save covers most of it. - Pro ($7/month) handles 500 links a month, CSV export, and per-row analytics.
Click a Bublink, land instantly. Generate 100 short links from one file at bublinks.com →
Read next: UTM Parameters Done Right — the naming convention every row in this template follows. Related: Newsletter Click Tracking — the same data, applied to email instead of links in print. Related: How to Set Up a Custom Domain for Branded Short Links — turn
bublinks.com/miaintogo.yourbrand.com/miafor every row.
Try Bublink
Branded short links, real analytics, no tier-gating.
Spin up a workspace and shorten your first production link in under a minute. Free to start.
Try Bublink →Continue reading

QR Codes That Bridge Offline and Online: 5 Real Placements
Five real QR placements — store menu, expo booth, business card, poster, table — each with its UTM template, short-link tactic, and print checklist.
Newsletter Click Tracking — A UTM Variant System for Email
A practical UTM variant system for email newsletters — header, body, footer placements, send-time analysis, and the heatmap that decides next week's send.

UTM Parameters Done Right: source, medium, campaign 2026
The five UTM parameters explained, channel-by-channel templates for email, ads, social, QR, and offline, plus the seven mistakes that break GA4 reports.