How to import leads from Excel without importing a mess
Most lead databases go bad on the day they are created. A practical guide to column matching, phone formats, duplicate rules and the pre-flight check that catches bad rows before they reach your team.

Nearly every calling team starts the same way: a sheet. A list bought from an expo, an export from a portal, three months of walk-ins typed up by whoever was at the desk. The sheet is the asset, and the first thing a new CRM is asked to do is swallow it.
This is the moment most lead databases go bad. Not later, when people stop updating stages — on day one, when four thousand rows of inconsistent data land in a clean system and take its cleanliness with them. Six weeks on, nobody trusts the numbers, two agents are ringing the same person, and the honest conclusion is “the CRM did not work for us”.
It is worth being deliberate about this one hour. Here is what actually goes wrong, and how to get a sheet in without the mess.
Start with the headings, not the data
LumaKol reads the first row of your file as the column headings and matches them automatically against its own fields. “Mobile”, “Mobile Number”, “Phone”, “Contact No” all find the phone field without you doing anything. So the single highest-value minute you can spend is on row one: make sure each column has a heading and that the heading says what is in the column.
You then confirm the matching on screen, with sample values from your own file shown beside each column so you can see what you are agreeing to. One rule is enforced: something has to be the mobile number. Everything else is optional.
The fields available to match into are broader than most people expect, which matters because every one you map is a filter you get later:
- Name, mobile number, an additional mobile number, email, company and designation.
- City, state, country, postal code, address — and latitude/longitude if your source has them.
- Source and campaign, which are what let you compare where leads came from three months from now.
- Stage and “assigned to”, so a sheet that already knows who owns a lead does not have to be re-sorted by hand.
- Next follow-up, so promised callbacks survive the move into the new system instead of being lost in it.
- External ID, the field that makes a second import of the same source match up rather than collide.
What to do with the columns that do not fit
Real sheets carry columns a CRM has never heard of: Budget, Project, Course, Policy Number, Which Hoarding. You have two options for each, and the wrong one is quietly expensive.
You can skip the column, and lose that information for good. Or you can turn it into a custom field, in which case it becomes a real field on every lead: visible on the lead page, present in exports, usable as a variable inside your message templates. LumaKol offers to create it straight from the import screen.
Take the second option for anything an agent would ask about on a call. A budget column sitting in a skipped spreadsheet column helps nobody; the same column as a currency field lets a team lead sort tomorrow’s list by who is worth calling first.
One caution: the field type decides validation and cannot be changed once values are stored against it. Think for a second before you pick. “Budget” as Number or Currency will sort and total correctly; “Budget” as Text will sort as 1, 10, 100, 2 for the rest of its life. The ten types are Text, Number, Currency, Date, Dropdown, Multi-select, Checkbox, Link, Email and Phone, and each one gets a hint line you can write for agents — one sentence under the field telling them exactly what to enter, which is the cheapest data-quality control there is.
Phone numbers are where imports actually break
A phone number in a spreadsheet is rarely a phone number. It is a string with a leading apostrophe, or a number that lost its zero, or nine digits, or a cell containing “9876543210 / 9876543211”, or a value Excel helpfully rendered as 9.87654E+09.
This matters more in a calling CRM than in any other kind, because the phone number is not just data — it is the thing the product exists to dial, and it is the key duplicates are matched on. A number that is wrong is a lead that can never be worked and can never be deduplicated.
So before anything is uploaded, run the check. It validates every row in your browser — nothing has left your computer at this point — and tells you three numbers: how many rows are ready, how many are duplicates of another row inside the same file, and how many have problems. Each problem row is named with a reason:
| What the check says | What it usually means |
|---|---|
| Not a valid mobile number | A landline, a truncated number, or a cell with two numbers in it |
| Same number appears earlier in this file | The sheet itself has duplicates — very common in merged lists |
| Stage doesn’t match any of your pipeline stages | Spelling drift: “Site Visit” versus “Site visit booked” |
| “Assigned to” doesn’t match any active agent | A person who left, or a nickname instead of their account name |
| Next follow-up is not a readable date/time | Excel’s date formatting, usually a US/UK day-month swap |
| Country is not a valid code or name | Free text where a country code was expected |
Only rows that pass are uploaded. That is the design decision that keeps the database clean: bad rows do not arrive as half-leads to be fixed later, they stay in your sheet where you can correct them and add them in a second pass.
The practical workflow is: run the check, fix the file, run it again. Two minutes, twice, is the whole discipline.
How duplicates are decided — and why it is the phone number
Duplicates are matched on the mobile number. Not on name, not on email, not on a similarity score.
That is a deliberately narrow rule and it is the right one for a calling team. Names are unreliable: the same person is Rajesh Kumar, R. Kumar and Rajesh K across three sheets, and two genuinely different people share a name more often than anyone expects. Emails are frequently missing. The number is the thing you dial, so the number is the identity — and the cost of getting it wrong is concrete and visible: two agents calling the same person is the fastest way to lose a lead and embarrass a brand.
Duplicates are caught at two levels. Repeats inside your file are flagged by the check before upload. Numbers already in LumaKol are skipped during the import itself, which means re-importing a sheet you have already loaded is safe — it adds what is new and ignores what is not.
Be aware of what this does not catch. The same person with two different SIMs is two leads, because to a dialler they genuinely are two numbers. If that matters for your business, map the second number into the additional mobile number field rather than creating a second row.
Deciding who calls them, at the moment of import
An unassigned lead is an uncalled lead. The import gives you three choices and it is worth making it here rather than “later”, because later usually means never:
- Decide later — leads stay unassigned and you hand them out from the leads list. Legitimate when a manager wants to read the list first; dangerous as a habit.
- One person — every lead in the sheet goes to one agent. Right for a list that belongs to a territory or a campaign someone owns.
- Split evenly — leads are dealt out one at a time across the people you tick, so everyone gets an equal share. Right for a bulk list where fairness matters more than fit.
There is a subtlety in the multi-file case that is easy to miss: if you add several files at once, or a workbook with several sheets, each file and each sheet becomes its own list. You can hand each one to a different agent in the same sitting. A workbook with a tab per city is therefore not a problem to be flattened — it is already organised the way you want to assign it.
The source label is a gift to your future self
Every import asks for a source label, and it is shown on every lead that came in with it. “Property expo – September” takes four seconds to type.
Three months later it is the only thing standing between you and an unanswerable question. Which expo produced business? Was the bought list worth the money? Is the website converting better than the hoarding? Without a label, every lead is from “the CRM” and no source can ever be compared with another. With one, the funnel report answers it directly.
Use a label that includes the month. “Facebook leads” becomes useless the third time you use it; “Facebook – Sept residential” stays meaningful for years.
Read the receipt
When the import finishes you get a count: leads imported, how many were skipped as duplicates, how many were rejected, out of how many rows. Read it. It is the last moment the numbers are easy to explain.
A sheet of 4,000 rows that imports 2,600 is telling you something about where that list came from, and it is better to know on the day than to wonder in a month why the campaign underperformed. Every import is also kept in Reports → Import history, with the file name, rows, imported, duplicates, invalid and when — so the question “what exactly did we load in September?” has an answer that does not depend on anybody’s memory.
A short pre-flight checklist
- Open the sheet and fix row one so every column has a real heading.
- Put phone numbers in a text column so Excel stops eating leading zeros and converting long numbers to scientific notation.
- Split any cell holding two numbers into the mobile and additional-mobile columns.
- Decide, before you upload, which extra columns become custom fields — and pick their types carefully, since types cannot be changed later.
- Download the sample sheet if you are building a list from scratch; it saves the matching step entirely.
- Run the check. Fix what it names. Run it again.
- Write a source label with a month in it, and choose an assignment rule rather than deferring it.
- Read the final count, and keep the original file somewhere. It is your only copy of the rows that did not pass.
Domande su questo argomento
What happens if I import the same sheet twice?+
Nothing bad. Numbers already in LumaKol are skipped as duplicates during the import, so a second run adds only the rows that are new. The final count will tell you how many were skipped.
Can I import leads that are already assigned to specific agents?+
Yes. Map the column holding the person’s name to the “Assigned to (agent)” field. Any value that does not match an active agent is reported as a problem row before upload, so you can correct the spelling rather than discover the mismatch afterwards.
Are my leads uploaded before they are validated?+
No. The check runs in your browser — phone numbers, duplicates inside the file and custom field rules — and only rows that pass are ever sent. Rows with problems stay in your sheet.
Can I add a column to my leads after the import?+
Yes. Create the custom field under Setup → Custom fields and it appears on every lead. Note that a field’s type cannot be changed once values are stored against it, so choose Number or Currency over Text when the values are numeric.
How are duplicates decided?+
On the mobile number only. Two rows with the same number are the same lead; two rows with the same name and different numbers are two leads. If one person uses two SIMs, put the second number in the additional mobile number field rather than creating a second lead.
Correlati
- ProdottoFunzionalitàTutto ciò che fa LumaKol, schermata per schermata
- GuidaImport leads and assign them