, `€`, commas before import |\n| Date | Value is blank after import | Wrong date format for CRM locale | Convert to CRM's expected format |\n| Checkbox / Boolean | Value ignored | \"Yes/No\" instead of TRUE/FALSE | Use CRM's accepted boolean format |\n| Lookup / Relationship | \"Record not found\" | Referenced record doesn't exist in CRM | Pre-import referenced records |\n| Required custom field | Row rejected | Field is blank in CSV, required in CRM | Populate or provide default value |\n| Multi-select picklist | Only one value imported | Values not correctly comma-separated | Format as \"Value1;Value2\" per CRM docs |\n\n---\n\n## Table of Contents\n\n- [Fix 1: Dropdown and Picklist Mismatches](#fix-1-dropdown-and-picklist-mismatches)\n- [Fix 2: Number and Currency Field Failures](#fix-2-number-and-currency-field-failures)\n- [Fix 3: Date Field Format Mismatches](#fix-3-date-field-format-mismatches)\n- [Fix 4: Lookup Field Reference Failures](#fix-4-lookup-field-reference-failures)\n- [Fix 5: Required Custom Field Violations](#fix-5-required-custom-field-violations)\n- [Platform-Specific Custom Field Rules](#platform-specific-custom-field-rules)\n- [Pre-Import Custom Field Validation Workflow](#pre-import-custom-field-validation-workflow)\n- [Additional Resources](#additional-resources)\n- [FAQ](#faq)\n\n---\n\n## Fix 1: Dropdown and Picklist Mismatches\n\nDropdown custom fields in every CRM compare the imported value to a configured list of valid options. The comparison is almost always case-sensitive and whitespace-sensitive. `Gold` and `gold` are different values. `Gold` and `Gold ` (trailing space) are different values.\n\n```\n❌ BROKEN — Picklist values from source system don't match target CRM:\n\nSource system picklist options: Gold, Silver, Bronze\nTarget Salesforce picklist options: Tier 1, Tier 2, Tier 3\n\nCSV values imported:\nGold → no match in target → field blank\nSilver → no match in target → field blank\nBronze → no match in target → field blank\n\nAll rows import successfully. All Account_Tier__c fields are blank.\nNo error generated.\n\nFIXED — map source values to target values before import:\nGold → Tier 1\nSilver → Tier 2\nBronze → Tier 3\n```\n\n**How to export dropdown options from each CRM:**\n- **Salesforce:** Setup > Object Manager > [Object] > Fields & Relationships > [Field] > Values section lists all active options\n- **HubSpot:** Settings > Properties > [Object] > [Property] > Options tab shows all defined values\n- **Zoho:** Setup > Modules and Fields > [Module] > [Field] > Edit shows option list\n\nBuild a mapping table before importing any file with dropdown custom fields. Every source value must map to an exact target option.\n\n### What a Dropdown Validation Failure List Looks Like\n\nThis is the output you want to see BEFORE importing — not after discovering blank fields in the CRM.\n\n```\n❌ INVALID DROPDOWN VALUES DETECTED (Data Validator output):\n\nColumn: Account_Tier__c\nValid options: Tier 1, Tier 2, Tier 3\n\nRow 14: \"gold\" → case mismatch — no match in option list\nRow 27: \"Gold \" → trailing space — \"Gold \" ≠ \"Gold\" ≠ \"Tier 1\"\nRow 82: \"Tier One\" → synonym, not the configured label\nRow 103: \"SILVER\" → all caps — no match\nRow 241: \"\" → blank — required field\n\n5 rows would import with Account_Tier__c = [blank].\n4 require value remapping. 1 requires data to be sourced.\n```\n\nFix every row in this list before importing. Running validation again after fixing confirms zero mismatches before the upload.\n\nHere's what the silent failure looks like at the system level — this is what Salesforce's internal log records for a picklist mismatch, which never surfaces in the import summary:\n\n```\n❌ RAW IMPORT RESULT (Salesforce internal field assignment):\n\nField: Account_Tier__c (Restricted Picklist)\nInput value: \"Gold \" ← trailing space, invisible in spreadsheet\nSystem check: \"Gold \" not in [Tier 1, Tier 2, Tier 3]\nAssigned: null\n\nField: Account_Tier__c\nInput value: \"gold\" ← case mismatch\nSystem check: \"gold\" not in [Tier 1, Tier 2, Tier 3]\nAssigned: null\n\nImport summary line: \"1 record(s) imported successfully.\"\nAccount_Tier__c in Salesforce: [blank]\n\nThe import didn't fail. The field assignment silently failed.\n```\n\nThe trailing space is the version that kills you — it looks identical to \"Gold\" in every spreadsheet viewer. Only a raw text editor or a validator that trims and compares values will catch it.\n\n\u003c!-- DIFFERENTIATION CLAIM: workflow-specific — validating a dropdown column against a provided list of valid options across 50,000+ rows is the exact use case Data Validator handles locally -->\n\n---\n\n## Fix 2: Number and Currency Field Failures\n\nNumber and currency custom fields behave identically to standard number fields — they only accept plain decimal values. Currency symbols, comma thousands separators, and percentage signs cause silent field drops.\n\n```\n❌ BROKEN — Number custom field values that import as blank:\n\nCustom field type: Currency (Number)\n\nCSV values that fail silently:\n\"$12,500.00\" → currency symbol + comma → blank\n\"12,500\" → comma as thousands separator → blank\n\"12500.00 USD\" → trailing text → blank\n\"(500.00)\" → accounting negative notation → blank\n\"12.5K\" → abbreviated → blank\n\"N/A\" → text in numeric field → blank\n\nFIXED:\n12500.00\n12500.00\n12500.00\n-500.00\n12500.00\n[remove row or use 0 — N/A has no numeric equivalent]\n```\n\n---\n\n## Fix 3: Date Field Format Mismatches\n\nCustom date fields follow the same format requirements as standard date fields — the expected format depends on the CRM and account locale. For custom fields, the format requirement is the same as the standard date field for that CRM.\n\n```\n❌ BROKEN — Date custom field formats that import as blank:\n\nCRM expecting MM/DD/YYYY (Salesforce US locale):\n\"15/04/2026\" → DD/MM/YYYY → blank\n\"April 15 2026\" → natural language → blank\n\"2026-04-15\" → ISO 8601 → may work in some versions; use MM/DD/YYYY to be safe\n\"04-15-26\" → two-digit year → blank\n\nFIXED — MM/DD/YYYY for Salesforce US:\n04/15/2026\n04/15/2026\n04/15/2026\n04/15/2026\n```\n\nFor cross-platform imports, use ISO 8601 (YYYY-MM-DD) as the universal format — it's accepted by HubSpot, Pipedrive, and most Salesforce configurations regardless of locale.\n\n---\n\n## Fix 4: Lookup Field Reference Failures\n\nLookup and relationship custom fields store references to other records by ID or by a unique external identifier. If the referenced record doesn't exist in the target CRM, the lookup fails — either the row is rejected or the lookup field is left blank.\n\n```\n❌ BROKEN — Lookup fails on company name mismatch (silent field blank):\n\nCustom field: Primary_Account__c (lookup to Account object)\n\nCSV value → CRM record name → Match?\n\"Acme Corp\" ↔ \"Acme Corporation\" → ❌ no match → field blank\n\"ACME Corporation\" ↔ \"Acme Corporation\" → ❌ case mismatch → field blank\n\"Acme Corp.\" ↔ \"Acme Corporation\" → ❌ period difference → field blank\n\"Acme Corporation\" ↔ \"Acme Corporation\" → ✓ exact match → field populated\n\nNo import error generated for the ❌ rows.\nThe contact imports. The Primary_Account__c field is blank.\n\nFIXED — two approaches:\n\nApproach A (match by ID — most reliable):\n CSV value: 001XX000003AAAA (18-character Salesforce Account ID)\n Salesforce resolves by ID, not name — no name matching ambiguity\n\nApproach B (match by exact name):\n Export Account records from Salesforce\n Find the exact Account Name for each lookup value in your CSV\n Replace CSV values with exact matches character-for-character\n```\n\n**Import parent records before child records.** Always. If your import includes contacts with a custom Account lookup field, the Accounts must exist in the target CRM before importing the contacts.\n\n---\n\n## Fix 5: Required Custom Field Violations\n\nSome CRM administrators configure custom fields as required — meaning every record must have a value. A CSV row with a blank required custom field is rejected. Unlike dropdown mismatches (which are silent), required field violations usually produce an explicit error.\n\n```\n❌ BROKEN — Required custom field blank in CSV:\n\nSalesforce custom field: Contract_Type__c (required)\nCSV row: Alice Chen, [email protected], , Enterprise\n\nError: \"Required fields are missing: [Contract_Type__c]\"\nRow rejected.\n\nFIXED:\nAlice Chen, [email protected], SaaS, Enterprise\n\nIf the required value genuinely isn't known:\n Option A: Use a placeholder (\"Unknown\", \"TBD\") — creates data quality debt\n Option B: Make the field optional before the import, reimport, then make it required again\n Option C: Exclude rows without the required value and import them separately after gathering data\n```\n\n---\n\n## Platform-Specific Custom Field Rules\n\n### Salesforce\n\nSalesforce custom fields have an API Name (e.g., `Contract_Type__c`) and a Label (e.g., \"Contract Type\"). CSV imports map by Label in the Data Import Wizard. Data Loader maps by API Name. If your CSV uses API names and you're importing via the Wizard, the mapping won't work.\n\nRestricted picklists (controlled by a controlling field or explicitly restricted) only accept exact API values — not display labels in some configurations. For restricted picklists, use the API value in the CSV rather than the display label.\n\n### HubSpot\n\nHubSpot custom properties have an Internal Name (e.g., `contract_type`) and a Label (\"Contract Type\"). CSV imports map by Label in the browser-based importer. The `internal_name` is used in the API. For dropdown properties, imported values must match the option labels exactly — including capitalization.\n\n### Zoho CRM\n\nZoho custom fields can be created during the import wizard mapping step (\"Add as custom field\") — you don't need to pre-create all custom fields before importing. However, for dropdown custom fields, pre-creating the field with its valid option values is safer because on-the-fly dropdown creation may not support all option configurations.\n\n---\n\n## Pre-Import Custom Field Validation Workflow\n\n```\nBEFORE every CRM import containing custom fields:\n\nSTEP 1: Export custom field definitions\n → Document every custom field: name, type, required status, dropdown options\n → For Salesforce: Setup > Object Manager > Fields & Relationships\n → For HubSpot: Settings > Properties\n\nSTEP 2: Audit your CSV against the definitions\n → For each dropdown column: do all values match configured options exactly?\n → For each number column: are there currency symbols or commas?\n → For each date column: is the format consistent with the CRM's locale?\n → For each lookup column: do all referenced records exist in the target CRM?\n → For each required column: is every row populated?\n\nSTEP 3: Run Data Validator\n → Provide dropdown option lists as valid value sets\n → Flag all rows with non-matching dropdown values, blank required fields,\n and format violations in one pass\n\nSTEP 4: Fix and re-validate\n → Correct all flagged rows\n → Run validation again to confirm clean\n → Import\n```\n\n---\n\n## Additional Resources\n\n**Official CRM Documentation:**\n- [Salesforce — Custom Fields Overview](https://help.salesforce.com/s/articleView?id=sf.customize_customfields.htm) — Custom field types, required settings, and picklist management\n- [HubSpot — Custom Properties](https://knowledge.hubspot.com/contacts/create-and-edit-properties) — Creating and managing custom contact/deal properties\n- [Zoho CRM — Custom Fields](https://help.zoho.com/portal/en/kb/crm/customization/fields/articles/custom-fields) — Custom field types and configuration\n\n**Technical Standards:**\n- [RFC 4180: CSV Format Specification](https://datatracker.ietf.org/doc/html/rfc4180) — Standard CSV structure reference\n\n> **Tested:** Custom field import behavior validated against Salesforce Developer Edition, HubSpot free CRM, and Zoho CRM free tier with custom fields of each type (dropdown, number, date, lookup, required). March 2026.\n\n```\nPLATFORM SPECIFICATION SOURCE\nPlatform: Salesforce, HubSpot, Zoho CRM\nSources:\n Salesforce: help.salesforce.com — Custom Fields and Picklists\n HubSpot: knowledge.hubspot.com — Custom Properties\n Zoho: help.zoho.com/crm — Custom Fields\nVerified: March 2026\nNext re-verify: June 2026\n\nCustom field behavior may vary by CRM edition and account configuration.\nAlways verify dropdown options and required field settings in the target CRM\nbefore a large import operation.\n```\n\n---\n\n## FAQ\n\n### Why do my custom fields show blank after a successful import?\n\nThe most common cause is a dropdown value that doesn't match any configured option in the target CRM. The record imports, but the field is silently left blank. Export the dropdown option list from your CRM, compare against your CSV values, and fix any mismatches. Check also for trailing spaces — \"Gold \" and \"Gold\" are different values to the validator.\n\n### Do I need to pre-create custom fields before importing in all CRMs?\n\nNo. HubSpot and Zoho CRM both allow creating custom fields during the import wizard mapping step. Salesforce's Data Import Wizard requires fields to exist before mapping. For all platforms, pre-creating dropdown fields with valid option values before importing is safer — it ensures your imported values are validated against the correct option set rather than creating an unconstrained free-text field.\n\n### What's the difference between restricted and unrestricted picklists in Salesforce?\n\nUnrestricted picklists accept any text value — imported values that don't match existing options are added as new values. Restricted picklists only accept values from the configured list — imported values that don't match are rejected or silently dropped. For imports, treat all picklists as restricted and align your CSV values to exact matches regardless of restriction setting.\n\n### How do I validate a lookup field before importing?\n\nExport the referenced records from the target CRM and check that every lookup value in your CSV exists in that export. For Salesforce, use the 18-character record ID in the CSV rather than the record name when possible — name matching is case-sensitive and fails on any name variation, while ID matching is exact and reliable.\n\n### Can I import to a custom field that's marked as read-only?\n\nNo. Read-only fields are set by admin configuration or formula field status and cannot be populated via import. If a field needs to receive imported data, the CRM administrator must change its field access to writable before the import runs.\n\n---\n\n## Validate Custom Field Values Before Your CRM Silently Drops Them\n\n✅ Check dropdown columns against your CRM's configured option list before importing\n✅ Detect currency symbols, commas, and format issues in numeric custom fields\n✅ Identify blank required fields that will cause row rejections before upload\n✅ Files validate entirely in your browser — customer classification data never transmitted to any server\n\n**[Validate Your CSV Free →](https://splitforge.app/tools/data-validator)**\n"};
Navigated to blog › crm-custom-field-validation-csv
Back to Blog
crm-import-guides

