Importing an Old Customer List Into a New CRM Without Making a Mess

Clean, map, and import a messy spreadsheet or QuickBooks export so the new system starts trustworthy instead of full of garbage records.

Updated
Read time
12 min
Compared here
HubSpot, Monday CRM, Less Annoying CRM

If you are switching CRMs, you probably have a customer list somewhere already: a QuickBooks export, a spreadsheet someone has been hand-editing for years, maybe a CSV pulled out of whatever you used before. The temptation is to drag that file into the new system on day one and start using it. That is also the single most common way a new CRM turns into a mess of duplicate records, half-blank fields, and contacts nobody trusts within the first month. This guide walks through cleaning the file, mapping it correctly, and importing it in a way that leaves you with a customer list you can actually work from, using HubSpot, Monday CRM, and Less Annoying CRM as the worked examples.

We sell a lead-handling system ourselves, so we are not a neutral party here. What we get out of this article is a reader whose migration goes well enough that they trust the system they end up in, whether that system is one of the three below or something else entirely.

Which one you should probably pick

The tool matters less than the order of operations. Every import failure we have seen traces back to skipping the cleanup step, not to a weak dedupe feature in the CRM itself. Clean the spreadsheet first, where you can see the whole list at once, rather than importing raw and trying to fix duplicates one at a time inside the CRM afterward.

That said, if you are choosing between these three specifically for the import itself: Less Annoying CRM has the simplest, most predictable field-mapping screen, which matters more than it sounds like it should when you are staring at 1,500 rows and need to trust what you are looking at. HubSpot’s import tool has the most capable duplicate matching, checking multiple fields at once, but it also introduces a second concept, marketing contacts versus non-marketing contacts, that a first-time importer needs to understand before they hit import. Monday CRM’s board-based import works fine on a clean file, but its hard contact caps mean you need to know your list size before you start, not after. If you already run a field service platform that stores customers and job history, read our guide to CRM options for a garage door company first. It may be that the honest answer is no second CRM at all, in which case none of this import work is necessary.

What each one actually costs

Prices below were checked against each vendor’s own pricing page on August 28, 2026, and are worth re-checking before you commit, since all three change plans without much notice.

Tool Published price (checked 2026-08-28) What it is best at for an import Where it gets hard
Less Annoying CRM $15 per user per month flat, no tiers, 30-day free trial, no card required Simple, predictable field mapping; no surprise upgrade mid-import No marketing email or SMS at all, so a shop wanting follow-up automation on the imported list needs to pair it with another tool
HubSpot Free CRM: $0/mo, unlimited contact storage, up to 2 users. Professional: $800/mo billed annually, plus a mandatory one-time $3,000 onboarding fee Multi-field duplicate matching on import; free tier holds unlimited non-marketing contacts Turning on marketing email for imported contacts beyond your plan’s included count raises your bill automatically, separate from the import itself
Monday CRM Basic: $12/seat/mo, 3-seat minimum, 1,000 active contacts. Standard: $17/seat/mo, 3-seat minimum, 10,000 active contacts Board view matches how a lot of owners already think about a pipeline Every paid tier has a 3-seat floor even for a two-person office, and the contact caps are hard limits you can hit mid-import

Before you start

Do these before you open any CRM’s import screen.

  1. Export the full customer list, not a filtered subset, from wherever it currently lives, as a CSV. From QuickBooks, this is Customers, then the export or report-to-Excel option depending on your version.
  2. Make a working copy. Never clean the only copy of the file. Keep the raw export untouched in case you need to start over.
  3. Pull your do-not-contact list separately before you touch the main file, so you can check every row against it rather than trying to remember names.
  4. Decide your phone number format now (a consistent format such as (555) 555-5555 or 5555555555 throughout) since inconsistent formatting is the single biggest cause of a CRM treating the same person as two people.
  5. Block out time, not just for the import click itself but for the row-by-row cleanup before it. For a list under a few hundred customers, plan on an afternoon. For a list in the thousands, plan on spreading it over a few sessions.

The four columns that decide whether the import is usable

