Navigated to blog › dynamics-365-csv-import-errors
Back to Blog
crm-import-guides

Microsoft Dynamics 365 CSV Import: Fix Record Errors and Field Failures

March 19, 2026
14
By SplitForge Team

Dynamics 365 CSV Import — Quick Reference:

  • "Record already exists" → duplicate detection triggered; configure merge or update behavior
  • OptionSet value mismatch → exact label match required, case-sensitive
  • Owner not found → owner must be an active Dynamics 365 user with a matching email
  • Currency symbol in amount field → strip currency symbols and thousand-separator commas
  • Relationship field lookup failure → use record name or GUID, not display ID
  • Import file size limit → Dynamics 365 web import: 8MB max; use Data Migration Tool for larger files

Quick Answer

Dynamics 365 CSV imports fail for five predictable reasons: duplicate record detection, OptionSet value mismatches (case and whitespace sensitive), owner assignment failures, currency field format errors, and relationship field lookup failures.

Why it matters: Dynamics 365's import engine is stricter than Salesforce or HubSpot — it validates every OptionSet value against the exact label in your schema, treats owner assignment failures as hard errors, and applies duplicate detection rules that can block imports entirely depending on configuration.

The fix: Export your OptionSet values directly from Settings → Customizations before building your import file. Match owner values to active user email addresses. Strip all non-numeric characters from currency fields. Validate locally before upload.

Root cause: Dynamics 365 treats the import file as a direct write to the CRM schema. Values that don't match exactly — including trailing spaces and case differences — are rejected rather than normalized.


Fast Fix (90 Seconds)

⏱ Expected time by error type:

  • OptionSet mismatch: 15–20 minutes (export values, find-replace across file)
  • Owner not found: 10–15 minutes (export user list, VLOOKUP)
  • Duplicate detection: 5–10 minutes (deduplicate file or configure import job)
  • Currency/number format: 5 minutes (strip symbols, find-replace)
  • Relationship lookup failure: 20–30 minutes (export related records, VLOOKUP GUID)

If your Dynamics 365 import just failed:

  1. Download the error file — Dynamics 365 provides a downloadable error log after every import attempt. Go to Settings → Data Management → Imports → open your import → Download Errors.
  2. Read the first error type — the error description tells you the exact field and failure reason
  3. Match to the cause/fix table below — find your error, apply the fix to the column
  4. Validate locally — run your corrected file through Data Validator before re-importing
  5. Test with 10 rows — re-import a small batch before running the full file

If the import completed but records have wrong values: Dynamics 365 sometimes performs a soft failure on OptionSet fields — the record is created with a blank or default value when the imported value doesn't match. Check the error log for "ignored" or "skipped" field entries.


TL;DR: Dynamics 365 CSV import errors are almost always OptionSet value mismatches, owner email failures, or duplicate detection. Export OptionSet labels directly from CRM settings, match owner emails exactly to active users, strip currency symbols from numeric fields, and validate your file locally before upload. Use Data Validator — customer data never leaves your browser.


Your sales team just exported 3,000 leads from a trade show system. The Dynamics 365 import ran for four minutes and returned 847 errors. The error file says: "OptionSet value 'Hot Lead' is not valid for attribute 'new_leadstatus'. Valid values: Hot, Warm, Cold"

You look at your CSV. It says Hot Lead in every row. The Dynamics field is called "Lead Status" and the dropdown in the UI shows "Hot Lead." But the import engine expects Hot.

This is Dynamics 365's OptionSet validation — and it trips up every team that hasn't exported the internal values first.

This guide covers every common Dynamics 365 import error with the exact fix for each. Error strings verified against Microsoft Learn documentation, March 2026.


What Dynamics 365 Error Messages Actually Mean

"The record you are trying to create already exists." — Duplicate detection triggered. Your import file contains a record that matches an existing record on the duplicate detection key (usually email for contacts, usually name for accounts). Solution: configure the import job to update existing records rather than create new ones, or deduplicate your file first.

"The value [X] is not valid for attribute [Y]." — OptionSet value mismatch. The value in your CSV doesn't match any OptionSet label in the CRM. Most commonly caused by: display name vs. internal value confusion, trailing spaces, case differences.