CRM Custom Field Validation: Fix Invalid Values Before Upload (2026)

March 21, 2026
13
By SplitForge Team

Quick Answer

CRM custom field import failures split into four categories: dropdown/picklist values that don't match any configured option, type mismatches where the value format doesn't match the field definition, required custom fields that are blank in the CSV, and lookup field references that point to records that don't exist in the target CRM.

Why it happens: Custom fields are configured per account — the same field name may have completely different valid values across two Salesforce orgs, two HubSpot portals, or two Zoho instances. Source data validated in one environment is not automatically valid in another.

The fix: Export your custom field definitions from the target CRM before validating the CSV. Check every dropdown column against its configured options, every number field for formatting characters, every date field for format consistency.

Root cause: Dropdown/picklist mismatches are one of the most common custom field failures. A value imported from a legacy system that doesn't exist in the target CRM's dropdown definition fails silently — the record imports, the field is blank.


The Silent Custom Field Failure

Custom field errors are different from structural import errors. A structural error (wrong column count, bad email format) usually produces a row rejection. Custom field type mismatches almost always produce a silent drop — the record imports, the custom field is blank, and the failure is invisible in the import summary.

3 symptoms of silent custom field failures:

1. DROPDOWN BLANK AFTER IMPORT
   Record imported successfully → custom dropdown field shows blank
   → Value in CSV doesn't exist in the dropdown's configured options
   → Fix: export dropdown options from CRM, align CSV values to exact match

