Migrate Spreadsheet to CRM: Step-by-Step
Migrate Spreadsheet to CRM: Step-by-Step
Migrate spreadsheet to CRM without losing data. Map Google Sheets columns to CRM fields, run a test batch, backfill contacts, and keep both in sync.
No credit card required
Free 100k syncs every month
You have 500 contacts in a Google Sheet. Names in column A, emails in column B, a "Status" column you added six months ago, and a "Notes" column that only you understand. The sheet worked when you had 50 contacts. At 500, you spend more time scrolling and filtering than selling. You need a CRM, and you need every contact in it without starting from scratch. For the fundamentals of what data migration involves and when you need one, see our guide to data migration.
This guide walks you through how to migrate spreadsheet to CRM step by step. Google Sheets to HubSpot is the example, but the process works for Excel to any CRM: Attio, Salesforce, Zoho, Pipedrive.
Signs you need to migrate spreadsheet to CRM
Spreadsheets are not broken tools. They are wrong tools for managing customer relationships past a certain point. Here are the signals that you have hit that point:
You lost a deal because of stale data. Someone updated a contact's phone number in their copy of the sheet. You called the old number. There is no version control, no audit trail, and no way to know which row is current.
You cannot answer basic questions. How many active leads do you have? Which contacts haven't been contacted in 30 days? How many deals closed this quarter? In a spreadsheet, each question requires a custom filter or a pivot table. In a CRM, it is a saved view.
Multiple people edit the same sheet. Two people update the same row at the same time. One change overwrites the other. Neither person notices. This is not a workflow problem. It is a concurrency problem, and spreadsheets do not solve it.
You need automations. Send a follow-up email when a deal stage changes. Create a task when a contact hasn't been reached in two weeks. Spreadsheets cannot trigger actions. CRMs can.
If you recognize two or more of these, you are ready to move from Excel to CRM. The rest of this guide shows you how.
How to prepare your data before you migrate spreadsheet to CRM
The 20 minutes you spend cleaning the spreadsheet saves hours of CRM cleanup. Every messy row you import becomes a messy contact record that someone has to fix later.
Remove duplicate rows. Sort by email and scan for repeated entries. If two rows share an email, keep the one with the most complete data and delete the other. A CRM will reject or double-create duplicates depending on how you import contacts from spreadsheet.
Standardize your columns. Pick one format for each data type and fix every cell that doesn't match:
Data type | Common mess | Clean format |
|---|---|---|
Phone | (555) 123-4567, 555.123.4567, 5551234567 | +15551234567 (E.164) |
Mixed case, trailing spaces | lowercase, trimmed | |
Date | 1/5/24, Jan 5 2024, 2024-01-05 | 2024-01-05 (ISO 8601) |
Status | "lead", "Lead", "LEAD", "prospect" | lead |
Delete test entries and junk rows. Search for "test", "asdf", "example.com", and blank email rows. These are noise that will pollute your CRM segments and reports.
Add a header row if you don't have one. Every column needs a clear label: First Name, Last Name, Email, Phone, Company, Status, Notes. The header becomes your field mapping reference during migration.
Check for split vs. combined name fields. If your spreadsheet has a single "Name" column, decide now whether to split it into first and last name. Most CRMs expect separate fields. You can split in the spreadsheet (formulas or find-and-replace on the first space) or handle it during field mapping.
Mapping spreadsheet columns to CRM fields for migration
Field mapping is where your spreadsheet to CRM migration succeeds or breaks. Each spreadsheet column maps to a specific CRM field. Get one mapping wrong, and phone numbers end up in company name fields across every record.
Build a mapping table before you touch any migration tool:
Spreadsheet column | CRM field | Type | Notes |
|---|---|---|---|
First Name | firstname | Text | Direct map |
Last Name | lastname | Text | Direct map |
Matching key | |||
Phone | phone | Phone | E.164 format |
Company | company | Text | Direct map |
Status | lifecyclestage | Picklist | Remap: "lead" → Lead, "customer" → Customer |
Source | lead_source | Picklist | Remap values to CRM options |
Notes | notes | Long text | Direct map |
Created | createdate | Date | ISO 8601 conversion |
MRR | mrr | Number | Remove $ and commas |
Three things to watch:
Picklist value mismatches. Your spreadsheet says "warm lead." Your CRM's lifecycle stage options are Lead, MQL, SQL, Customer. You need a value mapping for every picklist column, or the CRM will reject the row or assign a default value.
Custom fields. Your spreadsheet has columns that don't match any standard CRM field (like "Referral Source" or "Contract End Date"). Most CRMs let you create custom properties. Create them before running the migration so the mapping has a destination.
Number formatting. Spreadsheets store currency with symbols and commas ($1,234.56). CRM number fields expect raw numbers (1234.56). Strip formatting during the import or the field rejects the value.
Step-by-step: migrate spreadsheet to CRM with Google Sheets
With your spreadsheet cleaned and your mapping table ready, the actual migration takes 15 minutes. Here is how to move data from Google Sheets to CRM using Oneprofile.
1. Connect Google Sheets as a source. In Oneprofile, add Google Sheets as a source. Authenticate via OAuth. Select the specific spreadsheet and worksheet tab that contains your contacts.
2. Connect your CRM as a destination. Add HubSpot (or your CRM of choice) as a destination. Authenticate via OAuth or API key. Oneprofile validates the connection before saving.
3. Choose record types. Map Google Sheets rows to CRM "Contacts." Each row in the spreadsheet becomes one contact record in the CRM.
4. Map columns to CRM fields. Use your mapping table from the previous section. Drag spreadsheet columns to CRM fields in the visual mapper. For custom fields that don't exist in the CRM yet, Oneprofile creates them automatically with the correct type.
5. Set the matching key. Use "Email" as the matching key. This prevents duplicate contacts: if a row's email already exists as a CRM contact, the record gets updated instead of duplicated.
6. Select sync mode. Use "Update or Create" for the initial migration. This creates new CRM contacts for every spreadsheet row that doesn't already exist, and updates existing contacts where the email matches.
7. Run a test batch on 20 rows. Before running the full migration, test on a small batch. Pick rows that include edge cases: missing emails, special characters, unusual date formats. Inspect 10 records in the CRM field by field. Fix any mapping issues and test again.
8. Run the full backfill. With mapping validated, run the full sync. Oneprofile transfers every row from Google Sheets to the CRM. For 500 contacts, this takes under a minute. For 50,000, expect a few minutes. Records that fail (validation error, rejected field value) land in the dead letter queue for review instead of disappearing.
9. Validate. Compare total rows in the spreadsheet against total contacts in the CRM. Check five fields on 15 random records. If counts match and spot-checks pass, the migration is complete.
Keep your spreadsheet and CRM in sync during the transition
Migrating the data is step one. The harder part: your team has muscle memory. People will keep adding contacts to the spreadsheet because that is where they have always worked. If the CRM doesn't reflect those additions, it falls behind within a day.
The fix is bidirectional sync during the transition period. Set a 15-minute sync schedule in Oneprofile. Every 15 minutes, new rows added to the spreadsheet appear in the CRM. Changes made in the CRM flow back to the spreadsheet. Both stay current while your team builds new habits.
This eliminates the hard cutover that kills most spreadsheet to CRM migration projects. Instead of forcing everyone to switch overnight (and watching half the team quietly revert to the spreadsheet), you let both tools coexist. The CRM gets every new contact. The spreadsheet stays familiar.
After one to two weeks, check usage. When nobody has opened the spreadsheet in three days, the transition is complete. Turn off the sync and archive the sheet.
The migration and the ongoing sync use the same Oneprofile configuration. The backfill that moved your 500 contacts keeps running on a schedule, syncing only rows that changed since the last run. Property-level change tracking means if someone updates a phone number in the spreadsheet, only that field gets written to the CRM. No full-record overwrite, no data loss from concurrent edits.
How long does it take to migrate spreadsheet to CRM?
Under an hour for most teams. The data transfer itself takes minutes. Most of the time goes to cleaning up the spreadsheet and mapping columns to CRM fields before you run the migration.
Will I lose data when moving from Google Sheets to a CRM?
Not if you use a matching key like email and run a test batch first. A sync tool with a dead letter queue catches any records that fail to transfer instead of dropping them silently.
Can I keep using the spreadsheet after migrating to a CRM?
Yes. Bidirectional sync keeps both the spreadsheet and CRM current during the transition. Your team can keep entering data in the sheet while the CRM stays up to date automatically.
What CRMs work for spreadsheet migration?
Any CRM with an API. HubSpot, Salesforce, Attio, Zoho, and Pipedrive all accept contact imports. Oneprofile supports all of them as sync destinations from Google Sheets.
Do I need to clean my spreadsheet before migrating?
Yes. Remove duplicate rows, standardize email formats, and delete test entries before running the migration. Cleaning takes 20 minutes and prevents hours of CRM cleanup later.