"Owner is not valid." or "The specified user could not be found." — Owner email doesn't match an active Dynamics 365 user. The owner field must contain the email address of a user with an active Dynamics 365 license.

"The specified record was not found." — Relationship lookup failure. A field referencing another record (parent account, related opportunity) couldn't find a matching record.

"The import file exceeded the maximum file size." — Dynamics 365 web import has an 8MB file size limit. Use the Dynamics 365 Data Migration Tool for larger files.


Table of Contents


Fix 1: OptionSet Value Mismatches

OptionSet fields in Dynamics 365 (dropdowns, status fields, type fields) validate imported values against the exact label stored in the CRM schema. The validation is case-sensitive and whitespace-sensitive. The display label in the UI may differ from the internal label used during import.

The exact disconnect that causes most failures:

OPTIONSET VALUE — THREE LAYERS:

What the Dynamics 365 UI SHOWS to users:
  Lead Status dropdown → "Hot Lead", "Warm Lead", "Cold Lead"
  ← This is the display label your team sees when working in CRM

What the CRM metadata STORES (Settings → Customizations → Fields):
  OptionSet values:
  Label: Hot  | Value: 1
  Label: Warm | Value: 2
  Label: Cold | Value: 3
  ← This is the EXACT string the import engine validates against

What your CSV MUST contain:
  Lead Status column → "Hot", "Warm", "Cold"
  ← NOT "Hot Lead", NOT "hot", NOT "HOT"

WHY THE MISMATCH HAPPENS:
Your team exports a sample from another system → gets "Hot Lead" → assumes that's correct.
The CRM admin set up the OptionSet with short labels ("Hot") but the UI shows a dropdown
that says "Hot Lead" because of how the picklist was configured display-side.
The import engine never sees the UI — it validates against the metadata label only.

❌ BROKEN import file:
Lead Status: "Hot Lead", "Warm Lead", "Cold"
Result: Row 1 → FIELD_INTEGRITY_EXCEPTION (Hot Lead invalid)
        Row 2 → FIELD_INTEGRITY_EXCEPTION (Warm Lead invalid)
        Row 3 → ✅ imported (Cold matches exactly)

FIXED import file (values copied from Settings → Customizations):
Lead Status: "Hot", "Warm", "Cold"
Result: All three rows → ✅ imported successfully
❌ BROKEN — OptionSet value mismatch (most common Dynamics 365 import error):

Import file column: Lead Status
Values: Hot Lead, Warm Lead, Cold Lead, Hot lead, hot, WARM

Dynamics 365 OptionSet values (from Settings → Customizations):
Label: Hot  | Value: 1
Label: Warm | Value: 2
Label: Cold | Value: 3

Import behavior:
"Hot Lead"  → ❌ REJECTED — "Hot Lead" is not a valid label (UI shows "Hot Lead" but schema says "Hot")
"Warm Lead" → ❌ REJECTED — same issue
"Cold Lead" → ❌ REJECTED — same issue
"Hot lead"  → ❌ REJECTED — case mismatch ("lead" ≠ "Lead" — but neither is valid anyway)
"hot"       → ❌ REJECTED — case mismatch ("hot" ≠ "Hot")
"WARM"      → ❌ REJECTED — case mismatch

FIXED — using exact OptionSet labels from CRM schema:
"Hot"  → ✅ accepted
"Warm" → ✅ accepted
"Cold" → ✅ accepted

What the actual Dynamics 365 error log looks like for OptionSet failures:

❌ BROKEN — Dynamics 365 error log (download from Settings → Data Management → Imports):

Row Number | Column | Error Description | Original Value
2          | new_leadstatus | The value 'Hot Lead' is not valid for attribute 'new_leadstatus'. | Hot Lead
3          | new_leadstatus | The value 'Warm Lead' is not valid for attribute 'new_leadstatus'. | Warm Lead
5          | ownerid | The specified user could not be found. Verify the user exists in the system. | [email protected]
8          | transactioncurrencyid | Currency not found. | $USD