2. NUMBER FIELD BLANK AFTER IMPORT
   Record imported → numeric custom field shows blank
   → Currency symbol, comma, or text in the numeric value
   → Fix: strip formatting from number columns before importing

3. DATE FIELD BLANK AFTER IMPORT
   Record imported → date custom field shows blank
   → Date format doesn't match what the CRM field expects
   → Fix: standardize to the CRM's expected date format (see Fix 3)

Rule: If custom fields are blank after a "successful" import, don't re-import yet. Diagnose which field type is failing and fix the source data first.


Fast Fix (90 Seconds)

If custom fields are blank after import, run this check sequence:

  1. Open 3–5 affected records in your CRM — identify which specific custom fields are blank.
  2. Go to the field definition — CRM Settings > Fields > [Object] > [Custom Field]. Note the field type and, for dropdowns, the configured option values.
  3. Open your CSV — Find the column corresponding to that field. Check: does every value exactly match one of the configured options? Are there currency symbols in numeric fields? Is the date format correct?
  4. Run Data Validator — Provide the configured dropdown options as the valid value list. The validator checks every row against it in your browser.
  5. Fix the source CSV, reimport affected records using merge/update — don't reimport the full file.

TL;DR: Custom field failures are almost always silent — the record imports, the field is blank. Export your dropdown option lists from the CRM before validating. Check number fields for currency characters. Validate date formats match the CRM's expected format. Run Data Validator to catch all mismatches before uploading.


