Switch from Excel or CSV
How you prepare spreadsheets with leads, opportunities, calls and tasks for the switch, which columns the AI needs, what the pitfalls are and what does not come along.
This page belongs to the area Switch from another system. The process with your AI is described in Switch with your AI. It applies to Excel, Google Sheets and CSV files from any source.
When to use the file import and when the switch
If you only have leads, use the file import. It is simpler. The switch is worthwhile if your spreadsheets also contain history: calls, notes, tasks, appointments or opportunities with stage. The file import knows only leads.
What you prepare
One table or sheet per kind of data. Best like this:
| Table | Content | At least |
|---|---|---|
| Companies | one row per company | unique identifier, name |
| Contact persons | one row per person | unique identifier, identifier of the company, name |
| Opportunities | one row per sales opportunity | identifier of the company, stage |
| History | one row per call, note or email | identifier of the company, date and time, text |
| Tasks | one row per task | identifier of the company, title, status |
| Appointments | one row per appointment | identifier of the company, start, end, status |
The instructions for saving as XLSX or CSV are in Leadmode at the import under "Where does your data come from?" for Excel and Google Sheets. They have been checked.
If you only have one table, that is fine. Your AI shows you what it finds in it and suggests how it is divided.
How columns become Leadmode objects
| In your table | Leadmode | Note |
|---|---|---|
| Company, customer | Company | address, channels, owner |
| Contact person, person | Contact person | connection to the company via the identifier |
| Status, stage, phase | Stage or substage | free text is assigned via the mapping |
| Call, lead, history | History | with date, author, outcome and text |
| Note, remark | Note | with date and author |
| Task, follow-up, callback on | Task | with due date |
| Appointment | Appointment | start, end, status |
| Editor, caretaker | Owner | you assign names to employees, also former ones |
| Other columns | Custom fields | type is recognised |
| "Do not call", "block" | Block | remains as a block |
Several contact persons in one row
In the file import and in the switch you can store several contact persons and contact channels per company in two columns: peopleJson (persons) and channelsJson (numbers and emails). Both are JSON lists. An example for a company with two contact persons:
peopleJson: [{"ref":"a","firstName":"Anna","lastName":"Muster","salutation":"Frau","jobTitle":"Geschäftsführung","primary":true},
{"ref":"b","firstName":"Ben","lastName":"Beispiel"}]
channelsJson: [{"kind":"phone","value":"+49 30 1234567","label":"Zentrale"},
{"person":"a","kind":"mobile","value":"+49 171 1234567","label":"Direkt"},
{"person":"a","kind":"email","value":"anna@beispiel.de"},
{"person":"b","kind":"phone","value":"+49 30 7654321"}]- Persons:
firstNameorlastName(one is enough). Optional areref(a name to which the channels refer),salutation(Herr, Frau, Divers or Keine Angabe; without an entry the salutation stays unknown and is never guessed from the first name),jobTitle,primary(main contact person; without an entry the first person) anddoNotContact. - Channels:
kindisphone,mobileoremail, plusvalue.personrefers to therefof a person; withoutpersonthe channel belongs to the company. Optional arelabel,preferred(preferred; without an entry the first per person and kind),enabledanddoNotContact. - Errors: an invalid row names the place, for example
invalid_structure:channelsJson[1].kind. Values from the file never appear in the message. Preview and import check by the same rules.
Typical pitfalls
- No identifier. Without a unique identifier per row, Leadmode cannot later recognise whether an entry has already been imported. If you can, add a column with a running number and do not change it later. If it is missing, your AI forms an identifier from the row. This only holds as long as the table does not change.
- Companies as text. If persons only carry the company name and no identifier, your AI connects via the name. Spellings such as "Müller GmbH" and "Mueller GmbH" may be separated by it. Check the messages in the trial run.
- Several values in one cell. Your AI splits several phone numbers or emails in one cell. Check the result.
- Date formats. "01.02.2026" can be 1 February or 2 January. Tell your AI which format applies. Give times as well, otherwise the order in the history is missing.
- Merged cells and empty rows. Remove them. The first row must contain the column headings.
- Several sheets. For the file import exactly one sheet must be filled. In the switch your AI reads the file itself. One sheet per kind or one CSV per kind is simplest.
- Free-text statuses. The more different spellings, the longer the mapping. Tidy up duplicate spellings beforehand, if you can.
- The future. Calls and completed tasks in the future are rejected.
What does not come along
- Formulas, charts, colours and comments. The value of the cell counts.
- Files linked in cells, and attachments.
- Emails as a mailbox and call recordings.
Acceptance
- Count the rows of your tables and give the numbers to your AI as "expected".
- Have the reconciliation report shown to you. Each difference must have a reason.
- Open three to five companies you know well. Check history, tasks, owner and stage.
- Check that blocks arrived and that no email went out.
- Complete the order. If you do not like the result, take it back and start again.
See also
Switch from Salesforce
What you export from Salesforce, how accounts, contacts, leads, opportunities, tasks and events arrive in Leadmode, which stages belong where and what does not come along.
Switch from a self-built system
Switch from a self-built system such as Base44, Airtable or Notion: what you export, how tables and fields are assigned, pitfalls and what does not come along.