Each row shows: which row failed, which column, the exact error message, and the original value.
Sort by "Error Description" to group identical errors — then fix as a batch.

FIXED — after exporting OptionSet values from Settings → Customizations:
Row 2 value: "Hot Lead" → "Hot"   (copy-pasted from schema, not typed)
Row 3 value: "Warm Lead" → "Warm" (copy-pasted from schema)
Row 5 value: active user email exported from Settings → Security → Users
Row 8 value: "$USD" → "USD"       (ISO 4217 currency code, no dollar sign)

How to get the exact OptionSet values:

  1. Go to Settings → Customizations → Customize the System
  2. Navigate to Entities → [Entity Name] → Fields
  3. Find the OptionSet field → click to open
  4. Under "Options" — these are the exact labels you must use in your CSV

Copy-paste these labels directly into your import file using Find & Replace. Never type them manually.

Important: Custom OptionSet fields created by your organization use whatever labels your admin defined. Always export from the CRM — never guess.

Fix 2: Duplicate Record Detection

Dynamics 365 applies duplicate detection rules during import by default. If a matching record exists, the behavior depends on your duplicate detection rule configuration: the import may block the row entirely, create a duplicate, or prompt for resolution (which blocks automated imports).

❌ DUPLICATE DETECTION BEHAVIOR:

Import attempt: Contact "Alice Chen" with email "[email protected]"
Existing record: Contact "Alice Chen" with email "[email protected]"

If duplicate detection rule is active:
→ Import error: "The record you are trying to create already exists."
→ Import row fails; existing record is untouched

If "Allow Duplicates" is enabled in import settings:
→ New record is created alongside existing record
→ Results in a true duplicate in the CRM

If you want to UPDATE existing records:
→ Use "Upsert" behavior — requires mapping a unique identifier field (email or external ID)
→ Not available in the basic import wizard; use Data Migration Tool or Power Automate for true upsert

The practical fix for most teams:

Before importing, export your existing records and deduplicate between your import file and the existing records. Remove any rows in your import file that match an existing record by email (for contacts) or name (for accounts). This is faster than reconfiguring duplicate detection rules.

For deduplication workflow, see remove duplicate emails before CRM import.

Fix 3: Owner Assignment Failures

The owner field in Dynamics 365 must reference an active user in your Dynamics 365 environment. The value must be the user's exact email address as it appears in the Dynamics 365 user record — not their display name, not their Active Directory UPN if different, not a former employee's email.

❌ OWNER ASSIGNMENT FAILURES:

Owner column values → Dynamics 365 behavior:

"[email protected]"     → ✅ Valid if John Smith is an active D365 user with this email
"John Smith"                 → ❌ REJECTED — name format not accepted; use email
"jsmith"                     → ❌ REJECTED — username format not accepted; use full email
"[email protected]"  → ❌ REJECTED — former employee, account disabled
"[email protected]"          → ❌ REJECTED — role-based email, not a user account
[blank]                      → D365 assigns to the importing user (often acceptable)

FIXED — get exact user emails from Settings → Security → Users:
Export active user list → match owner names from import file → use email column

How to get the active user list:

  1. Go to Settings → Security → Users
  2. Filter by Status: Enabled
  3. Export to Excel
  4. Use the Primary Email column to populate your import file's owner column

If a record's intended owner is no longer in the system, assign to a current user and note for manual reassignment in the CRM.

Fix 4: Currency and Numeric Field Errors

Dynamics 365 numeric fields (Revenue, Amount, Price) do not accept currency symbols, thousand-separator commas, percentage signs, or any non-numeric character. The CRM expects plain numbers.

❌ BROKEN — currency field format errors:

Revenue column:
$1,250,000.00   → ❌ REJECTED — dollar sign and commas
€45,000         → ❌ REJECTED — euro sign and comma
1.5M            → ❌ REJECTED — letter suffix
1250000         → ✅ accepted — plain integer
1250000.00      → ✅ accepted — plain decimal
1,250,000       → ❌ REJECTED — thousand-separator comma treated as delimiter

FIXED — strip all non-numeric characters:
$1,250,000.00 → 1250000.00
€45,000       → 45000
1.5M          → 1500000 (expand abbreviation)