You imported 8,000 contacts into Salesforce. The import summary says 8,000 succeeded, 0 failed. Three weeks later, a sales manager reports that the "Account Tier" field is blank on every record. You check the import CSV — the field was populated in every row. The values were: Gold, Silver, Bronze. The Salesforce picklist uses: Tier 1, Tier 2, Tier 3. None of the CSV values matched any picklist option.

8,000 records. Zero failures flagged. All the Account Tier data is gone.

CRM data often contains customer classifications, deal stages, and account segmentation data — commercial intelligence that's personal data when paired with contact information under GDPR Article 4(1). Most CSV validation tools upload your file to a remote server to process it. For a CRM export containing contact names alongside account tier, deal stage, or revenue fields, that upload creates a GDPR Article 5(1)(c) data minimization exposure — transferring data outside your control, often without a Data Processing Agreement — and triggers Article 28 processor obligations with the vendor. This occurs before you've confirmed the file is even correct. SplitForge's Data Validator processes validation entirely in Web Worker threads in your browser — the file never reaches any external server. Confirm this in Chrome DevTools under the Network tab during validation: zero outbound requests.

Validation patterns in this guide were tested against Salesforce, HubSpot, and Zoho CRM custom field configurations, March 2026. For the complete CRM import failure taxonomy, see our CRM import failures complete guide. For Salesforce-specific picklist errors, see Fix Salesforce Bad Value for Restricted Picklist. For field mapping errors, see the CRM CSV Field Mapping Guide.


