Dataverse data import templates
By Emil Björk · Microsoft business apps consultant, Gothenburg
How to bulk-import data into Dataverse using import templates — the wizard, CSV/Excel formats, lookups by name, duplicate detection.
On this page (11)
Bulk-loading data into Dataverse — a list of contacts from a marketing event, the customer master from a legacy system, a one-off catalog refresh — is a common need. The data import wizard in model-driven apps and the Excel templates generated per table are the built-in answer. They're underused, often because users default to ad-hoc connector-based loads or scripts when the built-in tooling is simpler.
The starting point: import template
From any table's view in the model-driven app:
- Open the table view.
- Click
Export Template for Import(orExcel Templates → Download a Template). - An Excel file is generated with all importable columns as headers.
- Optional rows include sample data and lookups guidance.
The template ensures column names match Dataverse's logical names — much harder to get wrong than freehand.
Filling the template
Users populate rows with data. Notes:
- Text columns — plain text.
- Number columns — numeric values, no formatting.
- Date columns — ISO format (
yyyy-MM-dd) or local format consistent with the user's regional settings. - Choice columns — the choice label (e.g., "Active"), not the numeric value.
- Lookup columns — match by display name of the related record; system finds the record.
- Boolean —
Yes/No,True/False.
Import wizard.
- From the table view,
Import from Excel. - Pick the populated template.
- Wizard previews mapping.
- Adjust mappings if needed (custom columns may need explicit mapping).
- Configure duplicate detection and owner.
- Submit.
The import runs as a background system job. Progress and errors are visible in the Imports view.
Lookup resolution
When importing a sales order with customerLookup = "Acme Corp":
- The system searches the related table (Account, typically) for a row named "Acme Corp".
- If exactly one match, the lookup is set.
- If zero matches, the row fails with "Lookup not found."
- If multiple matches, the row fails with "Ambiguous lookup."
For unambiguous lookups, use a unique identifier (alternate key) in the lookup column rather than display name.
Alternate keys
A table can have one or more alternate keys — column combinations marked unique. Imports can reference rows by alternate key, removing display-name ambiguity. Common alternate keys:
- Account:
accountnumber. - Contact:
emailaddress1(sometimes). - Product:
productnumber.
Setting up alternate keys for import-prone tables is a small investment that pays off forever.
Duplicate detection
During import, the system runs configured duplicate detection rules. Options:
- Allow duplicates — bypass; risk of dirty data.
- Block duplicates — fail rows that match existing records.
- Update on match — modern option; update the existing record instead of inserting.
For master data imports, the "update on match" pattern is the right answer — load the file as the source of truth, system reconciles.
Performance
Imports are batched but not super fast:
- Hundreds to a few thousand rows per minute for moderate-complexity tables.
- Plugins and workflows fire per row — heavy custom logic dramatically slows the import.
- Async plugin executions queue up — can affect responsiveness during large imports.
For very large imports (100K+ rows), use Dataverse's batch APIs or Azure Data Factory rather than the import wizard.
Multi-table imports
Importing related records (orders with order lines):
- Import the parent first (orders).
- Import the children second (order lines), referencing the parents by alternate key or display name.
A single ZIP package with multiple Excel sheets, each mapped to a table, can be imported as a coordinated job.
Error handling
Failed rows show in the Failures view of the import job. Each error includes:
- The row number in the source.
- The column that failed.
- A description (lookup not found, validation error, plugin exception).
Iterate: fix the source file, re-import only the failed rows. Don't re-import the whole file unless you also want to update already-successful rows.
Re-importing for updates
Imports can update existing records:
- Map a unique column (primary ID or alternate key) to the row identifier.
- Configure "update on match."
- Subsequent imports update fields the file specifies.
Useful for incremental refreshes — load a delta file each day.
Common pitfalls.
- Wrong locale for dates. Mixed
MM/dd/yyyyanddd/MM/yyyyrows; some import wrong without erroring. - Lookup by name fails on whitespace differences. "Acme Corp." vs "Acme Corp"; alternate keys help.
- Choice value mismatch. Importing "Acitve" vs "Active"; fail.
- Owners not set. Default owner is the importing user; mass imports leave one user owning thousands of records.
- Plugins crashing the import. Heavy synchronous plugin on Create slows imports to a crawl; consider temporarily disabling, importing, re-enabling.
- No backup before import. Botched import overwrites data; no recovery. Always backup or trial in a sandbox.
Bulk delete after a botched import
Bulk delete jobs can remove a recent import's rows; track each import's job ID for clean rollback.
Operational rule
For occasional master data refreshes and one-off loads, the import wizard with Excel templates is the right tool. For ongoing high-volume integrations, dedicated ETL (Dataverse data flows, Azure Data Factory, custom code via Web API) outperforms. Pick the tool that matches the cadence — wizard for ad-hoc, automated pipeline for recurring.
Related guides
- Dataverse data model fundamentalsThe Dataverse data model — tables, columns, relationships, choices, security roles, and how it sits under Dynamics 365 and the Power Platform.
- What is Microsoft Dataverse?Microsoft Dataverse is the relational data platform underneath Dynamics 365 CRM apps and Power Platform — what it is, why it's more than a database.
- Bulk delete jobs in DataverseHow Dataverse's bulk delete handles mass record cleanup — scheduling, filters, retention policies, and the operational discipline around storage management.
- Business rules in DataverseHow business rules let you add field-level logic to forms without code — set value, lock field, show error, recommendation, and the limits of the engine.
- Calculated and rollup columns in DataverseHow calculated columns and rollup columns work in Dataverse — what each does, the performance trade-offs.
Browse every guide in Customer Engagement or just Dataverse platform.
Was this helpful?
Signals which guides land and which need work. No account, no comment box — corrections go through the contact page.
Spot something wrong or want a topic covered? Send a correction or a topic request — both are welcome.