Spreadsheets accumulate a lot of columns over the years: notes fields, old sales rep names, discount codes nobody remembers the reason for. Most of it does not matter for the import. Four columns do, and if these four are wrong, everything built on top of the import is unreliable.

  • Phone number, in one consistent format. This is usually the best matching field for finding duplicates, since names get misspelled and emails go stale, but phone numbers tend to stay put. Standardize the format across the whole file before you import, not after.
  • Email, cleaned of typos and duplicate rows sharing the same address under two spellings of a name.
  • Service address, which for a garage door company is arguably more useful for matching than a billing address, since the same household can appear twice under a maiden name or a previous owner if you only match on name.
  • Last job date. This is what lets you decide what not to import at all, covered below, and it is also what a follow-up sequence in the new system will use to decide whether someone is a past customer worth a maintenance reminder or a name too old to be worth contacting.

Cleaning the QuickBooks export before you touch the CRM

If your list is coming out of QuickBooks, there is one trap specific to that export worth calling out by name. QuickBooks commonly stores a customer under a single “Display Name” field that combines the company or job name and the contact name together, something like “Anderson Residence, Mark Anderson” or “Smith Garage Door Job.” Imported as one blob into a CRM’s first-name field, that becomes garbage text instead of a usable name, and every mail-merge or text message built on top of it reads wrong.

Before importing a QuickBooks export, split that combined field into separate first name, last name, and company columns in the spreadsheet, using Excel or Google Sheets’ Text to Columns or Split tools where the format is consistent, and by hand where it is not. This single step is the difference between a CRM that can address someone by name correctly in an automated message and one that cannot.

Setting up the import in Less Annoying CRM

  1. Log in and go to the Contacts import screen, then upload your cleaned CSV.
  2. Map each spreadsheet column to the matching CRM field on the screen that appears. Less Annoying CRM shows this mapping as a simple side-by-side list, which is the main reason we point first-time importers here.
  3. Add any garage-door-specific custom fields you want before importing, such as door brand, install date, or warranty expiration, so the mapping screen has somewhere to put that data on the first pass rather than a second cleanup later.
  4. Import a 20-row test batch first if the tool allows selecting a subset, or trim a 20-row test file separately and import that before the full list. Open several of those 20 records and check that names, phone numbers, and addresses landed in the right fields.
  5. Once the test batch looks right, import the remaining rows.
  6. Less Annoying CRM does not include native marketing email or texting, so once the import is done, a shop that wants automated follow-up on the new list will need a separate tool connected through Zapier, or a purpose-built follow-up system instead. See our guide to setting up an automated lead follow-up sequence for what that looks like once contacts are in.

Setting up the import in HubSpot

  1. From the free or paid account, go to Contacts, then Import, and upload the cleaned CSV.
  2. HubSpot’s mapping screen will attempt to auto-match your column headers to its fields; check every mapping rather than trusting the auto-match, since a field like “Address” can map to the wrong one of several address fields HubSpot maintains.
  3. On the import screen, HubSpot offers a duplicate-management setting that checks multiple fields, not just email, before creating a new record. Review that setting before you run the full import, since the default behavior can change between HubSpot’s own product updates.
  4. Import a small test batch first, the same as above, and inspect the resulting records before running the rest.
  5. This is the step to slow down on: HubSpot’s imported contacts land as non-marketing contacts by default, which does not cost anything extra on the free tier. The moment you enable marketing email sending to any of those contacts, they convert to marketing contacts, a separately metered count, and that is what triggers a price increase, as of the August 2026 pricing checked for this guide, not the import itself. If your plan is to import the list and immediately start a marketing email campaign to all of it, price that out against your plan’s included marketing contact count before you import, not after your first send.

Importing into Monday CRM, the challenging one

Monday CRM is genuinely attractive for an import: its board view lets you see contacts laid out the way a lot of shop owners already think about a pipeline, and the interface is approachable. It is also the option most likely to surprise you mid-migration, for two structural reasons rather than a bug.

First, every paid tier carries a three-seat minimum, checked on Monday’s pricing page as of August 28, 2026, so a two-person office pays for a third seat it may not use, before the import has even started. Second, the contact caps are hard limits: 1,000 active contacts and deals combined on the Basic tier, 10,000 on Standard. A shop importing ten or fifteen years of customer history can hit that Basic cap partway through the import and be forced into an unplanned upgrade to finish, and it gets closer sooner than the raw contact count suggests, since any deals you have already logged on the board count against the same number.