Custom Field Failure Patterns by Type

Field TypeCommon FailureWhy It FailsFix
Dropdown / PicklistValue not in option listCase mismatch, legacy value, wrong systemExport options from CRM, align CSV values
Number / CurrencyValue is blank after importCurrency symbol or comma in valueStrip $, , commas before import
DateValue is blank after importWrong date format for CRM localeConvert to CRM's expected format
Checkbox / BooleanValue ignored"Yes/No" instead of TRUE/FALSEUse CRM's accepted boolean format
Lookup / Relationship"Record not found"Referenced record doesn't exist in CRMPre-import referenced records
Required custom fieldRow rejectedField is blank in CSV, required in CRMPopulate or provide default value
Multi-select picklistOnly one value importedValues not correctly comma-separatedFormat as "Value1;Value2" per CRM docs

Table of Contents


Fix 1: Dropdown and Picklist Mismatches

Dropdown custom fields in every CRM compare the imported value to a configured list of valid options. The comparison is almost always case-sensitive and whitespace-sensitive. Gold and gold are different values. Gold and Gold (trailing space) are different values.

❌ BROKEN — Picklist values from source system don't match target CRM:

Source system picklist options: Gold, Silver, Bronze
Target Salesforce picklist options: Tier 1, Tier 2, Tier 3

