Migrating a Small Sales Team Off a Shared-Excel Lead Register
A shared spreadsheet is fine until two people edit it at once. Here is how to migrate to a CRM without the file quietly creeping back into daily use.
SBy Shuvam, Founder of KodeBizUpdated
What a Real CRM Has to Replace
A web copy of the spreadsheet would carry over all four structural gaps, so the goal is to fix each one directly. Concurrency becomes a server that serializes writes, so two people editing the same lead resolve cleanly instead of overwriting each other.
An access boundary becomes a scope filter applied on every read: admins see all, a manager sees their own reporting tree, a salesperson sees only their own leads. History becomes an audit record written on every change, capturing who, when, and the before-and-after. Build that audit record append-only by design so entries cannot be edited after the fact. With those three in place, the weighted forecast finally rolls up from data the team can trust.
Before You Migrate: Find Out What the Register Really Holds
A lead register that has been in use for a while carries more meaning than its column headers suggest. A colour marks a hot lead, a remarks column holds the next follow-up date, a bold row means the rep is waiting on a quote, and one person keeps a second tab nobody else opens. None of that survives an import unless someone writes it down first.
That is the job of the requirement study. Sit with each rep and with the sales head, open the file together, and record every column, every colour, every stage label actually in use, and every exception, such as "this customer buys through a contractor, so the contractor is the lead". At Ceiling Impex the most important relationships were not in the columns at all. Interior fit-out deals depend on the architect who specifies the material and the contractor who buys it, so the CRM needed linked architect and contractor records with their own contacts, and duplicate checks across all of them.
The output is a written scope that answers questions the spreadsheet never had to: which fields are required, which values come from a fixed list, who owns a lead when a rep moves on, what counts as an active lead, and who signs off the reconciliation.
- Columns: what each one means, who fills it, and whether it becomes a field, a picklist, or is dropped
- Hidden meaning: colours, bold rows, comments and side tabs, each turned into a real field or status
- Stage labels: every spelling in use, mapped to one fixed stage
- Relationships: companies, contacts, architects, contractors, and how one lead links to each of them
- Ownership: who owns each lead, and the rule for leads left behind by people who have moved on
A Two-Pass Migration
Do not migrate the spreadsheet in one shot. A single bulk import drags every typo, merged cell, and stale row into the system you are trying to make authoritative. Split it into two passes so the cleanup happens deliberately, as its own step.
Pass one is structural. Map the workbook columns to CRM fields, normalize the obvious noise (owner names, sources, stage labels into the system's configurable stages), and load only active, in-flight leads. Pass two is reconciliation. Sit with the team, walk the imported records against memory and email, fix the rows the import could not, and archive the dead ones. Keep the original file read-only as a reference during this window only.
- Pass one: map columns to fields, normalize values, import only active leads
- Pass two: reconcile with the team, fix bad rows, archive dead ones
- Keep the old file read-only as reference, never as a live system
- Set a hard cut-over date once pass two reconciliation is signed off
A Migration Checklist for the Sales Head
The two passes are the method. This is the order of work, written so a sales head can track it without reading any code. Every item is agreed in the written scope before the import runs, and each one has a named owner on the client side.
- Freeze the file's structure: no new columns, tabs or colour codes once the mapping is agreed
- Take a dated export of the workbook and store it where only the project team can edit it
- Map every column to a CRM field, a picklist, a note, or 'dropped', and get the mapping signed off
- Build a stage mapping table from every label variant found, so 'Negotiating', 'In negotiation' and 'Discussing' all become Negotiation
- Agree the duplicate rule before importing: the same company with the same contact email or mobile is one record, and near matches are flagged for a person to decide, never merged automatically
- Give every lead an owner; leads that belonged to people who have left go to their manager, never to 'unassigned'
- Agree what 'active' means for your pipeline, import only those leads in pass one, and keep the rest in a separate archive list
- Reconcile with each rep on their own leads, and record every fix in the CRM, not in the file
- From the first day of reconciliation, new leads are entered in the CRM only; the file is for lookup
- On cut-over day, set the file to read-only, move it to an archive folder, remove its shortcut from the shared drive, and tell the team in writing
- Run the next pipeline review from the CRM screen, with no spreadsheet export on the table
After Cut-Over: Keeping the Pipeline Honest
The migration is finished when the team stops thinking about the old file, not when the import completes. The first few pipeline reviews decide that. If the sales head runs the review from the CRM, asks about the leads that have not moved, and refuses spreadsheet exports, the team learns quickly where the truth lives.
Use the audit history actively. Stale leads, stages that jump backwards, and values edited the day before a review are all visible in it, and they are exactly the questions a director or board will ask later. Our article on what a CRM audit log must capture to survive board review covers that bar in detail. Revisit the stage probabilities as well: the defaults agreed in the scope are a starting point, and the real win rate at each stage tells you whether the weighted forecast needs adjusting.
Finally, watch adoption the way you would watch a pipeline. Leads created per rep, overdue next actions, and reps who log fewer leads than they used to put in the file all show where training or a small change to the screens is still needed. Those changes go through the same written scope and support process as the original build.
Why the Spreadsheet Creeps Back
Most failed migrations are not technical. The tool works and the team quietly keeps the spreadsheet alive in parallel, because old habits feel faster than new ones in the first few days. Once two sources of truth exist, the roll-up is wrong and trust in the CRM collapses.
The fixes are organizational. Make the CRM faster for the most common action than opening the file was. Give managers a scoped view on day one so they stop asking for the spreadsheet export. And set a clean cut-over: a named date after which the file is archived and the CRM is the only place a lead is recorded. Surface the audit history in the UI so people can see their own edits land and believe the system.
- Two sources of truth: the file survives in parallel and the roll-up diverges
- Friction: if logging a lead is slower than the old file, reps default back
- No cut-over date: indefinite 'transition' means the file never dies
- Hidden history: if changes feel invisible, trust never transfers
How We Approach It at KodeBiz
We have done this migration as a production build. For Ceiling Impex, a CRM replaced a six-person shared-Excel lead register with six configurable pipeline stages, weighted forecasts, dual SSO, a contact graph, and full audit history. Every structural fix above was in the actual scope of that build.
Small decisions carried much of the adoption. Reps sign in with the Zoho accounts they already use, while sales leadership signs in with Microsoft 365, so nobody has a new password to forget. Deleted leads go to a recycle bin instead of disappearing. Each lead is tagged with its product line and registration status, so reports roll up the way the business is actually run, across the 11+ branches now working in one system. The client's sales director described the result as pipeline reviews going from "a Friday-afternoon argument" to "a ten-minute screen-share".
Our process keeps the migration honest because it starts with requirements. Before anything is built, we sit with the reps and managers who use the register, document every column, stage label, and exception, and agree the scope in writing, including which records migrate and who signs off the reconciliation. Each build milestone is reviewed against that agreed scope, and the team is trained on the new system before cut-over. That is what stops the spreadsheet from creeping back: the CRM is built around how the team actually sells, so there is no gap left for the old file to fill.
Frequently asked
Can we just keep using the spreadsheet for now and migrate later?
You can, but the cost compounds. Every week on a shared file adds rows that will need reconciliation later, and the concurrency and history gaps do not improve with age. The harder problem is cultural: the longer two systems run in parallel, the harder the eventual cut-over becomes. It is cheaper to set a date and migrate the active pipeline than to keep deferring it.
Will we lose our historical lead data in the move?
No, but be deliberate about what you carry forward. The two-pass approach imports active, in-flight leads first and reconciles them with the team, then archives dead rows rather than dumping everything in. You keep the original workbook read-only as a reference during migration, so nothing is deleted, but only clean, verified records become live in the CRM.
How long does this kind of migration usually take?
It depends on the size of the register and how much of it needs reconciling, which is why we scope it before committing to a timeline. The requirement study documents the columns, stages, and records that must migrate, and the written scope sets the milestones and the cut-over date. The two migration passes run as part of the build, so the team is reconciling real data against the new system well before the cut-over date.
What should we do with the old Excel file after cut-over?
Archive it, do not delete it. Set the workbook to read-only, move it to an archive folder that only managers can open, and remove every shortcut to it from the shared drive. Keep the dated export taken before the import as the reference for any question about a historical lead. New leads and edits go into the CRM only, so the file stops changing on cut-over day and cannot drift back into use.
How do we handle duplicate leads during the import?
Agree the rule before the import, then apply it the same way to every row. Treat the same company with the same contact email or mobile number as one record. Flag near matches, such as two spellings of a company name, for a person to decide rather than merging them automatically. Keep a note of what was merged so nobody loses context, and switch on duplicate checks for new leads from the first day.
Should the CRM look exactly like our spreadsheet?
No. Keep what the team relies on and fix what the file got wrong. Familiar field names and the same order of information on a lead make the switch easier, but free-typed stages, missing owners and deleted lost deals are the problems you are migrating away from. The requirement study separates the two, so the CRM feels familiar from the first day without copying the spreadsheet's gaps.