## Overview

Location imports let you bulk-create or update factory locations. Column headers are matched case-insensitively and extra whitespace is trimmed.

## Columns

| Column | Required | Description |
| --- | --- | --- |
| `name` | Yes | Location name. Must be unique within the CSV and cannot exceed 128 characters. |
| `original_name` | No | If renaming an existing location, this is the current name in ION. Max 128 characters. **Lookup column**: an empty cell means “no rename,” not `""`. |
| `parent_name` | No | Name of the parent location. Used to build nested hierarchies. |
| `description` | No | Description of the location. Max 512 characters. |
| `address` | No | Physical address. Max 128 characters. |
| `available` | No | Whether the location is available. Boolean field (see [accepted values](https://docs.firstresonance.io/administration/ion-importers#accepted-boolean-values)). |
| `archived` | No | Whether the location is archived. Boolean field (see [accepted values](https://docs.firstresonance.io/administration/ion-importers#accepted-boolean-values)). |
| `exclude_from_merge_part_inventory` | No | Exclude this location from merged part inventory views. Boolean field (see [accepted values](https://docs.firstresonance.io/administration/ion-importers#accepted-boolean-values)). |
| `latitude` | No | Latitude coordinate. Must be between -90 and 90. Empty cells are treated as unset (not `0`). |
| `longitude` | No | Longitude coordinate. Must be between -180 and 180. Empty cells are treated as unset (not `0`). |
| `type` | No | Location type (must match a valid location type in your organization). |
| `supervisor` | No | Email address of the supervisor. Must match an existing user in ION. |

## Custom attributes

Any columns beyond the standard set are matched against your organization’s custom location attributes. If a column header does not match a standard column or a configured custom attribute, the import will fail with a validation error.

## Parent-child hierarchies

You can define nested locations by specifying a `parent_name` for each row. ION resolves parents automatically, including parents that are created within the same import. Parents are always processed before their children regardless of row order. Circular parent-child relationships are detected and rejected. An example is Location A being the parent of Location B, which is in turn the parent of Location A.
