Bublink Bublink / Blog

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.

By Bublink Team 7 min read

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:

ColumnRequiredWhat it does
original_urlYesThe long URL to redirect to. One per row.
slugNoThe short link path. Leave blank to auto-generate; fill it in to control branding (/yourbrand/creator-name).
titleNoInternal label. Shows up in the dashboard list — easier to scan than slugs.
tagNoGrouping for filtering and reporting later. One per row; reuse the same tag for related rows.
utm_sourceNoChannel. Usually constant for the campaign.
utm_mediumNoMedium. Also usually constant.
utm_campaignNoCampaign identifier. Constant for the run.
utm_contentNoThe variable that distinguishes rows — creator code, store ID, ad variant.
utm_termNoKeyword 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_urlslugtitletagutm_sourceutm_mediumutm_campaignutm_content
shop.example.com/springmiaMia · Springspring2026-creatorsinstagraminfluencerspring_2026mia
shop.example.com/springjunJun · Springspring2026-creatorsinstagraminfluencerspring_2026jun
shop.example.com/springsoraSora · Springspring2026-creatorsinstagraminfluencerspring_2026sora

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/mia is something the creator will recognize when they paste it into a story.
  • One tag groups the whole run. Filtering the dashboard by spring2026-creators gives the cohort view. Filtering by utm_content=mia gives 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

  1. Duplicate slugs. Two rows with the same slug fail the import. A quick =COUNTIF(B:B, B2) > 1 in Excel before saving catches every collision in five seconds.
  2. Mis-cased UTMs. Spring_2026 and spring_2026 are two campaigns to GA4. Lower-case the UTM columns with =LOWER(...) once, and never again.
  3. 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.
  4. 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.
  5. 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.

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_campaign constant across the file. Let utm_content and 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 =COUNTIF check 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/mia into go.yourbrand.com/mia for 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

7 min read

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.

Read article
5 min read

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.

Read article
5 min read

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.

Read article