CSV values imported:
Gold     → no match in target → field blank
Silver   → no match in target → field blank
Bronze   → no match in target → field blank

All rows import successfully. All Account_Tier__c fields are blank.
No error generated.

FIXED — map source values to target values before import:
Gold   → Tier 1
Silver → Tier 2
Bronze → Tier 3

How to export dropdown options from each CRM:

  • Salesforce: Setup > Object Manager > [Object] > Fields & Relationships > [Field] > Values section lists all active options
  • HubSpot: Settings > Properties > [Object] > [Property] > Options tab shows all defined values
  • Zoho: Setup > Modules and Fields > [Module] > [Field] > Edit shows option list

Build a mapping table before importing any file with dropdown custom fields. Every source value must map to an exact target option.

What a Dropdown Validation Failure List Looks Like

This is the output you want to see BEFORE importing — not after discovering blank fields in the CRM.

❌ INVALID DROPDOWN VALUES DETECTED (Data Validator output):

Column: Account_Tier__c
Valid options: Tier 1, Tier 2, Tier 3

Row 14:  "gold"      → case mismatch — no match in option list
Row 27:  "Gold "     → trailing space — "Gold " ≠ "Gold" ≠ "Tier 1"
Row 82:  "Tier One"  → synonym, not the configured label
Row 103: "SILVER"    → all caps — no match
Row 241: ""          → blank — required field

5 rows would import with Account_Tier__c = [blank].
4 require value remapping. 1 requires data to be sourced.

Fix every row in this list before importing. Running validation again after fixing confirms zero mismatches before the upload.

Here's what the silent failure looks like at the system level — this is what Salesforce's internal log records for a picklist mismatch, which never surfaces in the import summary:

❌ RAW IMPORT RESULT (Salesforce internal field assignment):

Field:        Account_Tier__c (Restricted Picklist)
Input value:  "Gold "          ← trailing space, invisible in spreadsheet
System check: "Gold " not in [Tier 1, Tier 2, Tier 3]
Assigned:     null

Field:        Account_Tier__c
Input value:  "gold"           ← case mismatch
System check: "gold" not in [Tier 1, Tier 2, Tier 3]
Assigned:     null

Import summary line: "1 record(s) imported successfully."
Account_Tier__c in Salesforce: [blank]

The import didn't fail. The field assignment silently failed.

The trailing space is the version that kills you — it looks identical to "Gold" in every spreadsheet viewer. Only a raw text editor or a validator that trims and compares values will catch it.


Fix 2: Number and Currency Field Failures

Number and currency custom fields behave identically to standard number fields — they only accept plain decimal values. Currency symbols, comma thousands separators, and percentage signs cause silent field drops.

❌ BROKEN — Number custom field values that import as blank:

Custom field type: Currency (Number)

CSV values that fail silently:
"$12,500.00"    → currency symbol + comma → blank
"12,500"        → comma as thousands separator → blank
"12500.00 USD"  → trailing text → blank
"(500.00)"      → accounting negative notation → blank
"12.5K"         → abbreviated → blank
"N/A"           → text in numeric field → blank

FIXED:
12500.00
12500.00
12500.00
-500.00
12500.00
[remove row or use 0 — N/A has no numeric equivalent]

Fix 3: Date Field Format Mismatches

Custom date fields follow the same format requirements as standard date fields — the expected format depends on the CRM and account locale. For custom fields, the format requirement is the same as the standard date field for that CRM.

