Skip to content
On this page

Import Links from CSV

Moving from another link shortener, or keeping your links in a spreadsheet? You can bring them into Revolink in one go by uploading a file. Revolink reads the file, checks every row, shows you every link before anything is created, and then imports the ones you keep selected.

This guide covers: preparing the file, the import wizard step by step, redirect rules and A/B tests in the file, domains and DNS, duplicates, and how to fix every error message you can meet.

On this page


Before you start

  • Permission. Importing needs the Import links permission. The workspace owner always has it; other members get it from the owner through their role.
  • One at a time. Only one import can run in a workspace at a time.
  • File limits. Up to 5,000 rows and 20 MB per file. For a bigger export, split it into parts and import them one after another.
  • Only one thing is required: a Destination URL for every row. Everything else is optional.

Supported files and services

File types: .csv, .tsv, .xls, .xlsx and .json. For Excel files only the first sheet is read. A .json file must be an array of objects, one object per link.

Services Revolink recognizes. For exports from these services the columns are matched for you, so you can upload the file as it is:

ServiceRecognized domains
Bitlybit.ly, bitly.com, j.mp
Short.ioshort.io, short.gy
Rebrandlyrebrand.ly, rebrandly.com
Dubdub.sh
TinyURLtinyurl.com
t.lyt.ly
Revolink templatesee Option 1

Any other file works too: you map its columns yourself on the Columns step (Revolink suggests a mapping, and you can correct it).


If you are not moving from another service, or you are building the list by hand, start from the template.

Download the CSV template

You can also download it from the first step of the import (Not moving from another service? Download the Revolink CSV template). The template file contains two filled-in example rows, one with redirect rules and one with an A/B test. Its header row is:

text
title,destination_url,short_link,domain,tags,created_at,expiration_date,clicks,rules,ab_test,routing_mode

A row without rules or an A/B test looks like this (the last three cells are empty):

text
Spring campaign,https://acme.inc/spring-sale?utm_source=email&utm_medium=newsletter&utm_campaign=spring,spring-sale,acme.inc,marketing;email;spring,2026-03-01,2026-12-31,1250,,,

Replace the examples with your own links, one link per row, and keep the header row exactly as it is. When the headers match the template, Revolink maps the columns by itself and you can go straight through the Columns step.

Only one column is required

A file with just a destination_url column is a valid import. Empty cells are simply skipped.

Fields

These are the 11 fields you can fill from your file. On the Columns step any column of your file can feed any field; in the Revolink template the columns are named as in the first column below.

Template columnField in the wizardRequiredWhat to put in it
destination_urlDestination URLYesThe page the link opens. A full web address starting with http:// or https://.
titleTitleNoThe link's name, up to 255 characters. If the column is not mapped or the cell is empty, the link is named Imported link for example.com (the domain of its destination).
short_linkShort linkNoThe end of the short link (the back-half), for example spring-sale. Letters, numbers and single hyphens, up to 100 characters. See the rules below. If empty, Revolink generates one.
domainDomainNoThe domain the short link lives on, for example acme.inc. If empty, the link is created on rvlnk.link. See Domains and DNS.
tagsTagsNoOne or more tags in a single cell. See Tags.
created_atCreated dateNoThe date the link was originally created. See Dates.
expiration_dateExpiration dateNoThe date the link stops working. Must be in the future. See Dates.
clicksPast clicksNoClicks the link already had before the import. A plain whole number, for example 1250.
rulesRedirect rulesNoExtra destinations for visitors from certain countries, devices and so on. JSON in one cell. See Rules and A/B tests.
ab_testA/B testNoSeveral destinations that share the traffic by percentage. JSON in one cell.
routing_modeRouting modeNorules or ab_test. Says which of the two is switched on when both cells are filled.

Short link rules.

  • Allowed: letters A–Z / a–z, digits and hyphens. Upper and lower case are different: Promo and promo are two different links.
  • Hyphens must be single and between other characters: spring-sale is fine; spring--sale, -spring and spring- are not. Underscores are not allowed.
  • Spaces in the value are replaced with hyphens.
  • You can paste a whole short link, such as bit.ly/spring or https://rebrand.ly/promo. Revolink takes the last part of the path as the short link and the host as the domain.

What the import does not read

Description, active/paused status, click limits, expired-URL redirect, conversion and GPS tracking, social preview (Open Graph) fields, QR codes, colors, and passwords in a column of their own are not read from the file. Add them afterwards on the link's page — see Links & Rules.

Rules and A/B tests