Additionally: Dynamics 365 uses the organization's base currency. If your import file contains amounts in multiple currencies and the CRM has multi-currency enabled, include a transactioncurrencyid column matching the ISO currency code (USD, EUR, GBP) for each row.

Fix 5: Relationship Field Lookup Failures

Relationship fields (parent account, opportunity, campaign) reference other records in Dynamics 365. The import engine looks up the referenced record by name or GUID. If the referenced record doesn't exist, the field fails silently or causes a row error depending on whether the relationship is required.

❌ RELATIONSHIP LOOKUP FAILURE:

Contact import with "Parent Account" column:
"Acme Corporation" → ✅ if an Account named exactly "Acme Corporation" exists
"ACME Corp"        → ❌ name mismatch (case-sensitive exact match)
"Acme Corp."       → ❌ punctuation mismatch
"123456"           → ❌ internal ID format not accepted in name lookup
"00000000-0000-0000-0000-000000000000" → ✅ GUID format accepted for any relationship field

BEST PRACTICE: Use GUIDs for relationship fields when importing large volumes.
Export the related records list (Accounts, Campaigns, etc.) with their GUIDs,
then VLOOKUP the GUID into your import file before uploading.
This eliminates name-matching failures entirely.

Fix 6: File Size and Format Errors

Dynamics 365's web-based import wizard has an 8MB file size limit. For larger files:

  • Data Migration Tool (DMT): Microsoft's free tool for larger imports, supports up to several hundred MB
  • Azure Data Factory: For enterprise-scale migrations
  • Power Automate: For scheduled or recurring imports via connector

The import file must be UTF-8 encoded CSV with standard comma delimiters. Excel-saved CSVs with BOM characters (invisible UTF-8 BOM: EF BB BF) sometimes cause parser errors in older Dynamics 365 versions — resave from a text editor with UTF-8 without BOM if you encounter unexplained parsing failures.


Dynamics 365 Import Error Cause/Fix Table

Error MessageRoot CauseFix
"The value [X] is not valid for attribute [Y]"OptionSet label mismatchExport exact labels from Settings → Customizations → use copy-paste
"The record you are trying to create already exists"Duplicate detection triggeredDeduplicate file; or disable duplicate detection rule for import
"Owner is not valid"Owner email not an active D365 userExport active user list; match by email
"The specified user could not be found"Same as aboveSame fix
"Currency not found"Currency code not in D365 multi-currency setupAdd currency in Settings → Business Management → Currencies
"The specified record was not found"Relationship lookup failureUse GUID format; verify related record exists
"File is too large"Exceeds 8MB web import limitSplit file; use Data Migration Tool
"Invalid file format"Encoding or delimiter errorRe-save as UTF-8 without BOM, comma delimiter
"The column [X] could not be mapped"Header doesn't match any D365 fieldCheck exact field names in Settings → Customizations
"Insufficient privileges"User lacks import permissionAsk admin to assign Import User role or Business Unit permissions

✅ How to Confirm Your Dynamics 365 Import Worked

After re-importing, verify the fix actually took:

  1. Download the error file — Settings → Data Management → Imports → open import → Download Errors. If the file is empty, no rows failed. If it has rows, some fields still didn't import.
  2. Open 3 records that previously failed — check the specific fields that were failing (OptionSet, owner, related record). Confirm they now show correct values, not blank.
  3. Check record count — compare the "Records processed successfully" count in the import job to your expected total. A gap means rows were skipped or failed softly.

🔁 Safe Re-Run Workflow

After fixing your source CSV, import only the failed rows — not the full file:

  1. Open your failed import in Settings → Data Management → Imports
  2. Download the error file — this contains all rows that failed, in the same column format as your original
  3. Fix the specific field values that caused the errors in those rows
  4. Use the corrected error file as your new import source
  5. Do NOT re-import the full original file — the rows that succeeded will create duplicate records

Why Validate Before Upload for Dynamics 365 Data

Dynamics 365 environments often contain sensitive business data — customer revenue figures, pipeline data, contact information for key accounts. Many teams process this data in cloud-based CSV tools before import, inadvertently creating a secondary exposure point.

