The short answer: download the template for your object below, keep the header row exactly as it is — those headers are field API names, which is what every Salesforce loader matches on — and put one record per row. Fill the required columns, delete the columns you do not need, delete the sample row (and, in the Excel file, the type row under the headers), and load it with the Data Import Wizard or Data Loader. Nothing here needs an account, a signup, or our tool.
Download
| Object | CSV | Excel | Loaders that accept this object |
|---|---|---|---|
| Account | account.csv | account.xlsx | Data Import Wizard, Data Loader, Bulk API |
| Contact | contact.csv | contact.xlsx | Data Import Wizard, Data Loader, Bulk API |
| Lead | lead.csv | lead.xlsx | Data Import Wizard, Data Loader, Bulk API |
| Opportunity | opportunity.csv | opportunity.xlsx | Data Loader, Bulk API only |
| Case | case.csv | case.xlsx | Data Loader, Bulk API only |
| Campaign Member | campaign-member.csv | campaign-member.xlsx | Data Import Wizard, Data Loader, Bulk API |
| Task | task.csv | task.xlsx | Data Loader, Bulk API only |
The Data Import Wizard imports accounts, contacts, leads, solutions, campaign members, person accounts and custom objects, takes CSV only, and stops at 50,000 records per import. Opportunities, cases and tasks are not on that list — hence Data Loader or the Bulk API for those three. See the limits guide and the Opportunity guide.
What is inside the files
- The CSV is a header row of field API names plus one example row, saved as UTF-8. Overwrite or delete the example row before you load it — otherwise you will create an account called Acme Corp.
- The Excel file adds a second row with the field type and a
REQUIREDflag, and a third row with the example. Delete both before loading. Id and postal-code columns are preformatted as Text so Excel cannot turn an 18-character Id into scientific notation or eat a leading zero. - Columns are a starting set, not a limit. Any standard or custom field you need can be added: put its API name in the header row. Loaders map on the header, not on our file.
The columns in each template
Account
| Field API name | Type | Required | Notes |
|---|---|---|---|
Name | string | Yes | Up to 255 characters. On a person account it is built from the first and last name and cannot be set directly. |
Type, Industry | picklist | — | Must match an active value in your org's value set, not a free-text label. |
Phone, Website | phone, url | — | Website is capped at 255 characters. |
BillingStreet, BillingCity, BillingPostalCode | textarea, string | — | Keep the postal code as text so leading zeros survive. |
BillingStateCode, BillingCountryCode | picklist | — | These two exist only when State and Country/Territory picklists are enabled, and take the ISO code — US, not USA. If those picklists are off, rename the columns to BillingState and BillingCountry and use the names. |
Description | textarea | — | Free text. |
Fields worth adding by hand: AnnualRevenue and NumberOfEmployees (bare
numbers, no symbols or separators), ParentId (the parent account must already exist),
and OwnerId — leave that one out and the account is owned by the user running the
load.
Contact
| Field API name | Type | Required | Notes |
|---|---|---|---|
LastName | string | Yes | Up to 80 characters. The only field Salesforce insists on. |
FirstName | string | — | Up to 40 characters. |
AccountId | reference | — | Optional to Salesforce, rarely optional to you: without it the contact is private. |
Email | — | An idLookup field, so some loaders can match on it. | |
Phone, Title | phone, string | — | Keep phone as text so leading zeros and plus signs survive. |
MailingStreet, MailingCity, MailingPostalCode | textarea, string | — | Postal code as text. |
MailingCountryCode | picklist | — | Same State/Country picklist caveat as Account. |
Lead
| Field API name | Type | Required | Notes |
|---|---|---|---|
LastName | string | Yes | Up to 80 characters. |
Company | string | Yes | The classic reason a lead file is rejected. If person account record types are enabled, a lead whose Company is null converts to a person account. |
Status | picklist | Defaulted | Defaulted on create: leave it blank and Salesforce applies the org's default Lead Status. Fill it and the value must be one of the Lead Status values defined in your org. |
FirstName, Title | string | — | First name is capped at 40 characters. |
Email, Phone | email, phone | — | Email is an idLookup field. |
LeadSource, Industry | picklist | — | Org value sets. |
CountryCode | picklist | — | With State and Country/Territory picklists on, the address code fields take the ISO code — US, not USA. Add StateCode, Street, City and PostalCode if you have them. |
Opportunity
| Field API name | Type | Required | Notes |
|---|---|---|---|
Name | string | Yes | Up to 120 characters. |
StageName | picklist | Yes | Must be a stage that exists in your org. The stage also drives Probability, Forecast Category, IsClosed and IsWon. |
CloseDate | date | Yes | yyyy-MM-dd. This is where off-by-one dates usually show up. |
AccountId | reference | — | Optional to the API, but an opportunity with no account is orphaned. |
Amount | currency | — | Digits only. If the opportunity has products, the value you send is ignored — the amount is the sum of its line items. |
Probability | percent | — | Digits only. Salesforce derives it from the stage, so you can usually leave the column empty. |
Type, LeadSource | picklist | — | Org value sets. |
Description | textarea | — | Free text. Add OwnerId or CampaignId columns if you need them. |
Case
The Data Import Wizard does not support Case — this template is for Data Loader or the Bulk API. Counter-intuitively, Case has no field the API forces you to supply: Status and Priority are defaulted on create, and Subject and Origin are nillable. Your org's page layout and validation rules almost certainly disagree, so check them.
| Field API name | Type | Required | Notes |
|---|---|---|---|
Subject | string | — | Up to 255 characters. Optional in the API, expected by everyone reading the case. |
Status | picklist | Defaulted | Blank takes the org default. Directly controls the read-only IsClosed flag. |
Origin | picklist | — | Optional in the API, required on most page layouts. |
Priority | picklist | Defaulted | Blank takes the org default. |
AccountId, ContactId | reference | — | Existing record Ids. |
Description | textarea | — | Limit 32 KB. |
Campaign Member
| Field API name | Type | Required | Notes |
|---|---|---|---|
CampaignId | reference | Yes | Create-only: the field cannot be updated after the member exists. |
ContactId | reference | One of the two | The contact joining the campaign. |
LeadId | reference | One of the two | The lead joining the campaign. Supply this or ContactId, not both. |
Status | picklist | — | Must be a member status defined on that campaign. A value that is not valid is not an error: the API assigns the campaign's default status instead. Check your counts afterwards. |
Task
| Field API name | Type | Required | Notes |
|---|---|---|---|
Subject | combobox | — | Up to 255 characters. Free text with UI suggestions. |
Status | picklist | Defaulted | Defaults to Not Started if blank. |
Priority | picklist | Defaulted | Defaults to Normal if blank. |
ActivityDate | date | — | The due date. Its timestamp is always set to midnight UTC — send yyyy-MM-dd and nothing else. |
WhoId | reference | — | A Contact or Lead Id. |
WhatId | reference | — | A non-human record: Account, Opportunity, Case, Campaign, custom object. |
Description | textarea | — | Shown as Comments on the record. Add an OwnerId column ("Assigned To") if the tasks are not for you — it defaults to the user running the load. |
Rules that apply to every template
- Keep the header row. Do not rename the columns — the headers are field API names, and that is what the loader matches. Column order does not matter; you can delete any column you are not populating.
- Delete the sample rows. They are there to show the shape of a value, not to be loaded.
- One object per file. Every row in a file has to be for the same object.
- Dates:
yyyy-MM-dd. Date/time fields:yyyy-MM-ddTHH:mm:ss.SSSZ, or with an offset such as2026-07-14T09:00:00.000+02:00. A date field takes no time and no offset — Salesforce documents that an offset on a date is not supported. The Data Import Wizard will also read dates in the locale format of the user running the import, which is exactly how the same file lands differently for two admins. - Numbers: digits and a decimal point only. No
$, no%, no thousands separators, no parentheses for negatives. Those are the fastest route to a type-conversion error. - Ids: the API accepts the 15-character (case-sensitive) or the 18-character Id. Format the column as Text before you paste so nothing gets re-cased or truncated.
- Blanks: leave the cell empty. Do not type
NULL,N/Aor-— they are text, and Salesforce will try to store them. - Encoding: save the CSV as UTF-8 — Bulk API files must be UTF-8. The wrong encoding is what mangles accented names and non-Latin characters on the way in.
These are starting points, not your org
The required column above means "required by the Salesforce platform". Your org almost certainly adds more: custom fields marked required, validation rules, restricted picklists, record types that only expose some picklist values, and duplicate rules. None of that is visible in a generic template.
Before you load, open Setup → Object Manager → your object → Fields & Relationships, sort by Required, and skim Validation Rules. Two minutes there beats the load-fail-fix-reload loop. When it does fail, the import error hub has the messages — required field missing and bad value for restricted picklist field first among them.
If your file does not look like the template
These templates assume you can retype your data into their shape. Usually the export from the other system has its own column names, its own date format and its own picklist vocabulary — and that mapping is the actual job.
That is the gap INQUA fills. It reads
.csv, .txt, .xlsx and .xlsm natively — no
CSV conversion step — and maps any source columns onto a target, with 13 chainable
per-column transformations (trim, find and replace, parse a date with an exact format, map
values, and so on). You can point it at one of the templates above, or upload your own load
template and have it written back to you as a typed workbook with your header block intact —
no Salesforce connection required for that path. If you do connect an org, it reads the
accepted picklist values from the describe and flags violations in the preview, before
anything is written.
It is honest about what it cannot see: it does not know your validation rules, your triggers, your Flows or your duplicate rules, so those still fail server-side like they would with any loader. It never deletes records, and it does not export records out of Salesforce. What it does remove is the mechanical half — the retyping, the format wrangling, and the Excel-to-CSV round trip that quietly strips leading zeros and rewrites your dates. Free during early access.