Skip to content

Data & imports

Getting records into CRM in bulk, noting the documents that belong to them, seeing who changed what, and finding a record again. Administrators meet the import wizard when onboarding a tenant; everyone else meets the file panels, the History tab and the search box in the course of normal work.

The Import Data wizard covers four objects — leads, contacts, accounts and products. Nothing else loads from a file: there is no CSV import for deals, cases, campaigns, activities or custom objects. The wizard has no menu entry today.

Four steps run across the top of the page — Upload → Mapping → Processing → Complete — though mapping and preview share the second screen.

Upload. Choose the object type, then pick a .csv file. The browser reads the file; nothing is stored until you run the import.

Mapping. One row per column in your file, each with a dropdown of that object’s fields. Fields the object treats as required are marked with an asterisk, and every column can be set to — Do not import —. The server suggests a starting mapping by lower-casing your header and replacing anything that is not a letter or digit with an underscore, then matching that against the field’s name or its label — so First Name, first-name and FIRST_NAME all land on First Name. Columns it cannot place start unmapped. Underneath, the page reports how many rows it found and shows the first five of them in a table so you can see what you are about to load.

Processing and Complete. The run inserts row by row, then reports three counters — Imported, Errors and Skipped — and lists the first 20 failures as Row N: message. Row numbers count the header line, so the first data row is row 2.

Object Required Also accepts
Lead First Name, Last Name Email, Phone, Company, Job Title, Lead Source, Industry, Website, Street, City, State, Postal Code, Country, Description
Contact First Name, Last Name Email, Phone, Mobile, Job Title, Department, Account Name, Street, City, State, Postal Code, Country, Description
Account Account Name Website, Phone, Industry, Account Type, Employees, Annual Revenue, Billing Street / City / State / Postal Code / Country, Description
Product Product Code, Product Name Description, Product Family, List Price, Cost, Unit of Measure, Active

Address columns are folded into the record’s single address field — the billing address on an account. A number column that does not parse is left empty rather than failing the row. For a product’s Active column, only the lower-case values false and 0 mark the product inactive; anything else leaves it active.

  • Every row creates a new record. Matching against existing records and updating them in place is not implemented, so running the same file twice loads it twice. Products are the exception, and not a graceful one: a product code already in the tenant fails that row as a duplicate. Skipped is therefore always zero.
  • Imported records bypass the app’s write path. Validation rules, duplicate rules, assignment rules and workflow rules do not run on them, and no change-history entry is written. Clean the file before you load it — nothing downstream will catch a bad row.
  • The person running the import owns everything it creates, and imported leads start at status New.
  • A contact’s Account Name is not used. The column can be mapped, but the importer ignores it, so imported contacts arrive with no account attached. Link them afterwards.
  • The asterisks are advice, not enforcement. A row with no Last Name is still inserted, with the name left blank.
  • Failures are per row and there is no rollback. A row that fails is counted and reported; the rows before it are already committed. Error logging stops at 100 failures, and the run stops with it. There is no dry run — the preview shows five rows of your file, not the outcome of loading it.

Comma-separated, with the first line as the header. Wrap a value containing a comma in double quotes and double any literal quote (""). Values are trimmed, blank lines are ignored, and an empty cell leaves the field unset rather than blanking it. A value with a line break inside its quotes is not supported — the parser splits on line breaks first, so such a row breaks apart. The file travels inside the request, which the API caps at 5 MB.

A collapsible Files & Attachments panel sits on the detail pages for accounts, contacts and deals, with a count in its header. Each entry shows a type icon, its title, its type and the date it was added, plus Remove, which unlinks it from the record.

An entry is a reference, not a document. The form takes a Title, a File Type from a fixed list (PDF, Word, Excel, PowerPoint, image, contract, proposal and a couple more) and a Description — nothing is uploaded, and there is nothing to open, preview or download afterwards. The deal form says as much on the form itself. Use it to record that a signed contract exists and what it is called; keep the document itself wherever your organisation keeps documents.

