# File import failed or skipped rows

Find out why a CSV, Excel or JSON import was refused, skipped rows, stopped or ended with Import failed, and how to import the rows that are missing.

When an import of a CSV, Excel or JSON file, or of pasted rows, goes wrong, the **Import** page says where: the file is refused when you upload it, some rows are skipped, or the import ends with **Import failed**. Most often the import worked and left out the rows that had an error.

For reviews from a review site that didn't come in, see [Imported reviews are missing](/help/troubleshooting/import-problems).

## Check this first

A row with an error is skipped and the rest are imported, so an import can end with **Import completed** and still leave rows out. On the results screen, the **Errors** tile counts those rows and **Top issues** lists the first five. Click **Download report** to see each row's problem.

For everything else, go to the section for what you see:

| What you see                                                                | Go to                                                                                     |
| --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| A message when you choose a file, or click **Parse File** or **Parse Data** | [The file or pasted data is refused](#the-file-or-pasted-data-is-refused)                 |
| **Validate Data** or the import buttons are greyed out                      | [A button is greyed out](#a-button-is-greyed-out)                                         |
| Rows that "will be skipped", or a number under **Errors** or **Duplicates** | [Rows were skipped](#rows-were-skipped)                                                   |
| **Text testimonial limit reached for your plan**                            | [Rows over your plan's testimonial limit](#rows-over-your-plans-testimonial-limit)        |
| **Import in progress** that doesn't end                                     | [A large file is imported in the background](#a-large-file-is-imported-in-the-background) |
| **Import failed**                                                           | [The import ended with Import failed](#the-import-ended-with-import-failed)               |
| **Import cancelled** or **Import stopped**                                  | [The import was cancelled](#the-import-was-cancelled)                                     |
| The page opens on a file you uploaded earlier                               | [The Import page opens on an earlier upload](#the-import-page-opens-on-an-earlier-upload) |

## The file or pasted data is refused

These messages appear on the **Upload Data** step, before anything is imported.

- **“.xlsx” isn't supported on your plan. Accepted: CSV.** The message names your file's ending and the types your plan takes. Free takes CSV files; Pro, Premium and Business take CSV, XLSX and JSON files. Save the file as CSV in your spreadsheet program, or upgrade. Any other kind of file, such as a PDF, gets the same message. See [Supported files](/help/import/import-file-columns-and-formats#supported-files).
- **File exceeds the … import limit.** (for pasted rows, **Pasted data exceeds the … import limit.**) The file is larger than the **Max file size** shown in the upload box. Split it into smaller files and import them one after another.
- **Your plan allows up to … rows per import.** A file with more rows than your plan allows in one import is rejected. Split it into smaller files. The upload box shows your plan's number, and [Plan limits](/help/account/plan-limits#rows-in-one-import) lists it for every plan.
- **No columns detected. Your file may be empty or have no header row.** The file has no rows to read. Only the first sheet of an Excel file is read, so put your rows there.
- **Header row found but no data rows. Add at least one row of data.** The first row is always read as your column names, so a file with a single row has nothing to import. Add a first row that names each column, above your testimonials.
- **Invalid JSON format: …** The file can't be read as JSON. Check it for a missing comma, quote or bracket.
- **JSON must be an array of objects or an object with a "testimonials" or "data" array.** or **No testimonial data found. JSON should be an array or contain a "testimonials" or "data" array.** The file must hold a list of testimonials: an array of objects, or an object whose `testimonials` or `data` property is that array.
- **Failed to parse file. Check the format and try again.** The file couldn't be read at all. Open it in your spreadsheet program, save it again as CSV with UTF-8 encoding and upload that.

To start from a file that's laid out the right way, use the **CSV**, **XLSX** or **JSON** link beside **Need a template?** in the upload box. [Import file columns and formats](/help/import/import-file-columns-and-formats) lists the columns a file can have and what each one accepts.

## A button is greyed out

**Validate Data is greyed out.** On the **Map Columns** step you must map **User Name** and either **Testimonial Content** or **Video URL**. Until you do, a note under the button reads "Map User Name and either Content or Video URL to continue."

**Test Import (1 row) and the Import button are greyed out.** On the **Review** step, the summary reads "0 of … rows will be imported": every row has an error, so there's nothing to import. Check the mapping first, because a required field that points at the wrong column leaves every row empty. Click **Back**, pick the right columns and click **Validate Data** again.

## Rows were skipped

The **Review** step says how many rows will be imported and how many "rows with errors will be skipped", before anything is imported. An error skips the whole row:

- **Missing required field: Author name**: the row has nothing in the column you mapped to **User Name**.
- **Missing required field: Testimonial content**: the row has neither text in the column mapped to **Testimonial Content** nor a link in the column mapped to **Video URL**. A link must start with `http://` or `https://`.
- **Author email/domain is blacklisted for this project**: the row's email address or its domain is on the project's spam blacklist. See [Keep spam out of your inbox](/help/manage/review-spam).

A warning doesn't skip the row. It drops one value that can't be read, such as an email address, a link, a date or a tag the project doesn't have, and imports the rest of the row. [Fields a column can fill](/help/import/import-file-columns-and-formats#fields-a-column-can-fill) says how to write each column.

**Duplicates.** With **Skip duplicates** on, a row is skipped, and counted under **Duplicates** in the results, when it has the same text and name as an earlier row of the file, or as a testimonial that came from a form or an earlier file import. Testimonials you added by hand or imported from a platform aren't compared. It's on unless you switch it off under **Import Options**. See [Import the same file again](/help/import/undo-or-re-run-a-file-import#import-the-same-file-again).

**The report.** **Download report** on the **Review** step lists the errors and warnings before you import, and **Download report** on the results screen lists what the import met. Neither holds everything for a file with very many bad rows. The **Review** step lists the first 500 issues, and its report holds the same 500: a line under the list says how many there are in all, so fix those and validate again to see the rest. An import keeps about its first 200 errors and its first 200 warnings, and a line under **Download report** says when its report is cut. The tiles always count every row.

**Your test row wasn't imported.** **Test Import (1 row)** imports only the first row of your file. If that row has an error or is a duplicate, the page says "Your test row wasn't imported — see the issues above." Click **Adjust mapping**, or correct the row in your file.

To bring in the rows that were left out, see [Import the rows that are missing](#import-the-rows-that-are-missing).

## Rows over your plan's testimonial limit

The **Review** step doesn't count your plan's testimonial limit. Rows that would go past it are skipped while the import runs, and the results list them as errors: **Text testimonial limit reached for your plan** or **Video testimonial limit reached for your plan**. A row with a link in **Video URL** counts as a video testimonial (see [Rows with a video link](/help/import/import-file-columns-and-formats#rows-with-a-video-link)), and every other row as a text testimonial.

Archive testimonials you don't need, or upgrade: see [You reached your plan's testimonial limit](/help/troubleshooting/import-problems#you-reached-your-plans-testimonial-limit). Then run the import again from **History**, as described under [Import the rows that are missing](#import-the-rows-that-are-missing).

## A large file is imported in the background

An import of more than 25 rows, or one with **Download image URLs** switched on, runs in the background. The **Import** page shows **Import in progress** with the rows processed so far, and updates by itself, until it ends with **Import completed** or **Import failed**, with the reason. **Cancel Import** stops it; the rows imported before that stay in your project.

You can leave the page and open **History** later to check it. When the import ends, the workspace owner and the project's Admins get an **Import completed** or **Import failed** notification, or **Import stopped** when the project became read-only while it ran. A failed or stopped one gives the reason and opens that import's results screen.

**History** shows each import's status and counts. Click **View results** on an entry to open that import's results screen, with the reason for a failure and the rows that were skipped: see [Check how an import ended](/help/import/undo-or-re-run-a-file-import#check-how-an-import-ended).

An import that stalls is picked up again by itself within about 20 minutes, and carries on after the rows it had finished. After three tries it ends with **Import failed**.

## The import ended with Import failed

**Import failed** means the import stopped before the end of the file. A red box under the tiles gives the reason. Rows that were imported before it stopped stay in your project, and the **Imported** tile counts them.

- **The import stopped before it could finish and got no further when it was tried again, so it was ended.** The import stalled three times without finishing.
- **The uploaded file could not be read, so the import could not run.** The copy of your file that ReTestimonial keeps for the import could no longer be read. Upload the file again.
- **The import stopped because of a problem on our side.** Something went wrong at ReTestimonial, not in your file.

To finish it, open **History** and click **Re-import** on the failed import: see [Import the rows that are missing](#import-the-rows-that-are-missing). If it fails again, [contact us](#still-stuck).

## The import was cancelled

**Import cancelled** means someone on your team clicked **Cancel Import** on the page or **Cancel** in **History**.

**Import stopped** means ReTestimonial stopped it because the project became read-only while the import was running. An amber box under the tiles gives the reason, and the workspace owner and the project's Admins get an **Import stopped** notification. See [Project is read-only](/help/troubleshooting/project-is-read-only).

Either way, rows imported before that stay in your project.

A cancelled import has no **Re-import** button. Upload the file again, with **Skip duplicates** left on.

## The Import page opens on an earlier upload

If you leave the **Import** page before you run the import, your upload, mapping and options are kept in that browser tab. When you come back, the page opens where you left off and says "We restored your in-progress import so you can pick up where you left off." To import another file instead, click **Start fresh**.

## Import the rows that are missing

- **You corrected rows in your file.** Upload the file again and leave **Skip duplicates** on. The rows that came in the first time are skipped as duplicates, so only the corrected rows are added.
- **The file is fine, and the import failed or met a plan limit.** Click **History** at the top of the **Import** page, then **Re-import** on that import. It runs the same file again, and with **Skip duplicates** on it skips the rows that already came in. See [Run an import again](/help/import/undo-or-re-run-a-file-import#run-an-import-again) before you re-import with **Skip duplicates** off.
- **Re-import answers Unable to load import source.** The stored copy of the file is gone. Upload the file again.

To remove what an import brought in instead, see [Roll back an import](/help/import/undo-or-re-run-a-file-import#roll-back-an-import).

## Still stuck?

[Contact us](/contact) and include:

- your project's name, and roughly when you ran the import;
- the kind of file (CSV, Excel, JSON or pasted rows) and about how many rows it has;
- the message you saw, word for word;
- the **Job ID**, which is under **Details** at the bottom of the import's results screen.

## Next steps

- [Import testimonials from CSV, Excel or JSON](/help/import/import-from-csv-excel-or-json)
- [Import file columns and formats](/help/import/import-file-columns-and-formats)
- [Undo or re-run a file import](/help/import/undo-or-re-run-a-file-import)
- [Imported reviews are missing](/help/troubleshooting/import-problems)
