What shipped
Starting today you can upload a CSV file and create up to 1,000 short links in a single operation. Every row maps to one link. The whole thing runs in the background, and you get a summary email when it’s done.
This was the number-one requested feature from teams running multi-channel campaigns. Before this, creating 200 links for a product launch meant 200 separate form submissions. No one was doing that. People were hacking around it with copy-paste into random shorteners that had zero UTM support. That ends now.
How the CSV format works
The importer accepts a header row followed by data rows. Required columns:
target_url— the destinationcampaign— must match an existing campaign slug in your workspace
Optional columns that map directly to UTM fields:
utm_sourceutm_mediumutm_contentutm_termcustom_alias— if you want a specific short code instead of an auto-generated one
Validation before anything runs
Before we create a single link, we parse the entire file and surface every error upfront. You’ll see a table listing row number, column, and what went wrong — typos in campaign names, malformed URLs, alias conflicts. Fix the file, re-upload, done. We don’t partially create links and leave you guessing which ones went through.
What happens to duplicates
If a row’s target_url + UTM combination already exists in your workspace, we skip it and tell you rather than creating a duplicate. This makes re-running a corrected file safe.
Workspace vocabulary enforcement
One thing we’re proud of here: the importer enforces your workspace’s source/medium/content/term vocabularies. If you’ve defined email and paid-social as valid mediums, a row with medium=newsletter will fail validation with a clear message. This keeps your analytics clean even when you’re moving fast with bulk imports.
If you want to allow new vocabulary entries during import, there’s a checkbox: “Auto-create missing vocabulary entries.” Off by default. Turn it on when you’re seeding a new workspace, leave it off for ongoing campaigns where typos cost you.
Performance
1,000 links import in under 10 seconds on average. The job runs async — you don’t sit on a loading screen. You get a toast notification in the app and an email summary with a breakdown: created, skipped, failed.
How to use it
Go to Links → Import in your workspace. Download the CSV template if you want a starting point. Upload your file, review the validation report, confirm. That’s it.
We’ll be shipping an API endpoint for CSV import in a future release for teams that want to automate this from their own tooling.