If you are set on Monday CRM, count your cleaned list’s total rows before you begin, and compare that number against the tier’s contact cap, not the number of active customers you expect to keep contacting. The cap counts records, not activity.

  1. From a Monday CRM workspace, use a CRM template or a blank board, then use the CSV import option to upload your cleaned file.
  2. Map spreadsheet columns to board columns on the import screen. Because Monday’s boards are flexible by design, you may need to create custom columns first for fields like service address or last job date that do not exist on the default template.
  3. Import a small test batch and check that the mapping held before importing the rest.
  4. Watch your active contact count against your tier’s cap as the import runs, since an interrupted import partway through a cap limit is harder to untangle than checking the number beforehand.

What usually goes wrong

  • Importing straight from the raw export, skipping cleanup. This is the single most common failure and the reason this guide leads with cleaning the file first.
  • Inconsistent phone number formatting causing the same customer to land as two separate records because the CRM’s matching logic did not recognize 555-555-5555 and (555) 555-5555 as the same number.
  • The QuickBooks combined-name field, described above, landing as garbage text in a name field.
  • Skipping the 20-row test batch and discovering the mapping was wrong only after all several thousand rows have already imported.
  • Importing the do-not-contact list along with everyone else. A shop’s do-not-contact names are usually sitting in the same spreadsheet as active customers, with nothing marking them apart except a note column someone might not think to check during the import.

There is also a category of contact worth deciding to leave out entirely rather than importing and sorting later: leads with no phone number on file, jobs old enough to fall outside your warranty window with no other reason to keep them, and anyone who already asked to stop hearing from you. None of those improve a new system by being present, and all three add noise you will have to clean out eventually anyway.

How to tell it is working

In the first week, spot-check a random sample of imported records, not just the ones from your 20-row test, and confirm names, phone numbers, and addresses landed in the right fields. Search the full list for an obviously common name (a “Smith” or a “Johnson,” or whatever surname appears often in your market) and confirm you are not seeing the same household duplicated under slightly different formatting.

In the first month, watch for staff manually re-entering a customer who “wasn’t in there,” which is usually a sign a duplicate or a formatting mismatch let someone slip past the matching logic during import. That is worth investigating rather than just merging the duplicate and moving on, since it tells you something about what to check more carefully on the next import. If your customer list is now feeding a follow-up system rather than sitting as a static record, comparing what a field service platform’s QuickBooks sync actually keeps in sync is a reasonable next check, since a clean one-time import and a reliable ongoing sync are two different problems solved two different ways.

Common questions

How do I import a CSV into a CRM without creating duplicate contacts?
Deduplicate the spreadsheet before it ever reaches the CRM, using phone number and email as your matching fields, then run a 20-row test import and check every row by hand before importing the rest. CRM-side dedupe tools catch some repeats but none of the three covered here can undo a bad import after the fact as cleanly as a spreadsheet can prevent one.
What is the QuickBooks customer export trap when moving to a CRM?
QuickBooks often stores a customer as one combined 'Display Name' field, formatted as company name and contact name together, such as 'Anderson Residence, Mark Anderson.' Imported as-is, that single field lands in a CRM's first-name or company field as garbage text instead of being split into usable first name, last name, and company columns.
Should I import contacts who asked not to be contacted?
No. Pull your do-not-contact list, your bounced or disconnected numbers, and anyone who complained about a text or email, and exclude them from the import file entirely rather than importing them and marking them inactive inside the CRM. A system that can text and email should never hold a record for someone who told you to stop.
Does importing a large list into HubSpot or Monday CRM cost more once it lands?
It can, in different ways. HubSpot's price increase is tied to enabling marketing email on contacts beyond your plan's included count, not to the import itself, so an import of stored, non-marketing contacts does not automatically trigger a bill. Monday CRM's contact caps are hard limits by tier (1,000 active contacts on Basic as of August 2026), so a large import can force an upgrade mid-migration if you have not checked the cap first.

Sources

Prices, limits, and requirements were checked on August 28, 2026. Vendors change these without notice, so confirm anything that affects a buying decision before you sign.