# Import file columns and formats

Every field a column of your import file can fill and what it accepts, the file types and templates, and what the import checks before it runs.

Every row of an import file needs the customer's name, and either the testimonial's text or a link to a video. Every other column is optional. This page lists each field a column can fill and what it accepts, the file types and templates, and what the import checks before it runs.

To run an import, see [Import testimonials from CSV, Excel or JSON](/help/import/import-from-csv-excel-or-json). If your file comes from another tool, see [Move your testimonials from Senja or Testimonial.to](/help/import/move-from-senja-or-testimonial-to) for the column names of its export.

## Fields a column can fill

On the **Map Columns** step, you pick one column of your file for each field. You must map **User Name** and either **Testimonial Content** or **Video URL**.

| Field                   | What the column holds                                                          | Name in the templates |
| ----------------------- | ------------------------------------------------------------------------------ | --------------------- |
| **User Name**           | The customer's name. Every row needs one.                                      | `name`                |
| **User Email**          | Their email address.                                                           | `email`               |
| **User Title**          | Their job title.                                                               | `title`               |
| **Company**             | Their company's name.                                                          | `company`             |
| **User Avatar**         | A link to their photo.                                                         | `avatar`              |
| **Testimonial Content** | The testimonial's text. Every row needs it, unless the row has a video link.   | `content`             |
| **Rating**              | A number from 1 to 5. A decimal is rounded to the nearest star.                | `rating`              |
| **Title**               | A headline for the testimonial.                                                | `testimonial_title`   |
| **Video URL**           | A link to a video file. See [Rows with a video link](#rows-with-a-video-link). | `video_url`           |
| **Tags**                | Tags, separated by commas.                                                     | `tags`                |
| **Source URL**          | A link to the place the testimonial was first published.                       | `source_url`          |
| **Social Profile URL**  | A link to the customer's profile on a social network.                          | `social_profile_url`  |
| **Attached Images**     | Links to images, separated by commas.                                          | `attached_images`     |
| **Company Logo**        | A link to the company's logo.                                                  | `company_logo`        |
| **Company Link**        | A link to the company's website.                                               | `company_link`        |
| **Testimonial Date**    | The date of the testimonial, written year first: 2024-01-15.                   | `testimonial_date`    |

Columns with common names are matched for you, such as `name`, `author`, `review`, `stars` or `date`. Capital letters, spaces, dashes and underscores make no difference. A column that isn't mapped to a field isn't imported.

**Text** is saved as plain text. HTML tags in your file are removed.

**Links** must start with `http://` or `https://`.

**Ratings** on another scale, such as marks out of 10, need converting to 1 to 5 before you import. A rating outside 1 to 5 is left out with a warning, and the row is imported without stars, like a row with no rating.

**Dates** written year first, such as 2024-01-15, are read as written. That's the form the templates use. A date written only as numbers is read by its own numbers where they allow one reading: 13/04/2024 is 13 April. Where both could be a month, as in 03/04/2024, it's read month first, with a warning that says which day was chosen.

A cell that holds only a number is read as a date in two cases. Four digits from 1900 to 2100 are a year, and stand for 1 January of that year. A spreadsheet's own number for a date, such as 45306 (a date column saved as numbers), is read as that day, with a warning that says which day. Any other number isn't a date: the row is imported without one, with a warning.

**Tags** are kept only when your project already has them, so create them first: in **Pending** or **Approved**, click **Options**, then **Manage tags**. Tags from a file are saved in lowercase. See [Organize testimonials with tags](/help/manage/tag-testimonials).

**Pictures** come in as the addresses in your file. Whether ReTestimonial stores its own copy of each one depends on **Download image URLs**: see [Import options](/help/import/import-from-csv-excel-or-json#import-options). To check a picture afterwards, see [Check that your pictures were copied](/help/import/move-from-senja-or-testimonial-to#check-that-your-pictures-were-copied).

## Rows with a video link

A row with an address under **Video URL** becomes a video testimonial. The video file isn't copied: the testimonial holds only the address, and the video is loaded from there whenever someone presses play, in your inbox or in a widget.

- **Use a direct link to a video file,** such as one that ends in `.mp4`. It stops playing when the file is removed from that address.
- **A video on a video site,** such as YouTube, Vimeo or Loom, belongs under **Media Platforms** instead, which plays it in that site's own player. In a file, a link to such a page is left out with a warning: the row is imported with its text, and a row that has nothing else is skipped. See [Video and audio imports](/help/import/video-and-audio-imports).
- **To keep your own copy of a video,** upload its file from your inbox. See [Move your videos](/help/import/move-from-senja-or-testimonial-to#move-your-videos).
- **Text is optional on these rows.** Where you have the customer's words, map them to **Testimonial Content** as well.
- **Each of these rows counts as a video testimonial** toward your plan's limit. See [Video testimonials](/help/account/plan-limits#video-testimonials).

## Custom fields

If your project has custom fields (available on Pro, Premium and Business), map them under **Custom Field**, below the standard fields; a column with the same name is matched for you.

A value that doesn't fit its field, such as an option a dropdown doesn't have, is skipped with a warning. An empty required custom field doesn't block the import: the row imports without that value.

| Field type                    | What the column holds                                                                                                                                                                   |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Short Text**, **Long Text** | Text. HTML tags are removed.                                                                                                                                                            |
| **URL**                       | A link that starts with `http://` or `https://`.                                                                                                                                        |
| **Checkbox**                  | `true`, `yes`, `y`, `1` or `on` for Yes; `false`, `no`, `n`, `0` or `off` for No.                                                                                                       |
| **Dropdown**                  | One of the field's options. Capital letters make no difference.                                                                                                                         |
| **Number**                    | A number, such as 1500 or 1,500. The field's own rules apply: its **Minimum value** and **Maximum value**, and whether it allows decimals and negative numbers.                         |
| **Country**                   | The country's name or its two-letter code, such as US.                                                                                                                                  |
| **Currency**                  | An amount with its currency, such as `USD 4999`, `4999 USD` or `€49.99`. An amount on its own takes the field's **Default currency**. Use a comma for thousands and a dot for decimals. |

A **Country** field that collects a region has a second row on the mapping step, named after the field and ending in **Region**. Map it to a column that holds the state or province. For the US, Canada, Australia, the UK and India, write the region's name or its code, such as California or CA; for other countries, any text is kept. When the field requires a region, a row without a usable one is imported without the field's value.

In the templates, each custom field's column is named after the field, in lowercase with underscores: `company_size` for a field called Company Size.

## Supported files

- Free accepts CSV files; Pro, Premium and Business accept CSV, XLSX and JSON files. XLSX is an Excel file (`.xlsx` or `.xls`).
- On a plan that doesn't accept Excel or JSON files, the upload box shows an **Upgrade** link to unlock them.
- In a CSV or Excel file, the first row must hold your column names. Empty rows are skipped.
- Only the first sheet of an Excel file is read.
- A JSON file must be an array of objects, or an object holding a `testimonials` or `data` array. Each object's property names are the columns.
- Save CSV and JSON files with UTF-8 encoding.
- Rows you paste under **Paste Data** are read like a CSV file, with your column names in the first row. Pasting is on every plan. The separator between columns is detected for you; if the columns come out wrong, choose it yourself: comma, tab, semicolon, pipe, colon, space or equals sign.
- The upload box shows the largest file it accepts and, when your plan has a limit, the most rows it takes in one import. See [Plan limits](/help/import/import-from-csv-excel-or-json#plan-limits).

A JSON file with one testimonial looks like this:

```json
[
  {
    "name": "Jane Doe",
    "content": "Testimonial text goes here.",
    "rating": 5
  }
]
```

## Templates and presets

Open **Need a template or migrating from another platform?** above the upload box:

- **Download templates**: a **CSV template**, **XLSX template** or **JSON template** with a sample row and a column for every field, including your project's custom fields.
- **Import presets**: sample CSV files that use the column names of **Senja** and **Testimonial.to**. See [Move your testimonials from Senja or Testimonial.to](/help/import/move-from-senja-or-testimonial-to) before you close your old account.

## What validation checks

When you click **Validate Data**, every row is checked before anything is imported.

**Errors** skip the whole row. A row has an error when it has no name, has neither testimonial text nor a video URL, or its email address or domain is on your project's spam blacklist (while spam detection is on).

**Warnings** keep the row but drop one value: an invalid email address, link or date, a rating that isn't a number from 1 to 5, a tag the project doesn't have, or a link to a YouTube, Vimeo or Loom page under **Video URL** (add those under [Media Platforms](/help/import/video-and-audio-imports) instead; only a direct link to a video file plays).

A date written only as numbers, such as 03/04/2024, could mean two days. It's read month first, with a warning that says which day was chosen. A spreadsheet's date number, such as 45306, gets a warning with the day it was read as. Write dates as YYYY-MM-DD to leave no doubt. With **Download image URLs** on, a picture that couldn't be copied gets a warning too, and keeps loading from the address in your file.

Duplicates aren't counted at this step. With **Skip duplicates** on, they're skipped while the import runs: see [Import the same file again](/help/import/undo-or-re-run-a-file-import#import-the-same-file-again).

If a message stops your import or rows are skipped that you expected to come in, see [File import failed or skipped rows](/help/troubleshooting/file-import-failed).