❌ BROKEN — Date custom field formats that import as blank:

CRM expecting MM/DD/YYYY (Salesforce US locale):
"15/04/2026"    → DD/MM/YYYY → blank
"April 15 2026" → natural language → blank
"2026-04-15"    → ISO 8601 → may work in some versions; use MM/DD/YYYY to be safe
"04-15-26"      → two-digit year → blank

FIXED — MM/DD/YYYY for Salesforce US:
04/15/2026
04/15/2026
04/15/2026
04/15/2026

For cross-platform imports, use ISO 8601 (YYYY-MM-DD) as the universal format — it's accepted by HubSpot, Pipedrive, and most Salesforce configurations regardless of locale.


Fix 4: Lookup Field Reference Failures

Lookup and relationship custom fields store references to other records by ID or by a unique external identifier. If the referenced record doesn't exist in the target CRM, the lookup fails — either the row is rejected or the lookup field is left blank.

❌ BROKEN — Lookup fails on company name mismatch (silent field blank):

Custom field: Primary_Account__c (lookup to Account object)

CSV value → CRM record name → Match?
"Acme Corp"        ↔ "Acme Corporation"    → ❌ no match → field blank
"ACME Corporation" ↔ "Acme Corporation"    → ❌ case mismatch → field blank
"Acme Corp."       ↔ "Acme Corporation"    → ❌ period difference → field blank
"Acme Corporation" ↔ "Acme Corporation"    → ✓ exact match → field populated

No import error generated for the ❌ rows.
The contact imports. The Primary_Account__c field is blank.

FIXED — two approaches:

Approach A (match by ID — most reliable):
  CSV value: 001XX000003AAAA   (18-character Salesforce Account ID)
  Salesforce resolves by ID, not name — no name matching ambiguity

Approach B (match by exact name):
  Export Account records from Salesforce
  Find the exact Account Name for each lookup value in your CSV
  Replace CSV values with exact matches character-for-character

Import parent records before child records. Always. If your import includes contacts with a custom Account lookup field, the Accounts must exist in the target CRM before importing the contacts.


Fix 5: Required Custom Field Violations

Some CRM administrators configure custom fields as required — meaning every record must have a value. A CSV row with a blank required custom field is rejected. Unlike dropdown mismatches (which are silent), required field violations usually produce an explicit error.

❌ BROKEN — Required custom field blank in CSV:

Salesforce custom field: Contract_Type__c (required)
CSV row: Alice Chen, [email protected], , Enterprise

Error: "Required fields are missing: [Contract_Type__c]"
Row rejected.

FIXED:
Alice Chen, [email protected], SaaS, Enterprise

If the required value genuinely isn't known:
  Option A: Use a placeholder ("Unknown", "TBD") — creates data quality debt
  Option B: Make the field optional before the import, reimport, then make it required again
  Option C: Exclude rows without the required value and import them separately after gathering data

Platform-Specific Custom Field Rules

Salesforce

Salesforce custom fields have an API Name (e.g., Contract_Type__c) and a Label (e.g., "Contract Type"). CSV imports map by Label in the Data Import Wizard. Data Loader maps by API Name. If your CSV uses API names and you're importing via the Wizard, the mapping won't work.

Restricted picklists (controlled by a controlling field or explicitly restricted) only accept exact API values — not display labels in some configurations. For restricted picklists, use the API value in the CSV rather than the display label.

HubSpot

HubSpot custom properties have an Internal Name (e.g., contract_type) and a Label ("Contract Type"). CSV imports map by Label in the browser-based importer. The internal_name is used in the API. For dropdown properties, imported values must match the option labels exactly — including capitalization.

Zoho CRM

Zoho custom fields can be created during the import wizard mapping step ("Add as custom field") — you don't need to pre-create all custom fields before importing. However, for dropdown custom fields, pre-creating the field with its valid option values is safer because on-the-fly dropdown creation may not support all option configurations.


Pre-Import Custom Field Validation Workflow