Two limits worth knowing before you rely on the panel:

  • Adding works on deals only. The Add File form on accounts and contacts sends a shape the API does not accept and fails with a validation message — and its URL box has nowhere to be stored in any case. Listing and removing work on all three.
  • Behind the panels the API can link a file to eight record types — leads, accounts, contacts, deals, activities, campaigns, cases and quotes — but the three panels above are the only places it surfaces.

Every record page that has it calls it History: a tab on leads, cases, accounts and contacts, and a panel at the foot of the deal page.

Entries run newest first. Each one names who did it, what they did and how long ago. The action appears as its code — CREATE, UPDATE, DELETE, RESTORE — and a change made by the system rather than a person is attributed to system. An update also lists the fields that changed, one line each as old → new, with unchanged fields dropped; creates and deletes show the action alone. Field names are the API’s own (accountName, ownerUserUuid), not the labels from your page layouts. The panel asks for the 50 most recent entries on that record.

The log underneath is wider than those five pages. It records quotes, campaigns, activities, notes, deal and account teams, roles, forecast periods, approvals and more, and the API will read back nine object types — leads, accounts, contacts, deals, activities, notes, campaigns, cases and quotes. The five pages above are where it appears on screen.

History is written by the app’s normal write path, so anything that goes around it leaves no trace — the CSV importer above is the one that matters. There is no tenant-wide audit screen, no filtering by user or date, and no export: history is read one record at a time. Entries cannot be edited or deleted from the app.

The box in the app header. Ctrl/⌘ + K focuses it and Esc dismisses it; it greys out while a dialog is open. Type at least two characters and results appear about a third of a second after you stop.

Record Matched on Second line shows
Leads Name, company, email Company
Accounts Name, account number Industry
Contacts Name, email Email
Deals Name Stage
Cases Subject, case number Case number and status
Quotes Name, quote number Quote number and status
Products Name, product code Product code

A match anywhere inside the value counts, not just at the start, and the hits are ordered by how close the match is to what you typed. The match itself is literal, though — a misspelling finds nothing, however close it is. You get up to five hits per record type, deleted records are excluded, and results never cross out of your tenant.

Only lead, account, contact and deal results open. A case, quote or product hit is listed — you can see that it exists — but it carries no type label and clicking it returns you to the dashboard instead of the record. Open those from the Cases, Quotes and Products lists.

Behind the box the API reaches further: 14 record types in all, adding campaigns, vendors, sales orders, purchase orders, activities, knowledge articles and users, plus a paginated “all results” call, each user’s recent queries, and the tenant’s most-searched terms over the last 30 days. None of that has a screen — the header dropdown is the only search surface in the app — though your successful searches are recorded as you make them, which is what feeds those two lists.

Every list page carries a download button in the footer of its table, alongside the paging controls. It writes an Excel file using the columns you currently have visible, in the order you have arranged them, so hiding a column keeps it out of the export.

It exports the page you are looking at, not the whole list. If you want everything, raise the page size first and export once the full set is on screen.

Three screens do something richer:

  • Reports — each of the built-in reports downloads to Excel through a column picker, and re-runs the query for the whole period rather than exporting what is on screen. See Reports & forecasting.
  • Opportunities — the one list without the footer button. Its own Export button (tooltip: Export to CSV) downloads the rows on screen as CSV; the page loads up to 200 matching your current filters.
  • Stock valuationExport to Excel, with a totals row appended.

Not everything on this page is governed by the role permission matrix. Treat the capabilities described here as tenant-wide when you plan access: do not rely on unticking a right to keep someone out of them, because signing in to the workspace is the real boundary. See Security & sharing.

  • Sales — leads, accounts, contacts and deals are what the importer loads and the search box finds.
  • Automation — the validation, duplicate, assignment and workflow rules that imported rows skip.
  • Security & sharing — record visibility, and how it relates to the gating above.
  • Mobile — the Android app has no import, attachment or change-history screens.