Creating links in bulk
Upload a CSV to create many links at once, and what to check before you do.
Reviewed 24 Oct 2026Available from the Starter plan
When to use this
Bulk create is for making new links from a list you already have: a product feed, a set of store locations, a batch of partner URLs. If instead you are moving links that already exist somewhere else and need to keep their addresses working, you want Importing from another shortener, not this.
- Bulk CSV rows / import, by plan
- Free Not included · Starter 100 · Pro 500 · Business 2,000
Preparing the file
A plain CSV with a header row. The destinationUrl column is required; everything else is optional and can be left out entirely.
destinationUrl,slug,title
https://example.com/shoes,shoes,Shoes landing page
https://example.com/boots,boots,Boots landing page
https://example.com/socks,,Socks landing page- One column must be the destination. Accepted headings are destinationUrl, destination, url, and long_url. Capitals do not matter.
- Every destination must be a full address starting with http:// or https://.
- Leave the slug cell empty to have one generated for that row.
- Slugs must be unique, both against each other and against links you already have.
- Columns beyond these three are ignored, so an export you already have can go up as it is.
- Save as CSV, not as a spreadsheet file. Exporting from Excel or Sheets as "CSV" is correct.
Check the row count against two numbers
Uploading
Open Links, choose the bulk import option, and drop in or pick your file (there is a template to download beside the button). Before you press Import the panel shows what will happen: how many rows will import, how many fall past your per-file cap, and each row that needs fixing: a missing or scheme-less destination, a slug that is not letters, numbers and hyphens, or one that repeats an earlier row. Whether a slug is already taken is checked by the import itself. The upload is then accepted straight away and the rows are created in the background, so there is nothing to wait on.
The result arrives by email when the import finishes: how many links were created, how many rows were duplicates, how many were dropped, and each rejected row by number with the reason it failed. A handful of bad rows does not throw away the rest of the file.
Step by step
Create a batch of links from a spreadsheet
Before you start
- A plan that allows bulk CSV rows. The Free plan does not.
- Enough of your monthly link allowance left to cover every row.
- Your list in a spreadsheet with one destination per row.
Steps
In your spreadsheet, arrange the columns as destinationUrl, slug, title, with that header row at the top.
destinationUrl is the usual heading. destination, url, and long_url are accepted too. Any other columns can stay: they are ignored.
Scan the destinationUrl column for blanks and for addresses missing https://.
Fixing these now is much faster than reading them back off the completion email.
Check for duplicate slugs with your spreadsheet's duplicate-highlighting.
Duplicates inside the file collide with each other, which is a confusing error to diagnose after the fact.
Export the sheet as CSV.
Open Links and start a bulk import, then choose the file.
Note the count you are told was queued, then wait for the completion email.
The queued count is not a created count: the rows are still to be validated. Nothing in the dashboard reports the outcome row by row; the email is where that lives.
The email names how many links were created and lists each rejected row by number, with its reason.
Filter your Links table by a slug from the batch to confirm the links are really there.
What you should see
Every valid row is now a working short link in your Links table, and the completion email tells you exactly which rows were rejected and why.
How to check it worked
- The created count in the completion email matches the number of rows you expected.
- Opening one of the new short links lands on the right destination.
- The Overview usage panel has moved by the number of links created.
Edge cases
- The file has more rows than your plan's per-file cap.
- The upload is not refused. The rows within the cap are imported and the rest are dropped without being created. You are told how many, both on upload and in the completion email. Upload the dropped rows as a second file, or upgrade. The cap is per file, not per day.
- You run out of monthly link allowance partway through.
- The rows created before that point are real and stay. Upload the remainder next month, or upgrade and re-upload only the rows that failed.
- Some destinations fail safety screening.
- Those rows are rejected individually and named in the completion email. The rest of the file still goes through.
If something goes wrong
- Most rows were rejected and you are not sure why.
- Take three failing rows and create them by hand on the normal link form. The form validates each field as you leave it and will name the exact problem, which in almost every case applies to the whole file.
- You uploaded the wrong file.
- The links are real and count against your quota. Filter the Links table to the batch, select the rows, and bulk-delete them, up to 500 at a time. The quota is not returned.