BEFORE every CRM import containing custom fields:

STEP 1: Export custom field definitions
  → Document every custom field: name, type, required status, dropdown options
  → For Salesforce: Setup > Object Manager > Fields & Relationships
  → For HubSpot: Settings > Properties

STEP 2: Audit your CSV against the definitions
  → For each dropdown column: do all values match configured options exactly?
  → For each number column: are there currency symbols or commas?
  → For each date column: is the format consistent with the CRM's locale?
  → For each lookup column: do all referenced records exist in the target CRM?
  → For each required column: is every row populated?

STEP 3: Run Data Validator
  → Provide dropdown option lists as valid value sets
  → Flag all rows with non-matching dropdown values, blank required fields,
    and format violations in one pass

STEP 4: Fix and re-validate
  → Correct all flagged rows
  → Run validation again to confirm clean
  → Import

Additional Resources

Official CRM Documentation:

Technical Standards:

Tested: Custom field import behavior validated against Salesforce Developer Edition, HubSpot free CRM, and Zoho CRM free tier with custom fields of each type (dropdown, number, date, lookup, required). March 2026.

PLATFORM SPECIFICATION SOURCE
Platform: Salesforce, HubSpot, Zoho CRM
Sources:
  Salesforce: help.salesforce.com — Custom Fields and Picklists
  HubSpot: knowledge.hubspot.com — Custom Properties
  Zoho: help.zoho.com/crm — Custom Fields
Verified: March 2026
Next re-verify: June 2026

Custom field behavior may vary by CRM edition and account configuration.
Always verify dropdown options and required field settings in the target CRM
before a large import operation.

FAQ

The most common cause is a dropdown value that doesn't match any configured option in the target CRM. The record imports, but the field is silently left blank. Export the dropdown option list from your CRM, compare against your CSV values, and fix any mismatches. Check also for trailing spaces — "Gold " and "Gold" are different values to the validator.

No. HubSpot and Zoho CRM both allow creating custom fields during the import wizard mapping step. Salesforce's Data Import Wizard requires fields to exist before mapping. For all platforms, pre-creating dropdown fields with valid option values before importing is safer — it ensures your imported values are validated against the correct option set rather than creating an unconstrained free-text field.

Unrestricted picklists accept any text value — imported values that don't match existing options are added as new values. Restricted picklists only accept values from the configured list — imported values that don't match are rejected or silently dropped. For imports, treat all picklists as restricted and align your CSV values to exact matches regardless of restriction setting.

Export the referenced records from the target CRM and check that every lookup value in your CSV exists in that export. For Salesforce, use the 18-character record ID in the CSV rather than the record name when possible — name matching is case-sensitive and fails on any name variation, while ID matching is exact and reliable.

No. Read-only fields are set by admin configuration or formula field status and cannot be populated via import. If a field needs to receive imported data, the CRM administrator must change its field access to writable before the import runs.


Validate Custom Field Values Before Your CRM Silently Drops Them

Check dropdown columns against your CRM's configured option list before importing
Detect currency symbols, commas, and format issues in numeric custom fields
Identify blank required fields that will cause row rejections before upload
Files validate entirely in your browser — customer classification data never transmitted to any server

Continue Reading

More guides to help you work smarter with your data

ai-data-prep

AI-Ready Data Checklist: 10 Things to Verify Before Upload (2026)

Before uploading to ChatGPT, Claude, or a fine-tuning API, run through this 10-point checklist. UTF-8 encoding, clean headers, PII removed, size within limits.

Read More
ai-data-prep

Convert Excel to JSON for AI APIs and LLM Pipelines (2026)

AI APIs and LLM pipelines expect JSON, not spreadsheets. Fine-tuning needs JSONL; direct prompts take arrays. Convert locally — no upload, no conversion server.

Read More
ai-data-prep

Prepare Data for AI: The Complete Guide (Privacy-First, 2026)

How to prepare a CSV or Excel file for ChatGPT, Claude, or an AI API — encoding, PII, format, size, and privacy. The complete local-first prep workflow.

Read More