# Data migration

> Move an existing base of accounts, users, stations and cards onto Road, by CSV in the dashboard, with the migration team, or over the API.

Moving onto Road from another system? There are three ways to bring an existing base of accounts, users, charging stations and cards across, depending on the size and shape of the job.

## Import by CSV

The dashboard has a staged CSV importer, **Data Imports**, at [https://dashboard.road.io/data-imports](https://{{customDNS}}/data-imports). Nothing is written until the whole set validates, so you fix problems against your source files rather than against half-migrated data.

It stitches the pieces together for you. You give each row a **`reference`** of your own, and rows point at their parents by it, a user names its `accountReference`, a connector its `evseControllerReference`, and so on. So you can hand it a pile of files in any order: it works out the graph, applies the objects in dependency order (accounts before the things that hang off them), and resolves every reference, whether the parent is another row in the same import or something already on Road. You never touch Road's internal IDs, and there is no right order to prepare your files in. This linking is the importer's own, separate from an object's `externalId`.

Validation runs across the whole set rather than file by file, so a location can point at an account that only exists as another row in the same import and still pass. It catches what actually breaks a migration: missing required fields, malformed emails, IBANs or country codes, connector ratings that do not add up, duplicate references, a parent that does not resolve, or a record that already exists. Every failure is pinned to its row and exportable, so you fix the source and run it again.

The import itself is resilient: records go in in batches, and a handful of bad rows do not sink the run, the good ones land and you are told exactly what went in and what did not. Files are plain CSV, comma or semicolon separated so European Excel exports work, up to 100 MB each.

It covers accounts, users, locations, charging stations, connectors, virtual cards and cards, and can either create records or update existing ones.

## Bring in the migration team

Migrating a large fleet of charging stations? Road has migration specialists who can plan and run a full migration with you. Most of the time this needs no physical access to the hardware; where it does, Road works with partners to get it done. Ask your account manager to bring them in.

## Migrate over the API

For a migration driven from your own tooling, the platform exposes create endpoints for the core objects. Start with [Accounts](/docs/platform/reference/platform-api/accounts) and [Users](/docs/platform/reference/platform-api/users), and see [Providers, accounts and users](/docs/platform/account-management/providers-accounts-and-users) for how provider-level provisioning works.