Many SaaS tools retain uploaded files temporarily for debugging, caching, or processing purposes — retention policies vary by vendor. For Dynamics 365 import files containing customer revenue, account data, or personal information, this retention creates GDPR Article 28 processor exposure that requires a signed Data Processing Agreement. SplitForge validates files in Web Worker threads in your browser — for raw file contents, nothing is transmitted to any server during processing.

For complete CRM import failure reference, see our CRM import failures complete guide. For cross-platform error decoding, see CRM import error codes explained.


🛡 Prevent This Next Time

Dynamics 365 import failures almost always repeat until the source workflow changes:

  1. Build a Dynamics-specific import template — after your first successful import, save that CSV as the canonical template with correct column headers and OptionSet values. Future imports start from that template, not from a system export.
  2. Export OptionSet values before every import — create a reference sheet (Settings → Customizations → field values) and keep it open while building import files. Never type OptionSet values from memory.
  3. Match owner emails to the user list — export active users monthly and use VLOOKUP to populate owner columns. Never type email addresses manually into an import file.

⚠️ Edge Case: Dynamics 365 OptionSet values added or renamed by an admin after your import template was created will cause new failures on the next import. If your import suddenly fails on OptionSet fields that previously worked, check whether the field labels were recently updated in Settings → Customizations.

Additional Resources

Tested: Dynamics 365 error strings verified against Microsoft Learn documentation and Dynamics 365 community forums. OptionSet behavior confirmed in Dynamics 365 Sales (online), March 2026.

Official Microsoft Documentation:

Standards:


FAQ

Dynamics 365's import engine validates OptionSet values against the internal label stored in the metadata schema — not necessarily what displays in the UI. The UI may show "Hot Lead" but the metadata label is "Hot". Additionally, trailing spaces (invisible to the eye) cause rejection. The only reliable method: export OptionSet values from Settings → Customizations → Customize the System → navigate to the entity and field → copy the exact option labels.

The standard web import wizard creates new records only — it does not update existing ones. To update existing records, you need to use the Data Migration Tool (which supports upsert by mapping a unique identifier), Power Automate with the Dataverse connector, or the Dynamics 365 Web API directly. If your goal is updating rather than creating, plan for this before building your import file.

The Dynamics 365 web-based import wizard accepts files up to 8MB. For larger imports, use the Dynamics 365 Data Migration Tool (free download from Microsoft), Azure Data Factory, or Power Automate. The Data Migration Tool can handle significantly larger files and provides better error reporting for large-scale imports.

Import parent records first, then child records. For Dynamics 365: import Account records in the first pass, then Contact records in the second pass with the parent account relationship mapped. If you need to import both in one operation, use the Data Migration Tool which can handle dependency ordering, or use GUID-based relationship mapping to reference records by their unique identifier rather than display name.

This is a soft failure on a non-required field — the row was created but the invalid field value was dropped silently. Check the import error log (Settings → Data Management → Imports → open import → Download Errors) for rows marked as "partially successful." The error log will show which field values were rejected and why.


Catch Dynamics 365 Import Errors Before They Reach the CRM

Validate OptionSet values, date formats, and numeric fields before upload
Detect blank required fields and duplicate email addresses
Works on files with 100K+ records — no upload, no size limit
Files process locally in your browser — Dynamics 365 data never transmitted to any server

Continue Reading

More guides to help you work smarter with your data

csv-import-guides

CSV Delimiter Errors: Fix Comma vs Semicolon for International Teams

Stop all data in Column A errors. Learn comma, semicolon & tab CSV delimiters plus quick fixes for global teams.

Read More
csv-guides

How to Split Large CSV Files Without Excel (Even 1M+ Rows)

Need to split a massive CSV file but Excel keeps crashing? Learn how to split files with millions of rows safely in your browser without uploads.

Read More
excel-guides

Batch Convert Multiple Excel Files to CSV Without Opening Each One

Opening 50 Excel files one at a time to save as CSV takes 45 minutes and produces inconsistent results. Three methods handle the same task in under 60 seconds — none require opening a single file.

Read More