A link imported without these columns gets one default rule that sends every visitor to destination_url. To bring redirect rules or an A/B test along, fill the Redirect rules (rules) or A/B test (ab_test) cell of that link. Both are optional; leave the cell empty for links that do not need them.

Each of the two cells holds a JSON text.

  • When you build the file by hand, wrap the whole cell in double quotes and write every " inside it twice (""). Spreadsheet programs do this for you when you save as CSV, but JSON typed into a cell is easiest to check in a text editor.
  • If writing JSON is not for you, an AI assistant can produce the cells from your old service's data.
  • If your columns are not named rules, ab_test and routing_mode, map them by hand on the Columns step.

One at a time

A link uses either its redirect rules or its A/B test. While an A/B test is on, every visitor is sent to one of its variants and the rules are not used. You can fill both cells for a link, but you have to choose which one is on: see Rules or an A/B test for one link.

rules — redirect rules

A JSON list of rules, each sending visitors who match its conditions to its own page.

  • Do not add the main rule. The main rule (the default destination) is created from destination_url and is used for everyone who matches no rule. A rule without any condition can't be imported.
  • Rules are checked from top to bottom, and the first one whose conditions all match wins. Put more specific rules first.
  • id and isDefault keys are ignored.
  • Within one rule all conditions must match; within one condition any of the listed values matches. "country":["UA","DE"],"device":["mobile"] means mobile visitors from Ukraine or Germany.
KeyRequiredWhat it holds
targetUrlYesWhere matching visitors go. A valid web address.
nameNoA name for the rule.
countryNoA list of two-letter country codes (ISO 3166-1), such as ["UA","DE"].
regionNoA list of region or state names (non-empty text), such as ["California"].
cityNoA list of city names. Needs country, and each city must belong to one of the listed countries.
deviceNodesktop, mobile, tablet, console, smarttv, wearable, embedded.
osNoWindows, macOS, Linux, iOS, Android.
browserNoChrome, Firefox, Safari, Edge, Opera, Brave.
timeStart, timeEndNoA time window in 24-hour HH:MM, for example "18:00" and "23:00". Set both or neither.
daysOfWeekNoWhole numbers 0–6, where 0 is Sunday: [5,6,0] is Friday to Sunday.
localeNoThe visitor's language, such as ["uk","de"]. Works for visitors, but is not checked during the import: a mistyped code is accepted and simply never matches.

Values of device, os and browser are case-sensitive: iOS, not ios; mobile, not Mobile.

One example per condition (JSON as you would see it in a text editor, without the CSV quoting):

Country, region and city
json
[
  { "name": "Ukraine", "targetUrl": "https://acme.inc/ua", "country": ["UA"] },
  { "name": "DACH", "targetUrl": "https://acme.inc/dach", "country": ["DE", "AT", "CH"] },
  { "name": "California", "targetUrl": "https://acme.inc/us-ca", "country": ["US"], "region": ["California"] },
  { "name": "Kyiv", "targetUrl": "https://acme.inc/kyiv", "country": ["UA"], "city": ["Kyiv"] }
]
Device, operating system and browser
json
[
  { "name": "Phones", "targetUrl": "https://acme.inc/m", "device": ["mobile"] },
  { "name": "Tablets and consoles", "targetUrl": "https://acme.inc/big", "device": ["tablet", "console"] },
  { "name": "Apple mobile", "targetUrl": "https://acme.inc/ios", "os": ["iOS"] },
  { "name": "Desktop Windows or Linux", "targetUrl": "https://acme.inc/pc", "os": ["Windows", "Linux"] },
  { "name": "Safari and Edge", "targetUrl": "https://acme.inc/browsers", "browser": ["Safari", "Edge"] }
]
Time window and days of the week
json
[
  { "name": "Evenings", "targetUrl": "https://acme.inc/evening", "timeStart": "18:00", "timeEnd": "23:00" },
  { "name": "Weekend", "targetUrl": "https://acme.inc/weekend", "daysOfWeek": [6, 0] },
  { "name": "Friday evenings", "targetUrl": "https://acme.inc/fri", "timeStart": "17:00", "timeEnd": "23:59", "daysOfWeek": [5] }
]
Combined conditions and language
json
[
  {
    "name": "Germany evenings on Chrome or Safari",
    "targetUrl": "https://acme.inc/de",
    "country": ["DE"],
    "browser": ["Chrome", "Safari"],
    "timeStart": "18:00",
    "timeEnd": "23:00",
    "daysOfWeek": [5, 6, 0]
  },
  { "name": "Ukrainian speakers", "targetUrl": "https://acme.inc/uk", "locale": ["uk"] }
]

