How to export your links from Bitly
Bitly can give you a list of your links as a CSV file, but not on every plan, and the file does less than people expect. Here is where the export is, what it contains, how to get the same list on a free account, and what to do with it.
Who can export
Bitly's help centre says the export is "available with some paid plans", and that free accounts do not have it. On the pricing page, "data export" is listed from the Growth plan. If you are on the free plan, skip to the API route below.
Export from the Links page
- Open the Links page.
- Use the filters and the date range to choose which links to include. The export follows the current view.
- Click Export.
- Enter the email address that should receive the file and confirm.
- The CSV arrives by email from Bitly, not as a direct download.
What is in the file
Bitly lists the fields as:
- Link: the short link, bit.ly or your custom domain.
- Custom Link: filled in when the link has a custom back-half.
- Date created
- Title
- Destination URL: where the link points.
- Engagements: clicks and scans, for as far back as your plan keeps them.
- Status: for example whether the link has been deleted.
Two things to notice. The first column is the short link, not the destination, so a tool that grabs the first URL-looking column will import your bit.ly links as destinations and create links that point at links. And deleted links are in the file, marked in Status, so an import has to skip them or it brings them back.
On a free plan: the API
The free plan has no export button, but it does include API access, with a monthly request allowance. Listing links costs one request per page of 50, so even a large account fits inside it. You need an access token from Settings, then API under Developer settings, and a machine with curl and jq.
TOKEN=paste-your-token-here
GROUP=$(curl -s -H "Authorization: Bearer $TOKEN" https://api-ssl.bitly.com/v4/groups | jq -r '.groups[0].guid')
echo 'Destination URL,Custom Link,Title' > bitly-links.csv
URL="https://api-ssl.bitly.com/v4/groups/$GROUP/bitlinks?size=50"
while [ -n "$URL" ]; do
PAGE=$(curl -s -H "Authorization: Bearer $TOKEN" "$URL")
echo "$PAGE" | jq -r '.links[] | [.long_url, (.custom_bitlinks[0] // ""), (.title // "")] | @csv' >> bitly-links.csv
URL=$(echo "$PAGE" | jq -r '.pagination.next // empty')
done
The result has the same three columns that matter from the official export, under the same names, so anything that reads one reads the other. If your account has more than one group, run it once per guid from the first call.
What the file can and cannot do
It can recreate your links somewhere else: the destinations, the titles, and the custom back-halves as aliases on a new domain.
It cannot move the short links themselves. A short link is answered by the domain that serves it, so bit.ly/anything can only ever be redirected by Bitly. Whatever you import elsewhere is a new link to the same place. Anything already printed, published or sent keeps pointing at Bitly, and keeps working for as long as your Bitly account does. So the order of operations is: export, recreate, use the new links for everything from now on, and keep the old account until the old links are out of circulation.
It also cannot move the click history. Engagements is a number, not a log, and the new links start at zero.
Importing it here
On Urlicer, bulk create reads the Bitly export as it is. Destination URL becomes the destination, Custom Link the alias, Title the name, and rows marked deleted are left out. Move your links from Bitly walks through it, and the plan-by-plan comparison shows what changes once they are here. Bulk create and custom aliases are on the paid plans; the pricing page has the details.
Want to try it with your own list? Start with a free account, and upgrade the workspace when you are ready to upload.