Bulk Shorten URLs From a Spreadsheet: CSV vs Formulas
Got a column of 200 long links in Google Sheets or Excel? Here are the three honest ways to bulk-shorten them, and why a raw =HYPERLINK tracks nothing.

Why a Spreadsheet of Long URLs Is a Tracking Time Bomb
You have a column of 200 long URLs sitting in Google Sheets: affiliate Flipkart and Shopee product links, a batch of campaign landing pages, or an ops team's list of vendor redirects. Dropping =HYPERLINK next to each row feels like a fix. It is not. That formula only makes text clickable inside the sheet, it dies the second the link is pasted into an Instagram caption or an email, and it counts exactly zero clicks. This guide walks you through three honest ways to bulk shorten URLs from a spreadsheet, and how to keep every one of them branded, trackable, and safe.
The =HYPERLINK trap
The built-in =HYPERLINK(url, label) function is a display trick. It wraps a cell in a clickable label, but the destination is still the raw, hundred-character URL underneath. There is no redirect layer, so you can never change where it points, you get no click data, and you cannot attach a pixel or a custom domain after the fact. Many marketers assume Sheets has a native shorten function. It does not. The =SHORTURL style formulas people half-remember all leaned on Google's own service.
Why the goo.gl era is over
Google retired its URL Shortener for good: the company confirmed that goo.gl links would stop resolving in August 2025, and Firebase Dynamic Links went with it. Any legacy add-on or script that quietly called goo.gl is now dead weight. So the real question is not which Sheets function to use, it is which of three modern paths fits your volume and skill: a CSV import, an Apps Script, or a REST API.
What trackable actually buys you
A proper short link is a redirect you own. That single layer unlocks click analytics (who clicked, from where, on what device), the ability to swap a broken destination without reprinting anything, retargeting pixels, and a branded domain that lifts trust. If you have never measured link performance before, our primer on how to track clicks on a link explains why the redirect, not the cell, is where the data lives.
The Three Ways to Bulk-Shorten (and When Each Wins)
There is no magic Sheets button. Every real method falls into one of three buckets, and picking the wrong one wastes an afternoon. Here is the honest trade-off before we go deep on each.
The quick decision
- CSV import and export: paste or upload a column, get short links back as a downloadable file. Zero code, best for one-off batches of dozens to a few thousand.
- Apps Script and custom formula: a script inside your sheet calls a shorten endpoint per row. Repeatable and live, but bound by Google's fetch quotas and your patience.
- REST API: your own code (or a workflow tool) posts URLs to a shorten endpoint at volume. Highest ceiling, needs a developer.
Match the method to the job, not to the hype. A one-time export of 300 affiliate links does not need an API integration, and a nightly feed of 5,000 links should never run through a dragged-down formula.
Side by side
| Method | Best for | Realistic volume | Skill needed | Trackable |
|---|---|---|---|---|
| CSV import / export | One-off batches, non-technical teams | Dozens to a few thousand | None | Yes, full analytics |
| Apps Script / formula | Recurring sheets, light automation | Up to a few hundred per run | Basic scripting | Yes, if endpoint returns IDs |
| REST API | High volume, product feeds, pipelines | Thousands, continuous | Developer | Yes, plus webhooks |
Path A: No-Code CSV Import and Export
For most people reading this, the answer is CSV. You already have the URLs in a grid, so you export that grid, hand it to a shortener, and get a matching grid of short links back. No scripts, no tokens, no rate-limit math. (Shortening one destination into many links, rather than many destinations into one each? That is Create many.)
The five-minute workflow
- In Google Sheets or Excel, isolate one clean column of destination URLs.
- Export it as a .csv file (File, then Download, then Comma-separated values).
- Open Flyn, go to bulk import, and upload the CSV.
- Optionally map extra columns: a custom slug, a title, tags, or a UTM set.
- Run the batch, then export the results as a new CSV with a short-link column ready to paste back into your sheet.
Because each row becomes a genuine Flyn redirect, you inherit real-time analytics, QR codes, and the option to add a custom domain across the whole batch. That is the difference between a spreadsheet of dead text and a campaign you can actually measure.
Keep a stable order between your source sheet and the export. Add a plain row-number column before you upload so you can VLOOKUP the returned short links back into the exact rows they came from, even if the importer re-sorts anything.
Note on plan limits
Bulk CSV import and export is a Flyn Pro feature, and the free tier caps you at 25 links a month, which is fine for testing but not for a 300-row batch. Pro removes the cap and unlocks the folders and tags you will want to keep hundreds of links organized. You can start free and upgrade once the batch sizes justify it.
Prep Your Spreadsheet So the Import Does Not Choke
Nine out of ten bulk-import failures are data hygiene, not the tool. Five minutes of cleanup saves you re-running the whole batch. Treat the source column like a database field, not free text.
Clean the URL column first
- One URL per cell, no trailing spaces, no line breaks, no stray labels like Product 1.
- Make sure every value starts with
https://. A bareexample.comwill either fail validation or resolve somewhere you did not intend. - De-duplicate with Sheets' remove-duplicates before you export, so you do not mint two short links for the same destination.
- Strip messy tracking junk that is already on the URLs. Our URL cleaner flattens redirect chains and duplicate parameters so you shorten the real destination, not a wrapper.
Decide your columns up front
A good import CSV is more than one column. Add columns for a custom slug (keep them short and unique), a title for your dashboard, and tags or a folder name so a 400-link batch stays navigable. If you plan to add campaign parameters, set up a UTM column now rather than editing links one by one later.
Do not shorten links you have not verified. Every destination Flyn creates is scanned with Google Safe Browsing, and a batch full of dead or flagged URLs can get individual links kill-switched. Run a quick pass with the safety checker on any URLs from an untrusted feed before you bulk-create.
Path B: The Apps Script and Custom-Formula Route
If your sheet is a living document that gains new URLs every week, a one-off CSV export gets tedious. This is where a small Google Apps Script earns its keep: you write a custom function like =SHORTEN(A2) that calls a shorten endpoint and writes the result back into the cell. It feels native, but it is really a script hitting an API behind the scenes.
How the pattern works
Inside Extensions, then Apps Script, you use UrlFetchApp.fetch() to POST each URL to your shortener and parse the short link out of the response. You can wire it to a cell formula, or add a custom menu button that loops down a column and shortens every row in sequence. It is genuinely handy for a sheet of a hundred rows that changes often.
The caveats nobody mentions
The formula route hits two ceilings at once. First, Google's own quota: UrlFetchApp is capped at 20,000 fetch calls per day for consumer Gmail accounts and 100,000 for Workspace. Second, your shortener's rate limit, which throttles how many links you can mint per minute. Drag a live formula down 500 rows and you fire 500 simultaneous external requests, which trips one limit or the other.
A custom formula that fires hundreds of UrlFetchApp calls at once is not automation, it is a rate-limit incident waiting to happen. Add deliberate delays, or move to the API.
Cell formulas recalculate. A volatile =SHORTEN() can re-fire on every edit, minting duplicate links and burning quota. Use a menu-driven batch that writes static text back into the cell, never a live formula that recomputes.
Path C: The REST API for Real Volume
When you are shortening thousands of links, syncing a product feed, or wiring shortening into an internal tool, skip the spreadsheet gymnastics and call the API directly. This is the path for developers and ops teams who want a repeatable pipeline instead of a manual export.
The shape of a shorten call
Every modern shortener exposes a simple REST pattern: you send an authenticated POST to a shorten endpoint with a JSON body containing the long URL (and optionally a slug, domain, or tags), and you get back a short link plus an ID. Read the parameters and response schema on the shorten endpoint docs, and use the links resource to list, update, or delete in bulk. Authentication uses a token you generate once, covered in the authentication docs.
Batch it without getting throttled
Loop your spreadsheet rows, but respect the rate limits: add a short delay between calls, batch in chunks, and retry on a 429 with backoff. For a fuller walkthrough with code, our link shortener API guide shows the request and response end to end, and Pro accounts get a TypeScript SDK plus webhooks so a click can trigger your own systems. Pull click data back with the clicks endpoint to close the loop.
Add UTMs and a Branded Domain Before You Export
Shortening is step one. A batch of short links that all point at bare product pages with no campaign tags is a missed opportunity. Enrich the whole batch before it ships, not link by link afterward.
Tag the campaign with UTMs
UTM parameters are what let your analytics tell an Instagram batch from an email batch. Build a consistent set with the UTM builder, add them as a column in your import CSV, and every link inherits the same source, medium, and campaign. If UTMs are new to you, the ultimate guide to UTM parameters covers naming conventions that keep reports clean, and the UTM parser helps you audit tags on links you inherited.
Put them on your own domain
A branded short domain measurably lifts clicks: our breakdown of why branded short links increase CTR shows the trust gap between a generic shortener and your own name. Flyn Pro gives you up to three custom domains with automatic SSL, and you can apply one across an entire bulk import so all 300 links carry your brand. See branded short links for the full picture.
If different rows need different destinations by country or device, turn the batch into smart links with geo and device routing instead of maintaining separate columns per region.
Keep Every Batched Link Healthy and Trackable
A bulk batch is only as good as its worst link. When you mint hundreds at once, a few destinations will inevitably rot: a product goes out of stock, a landing page moves, a slug collides. Build a verification step into your workflow from day one.
Verify the batch, not just one link
Paste your exported short links into the bulk health checker to catch dead ends, redirect loops, and unexpected status codes across the whole set in one pass. For campaign-specific checks (are the UTMs intact, does the destination match the brief), the campaign URL QA checker runs a focused audit before you hit send.
Watch performance after launch
Once links are live, the point of doing this properly pays off. Your dashboard shows city-level geo, device, and referrer data per link, and you can compare batches by tag or folder. For affiliate sellers, pairing this with our affiliate link tracking guide turns a raw click count into an actual attribution story. And because links are redirects you own, you can fix a broken destination without touching the spreadsheet or the caption it lives in.
Stay off spam lists
Bulk-created links from a fresh domain can look suspicious to filters. Our notes on why short links get flagged as spam explain how a warmed custom domain and clean destinations keep your batch delivering instead of bouncing.
CSV vs Formula vs API: The Honest Verdict
Strip away the marketing and the choice is simple, because it maps to how often you do this and who is doing it.
Pick by frequency and skill
- One-off batch, non-technical: use CSV import and export. It is the fastest path from a column of URLs to trackable short links, full stop.
- A recurring sheet, light scripting comfort: a menu-driven Apps Script is fine, as long as you respect fetch quotas and never use a live recalculating formula.
- Thousands of links or an automated pipeline: go straight to the REST API with proper rate-limit handling and webhooks.
What all three share, and what a bare =HYPERLINK can never give you, is a redirect you control: analytics, branding, safety scanning, and the freedom to change a destination after the fact. If you are weighing Flyn against another shortener's bulk tooling, compare them on the alternatives pages, or start with the core shortener and a free account.
Ready to shorten your first batch? Create a free Flyn account, test with a small CSV, and move to Pro when your batches outgrow the free tier. Your spreadsheet of dead links is one import away from being a campaign you can actually measure.
Frequently Asked Questions
Is there a built-in function to shorten a URL in Google Sheets?
Why is =HYPERLINK not the same as a real short link?
How many URLs can I bulk-shorten from a CSV at once?
Can I use Google Apps Script to shorten links in a spreadsheet?
What is the difference between the CSV and API methods for bulk shortening?
Will bulk-shortened links still track clicks individually?
How do I add UTM parameters to a whole batch of links?
Are bulk-created short links safe, or will they get flagged as spam?
Free tools for this
Three Flyn tools that pair well with the strategy in this article, all free, no signup needed.
UTM Builder
Build campaign-tracked URLs in seconds.
Broken Link Checker
Scan any page for dead links and 404s.
Open Graph Checker
Preview how URLs unfurl on social.
Keep reading
Three related deep-dives from the Flyn blog.
Postback URL Tracking: How S2S Conversion Tracking Works
17 min read

301 vs 302 Redirect: When to Use Each
14 min read

Instagram In-App Browser: Why Links Break and the Fix
13 min read
Ready to try Flyn?
Free plan includes 25 links/month, full analytics, and access to all 30+ free tools above. No credit card required.
Already a member? Log in

Karan Bhakuni is the founder of Flyn. He writes about branded links, click analytics, and the link-management tooling growth teams and creators actually need, drawn from building Flyn and reading a lot of user feedback.