The same two rules from the first example as they are written in the CSV cell:

text
"[{""name"":""Ukraine mobile"",""targetUrl"":""https://acme.inc/ua-mobile"",""country"":[""UA""],""device"":[""mobile""]},{""name"":""Germany"",""targetUrl"":""https://acme.inc/de"",""country"":[""DE""]}]"

ab_test — split test

A JSON list of at least two variants. Each has a url (a valid web address) and a weight (a positive number). The weights must add up to exactly 100.

json
[
  { "url": "https://acme.inc/spring-sale-a", "weight": 50 },
  { "url": "https://acme.inc/spring-sale-b", "weight": 50 }
]

Three variants and uneven shares:

json
[
  { "url": "https://acme.inc/a", "weight": 34 },
  { "url": "https://acme.inc/b", "weight": 33 },
  { "url": "https://acme.inc/c", "weight": 33 }
]

As a CSV cell:

text
"[{""url"":""https://acme.inc/spring-sale-a"",""weight"":50},{""url"":""https://acme.inc/spring-sale-b"",""weight"":50}]"

The test is switched on automatically when it is the only one of the two cells filled. Keep destination_url filled as well; use the address of your main variant.

A full file with rules, A/B test and routing mode

The first link uses its rules, the second an A/B test, the third has both cells filled and leaves routing_mode empty (the wizard will ask), the fourth has neither:

text
title,destination_url,short_link,domain,tags,created_at,expiration_date,clicks,rules,ab_test,routing_mode
Spring campaign,https://acme.inc/spring,spring,acme.inc,marketing,2026-03-01,2027-12-31,1250,"[{""name"":""Ukraine"",""targetUrl"":""https://acme.inc/ua"",""country"":[""UA""]}]","[{""url"":""https://acme.inc/spring-a"",""weight"":50},{""url"":""https://acme.inc/spring-b"",""weight"":50}]",rules
Summer webinar,https://acme.inc/webinar,webinar,acme.inc,events,2026-05-15,,480,,"[{""url"":""https://acme.inc/webinar-a"",""weight"":70},{""url"":""https://acme.inc/webinar-b"",""weight"":30}]",
Autumn sale,https://acme.inc/autumn,autumn,acme.inc,marketing,,,0,"[{""name"":""Mobile"",""targetUrl"":""https://acme.inc/m"",""device"":[""mobile""]}]","[{""url"":""https://acme.inc/autumn-a"",""weight"":60},{""url"":""https://acme.inc/autumn-b"",""weight"":40}]",
Winter promo,https://acme.inc/winter,winter,acme.inc,,,,,,,

If a link has both cells filled, only one can be active. Tell Revolink which in the Routing mode (routing_mode) column: rules or ab_test. Capitalization, spaces and hyphens do not matter (AB-Test works).

Leave it empty and Revolink asks you instead. On the Links step the row is marked Choose one and left unchecked (this is not an error). Click Use the A/B test or Use the redirect rules for that row, or use the buttons above the list to decide all such rows at once. You can also change a choice that came from the file (Use the A/B test instead / Use the redirect rules instead); your choice in the wizard wins over routing_mode. Nothing is guessed: a row nobody decided is not imported, and appears in the errors file as "Both rules and an A/B test are filled in, and neither was chosen."

Nothing is thrown away: the option you did not choose is saved on the link but stays inactive. If you chose the rules, the A/B variants are saved with the test switched off, and you can switch it on in the link editor if your plan allows A/B tests. If you chose the A/B test, the rules are saved but do not work while the test is on.

routing_mode must be rules or ab_test (see the error use "rules" or "ab_test"). If only one of the two cells is filled, leave routing_mode empty.

You can also set one routing mode for the whole import, see Using one value for all links.

Plan limits

The same plan limits apply as when you create a link by hand. The default rule counts toward the limit of rules per link, so on the Free plan (2 rules per link) you can import 1 routing rule per link, on Starter (10) up to 9, and on Pro (50) up to 49; Agency and Business have no limit. A/B tests need the Pro plan or higher.

If you import many links, the Plan step shows what the file needs: it counts the largest number of rules on one link (default rule included) and the largest number of A/B variants on one link, not the total across the file.

Existing links keep their rules

If a link already exists in Revolink (see Duplicates), importing it again updates only its title and default destination. The rules, ab_test and routing_mode cells in the file are ignored for it; change them on the link's page instead.

