> For the complete documentation index, see [llms.txt](https://docs.ninox.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ninox.com/builder-hub/design-your-app/import-and-export-data/import-data.md).

# Import data

Use imports to bring CSV data into an app without entering records manually.

{% hint style="info" %}
You can only import data into a table if you have write permission for that table.
{% endhint %}

You can import data in two ways:

* into an existing table
* into a new table that Ninox creates from the file

During import, you control how Ninox reads the file and where each column goes. This includes:

* choosing whether to insert new records, update existing records, or do both
* checking parse settings such as encoding, separators, and date formats
* mapping CSV columns to existing Ninox fields or creating new fields
* previewing the result before you import anything

### What you can control during import

The import dialog lets you decide how Ninox reads the file and how each CSV column is handled.

Two areas matter most:

* **Parse settings** control how Ninox reads the file format.
* **Map fields** control where the CSV data goes in Ninox.

#### Parse settings

In **Parse settings**, you define how Ninox reads the import file.

Start by choosing how Ninox should handle the records:

* **Update only** updates existing records
* **Insert only** adds new records
* **Update & insert** updates existing records and adds new ones

Then check the file format options:

* **Encoding** defines the character set, such as **UTF-8 (Unicode)**
* **Date format** defines how Ninox reads date values
* **Number format** defines how Ninox reads decimal and thousands separators
* **Column separator** defines how columns are separated, such as comma, semicolon, or tabulator
* **Text delimiter** defines which quotation marks wrap text values

You can also control two import details:

* **Include header** tells Ninox that the first row contains column names
* **Treat empty fields as null** imports empty values as `null`. This means the field has no value. It is not an empty text value and not the number `0`. Use this option when empty cells should stay unset after import.

Use the preview on the right to check whether Ninox reads the file correctly.

The preview also uses color labels to show what will happen during import:

* **New** shows records that Ninox will add
* **Updated** shows records that Ninox will change
* **Removed** shows records that will be removed from the result set during import preview
* **Unchanged** shows records that stay the same

#### Map fields

In **Map fields**, Ninox shows one row for each CSV column. \
Use the **Import** toggle to decide whether Ninox should import that column at all. If the toggle is off, Ninox skips the column.\
In **CSV fields**, you see the column names from the CSV file.\
In **Existing ninox fields**, you choose what Ninox should do with each CSV column.\
You can:

* select **Do not map** to ignore the column
* select an existing Ninox field to import the values into that field
* select **+ Create field** to create a new field for that column

If you select an existing Ninox field, Ninox maps the CSV column to that field.

In this case, you can also choose an **Update policy**:

* **Update** replaces the existing value
* **Update empty** fills only empty values

If you select **+ Create field**, Ninox adds a second selector below it. Use that selector to choose the field type, such as **Text**.

### Import data into an existing table

Use this flow when the table already exists.

{% stepper %}
{% step %}
**Open the import dialog**

Open the table in **Table view**.\
In the toolbar, click **Import/export**.\
Then click **Import data**.
{% endstep %}

{% step %}
**Upload your file**

Drag your CSV file into the import dialog. Or select the file from your local device.
{% endstep %}

{% step %}
**Review parse settings**

Choose how Ninox should read the file.

Start with the import mode:

* **Insert only** adds new records
* **Update only** changes existing records
* **Update & insert** does both

Then check these options:

* **Encoding**, such as **UTF-8 (Unicode)**
* **Date format**
* **Number format**
* **Column separator**
* **Text delimiter**
* **Include header**
* **Treat empty fields as null**

Use the preview on the right to verify the result.
{% endstep %}

{% step %}
**Map the file columns**

Open **Map fields**.

For each CSV column, choose the matching existing field.\
You can also:

* turn off **Import** to skip a column
* create a new field if needed
* choose an update policy for mapped fields

Use **Update** to replace existing values.\
Use **Update empty** to fill only empty values.
{% endstep %}

{% step %}
**Import the records**

Check the preview one last time.\
Then click **Import records**.
{% endstep %}
{% endstepper %}

### Create a new table from CSV

Use this flow when the table does not exist yet.

{% stepper %}
{% step %}
**Start a new table import**

In the app navigation, click the arrow next to **+ Create table**.\
Choose **Import table from CSV**.
{% endstep %}

{% step %}
**Upload your file**

Upload your CSV file.\
Ninox opens the import dialog.
{% endstep %}

{% step %}
**Review table details and parse settings**

Check the suggested **Table name**.\
Check the suggested **Internal name**.\
Then review the same parse settings as in the existing table import.
{% endstep %}

{% step %}
**Map the fields**

Open **Map fields**.\
For each CSV column, either create a new field or map it to an existing field.\
If you create a new field, choose the field type.
{% endstep %}

{% step %}
**Create the table**

Review the preview.\
Then click **Create table**.
{% endstep %}
{% endstepper %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.ninox.com/builder-hub/design-your-app/import-and-export-data/import-data.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
