| Sheet rowFull name |
Contactfirstname / lastname req |
split |
|
| Sheet rowEmail |
Contactemail req |
direct |
De-duplication key. Check for blanks and shared inboxes. |
| Sheet rowEmail (test and load runs) |
Contact / Leademail (temporary .invalid suffix) |
derive |
While you test and load with any automation still on, append .invalid to every email address so no welcome message, alert or auto-response can reach a real person. Strip the suffix in one update at go-live, before turning outbound email back on. Salesforce sandbox refreshes only do this for user emails, not contact or lead emails. |
| Sheet rowPhone |
Contactphone |
derive |
Normalize to one format (E.164 if you will dial from the CRM). |
| Sheet rowState / province |
ContactState code (state and country picklists) |
picklist map |
With Salesforce state and country picklists turned on, each row must carry a value that matches a valid state and country code or name exactly. Full names typed differently, odd abbreviations or typos fail the whole row. Map every distinct value to its two-letter code before loading, then rerun only the failed rows. |
| Sheet rowCompany |
Company / Accountname |
derive |
Create once, then associate every person. |
| Sheet rowStatus column |
ContactLifecycle stage / lead status |
picklist map |
|
| Sheet rowOwner initials |
AnyOwner |
lookup |
|
| Sheet rowDates typed as text |
AnyDate property |
derive |
Parse into real dates. Watch day/month order. |
| Sheet rowOriginal created or lead date |
Lead / ContactSource date field (or CreatedDate) |
derive |
Every loaded record gets the load date as its created date, so queues, list views and age formulas built on created date show old leads as new or hide them behind date filters. Load the original date into its own field, or set CreatedDate with the Set Audit Fields permission, and point filters, sorting and age calculations at it. Check for placeholder dates such as 1899 or 1900 that came from blank cells. |
| Sheet rowCells with several values |
AnyMulti-select property |
split |
|
| Sheet rowNotes column |
NoteBody |
direct |
|
| Sheet tabDeals or pipeline tab |
Deal / Opportunityname / amount / stage / close date |
picklist map |
|
| Sheet rowCampaign column (name or ID) |
Campaign MemberCampaignId + LeadId / ContactId |
association |
Load the people first, then create the campaign membership records that link each one to its campaign. Spreadsheet edits (autofill, drag-copy, number formatting) can quietly change long ID values, so keep ID columns formatted as text, or match on a campaign external ID or short code instead of the record ID. |
| Whole fileBulk load run |
Any— |
manual review |
Before a bulk load, pause automation that fires on insert (triggers, record-triggered flows, assignment rules, welcome emails) or confirm it is safe to run. Load a small test batch first, check the results and the error file, then load the rest. |
| Sheet rowCodes used as match keys (promo, mailer or source codes) |
AnyExternal ID / match key |
derive |
Trim spaces and normalize case before matching. Some source systems uppercase values on save, so the same code can arrive in two cases and load as false duplicates. In Salesforce, decide whether a unique External ID field should be case-sensitive before loading. |