Dates

The same formats work for created_at and expiration_date:

FormatExample
ISO, with or without time and time zone2026-12-31, 2026-12-31T10:00:00Z
Day.month.year or day/month/year31.12.2026, 31/12/2026
Month/day/year12/31/2026
Day, month name, year31 Dec 2026
Month name, day, yearDecember 31, 2026
Unix time, in seconds or milliseconds1798675200
Excel serial number46387

YYYY-MM-DD is the safest. For values like 03/04/2026 that could be read either way, Revolink decides between day-first and month-first by looking at the whole file and tells you which it used; if that is wrong, use Adjust columns or rewrite the dates as YYYY-MM-DD.

  • Created date that cannot be read is ignored: the link is still imported, just without it.
  • Expiration date that is not a valid date makes the row Invalid ("The expiration date isn't a valid date, so the link can't be created.").
  • Expiration date in the past also makes the row Invalid: a link can't be created with an expiration date that has already passed. Such rows are not imported as expired links. Fix the date, or clear it, and import again.

Tags

  • Put all tags of a link in one cell. Separators: comma, semicolon, | or a new line.
  • A leading # is dropped, extra spaces are collapsed, and repeated tags (in any capitalization) are counted once.
  • A tag is limited to 50 characters; a longer tag is cut.
  • Tags that do not exist in the workspace are created. Your plan has a tag limit: tags beyond it are not created, the links are imported without them, and the result screen tells you how many.

Option 2 — Upload an export from another service

Upload the export from your previous link shortener as it is — no need to reshape it. Revolink recognizes the layout of Bitly, Short.io, Rebrandly, Dub, TinyURL and t.ly exports and maps their columns automatically.

For any other file, Revolink picks the mapping in this order:

  1. A known layout. The header names match a service above or the Revolink template.
  2. A remembered mapping. If you already imported a file with the same headers, the mapping you used is reused.
  3. An AI suggestion for files it does not know.

Whatever was chosen, you can check and change it on the Columns step. The domains of the old service (bit.ly and so on) cannot move with your links, see Domains and DNS.


Running the import, step by step

Open Workspace settings → Imports and click New import. The wizard has these steps: File → Columns → Domains → Tags → Links → Plan → DNS → Done. Columns, Links and Done are always there. Domains, Tags, Plan and DNS appear only when your file needs them. The Back button on any later step takes you back to Columns.

  1. File. Drop your file (or the template) into the upload area. Revolink checks the type, size and number of rows and shows what it found. Problems with the file itself are listed in Errors.
  2. Columns. Check which column of your file feeds each of the 11 fields (see Fields). Every select has a search over your column names. Only Destination URL is required; a field set to Don't import is skipped. For Routing mode, Tags, Domain and Expiration date you can also type one value for all links, see Using one value for all links. When you click Continue, Revolink checks every non-empty cell of the Redirect rules, A/B test and Routing mode columns completely, and shows all problems at once, one notification per problem. Fix them in the file (or change the mapping) and upload again, or continue with the rows that are fine. See Mapping errors.
  3. Domains. Appears when the file uses domains that are not set up in your workspace. See Domains and DNS.
  4. Tags. Appears only when the import would create at least one tag that your workspace does not have yet (How should your new tags look?). Pick a colour and an icon for each new tag; the list shows every new tag and how many of the selected links carry it. Tags you already have keep their look and are not listed. You can change the look later in Tags. See Tags for the limits.
  5. Links. Review the list. Each row is marked Ready, Short link taken, Already imported, Choose one or Invalid (in red, with the reason), and you can search and filter it. Uncheck any link you do not want to bring in. Use Enter a link to fix a destination that could not be read. The reasons are explained in Row errors.
  6. Plan. Appears only when the selected links need more than your current plan allows (Your import needs the … plan). One card per limit — Links, Custom domains, Tags, Rules per link, A/B test options — compares what the links need with your plan, and is marked Fits or Doesn't fit. Choose Get … to upgrade, or shrink the need with Back to link selection, Adjust my selection or Change domains. If you pick Not now, only part of the links is imported right away; the rest wait a number of hours and are imported automatically if you upgrade within that time, after which they are dropped.
  7. DNS. Appears when you keep custom domains that are not verified yet. Add the DNS records shown there. See Domains and DNS.
  8. Done. Click Import N links (N is the number you kept selected), and Revolink creates the links. You can close the tab — the import keeps running, and the links appear in your Links list. The result screen lists the rows that were not imported; see Errors.

You can save an unfinished import as a draft and pick it up later from Workspace settings → Imports. The values you typed for all links are saved in the draft too.


Sometimes every link of the file needs the same value, and there is no column for it. For Routing mode, Tags, Domain and Expiration date, you can type that value right in the select on the Columns step:

  1. Click the select and type the value, for example go.acme.inc.
  2. Pick the item Use "go.acme.inc" for all links.
  3. Under the select a yellow note appears: This value will be applied to all N links in this import.

The value is trimmed and then read the same way as a column:

FieldWhat to type
Routing moderules or ab_test.
TagsOne or more tags, separated as in Tags.
DomainA domain name, such as go.acme.inc. The scheme (https://), path and port are removed and the name is made lowercase. It must contain a dot.
Expiration dateAny date in the formats above, and it must be in the future.

If the value is wrong, Continue shows The value "xyz" you entered for (field name) is not valid: (reason) and nothing moves on. Reasons: it must be a domain name, e.g. go.example.com, it must be a date, e.g. 2027-01-01, it must be a date in the future, use "rules" or "ab_test".

Fields that have a different value for every link — Destination URL, Short link, Title, Past clicks, Created date, Redirect rules and A/B test — cannot be filled this way.


Domains and DNS

The domain column (or the value you typed for all links) tells Revolink which domain each short link should live on.

  • Empty domain — the link is created on rvlnk.link.
  • A domain you already have in the workspace and verified — the link is created on that domain.
  • A domain that is not set up yet — by default, the links move to rvlnk.link. On the Domains step you can instead keep the domain, or swap it for another domain you own. If you keep it, the DNS step shows the record to add at your DNS provider so that Revolink can verify the domain. Links on a domain that is still verifying are imported automatically as soon as verification finishes.
  • The previous service's own domain (for example bit.ly, rebrand.ly, tinyurl.com) cannot move with you, so those links go to rvlnk.link or to a domain you own.

The result screen shows how many links were placed on rvlnk.link because their original domain was not set up. Custom domains count against your plan's domain limit; the Plan step shows it.


  • Already imported. Revolink remembers which links came from an import. A row whose identifier (domain + short link, or the destination URL when there is no short link) is already in the workspace from the same service updates the existing link instead of creating a second copy. Only its title and the destination of the main rule are overwritten; rules and A/B tests are left as they are. Uncheck those rows if you want to leave the links as they are.
  • Short link taken. If the short link you asked for is already used by another link on that domain, the row is marked Short link taken and is unchecked. Leave it unchecked to skip it, or select it on purpose: the link is then created with a generated short link, and the original one is kept in the link's import details.
  • Two rows with the same short link in one file are treated as the same link. If you want several links to the same page, give each a different short link.

Limits

WhatLimit
Rows per import5,000
File size20 MB
File types.csv, .tsv, .xls, .xlsx, .json
Imports at a time in a workspace1
Title255 characters
Short link100 characters
One tag50 characters
Expiration datemust be in the future
Rules per link, A/B tests, links, domains, tagsby plan
Problem rows shown in the result and the errors filefirst 200

Errors and how to fix them

Problems are caught in three places: when you drop the file, when you click Continue on the Columns step, and on the Links step, where a bad row is red with its reason. What is still not imported at the end is listed on the result screen under Rows that were not imported. Click Download errors (CSV) to save the list. The file has two columns:

ColumnMeaning
rowThe row's number in your file, counting the first data row (below the header) as 1.
reasonWhy the row was skipped or failed.

Fix those rows in your file and import it again. Links that already exist are updated, not duplicated, so it is safe to re-upload the whole file. The messages are shown in your interface language; the tables below use the English text.

File errors

MessageWhat to do
Unsupported file type - expected .csv, .tsv, .xls, .xlsx or .json.Save the file in one of these formats.
The file has N rows, but one import can bring in at most 5000. Split it into parts...Split the file into parts of up to 5,000 rows and import them one after another.
The file is larger than 20 MB. Split it...Split the file into smaller ones.
JSON file must be an array of link objects.Make the top level of the .json file a list [ {...}, {...} ].
The file has no rows to import.Check that the file has data rows below the header (and, for Excel, that the data is on the first sheet).

Mapping errors

Shown on the Columns step after Continue, one notification per problem, all at once. Their form is:

Column "X" cannot be used for Redirect rules / A/B test / Routing mode (row N): reason

The notifications for Redirect rules and A/B test end with a link See the import guide that leads to Rules and A/B tests. The row number is the row in your file, with the first data row as 1.

Reasons — any of the three columns (Redirect rules, A/B test):

ReasonWhat to do
the cell is not valid JSON.Check quotes, commas and brackets. In a CSV, wrap the cell in " and double every inner ".
the cell must hold a non-empty JSON list.Use [ ... ] with at least one item, or leave the cell empty.
the list must contain only objects.Every item of the list must be { ... }.
the value isn't valid, please check it against the import guide.Fallback for anything else; compare the cell with the examples above.

Routing mode:

ReasonWhat to do
use "rules" or "ab_test".Put exactly rules or ab_test (case does not matter), or leave the cell empty.

A/B test:

ReasonWhat to do
an A/B test needs at least 2 variants.Add a second variant, or clear the cell.
variant N: url is required and must be a valid URL.Give the variant a full http:// or https:// address.
variant N: weight must be a positive number.Use a number above 0.
the shares of the variants must add up to 100 (now S).Change the weights so they sum to exactly 100; S is the current sum.

Redirect rules (rule N is the position in the list, starting from 1):

ReasonWhat to do
rule N: targetUrl is required and must be a valid URL.Add a full http:// or https:// address as targetUrl.
rule N: country must be a list of 2-letter codes, e.g. "UA", "DE".Write "country":["UA","DE"].
rule N: unknown country code "XX".Use a real ISO 3166-1 alpha-2 code.
rule N: field must be a list.Write the value as a list: "device":["mobile"], not "device":"mobile".
rule N: device / os / browser has invalid values: ... Allowed: ...Use only the allowed values shown in the message; mind the capitalization.
rule N: country is required when a city is set.Add country, or remove city.
rule N: the city "X" isn't in our list.Check the spelling, or use only country / region.
rule N: the city "X" is in C, which isn't among the countries of this rule.Add C to country, or fix the city.
rule N: every region must be a non-empty text.Remove empty items from region.
rule N: timeStart and timeEnd must both be set or both left out.Fill both or neither.
rule N: timeStart / timeEnd must be in HH:MM format.Use 24-hour "09:00", "23:30".
rule N: daysOfWeek must be whole numbers from 0 to 6 (0 = Sunday).Use [1,2,3,4,5] for Monday to Friday.
rule N: the main rule (the destination link) can't have conditions.Remove the main rule from the list: it is built from destination_url.

Other notifications on the Columns step:

MessageWhat to do
The destination URL column must hold valid http(s) links.Map the correct column to Destination URL; its cells must start with http:// or https://.
The value "xyz" you entered for field is not valid: reasonSee Using one value for all links.
N links can't be imported. reason (yellow)The rows are invalid for the reason given; see Row errors. Fix the file, or continue without them.

Row errors

On the Links step a bad row is red (Invalid) with one of these reasons, and the same text goes to the errors file.

ReasonWhat to do
Missing or invalid destination URL.Put a full http:// or https:// address (not an email, ftp:// and so on), or fix it with Enter a link.
The title is empty, so the link can't be created.Only happens when the title cell holds nothing but spaces. Type a real title or clear the cell (an empty cell gets an automatic name).
The title is longer than 255 characters (N), so the link can't be created.Shorten the title.
The short link may only contain letters, numbers and single hyphens (not at the start or end), so the link can't be created.Remove underscores, dots, slashes, double hyphens and hyphens at the ends, or leave the short link empty to get a generated one.
The short link is longer than 100 characters (N), so the link can't be created.Shorten it.
The expiration date isn't a valid date, so the link can't be created.Write it as YYYY-MM-DD.
The expiration date (YYYY-MM-DD) is in the past, so the link can't be created.Set a future date, or clear the cell.
The destination is this link itself (same domain and short code).The link would redirect to itself. Put the real page in Destination URL.
Both rules and an A/B test are filled in, and neither was chosen.Not an error: choose Use the redirect rules or Use the A/B test for the row, or fill Routing mode.
A link with this short link already exists: domain/key.Status Short link taken; see Duplicates.
Rules / A/B test problems of the rowThe same reasons as in Mapping errors.

Other reasons a link may not be created: the plan's link limit was reached (the remaining links wait for a limited time — upgrade in that window and they are imported automatically), or a rule or A/B test goes beyond what your plan allows.


Using an AI assistant to prepare the file

If you have an export in an unusual layout, an AI assistant can convert it into the template for you. Give it the instructions in import-csv-agent-instructions.md together with your export, then upload the file it produces.