<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Daniel Pank</title>
    <description>The latest articles on DEV Community by Daniel Pank (@daniel-pank).</description>
    <link>https://dev.to/daniel-pank</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4139300%2Fa692ee70-722f-4910-bd4c-174642ed068d.jpeg</url>
      <title>DEV Community: Daniel Pank</title>
      <link>https://dev.to/daniel-pank</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/daniel-pank"/>
    <language>en</language>
    <item>
      <title>Risks of migrating your CRM</title>
      <dc:creator>Daniel Pank</dc:creator>
      <pubDate>Thu, 05 Nov 2026 12:51:50 +0000</pubDate>
      <link>https://dev.to/operelio/risks-of-migrating-your-crm-2a5h</link>
      <guid>https://dev.to/operelio/risks-of-migrating-your-crm-2a5h</guid>
      <description>&lt;p&gt;Migrating from one CRM to another used to be a tedious, risky and expensive task for any organization with any decent amount of data. It meant you were going to have to go through the process of engaging with both your current CRM provider and your new CRM provider to try and make the transition as painless as possible, and it's still the same now. There were and still are expensive consultancy companies who would happily take your money in order to handle the full process for you. &lt;a href="https://operelio.com/blog/should-you-automate-your-lead-flow" rel="noopener noreferrer"&gt;Should you automate your lead flow?&lt;/a&gt; has the figures on what that kind of engagement runs to. The costs and risks associated with migrating put a lot of companies off and meant the attitude of "it's safer to stick with what we have" ruled, even if that meant sticking with a legacy or not fit for purpose CRM.&lt;/p&gt;

&lt;p&gt;So why has it now become a much more common exercise for a company to say "let's migrate"? We are going to explore the reasons why companies migrate and how it can be done much quicker and safer than ever before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do companies choose to migrate their CRM?
&lt;/h2&gt;

&lt;p&gt;The reasons usually fall into one of these categories when a company decides it's time for a change.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cost.&lt;/strong&gt; The per seat price you sign up at is rarely the price you end up paying. Introductory pricing gets you in, then it moves as you get established in the system. Couple in adding custom bolt-ons, suddenly a package you thought was cheap per user becomes very expensive. This means companies start to hop between providers when the cost suddenly outweighs the system's benefits. With so many providers to choose from now, there's always another provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legacy processes and systems.&lt;/strong&gt; A lot of more established companies started with a CRM years or even decades ago. When they established their CRMs, the choice was much less, and the provider was usually decided by what was available compared to what worked for the company. A lot of companies used ERP (Enterprise Resource Planning) systems as CRMs, the SAPs, Oracles, Sages and Dynamics of the world, which worked well for most of the business but is now hindering the sales and marketing teams.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New management team or ideas.&lt;/strong&gt; It's very common when a new member or members are brought into a company's management team, that they want to put their own stamp and identity on the business (a great time to contact them if you are selling, as a side point). When this happens, usually the shift is towards what the new management structure has worked with in the past when it comes to CRMs. For example, if someone has used Salesforce their entire career and their new company is using HubSpot, it's highly likely that new company would transition to HubSpot.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The risks that still have to be considered
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Downtime.&lt;/strong&gt; Swapping between two CRMs risks outages on service or activity. For example, if your sales team is using the CRM daily and they have to stop using the current CRM while the transition takes place, that's activity going untracked. Same with time to lead response. If your CRM is managing all inbound leads, usually someone can get to the inbound lead in minutes when everything's working properly. Now you have a scenario where the leads are getting routed somewhere else and no one is picking them up as quick as they used to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bad data.&lt;/strong&gt; While there are essentially two CRMs in operation, data could be being updated in one CRM and not the other one, which means there's inconsistencies in the data. For example, a salesperson updating their call notes in the old CRM while the data has already been funnelled across to the new CRM means that the new CRM has outdated data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training.&lt;/strong&gt; As much as companies like to think every user will be fully efficient within a week of implementing the new CRM, the reality is it is going to lead to a drop in overall productivity in the short term. Unless the users have used the CRM previously, there is going to be a learning curve where you have disrupted their normal workflows and how they navigate around the new CRM. It will likely take months for normal efficiency to resume, which means there has to be an allowance for the learning curve and heavy training either internally or from the new CRM provider. Yes, that does mean a drop in targets or expected KPIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Misalignments on the new provider versus the old provider.&lt;/strong&gt; Companies don't migrate lightly, especially larger enterprise companies. However, there are scenarios where the new CRM provider you were sold has different functionality to what you took as standard in the old CRM. It's very easy to get caught up on the shiny new features a new provider can offer you, however when implementation happens, suddenly it's realised that the key feature of your old CRM isn't a part of your new provider and you never thought to ask because it was so standard in your head.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bureaucracy.&lt;/strong&gt; Migrating CRMs is not just a technology risk but a human risk as well. This involves getting multiple departments involved in legal, compliance, HR, IT, operations, marketing and sales. All it takes is one of these departments to present a blocker or have an individual that is not on board with the migration, and things can become less smooth. At smaller companies this is usually less of an issue. At larger companies I have seen migrations stall to a halt because someone in legal has raised some flags on the new CRM server locations, as an example.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What the migration won't move.&lt;/strong&gt; A contact export is rows and columns, so rows and columns are what move: contacts, companies, and the attributes on them. Anything that isn't a row in that file doesn't come with it, and no spreadsheet tool changes that. Notes are the exception worth knowing about: if your export has a notes column, that can come across with the record. Activity history and logged emails need their own export and import: some CRMs export them as separate files, and HubSpot imports notes, calls, emails, meetings and tasks. The rest either gets rebuilt in the new CRM or stays in the old one, and that is a conversation to have before you sign rather than during implementation. The &lt;a href="https://operelio.com/how-to/migrate-between-crms" rel="noopener noreferrer"&gt;CRM migration checklist&lt;/a&gt; lists what moves and how.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What a contact export carries into the new CRM, and what it leaves behind&lt;/p&gt;

&lt;p&gt;Contacts and companiesNames, emails, phones, job titles, addresses, and any other column the export includes&lt;br&gt;
:   Moves&lt;/p&gt;

&lt;p&gt;NotesOnly if your export has a notes column&lt;br&gt;
:   Moves&lt;/p&gt;

&lt;p&gt;Activity historyCalls, meetings and logged emails are not rows in a contact export. Some CRMs export them as separate files, and HubSpot imports them&lt;br&gt;
:   Own import&lt;/p&gt;

&lt;p&gt;AttachmentsFiles rather than rows, so they stay behind unless somebody re-uploads them&lt;br&gt;
:   Stays&lt;/p&gt;

&lt;p&gt;AutomationsConfiguration rather than data, so there is nothing to carry&lt;br&gt;
:   Rebuild&lt;/p&gt;

&lt;h2&gt;
  
  
  The groundwork before you start
&lt;/h2&gt;

&lt;p&gt;So a company has established they want to migrate CRMs, they have evaluated the risks, and they have a provider they want to migrate to. What do they do next?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make it clear in writing to your current provider that you don't plan to extend the contract. Always check contract end dates, as CRM providers usually have a 30, 60 or 90 day cancellation period before the contract auto renews.&lt;/li&gt;
&lt;li&gt;Do a risk analysis across the organization and engage the key stakeholders with the risks.&lt;/li&gt;
&lt;li&gt;Establish internal support within the organization. This means having more than just you on board with the migration, no matter how senior you are.&lt;/li&gt;
&lt;li&gt;Engage with your new provider on how they can help migrate you across. Every major CRM publishes a bulk importer and onboarding help, and providers can be extremely helpful in getting you migrated to their system. It is in their best interests to get you set up as soon as possible.&lt;/li&gt;
&lt;li&gt;Create a project plan and clear timeline and, depending on the size of the organization, assign one or multiple people to manage the migration if not yourself.&lt;/li&gt;
&lt;li&gt;Communicate to the wider organization that a planned migration is happening and explain the reasons why.&lt;/li&gt;
&lt;li&gt;Put together a clear training plan to get all required users up to speed as quickly as possible.&lt;/li&gt;
&lt;li&gt;Agree how you will stop the two systems drifting apart. That is the fix for the bad data risk above. The usual answer is not a live sync between them. It is a freeze and a delta: you set the old CRM to read only so nothing new gets created in it, then move across everything that was created or updated during the migration window itself. HubSpot's own migration guidance makes the point well, that even a 48 hour window can generate hundreds of new records in an active sales team. Keep the old system read only until the new one is properly bedded in.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Now begins the work on the actual migration
&lt;/h2&gt;

&lt;p&gt;At this point the direction the migration takes can vary depending on the size and scale of the job. A small number of users and not much data can take days or weeks. A large scale amount of data, processes and users can take months.&lt;/p&gt;

&lt;p&gt;Whatever the scale, the order is the same, and getting it wrong is one of the quieter ways a migration goes bad. Parent records go before the records that hang off them: users first so that ownership has somewhere to land, then companies, then contacts, then deals, then tickets, then anything custom, and activities and attachments last. Those last two are the ones a contact export can't carry, so those last steps need your new provider's own migration tooling rather than a file. Load a contact before the company it belongs to and you get a record sitting on its own with nothing attached to it.&lt;/p&gt;

&lt;p&gt;There is one more thing that happens in this window, and it only happens once. Whatever you carry across is what the new CRM starts life with. If the old one had years of duplicates, dead email addresses and half-finished records in it, and you move them across as they are, you have paid for a migration and bought yourself the same mess in a nicer interface.&lt;/p&gt;

&lt;p&gt;A migration tool moves the records. It doesn't check whether the addresses still work, or whether two of them are the same company. This is the one moment you get to leave that behind.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Operelio comes in
&lt;/h3&gt;

&lt;p&gt;Operelio does the data move, not the migration. You export from the old CRM yourself, because that is a button in its own settings and nobody needs a tool for it. It's what happens between that export and the new CRM that decides what you are actually starting with, which &lt;a href="https://operelio.com/blog/hidden-gap-migrating-crm-data" rel="noopener noreferrer"&gt;The hidden gap in migrating your CRM data&lt;/a&gt; takes on its own.&lt;/p&gt;

&lt;p&gt;Run the export through &lt;a href="https://operelio.com/health-check" rel="noopener noreferrer"&gt;Data Health Check&lt;/a&gt; first and you get a score out of 100 and a breakdown of what is wrong with it, grouped by how badly it matters. That is your baseline. Then the &lt;a href="https://operelio.com/tools" rel="noopener noreferrer"&gt;17 tools&lt;/a&gt; do the cleaning: merging the files, fixing the headers, &lt;a href="https://operelio.com/tools/deduplicate" rel="noopener noreferrer"&gt;removing the duplicates&lt;/a&gt; and &lt;a href="https://operelio.com/email-validation" rel="noopener noreferrer"&gt;checking the email addresses still work&lt;/a&gt;. Run Data Health Check again afterwards and the difference between the two scores is your evidence for whoever signed the migration off. &lt;a href="https://operelio.com/blog/what-is-lead-automation" rel="noopener noreferrer"&gt;What is lead automation and how to do it better&lt;/a&gt; covers why matching on a company name alone never finds all the duplicates.&lt;/p&gt;

&lt;p&gt;Then the &lt;a href="https://operelio.com/crm-formatter" rel="noopener noreferrer"&gt;CRM Formatter&lt;/a&gt; maps your columns to the fields in the new CRM. Eight formats are built in, with a generic one and custom templates for anything else, so the destination doesn't have to be a CRM we connect to at all. You download an import-ready file and load it with the new CRM's own importer. For HubSpot, Salesforce and Pipedrive there is a shortcut: push straight in over OAuth, with a report beforehand telling you what the push will do. &lt;a href="https://operelio.com/blog/crm-import-problem" rel="noopener noreferrer"&gt;The CRM import problem&lt;/a&gt; goes through what that last step does to your data when nothing is checking it.&lt;/p&gt;

&lt;p&gt;If you are moving across in batches rather than all at once, save the mapping after the first run and the next file maps itself. Put that on a &lt;a href="https://operelio.com/trails" rel="noopener noreferrer"&gt;trail&lt;/a&gt; and the batches clean and format themselves on a schedule while you get on with the rest of the migration. The &lt;a href="https://operelio.com/how-to/migrate-between-crms" rel="noopener noreferrer"&gt;CRM migration checklist&lt;/a&gt; walks through the whole move step by step.&lt;/p&gt;

&lt;p&gt;Data Health Check, merging, header cleanup, deduplicating, the formatter itself and downloading an import-ready file are on every plan, including the free one, although a real migration export is usually bigger than the free tier allows. Full email verification, the direct push, saved mappings and trails are paid, and &lt;a href="https://operelio.com/pricing" rel="noopener noreferrer"&gt;what each plan includes&lt;/a&gt; is on the pricing page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it happens more than it used to
&lt;/h2&gt;

&lt;p&gt;So why do companies freely migrate more now than ever before, with all the risks still involved? It's a few reasons.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Choice.&lt;/strong&gt; With more CRM providers than ever, being stuck with a legacy system that clearly does not work for an organization doesn't make sense anymore. If there is a niche or something you want your CRM to do, chances are a provider somewhere will do it. That choice is no longer only between providers either, which is the argument in &lt;a href="https://operelio.com/blog/building-your-own-crm" rel="noopener noreferrer"&gt;Building your own CRM is the easy part&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The tooling caught up.&lt;/strong&gt; Not because anything magical happened, but because the boring parts got solved. Providers publish migration paths, mappings can be saved and reused instead of rebuilt each time, and a file can be validated against the target's requirements before a single row is written. The risk didn't disappear. It moved from whether the data would arrive to whether you decided what should arrive, which is a much better problem to have.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's more common now, so we understand the risks better.&lt;/strong&gt; With more and more migrations happening, the level of expertise has gone up in both the CRM providers and a workforce that is now used to migrations. I am sure most people in any corporate role have gone through or managed a migration at least once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The continuous strive for improvement.&lt;/strong&gt; Companies that previously had the attitude of "it's not worth the risk" cannot operate that way anymore. Yes, the risks need to be evaluated, planned and discussed. However, a company which is not willing to improve their systems and efficiency is playing on borrowed time before a competitor takes that leap ahead of them.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  So do the risks outweigh the pros?
&lt;/h2&gt;

&lt;p&gt;Migrating your CRM every few months because a new provider offers a shiny new feature you want isn't sensible. Migrating every few years to get the best provider possible for your needs and business is sensible as the business evolves. Just be prepared and evaluate the risks first.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://operelio.com/blog/risks-of-migrating-your-crm" rel="noopener noreferrer"&gt;Operelio blog&lt;/a&gt;. What went wrong in the last CRM migration you were part of?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>crm</category>
      <category>data</category>
      <category>migration</category>
      <category>startup</category>
    </item>
    <item>
      <title>Fuzzy matching: how it finds duplicate contacts</title>
      <dc:creator>Daniel Pank</dc:creator>
      <pubDate>Tue, 03 Nov 2026 14:19:26 +0000</pubDate>
      <link>https://dev.to/operelio/fuzzy-matching-how-it-finds-duplicate-contacts-391d</link>
      <guid>https://dev.to/operelio/fuzzy-matching-how-it-finds-duplicate-contacts-391d</guid>
      <description>&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;Exact matching asks whether two values are identical. Similarity matching asks how close they are, and treats them as the same once they are close enough. The second question is the one a contact list needs, because the same person turns up spelled, punctuated and formatted in different ways.&lt;/p&gt;

&lt;p&gt;It is used to find duplicate rows in one list, to match rows across two lists when there is no shared ID, and to standardize free text such as survey answers against a reference list.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Every tool that does it follows the same three steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Clean the values first
&lt;/h3&gt;

&lt;p&gt;Lowercase them, trim spaces, and put emails, phone numbers and company names into one form. Many duplicates are identical once that is done, and nothing needs scoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Score each pair
&lt;/h3&gt;

&lt;p&gt;Give every pair of values a score for how close they are, usually from 0 to 100, where 100 means identical.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Keep the pairs above a threshold
&lt;/h3&gt;

&lt;p&gt;Pairs that score at or above the threshold you set count as the same. The rest stay separate.&lt;/p&gt;

&lt;p&gt;The most common score is edit distance: the number of single characters you would have to insert, delete or change to turn one value into the other. Jon into John is one insertion. Divide by the length of the longer value and you get a percentage. Other tools score differently: Power Query compares the overlap between the two values, and Salesforce uses several methods depending on the field.&lt;/p&gt;

&lt;h2&gt;
  
  
  A worked example: duplicate contacts in a list
&lt;/h2&gt;

&lt;p&gt;Each pair below is one person in a contact list, and exact matching catches none of them. Three are caught by cleaning the values first, two by their similarity score, and one only by a person reading it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;The pair&lt;/th&gt;
&lt;th&gt;Difference&lt;/th&gt;
&lt;th&gt;Caught by&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jon Smith and John Smith&lt;/td&gt;
&lt;td&gt;A missing letter&lt;/td&gt;
&lt;td&gt;Score (90)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catherine Jones and Katherine Jones&lt;/td&gt;
&lt;td&gt;C or K&lt;/td&gt;
&lt;td&gt;Score (93)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Westmarch Trading and Westmarch Trading Ltd&lt;/td&gt;
&lt;td&gt;Company suffix&lt;/td&gt;
&lt;td&gt;Cleaning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="mailto:jdoe+news@gmail.com"&gt;jdoe+news@gmail.com&lt;/a&gt; and &lt;a href="mailto:j.doe@gmail.com"&gt;j.doe@gmail.com&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Dot and plus tag&lt;/td&gt;
&lt;td&gt;Cleaning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+1 (415) 555-0123 and 415-555-0123&lt;/td&gt;
&lt;td&gt;Country code, punctuation&lt;/td&gt;
&lt;td&gt;Cleaning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Robert Brown and Bob Brown&lt;/td&gt;
&lt;td&gt;A nickname&lt;/td&gt;
&lt;td&gt;Nothing (67)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The scores are similarity out of 100. The last row, at 67, is the limit of any letter-by-letter score: Robert and Bob share almost no characters. Nicknames need a list of name variants, or a person reading the pair.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing a threshold
&lt;/h2&gt;

&lt;p&gt;The threshold decides how close is close enough. Set it too high and real duplicates slip through. Set it too low and different people get merged. Scored by edit distance, these name pairs show where the line falls:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Threshold&lt;/th&gt;
&lt;th&gt;Also counts as the same&lt;/th&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;Jon Smith and John Smith (90), Mark Davis and Mark Davies (91)&lt;/td&gt;
&lt;td&gt;Misses Sara Lee and Sarah Lee (89)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;Sara Lee and Sarah Lee (89), Anna Kim and Anne Kim (88)&lt;/td&gt;
&lt;td&gt;Dan Lee and Dana Lee (88) may be two people&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;td&gt;Steven and Stephen (71)&lt;/td&gt;
&lt;td&gt;John Smith and Jane Smith (70) count as one&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Match on more than one column where you can. Name plus company, or name plus email domain, keeps Dan Lee and Dana Lee apart when they work at different companies. And review the pairs before you merge or delete anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Excel and Power Query
&lt;/h2&gt;

&lt;p&gt;Excel's formulas only compare exact values, so similarity matching in Excel means Power Query, in Excel for Windows. When you merge two queries, check Use fuzzy matching to perform the merge at the bottom of the Merge dialog. It works on text columns only, in Excel for Microsoft 365, Excel 2024 and Excel 2021.&lt;/p&gt;

&lt;p&gt;Microsoft's page lists Excel for Mac too, but the Merge dialog in Excel for Mac (version 16.113, October 2026) has no such box and no options for it, so on a Mac, Power Query merges on exact matches only, and those are case-sensitive.&lt;/p&gt;

&lt;p&gt;Expand Fuzzy matching options to see Similarity threshold, Ignore case, Match by combining text parts, Maximum number of matches and Transformation table. Leave the threshold box empty for the default, 0.80, where 1.00 is an exact match. Power Query scores pairs by their overlap rather than by edit distance, and the merge matches rows across two tables rather than finding duplicates within one list.&lt;/p&gt;

&lt;p&gt;Start with the default. When we merged a list of trade show leads with a CRM accounts export, 0.80 matched every company typed differently and made one wrong match. At 0.6, more than a dozen new companies matched accounts they only shared words with, such as Dental Group or Home Care.&lt;/p&gt;

&lt;p&gt;Microsoft's older Fuzzy Lookup add-in for Excel is no longer on its download center, so Power Query is the route in current Excel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqx22428mk4msdoly2lxj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqx22428mk4msdoly2lxj.png" alt="The lower half of Power Query's Merge dialog in Excel for Windows: Join Kind is Left Outer, Use fuzzy matching to perform the merge is checked, Fuzzy matching options sits below it, and the selection matches 41 of 120 rows from the first table." width="530" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;On Windows. With the box checked, 41 of the 120 leads match an account, up from 22 matched exactly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If a query's columns come in as Column1, Column2 and so on, with the real headers in the first row, Excel couldn't tell the header row from the data. It happens when every column is text, as in many CRM exports. Open the query, choose Home &amp;gt; Use First Row as Headers, and Close &amp;amp; Load before you merge.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Salesforce
&lt;/h2&gt;

&lt;p&gt;Salesforce finds duplicates with matching rules, set up in Setup under Matching Rules. Each field in a rule is matched exactly or by a similarity method, and the standard rules for accounts, contacts and leads already use several, such as edit distance for street names and name-variant matching for first names.&lt;/p&gt;

&lt;p&gt;A matching rule only finds candidates. A duplicate rule, under Duplicate Rules in Setup, decides what happens: warn the user or block the save. A duplicate rule can use up to three matching rules, and each object can have up to five active matching rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Python
&lt;/h2&gt;

&lt;p&gt;For developers, RapidFuzz and thefuzz are the common libraries for scoring how alike two strings are, and Python's standard library has difflib for the same job. recordlinkage handles the larger task of matching whole records across files. Each takes code to set up, which is worth it for a pipeline but slow for a one-off list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Similarity matching in Operelio
&lt;/h2&gt;

&lt;p&gt;Operelio's &lt;a href="https://operelio.com/tools/deduplicate" rel="noopener noreferrer"&gt;Deduplicate&lt;/a&gt; tool has two modes for this, and you pick one for each run, without code. Smart matching cleans values before it compares them: Gmail addresses match with dots and plus tags ignored, phone numbers match whatever the punctuation, and company names match with suffixes like Ltd, Inc and GmbH stripped.&lt;/p&gt;

&lt;p&gt;Similarity matching scores each pair from 0 to 100 by the number of character edits between them, and you set the threshold with a slider. It starts at 80. Pick more than one column and the score is averaged across them. Every mode is on every plan, including Free, and you can download the removed rows to check what was dropped.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published in the &lt;a href="https://operelio.com/how-to/fuzzy-matching" rel="noopener noreferrer"&gt;Operelio how-tos&lt;/a&gt;. What threshold do you use, and what has it wrongly merged?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>algorithms</category>
      <category>crm</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to split a large file for a CRM import</title>
      <dc:creator>Daniel Pank</dc:creator>
      <pubDate>Fri, 30 Oct 2026 13:01:43 +0000</pubDate>
      <link>https://dev.to/operelio/how-to-split-a-large-file-for-a-crm-import-52k4</link>
      <guid>https://dev.to/operelio/how-to-split-a-large-file-for-a-crm-import-52k4</guid>
      <description>&lt;h2&gt;
  
  
  When a file is too big to import
&lt;/h2&gt;

&lt;p&gt;Every CRM's importer has a ceiling: a limit on file size, on rows per file, or both. A file over it is refused, or in some CRMs goes in only in part. The fix is to split it into parts that each fit, with the header row in every part, and import them one after another.&lt;/p&gt;

&lt;p&gt;Before you split anything, check that the file really is that big. A spreadsheet can report far more rows than it shows, and then the right fix is to clean it, not to split it.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, check how big the file really is
&lt;/h2&gt;

&lt;p&gt;An importer counts every row the spreadsheet says it uses. Formatting, a stray space or a value far below your data makes those empty-looking rows count, so a list of a few thousand contacts can be refused as hundreds of thousands of rows.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Find the real last cell
&lt;/h3&gt;

&lt;p&gt;Open the file in Excel and press Ctrl+End (on a Mac, Control+End, or Fn+Control+Right arrow on a laptop keyboard). Excel jumps to the last cell it thinks is in use. If that is far below or to the right of your data, the file is carrying empty rows or columns.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Delete what is past your data
&lt;/h3&gt;

&lt;p&gt;Select the first empty row below your data, press Ctrl+Shift+Down arrow to reach the bottom of the sheet, and delete those rows (right-click, Delete, not just the Delete key, which only clears them). Do the same for the empty columns to the right.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Save, close and check again
&lt;/h3&gt;

&lt;p&gt;Save the file, close it and open it again, then press Ctrl+End once more. It should now stop at your last real row. If it still does not, copy only your data into a new sheet and save that instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Save it as CSV UTF-8
&lt;/h3&gt;

&lt;p&gt;In Excel, File, Save As, CSV UTF-8. A CSV keeps no formatting, so it is usually smaller than the workbook, and it is the one format every CRM's importer takes. It saves only the sheet you are on.&lt;/p&gt;

&lt;p&gt;If the real row count is now under your CRM's limit, you are done: import the cleaned file as it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Work out how many rows go in each part
&lt;/h2&gt;

&lt;p&gt;Each CRM's importer caps the file size, the rows per file, or both. These are from each vendor's own help pages; the &lt;a href="https://operelio.com/templates/crm-import-limits" rel="noopener noreferrer"&gt;CRM import limits page&lt;/a&gt; has every limit in full, with the sources.&lt;/p&gt;

&lt;p&gt;Leave some room under a row limit: aim for about 10% fewer rows than the cap, so a header row or a few extra lines never tip a part over. For a CRM that limits file size only, work out the size of a row first: divide the file's size by its number of rows. A 12 MB file with 40,000 rows is about 300 bytes a row, so Copper's 3 MB holds about 10,000 of those rows, and parts of 8,000 leave room.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CRM&lt;/th&gt;
&lt;th&gt;Largest file&lt;/th&gt;
&lt;th&gt;Rows per file&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HubSpot&lt;/td&gt;
&lt;td&gt;512 MB on paid accounts, 20 MB on free&lt;/td&gt;
&lt;td&gt;1,048,576 per file on paid accounts; 500,000 a day on free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Salesforce&lt;/td&gt;
&lt;td&gt;100 MB, and 400 KB per record&lt;/td&gt;
&lt;td&gt;50,000 records per import&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pipedrive&lt;/td&gt;
&lt;td&gt;Under 50 MB&lt;/td&gt;
&lt;td&gt;200,000 rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zoho CRM&lt;/td&gt;
&lt;td&gt;25 MB per file&lt;/td&gt;
&lt;td&gt;By edition, per file: Free 1,000, Standard 20,000, Professional 50,000, Enterprise 100,000, Ultimate 200,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freshsales&lt;/td&gt;
&lt;td&gt;5 MB&lt;/td&gt;
&lt;td&gt;No row limit documented&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Close&lt;/td&gt;
&lt;td&gt;15 MB per CSV file; no limit documented for Excel files or pasted rows&lt;/td&gt;
&lt;td&gt;No row limit documented&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;monday CRM&lt;/td&gt;
&lt;td&gt;10 MB&lt;/td&gt;
&lt;td&gt;monday CRM's pages differ: 8,000 rows for a new board, 10,000 for an existing one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copper&lt;/td&gt;
&lt;td&gt;3 MB&lt;/td&gt;
&lt;td&gt;No row limit documented&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Split so related records still link
&lt;/h2&gt;

&lt;p&gt;Sort the file by company before you split it, so all of one company's contacts land in the same part. Some importers build one record from several rows: Close groups rows into one lead by a column you pick, so one company's rows spread over two parts can end up as two leads, unless the second import is set to match the lead the first one made.&lt;/p&gt;

&lt;p&gt;If your CRM wants companies before contacts, split them that way too. Copper says to import companies first, then people, then opportunities, so each can link to the one before. Where one file holds both, a company's rows stay together once the file is sorted by company.&lt;/p&gt;

&lt;h2&gt;
  
  
  Split it in Excel
&lt;/h2&gt;

&lt;p&gt;For a handful of parts, Excel is enough:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Sort the file
&lt;/h3&gt;

&lt;p&gt;Sort by company, or by whatever keeps related rows together.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Copy the header and the first block of rows
&lt;/h3&gt;

&lt;p&gt;Click the Name Box (left of the formula bar), type a range such as A1:Z45001 for the header plus 45,000 rows, press Enter and copy.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Paste into a new workbook and save it
&lt;/h3&gt;

&lt;p&gt;Paste into a new workbook and save it as CSV UTF-8 with a numbered name, such as contacts_part1.csv.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Repeat with the header each time
&lt;/h3&gt;

&lt;p&gt;Type the header and the next block into the Name Box together, such as A1:Z1,A45002:Z90001, then copy, paste and save it as part 2. Every part needs the header row, or the importer reads your first contact as the column names.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Check the totals
&lt;/h3&gt;

&lt;p&gt;Add up the rows in the parts, not counting their headers. The total should match the original file. A shortfall means a block was missed or overlapped.&lt;/p&gt;

&lt;h2&gt;
  
  
  A file too big to open in Excel
&lt;/h2&gt;

&lt;p&gt;An Excel sheet holds at most 1,048,576 rows, so a larger CSV will not open whole. A short script splits it without opening it, on a Mac or on Windows. Both keep the header row in every part and read the file as a CSV: a row ends only where its quotes close, so a cell with a line break in it, such as an address typed over two lines, stays in its row.&lt;/p&gt;

&lt;p&gt;On a Mac or Linux, open Terminal in the file's folder (in Finder, Control-click the folder in the path bar and choose Open in Terminal) and run this. Change contacts.csv to your file, name=contacts to the name you want for the parts, and 45000 to the rows in each part. The parts are saved in that folder as contacts_part1.csv, contacts_part2.csv and so on.&lt;/p&gt;

&lt;p&gt;Split a CSV in the Terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nv"&gt;rows&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;45000 &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;contacts &lt;span class="s1"&gt;'
  { q += gsub(/"/, "&amp;amp;"); rec = (inq ? rec "\n" $0 : $0) }
  q % 2 { inq = 1; next }
  { inq = 0; q = 0 }
  !header { header = rec; next }
  n % rows == 0 { close(out); out = name "_part" (++part) ".csv"; print header &amp;gt; out }
  { print rec &amp;gt; out; n++ }
  END { if (inq) print rec &amp;gt; out }
'&lt;/span&gt; contacts.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A file too big for Excel, on Windows
&lt;/h2&gt;

&lt;p&gt;Windows PowerShell comes with Windows: open the Start menu, type Windows PowerShell and open it. Paste this in with $file set to your file's full path and 45000 changed to the rows you want in each part, then press Enter. The parts are saved next to the file as contacts_part1.csv, contacts_part2.csv and so on, named after your file. It was tested in PowerShell 7 and uses nothing Windows PowerShell 5.1 lacks, so it should run there too.&lt;/p&gt;

&lt;p&gt;Split a CSV in PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Users\you\Downloads\contacts.csv"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$rows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;45000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Resolve-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Path&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;IO.Path&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;GetFileNameWithoutExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$enc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Text.Encoding&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;GetEncoding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;28591&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;IO.StreamReader&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$enc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Read-Row&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nv"&gt;$row&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$in&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kr"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;$null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-ne&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$row&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$row&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'"'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Length&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-eq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$more&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$in&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;$null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-eq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$more&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;break&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$row&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;`r`n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$more&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nv"&gt;$row&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read-Row&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$part&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$rows&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;$null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-ne&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$row&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Read-Row&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-eq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$rows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$part&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$dest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Join-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Split-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;_part&lt;/span&gt;&lt;span class="nv"&gt;$part&lt;/span&gt;&lt;span class="s2"&gt;.csv"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;IO.StreamWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$dest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$enc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$header&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$row&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$n&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$in&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A quote that is never closed puts the rest of the file into one row, in either script. If a part ends with one very long row, find the stray quote in that row, fix it and run the script again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Split it by row count in Operelio
&lt;/h2&gt;

&lt;p&gt;Operelio's &lt;a href="https://operelio.com/tools/split-file" rel="noopener noreferrer"&gt;Split File&lt;/a&gt; tool, on every plan, splits a CSV or Excel file into parts of the size you set. Choose Row count, set Rows per file, and it writes contacts_part1.csv, contacts_part2.csv and so on into one ZIP, each with the header row and every column. The file you split is limited by your plan: 2,000 rows and 2 MB on Free, 50,000 rows and 25 MB on Starter, 75,000 rows and 35 MB on Pro, and 150,000 rows and 100 MB on Agency. A file with more rows than your plan takes is split up to that many rows only, and Operelio tells you so; a file over the size limit is refused when you upload it. One job makes up to 25 files on Free, 500 on Starter, 1,000 on Pro and 2,000 on Agency.&lt;/p&gt;

&lt;p&gt;It does not sort, so sort by company first if related rows have to stay together. If you format the file for your CRM in the CRM Formatter first, split the file it gives you, so every part already has your CRM's field names.&lt;/p&gt;

&lt;h2&gt;
  
  
  Import the parts
&lt;/h2&gt;

&lt;p&gt;Import one part, check it, then the next. Each importer reports the rows that failed, and a mistake caught on part 1 is one fix instead of ten. Give each import a name that says which part it was, so you can find it in the import history, and undo it where your CRM allows.&lt;/p&gt;

&lt;p&gt;Some importers limit how many run at once. HubSpot runs up to 3 imports at a time, with no more than 2 over 10,000 rows. Freshsales runs one import per module at a time. monday CRM takes one file at a time per board and 100 files an hour per account. HubSpot also caps rows per day, on a rolling 24 hours: 10,000,000 on paid accounts and 500,000 on free.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published in the &lt;a href="https://operelio.com/how-to/split-large-file-for-crm-import" rel="noopener noreferrer"&gt;Operelio how-tos&lt;/a&gt;. What's the biggest file you've had to get into a CRM?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>csv</category>
      <category>data</category>
      <category>crm</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The hidden gap in migrating your CRM data</title>
      <dc:creator>Daniel Pank</dc:creator>
      <pubDate>Tue, 27 Oct 2026 11:53:54 +0000</pubDate>
      <link>https://dev.to/operelio/the-hidden-gap-in-migrating-your-crm-data-13kc</link>
      <guid>https://dev.to/operelio/the-hidden-gap-in-migrating-your-crm-data-13kc</guid>
      <description>&lt;p&gt;With more companies migrating between CRM providers, there is a gap many miss. A migration is the perfect time to use the move to improve your data quality, and almost nobody does. We are going to look at the missing step in any migration when it comes to data.&lt;/p&gt;

&lt;p&gt;Company and contact data goes out of date fast. How fast is harder to pin down than it looks, because almost every number you will read on it was published by a company that sells contact data. They do not agree with each other either: the figures in circulation run from around 12% of a database going stale in a year to 70%, which is a spread of more than five times for what is supposed to be the same measurement.&lt;/p&gt;

&lt;p&gt;The most careful of them is Lusha's, and it carries more weight than the rest because it argues against its own interest. They counted employment changes across whole cohorts rather than samples, the largest close to 148,000 contacts, and found 12.25% of senior US sales contacts changed role inside twelve months and 25.67% inside twenty four. Their conclusion is that the 30% figure everybody repeats is roughly right, but it is a two year number being quoted as a one year one. Even on the most cautious of these numbers, a quarter of your senior contacts are somewhere else within two years.&lt;/p&gt;

&lt;p&gt;So how does that affect migrations? Short answer, it doesn't. But it does provide a great opportunity to solve the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the attention goes instead
&lt;/h2&gt;

&lt;p&gt;When companies migrate between CRMs the focus is typically between their current provider and their new provider, making sure the processes and features they want and rely on in their current system will work in their new system. Data is the biggest if not the number one point of a CRM. Managing, processing and relaying that data across the right places. The priority is that the data from the current provider gets to the new provider's system without any loss in between. Almost like a copy and paste on a huge scale.&lt;/p&gt;

&lt;p&gt;In the middle of that there is an opportunity to improve the data's quality and make what lands in your new CRM more accurate and up to date for the people who have to work with it. So why don't more companies take advantage of it? There's a few reasons.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enrichment normally happens somewhere else.&lt;/strong&gt; Data enhancement or enrichment usually either happens at the point of importing the data into the CRM, or through tools inside the CRM itself once the data is already there. HubSpot's Breeze Intelligence, the old Clearbit, is the clearest example of the second kind. Both patterns assume the data has already arrived, which is exactly why the middle of a migration gets skipped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nobody wants to touch the data on the way across.&lt;/strong&gt; The risk of migrating CRMs and losing data is already high, so adding more risk on top by starting to change that data might be too much for some companies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The cost.&lt;/strong&gt; Enriching data has a cost attached to it, and at volume that can run to a number too dear for some companies. Enrichment is almost always priced per record or per credit, so the bill scales with the size of the database rather than the size of the job, which is what makes it the first thing cut from a migration budget.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What actually lives in a CRM
&lt;/h2&gt;

&lt;p&gt;Before we break down the types of enrichment, it's worth listing the main types of data that live in a CRM.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outbound lead lists.&lt;/strong&gt; These are lists the sales department go outbound to, whether they are warm lists provided by marketing with intent signal or cold outbound lists in different verticals. These typically have company name, personas and their contact details such as phone numbers and emails, and any other relevant information along with notes on the progress.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inbound lists.&lt;/strong&gt; These are lists of data that have come from website queries or ads, of companies or prospects expressing an interest in your business (most of the time). These depend on the forms used to capture the details of the enquiry, but usually include company name, email address, reason for enquiry and the person's contact details and title.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current deals in progress.&lt;/strong&gt; These are opportunities which are further along the sales process and actively engaging, whether they are at early stage or contract signed stage. These are usually rich data sources with multiple stakeholders aligned in the CRM, documents attached to the deal and next steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current customers or clients.&lt;/strong&gt; These are lists of users, companies and their engagements, contract renewals and buying history. A very rich source of data which is prioritizing retention and upsells.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mailing lists.&lt;/strong&gt; While these can live in a separate system, some are run off CRMs: large lists of signups to newsletters or other forms of lead capture, and cold outbound mass lists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suppression and do not contact lists.&lt;/strong&gt; The people who asked not to be contacted, the competitors, the current customers who should never see an outbound sequence. This is the one type where getting the migration wrong is worse than losing the data, because a &lt;a href="https://operelio.com/suppression-lists" rel="noopener noreferrer"&gt;suppression list&lt;/a&gt; that does not arrive intact means contacting somebody who told you not to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Churned customers and lapsed accounts.&lt;/strong&gt; Keep them, and label them, because a rep working a list has to know the difference between a company that never bought and one that left.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So with all this data flowing around a CRM, with different use cases and departments using it, it's easy to see why enrichment is low if not off the priority list entirely during a migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleanup and enrichment are two different jobs
&lt;/h2&gt;

&lt;p&gt;The work splits into two categories. One costs you time and the other costs you money.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cleanup
&lt;/h3&gt;

&lt;p&gt;Cleaning up a CRM is the first step. It is everything you can do with what you already have. &lt;a href="https://operelio.com/blog/what-cleaning-data-means" rel="noopener noreferrer"&gt;Cleaning data: what it means, and who ends up doing it&lt;/a&gt; is the wider version of this same job, run on a schedule rather than because a migration forced it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removing &lt;a href="https://operelio.com/tools/deduplicate" rel="noopener noreferrer"&gt;duplicate accounts&lt;/a&gt; that may have got in.&lt;/li&gt;
&lt;li&gt;Old leads. Yes, time to throw away that five year old inbound lead that never contacted you back.&lt;/li&gt;
&lt;li&gt;Mailing lists with &lt;a href="https://operelio.com/email-validation" rel="noopener noreferrer"&gt;incorrect email addresses&lt;/a&gt;. You have a list of emails you send to, and through engagement and tracking it's easy to tell which ones are accurate and actually work. Remove the dead ones.&lt;/li&gt;
&lt;li&gt;Incorrect customer or client information. That person listed on the account as the key contact left their role 18 months ago. A great way to fix this is to let your customers or clients know you are migrating to a new CRM and updating their details, and could they let you know the current ones.&lt;/li&gt;
&lt;li&gt;For ongoing deals, it provides an opportunity to check in on stalled opportunities and a reason to contact them. Updated pipeline figures keep everyone happy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, the cleanup operation isn't just about getting rid of dead data. It's an opportunity across departments to update and capture the most up to date details, and the reason to make the call is one nobody minds receiving.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enrichment
&lt;/h3&gt;

&lt;p&gt;This is where you don't just clean the data, you add to it. It can happen while the cleanup is ongoing, however it's better to get as much of the cleanup done first. This is also where you will likely have to pull in resources outside of your organization.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updating reps' contact lists with up to date information. Enrichment provides an opportunity to refresh lists for outbound work by getting more accurate contact details on personas, with the phone numbers and email addresses that currently work.&lt;/li&gt;
&lt;li&gt;It is also the moment to change verticals and add new ones in. With the cleanup done it is clear to see which industries or personas have more buying signals, or by evaluating the current customer portfolio, which personas you typically engage with. When there are masses of unclean data polluting the CRM it's harder to see clearly, no matter how many pretty dashboards are set up.&lt;/li&gt;
&lt;li&gt;Updating company details across all channels. It is a chance to enhance the detail per account: they recently went through a merger, which is a good talking point. The company address has changed, which is worth knowing before anything gets posted to the old one. New CEO brought in, new fundraising round, just changed their telephony system. There's a lot of signal and intent data out there to be used and it can be applied during the enrichment process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As said earlier, a lot of this enrichment is going to have to be done by external providers. Dun &amp;amp; Bradstreet for company information, and Cognism, ZoomInfo, Lusha or Apollo for contact details on personas. They price per record or per credit, so work out what your real list costs on each before you commit to one.&lt;/p&gt;

&lt;h2&gt;
  
  
  So how do you actually do it?
&lt;/h2&gt;

&lt;p&gt;There's a few ways it can be done, and in different orders.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The cleanup goes at the midpoint.&lt;/strong&gt; This is when the data is out of your current CRM and not yet in the new one. It can either be done by a platform like Operelio, or by hand with spreadsheets. This is also where you bring other departments on board, so it isn't just a remove duplicates and spreadsheet exercise but a mass update and removal of dead information company wide. &lt;a href="https://operelio.com/how-to/clean-data-before-vs-after-crm-import" rel="noopener noreferrer"&gt;Cleaning data before vs after a CRM import&lt;/a&gt; sets out the case for each side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The enrichment happens once the cleanup is done.&lt;/strong&gt; It can take place after the cleaned data has entered the new CRM, or, better, while the data is still held at the midpoint. Enriching a file is easier than enriching a live CRM, because the file is not being edited underneath you.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Yes, this means getting the data from your current CRM to the new one takes slightly longer, and &lt;a href="https://operelio.com/blog/risks-of-migrating-your-crm" rel="noopener noreferrer"&gt;Risks of migrating your CRM&lt;/a&gt; is blunt about what a longer window costs you: every hour the old system stays live is more records to catch up on afterwards. The two fit together better than they look. The freeze applies to the old CRM, not to your file. Once the export is out, the old system is read only and nothing new is being created in it, so the cleanup and the enrichment happen on a file that nobody is working in. What grows your catch-up delta is the time before the export, not the time you spend on the data afterwards.&lt;/p&gt;

&lt;p&gt;It means you are working with a clean slate, and all of the data in your new CRM is as accurate as it can be on the day it lands.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Operelio does with that file
&lt;/h2&gt;

&lt;p&gt;We do the cleanup part, apart from the cross-department work, which is people led and always will be. So what we do is remove the duplicates, &lt;a href="https://operelio.com/email-validation" rel="noopener noreferrer"&gt;verify the emails&lt;/a&gt;, &lt;a href="https://operelio.com/company-active-check" rel="noopener noreferrer"&gt;check the companies are still active&lt;/a&gt;, and give you somewhere to stage the midpoint of your migration rather than doing it in a folder of spreadsheets on somebody's laptop.&lt;/p&gt;

&lt;p&gt;Every tool writes a new file rather than changing the one you uploaded, so you can always step back a version if a cleanup went further than you wanted. That much is on every plan. On Pro and Agency the workspace is shared, which is where the rest of it earns its place in a migration: you can bring the other departments in, hand a file to the person who actually knows whether that account is still live, and an admin can see the audit trail of who ran what.&lt;/p&gt;

&lt;p&gt;If you want to do the enrichment as well, the data from those providers comes back as a file like any other, and &lt;a href="https://operelio.com/tools/vlookup" rel="noopener noreferrer"&gt;Match &amp;amp; pull columns&lt;/a&gt; puts it alongside your cleaned data on the matching company or email. You end up with one file rather than four.&lt;/p&gt;

&lt;p&gt;From there the &lt;a href="https://operelio.com/crm-formatter" rel="noopener noreferrer"&gt;CRM Formatter&lt;/a&gt; puts the file into the shape your new CRM expects. It knows eight CRMs, has a generic format for the rest, and takes a custom template if your new system wants something of its own. For HubSpot, Salesforce and Pipedrive you can push straight in over OAuth and skip the new importer entirely, which helps when nobody has got the hang of it yet. For the rest you download an import-ready file and hand it to the native importer, which is a much smaller ask than learning it on your live data.&lt;/p&gt;

&lt;p&gt;With a huge amount of data and different types of data, each one can be separated out and funnelled in when it's ready. &lt;a href="https://operelio.com/trails" rel="noopener noreferrer"&gt;Trails&lt;/a&gt; schedule and automate the imports, so the contacts go in on Monday and the mailing lists follow on Wednesday without anybody sitting there doing it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://operelio.com/health-check" rel="noopener noreferrer"&gt;Data Health Check&lt;/a&gt;, merging, deduplicating and the formatter are on every plan. Full email verification, Company Active Check, the direct push and trails are paid, and shared workspaces start on Pro. &lt;a href="https://operelio.com/pricing" rel="noopener noreferrer"&gt;What each plan includes&lt;/a&gt; is on the pricing page.&lt;/p&gt;

&lt;p&gt;Think of the whole move as a three step process.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Your old CRM.&lt;/strong&gt; Export what is in there now, duplicates and dead contacts included. You are not fixing anything yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Operelio.&lt;/strong&gt; Merge the duplicates, drop what no longer answers, add the enrichment columns if you want them. Nobody is working in the data while this runs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Your new CRM.&lt;/strong&gt; Import the finished file, or push it straight in. What lands is what you checked.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The middle stage is the one most migrations skip. It is also the only point where the whole database sits in one file, out of both systems.&lt;/p&gt;

&lt;p&gt;After that, as an ongoing process, Operelio lets you run automated imports, so if more enrichment data needs to go into the system later you already have the workflows set up and can keep the cleaned data funnelling in. &lt;a href="https://operelio.com/blog/crm-import-problem" rel="noopener noreferrer"&gt;The CRM import problem&lt;/a&gt; is what that looks like as a permanent job rather than a one off.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://operelio.com/blog/hidden-gap-migrating-crm-data" rel="noopener noreferrer"&gt;Operelio blog&lt;/a&gt;. Have you cleaned up data in the middle of a migration, or did it all go across as it was?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>crm</category>
      <category>data</category>
      <category>database</category>
      <category>migration</category>
    </item>
    <item>
      <title>The cost of CRM data work</title>
      <dc:creator>Daniel Pank</dc:creator>
      <pubDate>Fri, 23 Oct 2026 09:17:08 +0000</pubDate>
      <link>https://dev.to/operelio/the-cost-of-crm-data-work-1aep</link>
      <guid>https://dev.to/operelio/the-cost-of-crm-data-work-1aep</guid>
      <description>&lt;p&gt;&lt;em&gt;By Daniel Pank, lead author. Published October 4, 2026, updated October 16, 2026. Data checked October 2, 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Each claim carries a label saying where it comes from: &lt;strong&gt;Practitioner&lt;/strong&gt; (the lead author's experience), &lt;strong&gt;Sourced&lt;/strong&gt; (official and published research), &lt;strong&gt;Our analysis&lt;/strong&gt; (public data we analyzed), &lt;strong&gt;Vendor&lt;/strong&gt; (vendor surveys and documents) and &lt;strong&gt;Estimate&lt;/strong&gt; (our model and arithmetic). The charts appear here as their tables; the charts themselves and the calculator are on the &lt;a href="https://operelio.com/research/cost-of-crm-data" rel="noopener noreferrer"&gt;full report&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;We found no published figure for what it costs to get one list into a CRM, so we worked it out: about $266 of staff time for a list someone else made, when someone new does it. &lt;em&gt;(Estimate)&lt;/em&gt; At companies of 25 to 100 people that sell outbound, lists often arrive faster than the one person handling them can keep up with, so the checks get skipped and bad data goes into the CRM. &lt;em&gt;(Practitioner, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On a list of average quality, two-thirds of the time is spent moving data between systems. On messy lists, cleaning takes over. Where the list came from matters far more than its size: a list someone else made has to be fixed before it can be finished, and nearly every one needs the full clean, enrich and merge. &lt;em&gt;(Practitioner, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The first fixes don't involve hiring. Build lists at the source, give one person the whole job with one process, test every import on a few rows, and never skip verification. If every list were built at the source, 25 a week would take one full-time person's whole week. Many lists will always come from someone else, so the choice is more people, fewer lists from outside, or checks that get skipped. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;$266&lt;/strong&gt; of staff time per list someone else made, when someone new does it (5.7 hours at $47 an hour)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.1 to 3.4 people&lt;/strong&gt; to keep up with 25 lists a week, at a company that usually gives the work to one&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two-thirds&lt;/strong&gt; of the time on a list of average quality is spent moving data between systems&lt;/p&gt;

&lt;p&gt;The first two come from our model of the lead author's time estimates. The first also prices those hours at $47, our middle estimate for the mix of people who do this work, from US government pay data and a salary survey. The third comes from his step-by-step time estimates. The method and its limits are explained below, and you can &lt;a href="https://operelio.com/research/cost-of-crm-data#your-number" rel="noopener noreferrer"&gt;work out your own number&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How fast does B2B contact data decay?
&lt;/h2&gt;

&lt;p&gt;Data decay is contact data going out of date as people change jobs and companies change their details: job changes alone put just under a fifth of B2B contacts out of date each year. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The estimate starts from the US Bureau of Labor Statistics: 20.6% of US wage and salary workers had been with their employer a year or less in January 2026 (&lt;a href="https://www.bls.gov/news.release/tenure.nr0.htm" rel="noopener noreferrer"&gt;Employee Tenure in 2026&lt;/a&gt;). &lt;em&gt;(Sourced)&lt;/em&gt; Leaving out people new to work gives just under a fifth. &lt;em&gt;(Estimate)&lt;/em&gt; More on how records go stale is in &lt;a href="https://operelio.com/research/cost-of-crm-data#decay-detail" rel="noopener noreferrer"&gt;chapter 4&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Two widely quoted figures, 22.5% and 30%, trace to no published study we could find.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we found
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A list from someone else costs about $266 of staff time when someone new imports it.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is 5.7 hours, including fixing failed imports. An experienced person takes 3.5 hours. A list someone builds themselves takes 1.5 hours. &lt;em&gt;(Practitioner, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;At about 10 lists a week, someone new falls behind.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Almost every list from someone else needs all nine steps. Outbound companies of 25 to 100 people handle 10 to 40 lists a week and usually give them to one person. Past 10 a week, something gives: lists wait, or checks are skipped. &lt;em&gt;(Practitioner, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The checks nobody sees are the first to be skipped.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;People notice duplicates, so they fix them. Nobody notices a missing email or phone number, so verification and enrichment get skipped and the data provider takes the blame. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;On a list of average quality, two-thirds of the time is spent moving data.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That means sending it to data providers, merging the results back and importing it. On messy lists, cleaning takes the larger share. &lt;em&gt;(Practitioner, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Where the list came from matters more than its size.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The same steps apply to 500 rows and 50,000. Lists from someone else often arrive messy, and a messy list takes about 6 times as long as a clean one. In the lead author's agency work, half or more arrived messy. &lt;em&gt;(Practitioner, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Building lists at the source saves about as much as experience, and is easier to change.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For an experienced person, a list they built takes less than half the time of one from someone else. Someone new takes about 1.6 times as long and gets about 1 in 3 imports wrong in their first year, against about 1 in 8 for an experienced person. &lt;em&gt;(Practitioner, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Business data is messy even where it is meant to be clean.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In 1.97 million records from a US healthcare registry that organizations are expected to keep current, 45% of names ending in "Inc" do not use the most common form, and 41% of suite numbers are written in a non-standard way. &lt;em&gt;(Our analysis)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;People make far more mistakes when they have to judge than when they copy.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In clinical and lab studies, people copying data get between 1 in 350 and 1 in 100 fields wrong. People deciding what goes in a field from a messy source get about 1 in 15 wrong. &lt;em&gt;(Sourced)&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Everyone's trying to build the best data or the best CRM. Hardly anyone owns the job of getting the data into the CRM.&lt;/p&gt;

&lt;p&gt;Daniel Pank, lead author&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How we did it
&lt;/h2&gt;

&lt;p&gt;Other fields measure this kind of work as a cost per unit. Our unit is one list, from the moment it arrives to the moment it is in the CRM. We built the figure from four kinds of evidence and combined them in a simple model. Each claim carries a label saying where it comes from.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Practitioner.&lt;/strong&gt; Daniel Pank spent seven years in commercial and operations roles at a B2B outbound agency with UK and US clients, and rose to lead both teams. At his busiest he handled up to 50 lists and 100,000 rows a month. From that experience, he estimated how long each step takes, how often imports fail and what state lists arrive in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sourced.&lt;/strong&gt; US government data on pay, employer costs, job tenure and employment, and peer-reviewed studies of data entry errors and of other fields that already measure this kind of work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Our analysis.&lt;/strong&gt; All 1.97 million organization records in a public US healthcare registry, to measure how messy real business records are.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor.&lt;/strong&gt; Surveys and documents from software and data companies. Used only where nothing independent exists, and always named.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estimate.&lt;/strong&gt; Our model and arithmetic, which combine the four above. The model and its inputs are in the tables under each chart.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The time estimates come from one experienced person at one agency. Treat them as a starting point until a survey tests them. Operelio sells software for this work. We have kept product claims out of the report, and we list what we still need to measure at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What one list costs
&lt;/h2&gt;

&lt;p&gt;The unit of this work is the list: an event list, an export someone else pulled from a data provider, a client's CRM export, a partner's spreadsheet. Most people count rows. People who do the work count lists, because every list goes through the same steps. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The steps
&lt;/h3&gt;

&lt;p&gt;A list that needs filling in goes through nine steps: look it over, size up the gaps, check for duplicates, remove them (&lt;a href="https://operelio.com/glossary#deduplication" rel="noopener noreferrer"&gt;deduplication&lt;/a&gt;), review the remaining near-duplicates by eye, send it to a data provider to fill the gaps (&lt;a href="https://operelio.com/glossary#data-enrichment" rel="noopener noreferrer"&gt;enrichment&lt;/a&gt;), merge the results back, reshape it for the CRM's fields (&lt;a href="https://operelio.com/glossary#field-mapping" rel="noopener noreferrer"&gt;field mapping&lt;/a&gt;), and import it. For a 500-row list, that takes an experienced person 2 to 3.3 hours. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On a list of average quality, two-thirds of the time is spent moving data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One 500-row list from someone else, experienced person, middle of each time range&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Source: lead author's time estimates, at the middle of each range. Moving data covers the data provider round trip (45 minutes), merging back (30) and importing (32.5): 107.5 of 160.5 minutes. The other six steps, cleaning and preparing, take 53 minutes. The total, 2.7 hours, is a little above the model's most likely 2.5 hours for an average list. Merging back includes matching company names, which is partly cleaning.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Minutes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Send to data providers to fill gaps&lt;/td&gt;
&lt;td&gt;30 to 60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Import&lt;/td&gt;
&lt;td&gt;20 to 45&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merge provider data back&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review duplicates by eye (500 rows)&lt;/td&gt;
&lt;td&gt;15 to 20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reshape for the CRM's fields&lt;/td&gt;
&lt;td&gt;10 to 20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Look it over&lt;/td&gt;
&lt;td&gt;5 to 10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Size up the gaps&lt;/td&gt;
&lt;td&gt;5 to 10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check for duplicates&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove duplicates in Excel&lt;/td&gt;
&lt;td&gt;0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The state it arrives in decides the time
&lt;/h3&gt;

&lt;p&gt;The lead author judges a list as a whole, not on any one thing, and some things count far more than others. Columns that match your import are a small part. A list with no email addresses is messy however neat its columns are. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Key information filled in for each contact (email, phone, company)&lt;/td&gt;
&lt;td&gt;Heavy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contacts fit your ideal customer profile (ICP)&lt;/td&gt;
&lt;td&gt;Heavy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emails verified&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No duplicates&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data in a clean, consistent format, including company names&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Columns match your import&lt;/td&gt;
&lt;td&gt;Light&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clean.&lt;/strong&gt; Yes, or close to yes, on every check. It goes through all nine steps, but each one is quick because few gaps need filling, and it is still verified before import.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average.&lt;/strong&gt; The key information is mostly there, with gaps a data provider can fill and some fixes to formats, duplicates or columns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Messy.&lt;/strong&gt; Key information is missing or bad across much of the list. It needs the full process: cut it down, pull out the company names, enrich, merge back, remove duplicates, fix formats and combine scattered notes into one field. An 80-field export from a client's own CRM is a typical example.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At least 9 in 10 lists from someone else go through all nine steps, and only 1 to 3 in 100 can go straight in after a quick check. &lt;em&gt;(Practitioner)&lt;/em&gt; Our model times clean lists at about 45 minutes with no enrichment, so it leans low. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The people sending you lists don't share your priorities. So you check every list, wherever it came from.&lt;/p&gt;

&lt;p&gt;Daniel Pank, lead author&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Size adds time in only two places. Reviewing duplicates by eye takes minutes on 500 rows and days on 50,000. And a data provider that takes 1,000 companies at a time turns a list of 50,000 companies into 50 batches. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A messy list takes about 6 times as long as a clean one&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hours per list from arrival to import, experienced person&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Source: our estimate from the lead author's time estimates. Average, 2 to 3.3 hours, is his step-by-step time. Clean (his 10 to 20 minutes of cleaning) and messy (his 2.5 hours and up) add his import and data provider step times. The most likely times and the 6.25-hour messy top are ours. We time clean lists without the data provider step. Someone new takes about 1.6 times as long (our estimate from two of the lead author's statements).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Starting state&lt;/th&gt;
&lt;th&gt;Low&lt;/th&gt;
&lt;th&gt;Most likely&lt;/th&gt;
&lt;th&gt;High&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clean&lt;/td&gt;
&lt;td&gt;0.5 h&lt;/td&gt;
&lt;td&gt;0.75 h&lt;/td&gt;
&lt;td&gt;1.1 h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average&lt;/td&gt;
&lt;td&gt;2 h&lt;/td&gt;
&lt;td&gt;2.5 h&lt;/td&gt;
&lt;td&gt;3.3 h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Messy&lt;/td&gt;
&lt;td&gt;3.8 h&lt;/td&gt;
&lt;td&gt;4.5 h&lt;/td&gt;
&lt;td&gt;6.25 h&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Half or more of lists arrive messy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Out of every 10 lists the lead author received&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Source: lead author. An agency sees the lists clients could not handle themselves, so this mix is probably messier than an average company's.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Out of 10&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clean&lt;/td&gt;
&lt;td&gt;about 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average&lt;/td&gt;
&lt;td&gt;1 to 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Messy&lt;/td&gt;
&lt;td&gt;5 to 6 or more&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What that costs
&lt;/h3&gt;

&lt;p&gt;Someone new takes about 1.6 times as long as an experienced person and gets more imports wrong. Weighted by the mix above, a list from someone else takes them about 5.7 hours, including fixing failed imports. At $47 an hour all-in, our middle estimate for the mix of US roles that do this work (&lt;a href="https://operelio.com/research/cost-of-crm-data#who" rel="noopener noreferrer"&gt;chapter 6&lt;/a&gt;), that is about $266 per list. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Where the cost could be cut
&lt;/h2&gt;

&lt;p&gt;Not all of that $266 is necessary. Two things drive most of it: where the list came from, and who does the work. A company can usually change the first more easily than the second.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From $266 to $70: what each change saves on one list&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Staff cost per list from someone else, at about $47 an hour&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Source: our estimate from the lead author's time estimates and failure rates. Fewer failed imports: about 1 in 8 for an experienced person (1 in 10 on a normal day, more when busy) against 1 in 3 for someone new, at about an hour per fix. Experience: someone new takes about 1.6 times as long as an experienced person. Building the list themselves: 1.5 hours for a list built in a data provider, against 3.5 hours for one from someone else. Every hour is priced at $47. Experienced people usually cost more per hour, so the cash saving from experience is smaller than shown (see below). Applying the changes in a different order splits the saving differently, but the total is the same.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Cost per list&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Someone new, list from someone else&lt;/td&gt;
&lt;td&gt;$266&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fewer failed imports&lt;/td&gt;
&lt;td&gt;-$10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Experienced person&lt;/td&gt;
&lt;td&gt;-$94&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Experienced person, list from someone else&lt;/td&gt;
&lt;td&gt;$162&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built the list themselves&lt;/td&gt;
&lt;td&gt;-$92&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Experienced person, list they built&lt;/td&gt;
&lt;td&gt;$70&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;About 40% of the time ($104 a list) is saved if someone who has done the work for more than a year does it. Up to about 75% ($196) is saved if that person also built the list. The 75% is an upper bound, not a target. Event lists, inbound leads and client exports will always come from someone else, and we found no measure of how many lists could have been built at the source. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In cash, the saving is smaller. Experienced people earn more: Salesforce administrators with 3 to 5 years' experience earn about 18% more than those with up to 2 years (Salesforce Ben, US figures). At that premium, the experienced person's list costs $192 rather than $162, and the cash saving is about 28% rather than about 40%. The saving from building the list at the source rises to about $108, so the upper bound falls only to about 69% rather than about 75%. &lt;em&gt;(Vendor, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What that means for one company
&lt;/h3&gt;

&lt;p&gt;A company of 25 to 100 people that sells outbound handles 10 to 40 lists a week. &lt;em&gt;(Practitioner)&lt;/em&gt; We assume about 85% of them come from someone else, and a working week of 37.5 hours. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lists a week&lt;/th&gt;
&lt;th&gt;Saved if someone experienced does it&lt;/th&gt;
&lt;th&gt;Upper bound, if they also built every list&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;$46k a year (0.5 of a person)&lt;/td&gt;
&lt;td&gt;$87k a year (0.9 of a person)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;$115k a year (1.3 people)&lt;/td&gt;
&lt;td&gt;$216k a year (2.4 people)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;$184k a year (2.0 people)&lt;/td&gt;
&lt;td&gt;$346k a year (3.8 people)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These figures count the work a company would need to pay for to keep up. With one person on lists, most of this would not show up as cash saved. The time would go back into the checks now being skipped (&lt;a href="https://operelio.com/research/cost-of-crm-data#backlog" rel="noopener noreferrer"&gt;chapter 3&lt;/a&gt;). &lt;em&gt;(Practitioner, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The figures also leave out the costs that land later, such as bounced emails, sellers' time and leads that go cold while they wait (&lt;a href="https://operelio.com/research/cost-of-crm-data#at-risk" rel="noopener noreferrer"&gt;chapter 7&lt;/a&gt;). And they price experienced people at the same rate as new ones. At the 18% premium, the saving from experience falls to about $33k, $83k and $132k a year, and the upper bound to about $81k, $202k and $324k. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Where the saving comes from
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Who built the list.&lt;/strong&gt; When someone else built the list, the person importing it has to fix the builder's work before doing their own. Only 1 or 2 in 10 companies the lead author worked with had one person sourcing and importing, and they were the smaller ones. &lt;em&gt;(Practitioner)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inexperience.&lt;/strong&gt; On one list it costs about as much as fixing someone else's work, and it comes back with every new hire. Where sales development reps (SDRs) do list work, they stay in the role about 1.9 years on average (Bridge Group 2025), so about half their time in the role falls in their first year, when about 1 in 3 imports go wrong. &lt;em&gt;(Practitioner, Vendor, Estimate)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failed imports.&lt;/strong&gt; Part of the saving from experience. A failed import is often a column deleted or missed during mapping, found only after import when a field arrives blank. Fixing one takes anywhere from 30 minutes to a full redo. &lt;em&gt;(Practitioner)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handoffs.&lt;/strong&gt; Not in the figures above. Each team a list passes through adds a queue (&lt;a href="https://operelio.com/research/cost-of-crm-data#backlog" rel="noopener noreferrer"&gt;chapter 3&lt;/a&gt;). That costs speed more than staff hours: leads wait longer before anyone contacts them. &lt;em&gt;(Practitioner)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;When someone hands you a file, you're fixing their half before you can finish yours. Build it yourself and you've only got the finishing to do.&lt;/p&gt;

&lt;p&gt;Daniel Pank, lead author&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Work out your own number
&lt;/h2&gt;

&lt;p&gt;The figures above are for one kind of company. Put in your own numbers and the same model gives your result: the &lt;a href="https://operelio.com/research/cost-of-crm-data#your-number" rel="noopener noreferrer"&gt;calculator is on the full report&lt;/a&gt;. It runs in your browser, and we do not save what you type.&lt;/p&gt;

&lt;p&gt;The model uses the most likely times from chapter 1. An experienced person takes about 45 minutes for a clean list, 2.5 hours for an average one and 4.5 hours for a messy one. Someone new takes 1.6 times as long. About 1 in 3 of their imports go wrong, against about 1 in 8 for an experienced person (1 in 10 on a normal day, more when busy), and each fix takes about an hour. A list built at the source takes 1.5 hours, however experienced the builder. The calculator holds these fixed. If any is wrong, the answer moves, which is why we list the measurements still needed at the end. &lt;em&gt;(Practitioner, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. When there are more lists than people
&lt;/h2&gt;

&lt;p&gt;Most outbound companies of 25 to 100 people have one person handling lists. &lt;em&gt;(Practitioner)&lt;/em&gt; At about 10 lists a week, someone new to the work falls behind, and even an experienced person is close to full. Above that, one person cannot keep up. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At 10 lists a week, someone new needs 1.3 people's time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Full-time people needed for the weekly list load&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Source: our estimate from the lead author's volumes, time estimates, list mix and failure rates: 85% of lists from someone else at about 3.5 hours (experienced) or 5.7 hours (new), 15% built by the person importing them at 1.5 hours, 37.5-hour week. The lead author estimates at least 9 in 10 lists from someone else need all nine steps; the chart leans low because it times clean lists without enrichment.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lists a week&lt;/th&gt;
&lt;th&gt;Experienced&lt;/th&gt;
&lt;th&gt;Someone new&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;0.8&lt;/td&gt;
&lt;td&gt;1.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;2.1&lt;/td&gt;
&lt;td&gt;3.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;3.4&lt;/td&gt;
&lt;td&gt;5.4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The queue
&lt;/h3&gt;

&lt;p&gt;Queuing research gives three rules. If lists arrive faster than one person can clear them, the wait keeps growing until something gives. Below that point, waits still climb steeply as the person nears full load (Kingman 1961). And the average wait is the backlog divided by how fast it is cleared, so a backlog of 30 lists, cleared at 10 a week, means the average list waits about 3 weeks (Little 1961). &lt;em&gt;(Sourced)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The lead author saw mid-sized companies where one person owned list work turn a list around in a day. At large companies lists took weeks to months, with extra sign-offs at each step. One large company imported only 7 columns from each list, so nothing else on it reached the CRM. Lists his agency sent every Friday took 1 to 2 months to get through some clients' CRMs, and the sales teams thought that was normal. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Who goes first
&lt;/h3&gt;

&lt;p&gt;Everyone thinks their list is the priority. Queues get ordered by arrival, by seniority, or by whoever is friendliest with the person doing the work, the way people get their laptop fixed first by being nice to IT. The lead author ordered by deadline, weighed against how much work each list needs. A messy list due Wednesday starts before a 45-minute list due Monday. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What gets cut
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;People will put up with average data, but not late data.&lt;/p&gt;

&lt;p&gt;Daniel Pank, lead author&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When the queue builds, verification and enrichment go first, because nobody sees them. Duplicates and wrong rows get noticed, so people fix them. Missing details do not. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nobody misses a phone number that was never there. The gap gets blamed on the data provider, and everyone moves on.&lt;/p&gt;

&lt;p&gt;Daniel Pank, lead author&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The cost lands later, on someone else. Unchecked emails bounce and damage the sending domain's reputation, and sellers spend their own time finding the missing details (&lt;a href="https://operelio.com/research/cost-of-crm-data#at-risk" rel="noopener noreferrer"&gt;chapter 7&lt;/a&gt;). &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Cutting verification saves almost nothing. It takes a few minutes per list &lt;em&gt;(Practitioner)&lt;/em&gt; and costs up to 2 cents per email at Bouncer's published prices, often well under 1 cent. &lt;em&gt;(Vendor)&lt;/em&gt; The lead author thinks skipping these checks is why almost everyone says their CRM is full of bad data. &lt;em&gt;(Practitioner)&lt;/em&gt; In Validity's 2025 survey of 602 CRM users, 76% said less than half their CRM data is accurate and complete. &lt;em&gt;(Vendor)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. How messy business data is
&lt;/h2&gt;

&lt;p&gt;To see how messy real business records are, we analyzed all 1.97 million organization records in a public US registry of healthcare providers (CMS NPPES, downloaded October 2, 2026). Each organization keeps its own record up to date, or is meant to, so the registry should be cleaner than most lists. &lt;em&gt;(Our analysis)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;21%&lt;/strong&gt; of records share a name, city and state with another record once case, punctuation and suffixes are tidied. 11% share a name and street address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;45%&lt;/strong&gt; of names ending in "Inc" do not use the most common form, "INC". They write "INC." or "INCORPORATED" instead, with or without a comma.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;41%&lt;/strong&gt; of suite numbers are not written the most common way, "STE". The rest use "STE.", "SUITE" or "#".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 to 4%&lt;/strong&gt; of records change their address or phone in a year. These are recorded changes only, so the true rate is likely higher.&lt;/p&gt;

&lt;p&gt;The 21% is not a duplicate rate. The registry gives one organization several ID numbers, one per site or service, and chains share names. The 21% shows how often a simple match on name and place would put two records side by side for someone to judge. Tidying case, punctuation and suffixes finds about 1.2 times as many matches as exact matching. We got the 3 to 4% two ways: from a year of update dates, and from two weeks of updates scaled up to a year. &lt;em&gt;(Our analysis)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Data decay: people go stale faster than companies
&lt;/h3&gt;

&lt;p&gt;Companies change their details slowly. People change jobs fast: 20.6% of US workers had been with their employer a year or less in January 2026 (BLS). Leaving out people new to work, job changes alone put just under a fifth of B2B contacts out of date each year. &lt;em&gt;(Sourced, Estimate)&lt;/em&gt; Checking every email in a 40,000-contact CRM costs about $250 at Bouncer's published prices. &lt;em&gt;(Vendor)&lt;/em&gt; That catches some job moves but not all, and finding the person's new details is the real work. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why each field takes time
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;What the evidence shows&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Job titles&lt;/td&gt;
&lt;td&gt;About 31,000 job titles map to about 570 occupation codes (US Census Bureau). Software could assign a code to only 43 to 72% of answers in government tests, against 95 to 100% for a trained person. Even two trained people agree only moderately on detailed codes.&lt;/td&gt;
&lt;td&gt;Sourced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Company names&lt;/td&gt;
&lt;td&gt;In one large patent dataset, 42% of company name strings were variants of another company's name (preprint). When provider data is merged back into the CRM, some companies fail to match and drop out, because each source writes company names its own way.&lt;/td&gt;
&lt;td&gt;Sourced, Practitioner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Addresses&lt;/td&gt;
&lt;td&gt;In fiscal years 2013 and 2014, 4.3% of all US mail could not be delivered as addressed, costing the Postal Service about $1.5 billion a year. USPS accepts 7 ways of writing "Avenue".&lt;/td&gt;
&lt;td&gt;Sourced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Countries and picklists&lt;/td&gt;
&lt;td&gt;Salesforce's own guide shows "United States" stored as US, U.S., America, Estados Unidos and "Untied States". Salesforce rejects country values not on its list; HubSpot skips values that break its rules (its import guide).&lt;/td&gt;
&lt;td&gt;Vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicates&lt;/td&gt;
&lt;td&gt;Across 12 billion records at customers of Plauti, a duplicate-removal tool, 19% of records imported into Salesforce were duplicates, as were 80% of records arriving from web forms and other integrations. The figures are likely high, because its customers tend to have more duplicates than most.&lt;/td&gt;
&lt;td&gt;Vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Job titles and company names need judgment, which is where rule-based software is weakest and people disagree. Addresses and countries follow rules, so they should be the cheapest to automate. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The data providers' blind spot
&lt;/h3&gt;

&lt;p&gt;Data providers compete on how many records they have. We found no independent test of their accuracy, and no measure of how much of a bought list lands correctly in the buyer's CRM. So a buyer cannot tell which gaps the provider never filled and which were lost in matching and importing. In one client's weekly list, 5,000 rows became about 3,000 usable contacts with phone numbers. The lead author often had to buy from 3 to 5 providers to get enough usable contacts. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Data entry errors, and why list size is a risk
&lt;/h2&gt;

&lt;p&gt;A bigger list goes through the same steps but carries more risk: it has more rows to get wrong, and each row gets less attention. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Judgment is far more error-prone than copying&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Share of fields entered wrongly, by method&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sources: Garza et al. 2025, review of 93 clinical studies (single entry 0.29%; deciding what goes in a field from a messy record 6.57%); Barchard and Pace 2011, 195 people with no data entry experience keying 1,260 values each (0.955%). The clinical studies were published between 1978 and 2008. Applying these rates to CRM lists is our inference.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Fields wrong&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Copying from a clean source&lt;/td&gt;
&lt;td&gt;0.29%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beginners typing numbers&lt;/td&gt;
&lt;td&gt;0.955%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deciding from a messy source&lt;/td&gt;
&lt;td&gt;6.57%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So manual data entry error rates run from about 0.3% of fields when people copy from a clean source to about 6.6% when they decide what goes in each field from a messy one. &lt;em&gt;(Sourced)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Checking misses a lot. Beginners re-checking their own work cut errors by only about 14%. Entering everything twice removes most errors but takes about 66% longer (Barchard and Pace 2011). Across spreadsheet inspection studies, reviewers caught about 60% of planted errors on average, and a team of three caught 83% (Panko 2015). &lt;em&gt;(Sourced)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lose 50 contacts from a 500-row list and someone notices. Lose 5,000 from 50,000 and often nobody does. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How often imports go wrong
&lt;/h3&gt;

&lt;p&gt;Imports go wrong when a column is missed in mapping or existing records get overwritten. How often depends on who does the import and how busy they are. &lt;em&gt;(Practitioner)&lt;/em&gt; For the errors each CRM reports, see our how-tos on &lt;a href="https://operelio.com/how-to/hubspot-import-errors" rel="noopener noreferrer"&gt;HubSpot import errors&lt;/a&gt; and &lt;a href="https://operelio.com/how-to/salesforce-import-errors" rel="noopener noreferrer"&gt;Salesforce import errors&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Who&lt;/th&gt;
&lt;th&gt;Imports that go wrong&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Experienced person&lt;/td&gt;
&lt;td&gt;1 in 10&lt;/td&gt;
&lt;td&gt;On a normal day. About 1 in 8 overall.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Experienced, tired or busy&lt;/td&gt;
&lt;td&gt;1 in 6&lt;/td&gt;
&lt;td&gt;About 1 in 6 or 7.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Someone new&lt;/td&gt;
&lt;td&gt;1 in 3&lt;/td&gt;
&lt;td&gt;For about their first year.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Source: lead author. A fix takes from 30 minutes to a full redo. Without an import preview, one import overwrote about 100 existing accounts, which then had to be found and restored.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Who does the work
&lt;/h2&gt;

&lt;p&gt;Outside large companies, no job title is built around this work. It lands on whoever is nearest: the founder at a small company, or a marketing, sales or operations manager at a mid-sized one. Large companies have a team of CRM administrators. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most roles that do list work pay about $70k or more&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Typical US annual pay, before employer costs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Source: BLS wage data, May 2025 (medians: data entry keyers for data entry clerks; sales reps, including commission, for SDR / BDR; marketing specialists for marketing ops; management analysts for RevOps), and the Salesforce Ben 2025-26 salary survey for CRM admins (US figures, 3 to 5 years' experience, self-selected). Matching roles to government job codes is our choice. Employer costs add 23 to 31% to annual pay, or 33 to 48% per hour actually worked (BLS, June 2026). Per hour worked, the roles above cost about $29 (data entry) to $73 (RevOps) all-in. We use $47 for everyone, our middle estimate (range $40 to $60) for the mix of roles that do this work. A higher rate for everyone makes the total cost larger; a higher rate for experienced people makes the saving from experience smaller (chapter 2).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Annual pay&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RevOps / sales ops&lt;/td&gt;
&lt;td&gt;$101,860&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CRM admin&lt;/td&gt;
&lt;td&gt;$92,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marketing ops&lt;/td&gt;
&lt;td&gt;$78,760&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SDR / BDR&lt;/td&gt;
&lt;td&gt;$69,990&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data entry clerk&lt;/td&gt;
&lt;td&gt;$41,340&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The cheap role is disappearing
&lt;/h3&gt;

&lt;p&gt;The number of US data entry clerks, the cheapest people who could do this work, fell from 234,700 in 2010 to 131,800 in 2025, and the government expects another 25.5% fall by 2035. Market research analyst and marketing specialist jobs more than tripled in the same period. Government data does not track tasks, so we cannot prove the work moved from one to the other. Part of the clerk decline is probably web forms doing the typing instead. But where list work lands on a marketing specialist, each hour costs about 1.9 times as much as a clerk's. &lt;em&gt;(Sourced, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fewer clerks, far more market research analysts and marketing specialists&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;US jobs, 2010 and 2025&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Source: BLS Employment Projections (2010 from the 2010 to 2020 release; 2025 from the 2025 to 2035 release, August 27, 2026). Job code definitions shifted over the period, so treat the comparison as a direction, not an exact count.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;th&gt;2010&lt;/th&gt;
&lt;th&gt;2025&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data entry clerks&lt;/td&gt;
&lt;td&gt;234.7k&lt;/td&gt;
&lt;td&gt;131.8k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Market research analysts and marketing specialists&lt;/td&gt;
&lt;td&gt;282.7k&lt;/td&gt;
&lt;td&gt;952.7k&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Too few people in the middle
&lt;/h3&gt;

&lt;p&gt;The work tends to go to either someone new or someone very senior. Experienced people in between, who work fast and get fewer imports wrong, are hard to find, so hiring one is a slow fix. &lt;em&gt;(Practitioner)&lt;/em&gt; Industry surveys point the same way (MarketingOps.com 2025; Validity 2025): marketing operations teams are shrinking, often to one person, and 57% of CRM users say their company does manual cleaning while cutting spending on dedicated data quality staff. &lt;em&gt;(Vendor)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. What bad CRM data puts at risk
&lt;/h2&gt;

&lt;p&gt;Beyond staff time, list work puts sellers' time, new leads, your sending domain, legal compliance and your CRM bill at risk. Most of the evidence here comes from vendors, and we label it that way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sellers' time
&lt;/h3&gt;

&lt;p&gt;Sales professionals say they spend 13% of their week entering data by hand (Salesforce, 4,050 people worldwide, 2026; all data entry, not only lists). An SDR spending 4 hours a week on list work gives up about 1 held meeting a month, or up to 2.5 if only selling hours count: 10 to 25% of a typical quota (Bridge Group 2025). Account executives carry quotas about 4.6 times their pay (Bridge Group 2026), so an hour they spend on data is worth more in selling time than it costs in pay. Only 48% of them hit quota, so not all of that time would turn into sales. &lt;em&gt;(Vendor, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Leads that wait
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Many companies never answer an inbound sales inquiry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Share of companies that never replied, in tests where researchers posed as buyers&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sources: Workato (114 companies; email replies; 69% never called), Conversica 2023 (100 technology, telecom and media firms), Chili Piper 2022 (sample not given), RevenueHero 2024 (1,000 SaaS firms). All run by sales software vendors, with different methods. These measure replies to web forms, not imported lists; we include them to show how often leads go unanswered.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Study&lt;/th&gt;
&lt;th&gt;Never replied&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Workato (114 firms, email)&lt;/td&gt;
&lt;td&gt;about 20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conversica 2023 (100 firms)&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chili Piper 2022&lt;/td&gt;
&lt;td&gt;about 30%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RevenueHero 2024 (1,000 SaaS firms)&lt;/td&gt;
&lt;td&gt;63.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In one vendor's logs of 5.7 million leads, replies within 5 minutes converted 8 times as often as replies that took 6 minutes or more (InsideSales, 2018 to 2020, not only B2B). &lt;em&gt;(Vendor)&lt;/em&gt; We found no measure of how long a list takes to reach the CRM, or of what the wait costs. In the lead author's experience it takes a day at best and months at worst. &lt;em&gt;(Practitioner)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Your sending domain
&lt;/h3&gt;

&lt;p&gt;HubSpot suspends a customer's email sending if more than 5% of emails &lt;a href="https://operelio.com/glossary#hard-bounce" rel="noopener noreferrer"&gt;hard-bounce&lt;/a&gt; in a month (its own policy). Sending to unverified lists is a common way to cross that limit. &lt;em&gt;(Vendor, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The law
&lt;/h3&gt;

&lt;p&gt;This is a summary of published US law, not legal advice. CAN-SPAM applies to business email: unsubscribes must be honored within 10 business days, and the maximum penalty is $53,088 per email for knowing violations. Actual penalties are far lower. Verkada paid $2.95 million in 2024, the largest the FTC has obtained under CAN-SPAM, which works out to under 10 cents per email sent. One way to break the unsubscribe rule is to re-import an old list without its unsubscribe flags. For calls, the FTC's Do Not Call rules exempt most business-to-business calls, but the FCC's rules under the TCPA and state laws can still apply, especially to cell phone numbers. &lt;em&gt;(Sourced, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The CRM bill
&lt;/h3&gt;

&lt;p&gt;Some CRMs charge by the number of contacts, including ones you cannot use. HubSpot's Marketing Hub Professional plan bills marketing contacts in blocks of 5,000 at $250 a month. Clearing out dead and duplicate contacts saves nothing unless it drops you into a lower block, and then up to about $3,000 a year for each block dropped, starting at your next renewal. That is small next to the staff time. &lt;em&gt;(Vendor, Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. What AI changes
&lt;/h2&gt;

&lt;p&gt;Many organizations doubt their data is ready for AI. Gartner found 63% either lack the right data practices for AI or are unsure whether they have them (1,203 data leaders, 2025). &lt;em&gt;(Vendor)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI is good at matching records: the best models score 76 to 98 out of 100 on matching tests without worked examples. In 2022 tests, GPT-3 was weak at spotting errors without examples. Newer studies find models change their answers when a question is worded differently, and can fill gaps by making values up. None of these tests used real CRM lists. &lt;em&gt;(Sourced)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We expect AI to cut the time spent finding and merging duplicates. It does not remove the round trip to data providers, the limits of email verification, or contacts going stale as people change jobs. Some of the time it saves goes back into checking its work. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. What other fields have learned
&lt;/h2&gt;

&lt;p&gt;US healthcare has measured this kind of work for years. The CAQH Index compares the staff cost of the same task done by hand and electronically. &lt;em&gt;(Sourced)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Electronic checks cost about a quarter as much as checks by hand&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Staff cost per task, US healthcare, 2023&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Source: CAQH Index 2024 (self-reported by health plans covering 63% of insured people and 600+ providers; staff cost only; a comparison at one point in time). These are the two biggest percentage gaps; across all the medical tasks CAQH measures, electronic is 52 to 77% cheaper.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;By hand&lt;/th&gt;
&lt;th&gt;Electronic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Checking a claim's status&lt;/td&gt;
&lt;td&gt;$13.80&lt;/td&gt;
&lt;td&gt;$3.64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Checking eligibility&lt;/td&gt;
&lt;td&gt;$8.57&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skilled people doing data entry.&lt;/strong&gt; Doctors spent about 2 hours on computer and desk work for every hour with patients (Sinsky 2016), and 44% of their computer time was clerical (Arndt 2017). This is the closest parallel we found to sellers and marketers doing list work. &lt;em&gt;(Sourced)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools added to a manual process saved little.&lt;/strong&gt; In a trial, one AI note-taker saved 9.5% of note time and another made no real difference (UCLA 2025). In mortgages, lenders estimated automation cut staff time by only 2 to 5%, while cost per loan rose for many reasons, including falling loan volumes (Freddie Mac 2024). Legal document review is the exception: software matched or beat people reading every page (Grossman and Cormack 2011). &lt;em&gt;(Sourced)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these fields, costs fell most when one standard covered the whole task, and little when a tool was added to one step. We have not tested this for CRM lists, but it fits &lt;a href="https://operelio.com/research/cost-of-crm-data#avoidable" rel="noopener noreferrer"&gt;chapter 2&lt;/a&gt;, where the cheapest list is one built by the person who imports it, with no one else's work to fix first. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10. What companies can do
&lt;/h2&gt;

&lt;p&gt;Each of these follows from a finding above, where its figures are labeled. None needs a new hire.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Build lists at the source where you can.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set the ideal customer profile, company sizes and fields in the data provider before exporting. A list built this way takes an experienced person about 1.5 hours, against 3.5 hours for one from someone else.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Give one person the whole job, with one written process.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Lists that pass between teams wait in each queue. Mid-sized companies where one person owned the work turned lists around in a day, and large ones with sign-offs at each step took weeks to months. A written process also helps someone new, who takes about 1.6 times as long and gets about 1 in 3 imports wrong in their first year.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Test every import on a few rows first.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Import 10 rows, check that every column landed, then import the rest. A common failure is a column missed in mapping and found too late.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Never skip verification.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It takes minutes and costs up to 2 cents per email, often well under 1 cent. Skipping it risks bounced emails and a damaged sending domain.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Carry unsubscribe and suppression flags through every import.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Re-importing an old list without them is one way companies end up emailing people who opted out.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Order the queue by deadline and effort, and say so.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;First come, first served makes quick lists wait behind slow ones. A visible order should also keep the queue from going to whoever asks loudest.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. The bigger picture
&lt;/h2&gt;

&lt;p&gt;Companies spend heavily on both ends of this work. Worldwide spending on CRM software was about $128 billion in 2024 (Gartner). &lt;em&gt;(Vendor)&lt;/em&gt; ZoomInfo, one of the largest B2B contact data providers, took in about $1.25 billion in 2025 (its annual results). &lt;em&gt;(Sourced)&lt;/em&gt; Far less attention goes to the work in between: getting the data from the provider into the CRM.&lt;/p&gt;

&lt;p&gt;We also built a rougher top-down model. It puts the yearly US staff cost of CRM data work at about $10 billion, with a range of $5 billion to $17 billion, for B2B companies with 20 or more staff that use a CRM. Because it rests on assumptions about how many companies are B2B, how many use a CRM and how much of each week is spent on this work, we do not treat it as a finding. The figures usually quoted for what bad data costs rest on even less, as we explain in &lt;a href="https://operelio.com/blog/what-cleaning-data-means" rel="noopener noreferrer"&gt;our post on cleaning data&lt;/a&gt;. The top-down model also covers ongoing CRM upkeep, not only lists, so do not apply the 40 to 75% from chapter 2 to it. &lt;em&gt;(Estimate)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Much of this work is a necessary cost of running sales and marketing, in the same way that payroll is. A company can find its own cost by counting its lists, timing a few and pricing those hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we still need to measure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A survey.&lt;/strong&gt; The time estimates come from one person. A survey of the people who do this work, with its questions and data published, will test them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A timed test.&lt;/strong&gt; Outside people will clean three realistic messy lists by hand and with several tools, including free ones, and we will publish the lists and answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How companies keep up.&lt;/strong&gt; Our time estimates imply 0.8 to 5.4 full-time people at 10 to 40 lists a week, yet the lead author saw mid-sized companies where one person owned the work turn lists around in a day. This report argues they kept up by skipping checks (chapter 3). They may also have handled fewer lists, or our times may be too high. The survey will test which.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The list mix.&lt;/strong&gt; The $266 uses the mix of lists the lead author's agency received, which is probably messier than most companies see. With 30% clean, 45% average and 25% messy, someone new would take about 4.3 hours, or about $200 a list. &lt;em&gt;(Estimate)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The wait.&lt;/strong&gt; How long a list takes to go from arrival to the CRM to first contact. We found no published measure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;To cite this report:&lt;/strong&gt; Pank, D. (2026). &lt;em&gt;The cost of CRM data work&lt;/em&gt;. Operelio. &lt;a href="https://operelio.com/research/cost-of-crm-data" rel="noopener noreferrer"&gt;https://operelio.com/research/cost-of-crm-data&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All sources checked on October 2, 2026.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.onetonline.org/link/details/43-9021.00" rel="noopener noreferrer"&gt;US Bureau of Labor Statistics (BLS), Occupational Employment and Wage Statistics, May 2025 (via O*NET OnLine)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bls.gov/news.release/ecec.nr0.htm" rel="noopener noreferrer"&gt;BLS, Employer Costs for Employee Compensation, June 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.salesforceben.com/salesforce-administrator-salary/" rel="noopener noreferrer"&gt;Salesforce Ben, Salesforce Salary Survey 2025-26 (US admin figures)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bridgegroupinc.com/research/2025-sdr-models-metrics-report-the-bridge-group" rel="noopener noreferrer"&gt;Bridge Group, SDR Models and Metrics, 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Barchard and Pace, Preventing human error: the impact of data entry methods on data accuracy and statistical results, Computers in Human Behavior 27(5), 2011&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scholars.uthscsa.edu/en/publications/error-rates-of-data-processing-methods-in-clinical-research-a-sys/" rel="noopener noreferrer"&gt;Garza et al., Error rates of data processing methods in clinical research, International Journal of Medical Informatics, 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/1602.02601" rel="noopener noreferrer"&gt;Panko, What we don't know about spreadsheet errors today, EuSpRIG, 2015&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Little, A proof for the queuing formula L = lambda W, Operations Research, 1961&lt;/li&gt;
&lt;li&gt;Kingman, The single server queue in heavy traffic, Proceedings of the Cambridge Philosophical Society, 1961&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.prnewswire.com/news-releases/validity-releases-state-of-crm-data-management-in-2025-report-revealing-disconnect-between-data-quality-and-ai-implementation-302499899.html" rel="noopener noreferrer"&gt;Validity, State of CRM Data Management in 2025, press release, July 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.usebouncer.com/pricing/" rel="noopener noreferrer"&gt;Bouncer, pricing page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://download.cms.gov/nppes/NPI_Files.html" rel="noopener noreferrer"&gt;Centers for Medicare and Medicaid Services, NPPES downloadable file, September 2026 release, downloaded October 2, 2026 (our analysis, organization records only)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bls.gov/news.release/tenure.nr0.htm" rel="noopener noreferrer"&gt;BLS, Employee Tenure in 2026, September 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.census.gov/topics/employment/industry-occupation/guidance/indexes.html" rel="noopener noreferrer"&gt;US Census Bureau, industry and occupation indexes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.census.gov/content/dam/Census/library/working-papers/2012/demo/2012-io-coding-asa-paper-final.pdf" rel="noopener noreferrer"&gt;US Census Bureau, industry and occupation autocoding paper, 2012&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mrdrc.isr.umich.edu/wp-content/uploads/2024/04/rb392.pdf" rel="noopener noreferrer"&gt;Michigan Retirement and Disability Research Center, automated occupation coding in the Health and Retirement Study, research brief 392, 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medinform.jmir.org/2016/1/e5" rel="noopener noreferrer"&gt;Schmitz and Forst, Industry and occupation in the electronic health record: an investigation of the NIOSH Industry and Occupation Computerized Coding System, JMIR Medical Informatics, 2016&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2403.12083" rel="noopener noreferrer"&gt;Ascione and Sterzi, company name consolidation in USPTO assignee data, 2024 (preprint)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.oversight.gov/sites/default/files/oig-reports/MS-MA-15-006.pdf" rel="noopener noreferrer"&gt;USPS Office of Inspector General, report MS-MA-15-006, 2015&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pe.usps.com/text/pub28/28apc_002.htm" rel="noopener noreferrer"&gt;USPS, Publication 28, Postal Addressing Standards, Appendix C1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://resources.docs.salesforce.com/242/latest/en-us/sfdc/pdf/state_country_picklists_impl_guide.pdf" rel="noopener noreferrer"&gt;Salesforce, State and Country/Territory Picklists implementation guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://plauti.com/blog/2021-average-rate-duplicates-crm" rel="noopener noreferrer"&gt;Plauti, average rate of duplicates in CRM, 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bls.gov/emp/tables/fastest-declining-occupations.htm" rel="noopener noreferrer"&gt;BLS, Employment Projections 2025 to 2035, August 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;BLS, Employment Projections 2010 to 2020, news release, February 2012&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketingops.com/state-of-the-marketing-ops-professional-research-2025/" rel="noopener noreferrer"&gt;MarketingOps.com, State of the Marketing Ops Professional, 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.salesforce.com/en-us/wp-content/uploads/sites/4/documents/reports/sales/salesforce-state-of-sales-report-2026.pdf" rel="noopener noreferrer"&gt;Salesforce, State of Sales, 7th edition, 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bridgegroupinc.com/research/2026-ae-models-motions-metrics" rel="noopener noreferrer"&gt;Bridge Group, AE Models, Motions and Metrics, 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://workato.com/the-connector/lead-response-time-study" rel="noopener noreferrer"&gt;Workato, lead response time study&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.businesswire.com/news/home/20230504005428/en/Research-Finds-Half-of-Companies-Are-Failing-Buyers-and-Losing-Revenue-Due-to-Poor-Lead-Follow-Up" rel="noopener noreferrer"&gt;Conversica, press release on its 2023 Sales Effectiveness Report, Business Wire, May 2023&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mediapost.com/publications/article/385073/the-lead-goes-cold-firms-are-failing-to-respond-t.html" rel="noopener noreferrer"&gt;MediaPost, The Lead Goes Cold: Firms Are Failing To Respond To Inquiries, May 2023 (Conversica's 2023 study of 100 companies)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.chilipiper.com/article/chili-insights-vendor-response-time" rel="noopener noreferrer"&gt;Chili Piper, vendor response time study, 2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.revenuehero.io/blog/b2b-lead-response-times" rel="noopener noreferrer"&gt;RevenueHero, B2B lead response times, 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.insidesales.com/wp-content/uploads/2021/02/infographic_LeadRespMgmt2021.pdf" rel="noopener noreferrer"&gt;InsideSales, Lead Response Management, 2021 (data 2018 to 2020)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://legal.hubspot.com/hubspot-product-and-services-catalog" rel="noopener noreferrer"&gt;HubSpot, Product and Services Catalog (contact tiers and email sending rules)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://knowledge.hubspot.com/import-and-export/set-up-your-import-file" rel="noopener noreferrer"&gt;HubSpot, Set up your import file, knowledge base&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business" rel="noopener noreferrer"&gt;Federal Trade Commission, CAN-SPAM Act compliance guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ftc.gov/news-events/news/press-releases/2024/08/ftc-takes-action-against-security-camera-firm-verkada-over-charges-it-failed-secure-videos-other" rel="noopener noreferrer"&gt;Federal Trade Commission, Verkada action, August 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fcc.gov/general/telemarketing-and-robocalls" rel="noopener noreferrer"&gt;Federal Communications Commission, Telemarketing and robocalls (TCPA rules)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ftc.gov/business-guidance/resources/qa-telemarketers-sellers-about-dnc-provisions-tsr-0" rel="noopener noreferrer"&gt;Federal Trade Commission, Telemarketing Sales Rule Q&amp;amp;A&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-02-26-lack-of-ai-ready-data-puts-ai-projects-at-risk" rel="noopener noreferrer"&gt;Gartner, Lack of AI-ready data puts AI projects at risk, February 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2205.09911" rel="noopener noreferrer"&gt;Narayan et al., Can Foundation Models Wrangle Your Data?, PVLDB, 2023 (arXiv 2022)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/pdf/2310.11244v2" rel="noopener noreferrer"&gt;Peeters et al., Entity Matching using Large Language Models, 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2603.22332" rel="noopener noreferrer"&gt;Mangussi et al., Large Language Models for Missing Data Imputation: Understanding Behavior, Hallucination Effects, and Control Mechanisms, 2026 (preprint)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.caqh.org/hubfs/Index/2024%20Index%20Report/CAQH_IndexReport_2024_FINAL.pdf" rel="noopener noreferrer"&gt;CAQH, CAQH Index, 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sinsky et al., Allocation of physician time in ambulatory practice: a time and motion study in 4 specialties, Annals of Internal Medicine, 2016&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC5593724/" rel="noopener noreferrer"&gt;Arndt et al., Tethered to the EHR: primary care physician workload assessment using EHR event log data and time-motion observations, Annals of Family Medicine, 2017&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.uclahealth.org/news/release/ucla-study-finds-ai-scribes-may-reduce-documentation-time" rel="noopener noreferrer"&gt;UCLA Health, news release on a randomized trial of AI scribes published in NEJM AI, 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sf.freddiemac.com/docs/pdf/cost-to-originate-full-study-2024.pdf" rel="noopener noreferrer"&gt;Freddie Mac, Cost to Originate study, 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://grossman.uwaterloo.ca/grossman-publications/jolt-2011/" rel="noopener noreferrer"&gt;Grossman and Cormack, Technology-assisted review in e-discovery, Richmond Journal of Law and Technology, 2011&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gartner.com/en/documents/6582102" rel="noopener noreferrer"&gt;Gartner, Market Share: Customer Experience and Relationship Management, Worldwide, 2024, June 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.businesswire.com/news/home/20260209677262/en/ZoomInfo-Announces-Fourth-Quarter-and-Full-Year-2025-Financial-Results/" rel="noopener noreferrer"&gt;ZoomInfo, fourth quarter and full year 2025 financial results, February 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Originally published as an &lt;a href="https://operelio.com/research/cost-of-crm-data" rel="noopener noreferrer"&gt;Operelio research report&lt;/a&gt;. If you do list work, how long does one list take you, from arrival to import?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>research</category>
      <category>crm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Is the spreadsheet warrior a dying breed?</title>
      <dc:creator>Daniel Pank</dc:creator>
      <pubDate>Mon, 05 Oct 2026 10:40:29 +0000</pubDate>
      <link>https://dev.to/operelio/is-the-spreadsheet-warrior-a-dying-breed-292p</link>
      <guid>https://dev.to/operelio/is-the-spreadsheet-warrior-a-dying-breed-292p</guid>
      <description>&lt;p&gt;Love it or hate it, Excel is one of those skills everyone claims to be proficient in on their CV. No one checks what it even means, but it feels weird not to have it there, like people will assume you look at a spreadsheet like it's a Martian landing in your garden. So why is it so important to businesses to be proficient with Excel?&lt;/p&gt;

&lt;h2&gt;
  
  
  Why businesses still run on spreadsheets
&lt;/h2&gt;

&lt;p&gt;It's because pretty much every business at any level uses spreadsheets in some form. Spreadsheets have been the backbone of a lot of businesses, and moving away from the spreadsheet culture is difficult when it's all some people have known since its creation.&lt;/p&gt;

&lt;p&gt;Excel came out in September 1985, on the Macintosh. By May 1996 Microsoft said more than 30 million people were using it, which works out at about five new users a minute for eleven years. They haven't published a number since, so nobody outside Microsoft knows what it is now. Forty years on, they're still adding their newest AI features to it.&lt;/p&gt;

&lt;p&gt;The biggest study of what employers ask for is a bit old now. In 2014 Burning Glass went through nearly eight million middle-skill job adverts from a single year and found spreadsheets and word processing were a basic requirement in 78% of them.&lt;/p&gt;

&lt;p&gt;So what has happened in the twelve years since? Two newer sources disagree. Lightcast, which is Burning Glass under a new name, still has Excel as the second most in-demand digital skill across fifteen countries, behind Microsoft Office itself, and mentions of the 365 suite it sits inside grew 195% in a year. ITJobsWatch, which counts UK IT vacancies rather than all of them, has Excel in 2.27% of permanent ads in the six months to September 2026, down from 4.76% a year earlier, with its rank sliding from 43rd to 69th.&lt;/p&gt;

&lt;p&gt;Both are right, they're just counting different jobs. Lightcast covers every kind of job across fifteen countries. ITJobsWatch only covers IT roles in the UK, where Excel was never the main skill anyway. So there isn't one number for how much Excel is needed today, and if someone gives you one, check which jobs they counted.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Excel is actually used for
&lt;/h2&gt;

&lt;p&gt;Five jobs cover most of it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transferring and storing data, like contact lists or engagement rates.&lt;/li&gt;
&lt;li&gt;Finance modelling and forecasting.&lt;/li&gt;
&lt;li&gt;Reporting. The weekly numbers somebody pulls, tidies and pastes into a deck.&lt;/li&gt;
&lt;li&gt;Reconciliation. Two exports side by side, and the job is finding what doesn't match.&lt;/li&gt;
&lt;li&gt;The list that turned into the main record for something, because it was quicker than asking for a new field somewhere else.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is where problems start. No one plans to run part of the business from a spreadsheet, it just happens because the spreadsheet was already open. Keeping that list clean, and working out whose job that is, is covered in &lt;a href="https://operelio.com/blog/what-cleaning-data-means" rel="noopener noreferrer"&gt;Cleaning data: what it means, and who ends up doing it&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three levels of Excel
&lt;/h2&gt;

&lt;p&gt;On the surface, Excel is a list function with copy and pasting data from one point to another. The level above that is using Excel to interpret data, such as building graphs. The advanced level is summarizing it, which is what a pivot table does, and projecting forward from it, which is what FORECAST and TREND are for. So how do you do this? Excel has basic functions like removing duplicates or find and replace. Take it up a step and you're into VLOOKUP territory.&lt;/p&gt;

&lt;p&gt;Even VLOOKUP has changed. Microsoft has since released XLOOKUP, which does the same job and can look left as well as right. But it isn't in Excel 2016 or 2019, so if your company is on one of those, you'll still need VLOOKUP.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what does it mean to be proficient?
&lt;/h2&gt;

&lt;p&gt;Does it mean you know how to copy and paste or delete rows? How to do a formula? This is where users go wrong. High level Excel is a skill which is highly valuable to learn, and is why many people attach skilled in Excel to their CVs.&lt;/p&gt;

&lt;p&gt;Being proficient in Excel means knowing your way round a spreadsheet and pulling data out of it. But the bit that counts most is knowing roughly what the numbers should say before you open the file, like noticing a total is wrong because it's about double last month's. You can learn the formulas in an afternoon. That part takes years in the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The people who were sure they were fine
&lt;/h2&gt;

&lt;p&gt;There's a body of research on this, and it isn't comfortable reading if you've got Excel on your CV. Ray Panko at the University of Hawaii spent years collecting the results of audits on real working spreadsheets, rather than what the people who built them said about their own work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forenbv3e1o6uwx9ljjf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forenbv3e1o6uwx9ljjf3.png" alt="Ray Panko's summary of seven spreadsheet audits: 367 spreadsheets audited, 11% with errors in the largest audit, 86 to 91% in the most thorough, against a 10% guess from the people who built them" width="800" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Errors turned up in 11% of spreadsheets in the largest audit, and in 86 to 91% in the most thorough ones.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The gap between 11% and 91% comes down to how hard the auditors looked. The more carefully they checked, the more errors they found.&lt;/p&gt;

&lt;p&gt;Now look at the last row. Before any checking, the people who built the spreadsheets put the chance of an error in their own work at 10%. Every audit found more than that, and the most thorough ones found errors in nearly nine out of ten.&lt;/p&gt;

&lt;p&gt;One of the best known spreadsheet failures happened here in the UK. Between 25 September and 2 October 2020, Public Health England lost 15,841 positive covid test results. The results were being passed between systems as .XLS files, the format Excel used before 2007, which stops at 65,536 rows. Everything past that row got dropped without anybody being told. Around 48,000 people who'd been in contact with a positive case were never called. It wasn't a problem with anyone's Excel skills. The file format was just too old for the amount of data going through it.&lt;/p&gt;

&lt;h2&gt;
  
  
  So is the spreadsheet warrior dying?
&lt;/h2&gt;

&lt;p&gt;No. Spreadsheets are still how data gets from one system to another when the two don't connect. CRMs export to CSV, data providers send you spreadsheets, and finance systems export to a grid. People still email spreadsheets to each other because it's the one format everyone can open. And plenty of businesses, especially older ones, still run on them, even though they know the alternatives exist.&lt;/p&gt;

&lt;p&gt;People have been predicting the end of the spreadsheet for as long as there have been products sold to replace it. The one doing the rounds at the moment is Gartner's: by 2026, more than 70% of finance organizations will have moved off spreadsheets as their main planning tool. But look at what it actually says. It's about one department, finance, doing one job, planning, and only about which tool they use first. And 2026 is this year.&lt;/p&gt;

&lt;p&gt;It's the same every time. Someone predicts the next thing will replace spreadsheets, the date comes, and people are still using them. What is changing is how much of the work you do by hand. The AI now built into spreadsheets is good at the tedious bits, like writing a formula, and bad at the part that takes experience, like spotting that a total looks wrong. It also brings a new problem: when it makes up a value, it looks just like a real one.&lt;/p&gt;

&lt;p&gt;So no, the spreadsheet warrior isn't dying. The boring parts of the job are slowly getting automated, and what's left is the part you were hired for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handing over the repetitive part
&lt;/h2&gt;

&lt;p&gt;Spreadsheets are great for fixing a big file in one go. They're not great when you're doing the same fix every month, by hand, from memory, with no record of what you changed. That's the part we built &lt;a href="https://operelio.com" rel="noopener noreferrer"&gt;Operelio&lt;/a&gt; for. You can remove duplicates, merge files and clean up headers in one pass, and you get a report of what changed, with any removed rows kept in their own file. All of that is free to use, and &lt;a href="https://operelio.com/how-to/remove-duplicates-in-excel" rel="noopener noreferrer"&gt;How to remove duplicates in Excel&lt;/a&gt; walks through it step by step. You still decide what needs fixing, you just don't have to do it by hand every month.&lt;/p&gt;

&lt;p&gt;It doesn't replace anyone either. A tool doesn't know what your numbers should add up to, so someone who knows the business still has to check what comes back.&lt;/p&gt;

&lt;p&gt;So keep Excel on your CV. Everyone else has it on theirs and nobody checks. Just know that what makes you good at it is spotting the total that looks wrong, and that skill, like the spreadsheet, isn't going anywhere.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://operelio.com/blog/is-excel-still-worth-learning" rel="noopener noreferrer"&gt;Operelio blog&lt;/a&gt;. What's the worst spreadsheet error you've caught, or missed?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>excel</category>
      <category>productivity</category>
      <category>career</category>
      <category>data</category>
    </item>
    <item>
      <title>The CRM import problem</title>
      <dc:creator>Daniel Pank</dc:creator>
      <pubDate>Thu, 01 Oct 2026 09:47:42 +0000</pubDate>
      <link>https://dev.to/operelio/the-crm-import-problem-2o6a</link>
      <guid>https://dev.to/operelio/the-crm-import-problem-2o6a</guid>
      <description>&lt;p&gt;Many companies still do manual imports, usually a file or files come in and believe me, they can come in from everywhere. At larger enterprise companies, there's a team or individual who is the one that gets sent these files to import. At smaller companies, this is usually a sales operations or CRM administrator who handles this.&lt;/p&gt;

&lt;p&gt;These teams or individuals are treated like the most powerful people at a company. I've seen c-suite bow down to these Salesforce admins or sales operations individuals in the hope that the data will be imported quicker. I've seen sales managers tell their reps who are asking for more data to go outbound to, that they will have to wait until Dave (not a real person), the importer, decides their data is worthy of importing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the importer is held in such high regard
&lt;/h2&gt;

&lt;p&gt;Why does this happen? To break it down into two perspectives, and I have been on both sides of it, we will look at the importer role first.&lt;/p&gt;

&lt;p&gt;Importing data into a CRM is tricky business, especially with the complexity around CRMs now and all the different conditions that come with them. You have to make sure the data you are working with is all organized and formatted correctly, complex field mapping across tons of custom fields which are now available in a CRM, every record assigned to the right owner, and make sure you are selecting the right options to not overwrite anything important already in the CRM. Then one field mapping is slightly off or the import fails, and you have to start over again from the beginning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet Dave
&lt;/h2&gt;

&lt;p&gt;Dave, and we'll use him as an example, is usually an experienced operator. Dave knows CRMs and has likely been in that role for a number of years. Companies don't let individuals fresh out of university have the keys to their entire platform which runs the business.&lt;/p&gt;

&lt;p&gt;Dave gets files sent in from marketing, sales, GTM divisions and anyone else that wants their data importing. This is where the challenge arises for Dave, and the bottleneck. Dave will likely have a backlog of files waiting to be imported and will usually prioritize which files go in based on when they were submitted, to keep things fair. Everyone in the company will be aware they need to get files across and will have an idea of roughly how long they have to wait until the data is in the CRM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every CRM has its own particulars
&lt;/h2&gt;

&lt;p&gt;CRMs don't all behave the same, and the differences show up most at import time. Salesforce's Data Import Wizard takes 50,000 records at a time, so a bigger file means splitting it up or moving to Data Loader, a separate desktop application. HubSpot imports every row as a brand new record if your file has no unique column it recognizes, so a list you know is clean ends up doubled. Pipedrive wants custom fields created before the import rather than during it, and only a global admin can reverse an import, within 48 hours. There's loads of issues that can arise, and they are all things Dave has to hold in his head at once. If he's moving between two CRMs, he's juggling both sets, which is covered in &lt;a href="https://operelio.com/blog/risks-of-migrating-your-crm" rel="noopener noreferrer"&gt;Risks of migrating your CRM&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking at the file first
&lt;/h2&gt;

&lt;p&gt;Before the import can even happen though, Dave must actually look at the file. Most of the time files that are sent aren't clean, ready to be imported data; they are usually a mess which has come from a marketing event or from a data provider. Most businesses have never settled whose job it is to clean that file before it gets to Dave, which is what &lt;a href="https://operelio.com/blog/what-cleaning-data-means" rel="noopener noreferrer"&gt;Cleaning data: what it means, and who ends up doing it&lt;/a&gt; is about.&lt;/p&gt;

&lt;p&gt;This is where Dave has a decision: import as much as possible and spend a few hours cleaning up the file to capture more data, or import what's possible in its current form. Either way, Dave gets a bashing from the reps who claim their data is bad, or loses hours on one file. With a backlog of files to go in already, most of the time it's a balance for Dave on capturing as much as possible without spending hours cleaning the file, and you can forget verifying it.&lt;/p&gt;

&lt;p&gt;So usually there's a data loss in what's been captured between the file and the CRM. It's just an accepted practice of the data import problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other side of it
&lt;/h2&gt;

&lt;p&gt;Now from the other perspective of those sending files to Dave. Because a lot of these have never even seen an import page on a CRM, they have no idea the magic Dave does to get the data that's on a spreadsheet in front of their faces ready to go in the CRM. This means that they have no idea what would make Dave's life easier and what they could do before sending the file.&lt;/p&gt;

&lt;p&gt;I have seen companies implement an education process whereby any files being sent to Dave have to be in a very specific format and have the exact columns in the exact right order for it to be imported. While this does solve the issue marginally, suddenly every person sending a file must constrain what could be a rich data list into columns which may not capture all that they wanted. While the education piece works and makes Dave's life easier, it still ends in the same result, which is a loss of data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three routes companies take
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Have a team of people doing the imports,&lt;/strong&gt; screening and cleaning the files before they are imported. This works at mass volume and when the budget is there. However, it usually means giving extra responsibilities to sales ops, RevOps or CRM admins and adding to their workload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate the system&lt;/strong&gt; where data links directly from one place straight to the CRM through an API or similar. This is usually the solution many companies adopt when going through any digital transformation. Suddenly, you can get that data from a provider straight into your CRM and cut Dave out of the equation (sorry Dave).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use AI to do the import process for you.&lt;/strong&gt; This is like the more SaaS based automation but takes it a step above automating the system directly, whereby you use AI workflows to adapt the data coming in and then it gets imported to the CRM. This is also what a lot of the experts are doing now, using AI transformation on data as part of the automation project.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The second one does present the same issues. When it comes to systems mapping data to each other, systems aren't really set up to send and receive data in the right formats. So what you end up with is usually a worse result, where you click one button on one system, let's say a data provider, and then only half of that gets into the CRM and it turns out it's overwritten an enterprise account's contact and taken all of the notes off it.&lt;/p&gt;

&lt;p&gt;This is where the experts usually come in to do a data quality audit and make sure the systems are speaking to each other in the right way. It does work, but it takes months, it isn't cheap, and at the end of it you've handed the keys over to those experts, who charge to maintain it and adapt it when you need them to. &lt;a href="https://operelio.com/blog/should-you-automate-your-lead-flow" rel="noopener noreferrer"&gt;Should you automate your lead flow?&lt;/a&gt; goes through the costs of that in more detail.&lt;/p&gt;

&lt;p&gt;The third one can work extremely well, where you have a system that adapts to different file types and levels of information and can even enrich that data before it enters the CRM, a job &lt;a href="https://operelio.com/blog/hidden-gap-migrating-crm-data" rel="noopener noreferrer"&gt;The hidden gap in migrating your CRM data&lt;/a&gt; covers in full. However, it presents a new list of challenges which we haven't covered before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three challenges with putting AI in the middle
&lt;/h2&gt;

&lt;p&gt;First, while AI has become increasingly advanced over the years, it still struggles with spreadsheets. It has a habit of inventing data, or saying it has done something when it hasn't. The reason it struggles is because of the volume of data there is and can be on a spreadsheet. AI can work well on a lower volume spreadsheet and do it exactly as you want, however ramp up the volume and this is where it struggles and starts inventing values or only doing half a job.&lt;/p&gt;

&lt;p&gt;Second is the cost. Parsing a large spreadsheet uses tokens. The AI has to read and understand each value and what everything means before it can do the transformation, then actually do the transformation, then send it on its way. Tokens aren't cheap at volume, and this is how companies get saddled with a huge usage bill they weren't expecting.&lt;/p&gt;

&lt;p&gt;Third, where your data actually goes. Handing your incoming data to an AI to transform and sort it means a third party is processing your customers' personal data, which makes them a sub-processor. So you need to check their contract: what they keep, for how long, where it sits, and whether any of it gets used to improve the service. Ask, and get the answer in writing. None of this is legal advice and your own agreement with them is what settles it.&lt;/p&gt;

&lt;p&gt;That goes for any tool, including ours: find out what leaves your workspace, and get them to show you, not just tell you.&lt;/p&gt;

&lt;h2&gt;
  
  
  So how is the data import problem solvable?
&lt;/h2&gt;

&lt;p&gt;It's by combining the three together. Morphing Dave, the automated system and AI together so that each one has a role to play and doesn't overstep. That's how we've built &lt;a href="https://operelio.com" rel="noopener noreferrer"&gt;Operelio&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dave is the toolkit.&lt;/strong&gt; &lt;a href="https://operelio.com/tools" rel="noopener noreferrer"&gt;17 tools&lt;/a&gt; for the cleaning and verifying Dave used to do by hand: merging files, fixing headers, removing duplicates, checking email addresses. None of them use AI, so nothing gets made up. The &lt;a href="https://operelio.com/crm-formatter" rel="noopener noreferrer"&gt;CRM Formatter&lt;/a&gt; maps your file to your CRM's fields and shows you exactly what will happen before anything is imported, rather than handing you an error file afterwards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trails is the automation.&lt;/strong&gt; Files arrive in one place by email, upload or API, get cleaned and verified the same way every time, and go into the CRM on a schedule you set.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bridgeant is the AI.&lt;/strong&gt; It runs the tools rather than reading every value in your file. Out of a trail it can plan a cleanup and run it for you, once you've seen the plan and confirmed it. Inside a trail it sits just before the CRM and holds anything you've told it shouldn't land. It can stop a push, but it can never force one through.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm3ud85qupexgm9sa8s4x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm3ud85qupexgm9sa8s4x.png" alt="Diagram: out of a trail, one file goes into the CRM and you click send; in a trail, several files go in and Bridgeant holds one back" width="800" height="446"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Out of a trail, you run the cleanup and Bridgeant gets the push ready for you to send. In a trail, it all runs on its own, so Bridgeant checks each push before anything reaches the CRM.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When Bridgeant reviews a push, what leaves your workspace is counts, column names and CRM field names, plus the instructions you typed yourself. None of the actual data in your file is sent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why all three work well together
&lt;/h2&gt;

&lt;p&gt;The reason all three work well together is we are taking the best parts of each system. Dave's level of experience and knowledge, the automation's consistency and reliability, and the AI reasoning to react, flag and adapt when things aren't going right.&lt;/p&gt;

&lt;p&gt;Put them together and each one covers what the other two can't, in something repeatable and easy enough to use that it gets to the end goal. Solving the data import problem into CRMs.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://operelio.com/blog/crm-import-problem" rel="noopener noreferrer"&gt;Operelio blog&lt;/a&gt;. Is there a Dave where you work, or are you Dave?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>crm</category>
      <category>data</category>
      <category>automation</category>
      <category>ai</category>
    </item>
    <item>
      <title>Cleaning data: what it means, and who ends up doing it</title>
      <dc:creator>Daniel Pank</dc:creator>
      <pubDate>Mon, 28 Sep 2026 08:54:46 +0000</pubDate>
      <link>https://dev.to/operelio/cleaning-data-what-it-means-and-who-ends-up-doing-it-4md9</link>
      <guid>https://dev.to/operelio/cleaning-data-what-it-means-and-who-ends-up-doing-it-4md9</guid>
      <description>&lt;p&gt;To start with, what does clean data mean? Cleaning data can mean clearing a database or system of invalid fields, duplicate accounts, wrong or missing data, an overload of data, and spelling errors. It takes on many different meanings depending on the type of business, the department it's being mentioned in and where the data sits. Data can sit across many platforms like website analytics, inventory management, HR systems, SRMs and CRMs, and marketing engagement tools. Pretty much every business uses and relies on data in some form.&lt;/p&gt;

&lt;p&gt;Businesses live and die by their data quality and quantity. Every business wants clean and reliable data in every system they use, as it allows informed decision making up and down the channels. Quantity alongside quality is also important: if a business does not have enough data, they cannot make accurate decisions. So clean data is about both the quantity and the quality. By cleaning your data, you then get an accurate measurement of the quantity you actually have. Both go hand in hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the impact of unclean data on a business?
&lt;/h2&gt;

&lt;p&gt;Bad and unclean data can be dangerous for a business to have. It can send an entire marketing campaign in the wrong direction, make wrong product decisions, report inaccurately, and it becomes hard to trust your data once you spot a few bad examples. This costs money, time and trust in the short and long run.&lt;/p&gt;

&lt;p&gt;If you ask anyone in an organization, they will say the main place bad and unclean data lives in any business is in the CRM. Some examples of it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sales team metrics and KPIs take a hit on outbound.&lt;/strong&gt; Let's say each rep has a list of accounts to go outbound to, and 20% of that data has the wrong number or the wrong website for the company. That's extra time wasted from the rep's point of view and a loss of activity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It isn't just marketing's problem.&lt;/strong&gt; Take a marketing person running a mailing campaign to a list. If 15% of those email addresses are unverified, you risk tanking your domain rating from a deliverability perspective, and everybody else in the business sends from that domain too. Google asks bulk senders to keep their spam complaint rate under 0.3%, so there isn't much room for error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboards give wrong readings.&lt;/strong&gt; Most leaders rely on dashboards to do the heavy lifting and to keep them informed. If the data funnelling into the dashboard is bad, so are the readings, and off that, bad decisions are made.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You'd expect there to be a reliable figure for what all of this costs, but there isn't one. The two most quoted are Gartner's, that poor data quality costs an organization at least $12.9 million a year, and IBM's, that it cost the US economy $3.1 trillion in 2016. Neither comes with a method you can check. Gartner puts its number down to its own 2020 research, which it hasn't published. The IBM one appeared in a Harvard Business Review column with no workings behind it, and it works out at roughly a sixth of US GDP that year.&lt;/p&gt;

&lt;p&gt;A smaller study from 2017 is more useful. Tom Redman, Tadhg Nagle and David Sammon asked 75 managers to take 100 records their own department had recently created, and mark each one against the handful of fields that department actually depends on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxjrz881iivntsamoxc50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxjrz881iivntsamoxc50.png" alt="Redman, Nagle and Sammon study: 100 recently created records checked per department, 47% carried at least one critical error, 3% of departments scored acceptably" width="800" height="358"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;47% of freshly created records had at least one critical error. Only 3% of departments scored as acceptable.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These were records the department had only just created, entered by the people whose job it is to get them right, and nearly half already had a mistake in a field that mattered.&lt;/p&gt;

&lt;h2&gt;
  
  
  So how do you clean data across an organization?
&lt;/h2&gt;

&lt;p&gt;Cleaning data can be done in many ways. How you do it depends on timing and budget. Either you keep it running in the background or you do it in one go, and the ongoing version splits into three.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Set the culture
&lt;/h3&gt;

&lt;p&gt;Ingrain in every user the habit of checking their data quality and accuracy at all points. Salespeople must keep their lists accurate and up to date at all times, marketing must do the same. If every channel of the business is focused on not letting bad data creep in, it's easier to spot when bad data appears, and you have multiple people flagging it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upsides&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data first culture means with everyone focused on data, you can be sure the standard is the same throughout the organization, accurate data is flowing and users are ready to throw out bad data.&lt;/li&gt;
&lt;li&gt;Continuous improvement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Downsides&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It can take away from other responsibilities and be used as an excuse for not fulfilling other duties.&lt;/li&gt;
&lt;li&gt;Hard to enact, especially at larger organizations.&lt;/li&gt;
&lt;li&gt;Requires the correct tools for everyone with a data first responsibility, for example enrichment, data verification and cleanup.&lt;/li&gt;
&lt;li&gt;Takes time to show effectiveness.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Dedicated role
&lt;/h3&gt;

&lt;p&gt;By having a team or individual dedicated to keeping the data clean, it then means the responsibility falls on them to check, clean and verify data across an organization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upsides&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easier to manage data when there's an assigned responsibility.&lt;/li&gt;
&lt;li&gt;Likely an expert in the field of data, which means they or the team become the source of truth across the organization.&lt;/li&gt;
&lt;li&gt;Easier to make serious improvements to both the quality and quantity of an organization's data with a dedicated role or team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Downsides&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expensive to do, and their ROI isn't directly distinguishable, as other departments will pick up the benefit.&lt;/li&gt;
&lt;li&gt;Everybody else stops owning it. The moment one person is accountable for data quality, it's nobody else's problem, which is the opposite of what the first option is trying to build.&lt;/li&gt;
&lt;li&gt;It becomes a queue. One person can't keep up with every team at once, so the work gets prioritized and some of it never gets done.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Technology and AI
&lt;/h3&gt;

&lt;p&gt;There are plenty of tools out there, AI ones included, that can help keep your data clean and verified within your CRM and other systems. They don't replace the first two options though. Whether it's the whole business or one person doing the cleaning, they still need something to do the work with. The main types are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verification.&lt;/strong&gt; Checking that an address, a phone number or a company still exists before anybody acts on the row.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deduplication and merging.&lt;/strong&gt; Finding the same person or company written two or three ways, and deciding which one to keep.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standardization.&lt;/strong&gt; Making one field say the same thing in every row, so that reports group the way you expect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enrichment.&lt;/strong&gt; Buying in what you never had in the first place, usually priced per record.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring.&lt;/strong&gt; Watching for bad data as it arrives, rather than finding it a quarter later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Upsides&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eases the pressure of responsibility.&lt;/li&gt;
&lt;li&gt;Able to process high levels of data and connect different sources together.&lt;/li&gt;
&lt;li&gt;Speed. It's much quicker to have technology and AI processing data than a human.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Downsides&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expensive to run and operate at scale.&lt;/li&gt;
&lt;li&gt;AI can manipulate data and invent data, so it still needs close supervision.&lt;/li&gt;
&lt;li&gt;Set-up time can take a while, and so can getting the business used to it.&lt;/li&gt;
&lt;li&gt;Requires maintenance, which means a person or a team to adjust it for any new conditions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By doing any one of these three, you are making sure your data is being cleaned, and you can trust what you are working with, to some extent. By implementing all three, you have an ecosystem which means your data is constantly being prioritized.&lt;/p&gt;

&lt;h2&gt;
  
  
  One-off cleanup
&lt;/h2&gt;

&lt;p&gt;Some organizations don't make cleaning an ongoing priority, or they do it in conjunction with the three above. What this involves is, say every quarter, doing a cleanup across their organization whether it be in sales lists, marketing lists or HR records. This then becomes the responsibility of each department to make sure their data is fully accurate and in check. The reason this can work is because it acts almost like an end of financial year for each team and department to get their data sorted.&lt;/p&gt;

&lt;p&gt;Another example of a one-off cleanup is during a CRM migration, or any system migration. This is usually smaller scale, and it's the one time nobody argues about whether the cleaning is worth doing. &lt;a href="https://operelio.com/blog/hidden-gap-migrating-crm-data" rel="noopener noreferrer"&gt;The hidden gap in migrating your CRM data&lt;/a&gt; covers what gets missed even then.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upsides&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Much more cost effective as each department has ownership over their own data.&lt;/li&gt;
&lt;li&gt;A step towards setting the culture, without committing to it.&lt;/li&gt;
&lt;li&gt;Easier to see gaps during the cleanup per department.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Downsides&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data goes out of date quickly, and waiting too long between one-off cleanups can mean there's a period where the data is not optimal. You do a cleanup every quarter and by month three, the data is already diminishing or diminished.&lt;/li&gt;
&lt;li&gt;The tools to clean data and verify it are still required in some capacity, which has a cost and a training angle that comes with it.&lt;/li&gt;
&lt;li&gt;When cleaning isn't directly tied to employees' targets, it can mean a rushed job is done on any cleanup. For example, a salesperson who has targets to hit would rather be selling than cleaning data, even if it meant they would be working with better data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cleaning what is already in the CRM
&lt;/h2&gt;

&lt;p&gt;A CRM is built to work on one record at a time. That's fine day to day, but it's slow when you need to fix thousands of rows at once, which is why cleanup inside a CRM either never happens or gets handed to an outside firm as a fixed price project.&lt;/p&gt;

&lt;p&gt;That's the part we built &lt;a href="https://operelio.com" rel="noopener noreferrer"&gt;Operelio&lt;/a&gt; for. You export what's in the CRM, find the duplicates across the whole file, check every email address and standardize the fields you report on in one pass, then push it back over the originals, matched on email so existing records are updated rather than duplicated. What it can't do is merge or delete the duplicates already sitting inside your CRM, because a push updates a record and can't collapse two into one. That part stays an in-CRM job. &lt;a href="https://operelio.com/how-to/crm-data-cleanup" rel="noopener noreferrer"&gt;How to clean up your CRM data&lt;/a&gt; walks through the round trip end to end.&lt;/p&gt;

&lt;p&gt;A tool doesn't decide who owns the job though. It makes the job smaller, but somebody still has to do it.&lt;/p&gt;

&lt;p&gt;So overall, whether you do an ongoing cleanup or a one-off policy or both, it is good practice to clean your data and put the steps in place to be able to achieve that clean data title.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://operelio.com/blog/what-cleaning-data-means" rel="noopener noreferrer"&gt;Operelio blog&lt;/a&gt;. Who owns data cleaning where you work, and does it actually get done?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>crm</category>
      <category>productivity</category>
      <category>management</category>
    </item>
    <item>
      <title>Building your own CRM is the easy part</title>
      <dc:creator>Daniel Pank</dc:creator>
      <pubDate>Thu, 24 Sep 2026 12:09:33 +0000</pubDate>
      <link>https://dev.to/operelio/building-your-own-crm-is-the-easy-part-5bb</link>
      <guid>https://dev.to/operelio/building-your-own-crm-is-the-easy-part-5bb</guid>
      <description>&lt;p&gt;Since the boom of AI there has been a drastic rise in companies building their own CRMs. We are going to explore the reason for it, and look back at what caused it.&lt;/p&gt;

&lt;p&gt;There is a number behind this, although it is not about CRMs specifically. McKinsey's 2026 State of AI survey asked 1,719 people across 97 countries, and 32% said their organization had decided against buying at least one piece of software because they had built it themselves with AI coding tools instead. That share was highest in technology and healthcare. McKinsey does not break the answers down by type of software, so nobody can tell you how many of those were CRMs. What it does tell you is that a third of organizations have already made that call about something.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one I built during Covid
&lt;/h2&gt;

&lt;p&gt;For some context, back during Covid, I was working at an outsourced marketing and sales agency in an operations role. We didn't have a centralised CRM and most of the time any work was being done on spreadsheets, or we were using a client's CRM. I decided to create a centralised CRM and started looking at providers. HubSpot, Salesforce and Pipedrive were all evaluated and I came to the same conclusion every time: while HubSpot and Pipedrive had free plans, the scale the CRM would operate at meant implementing one would cost the business thousands per month, and none were very customizable for different client use cases and different types of data. In the end, I decided we would build our own.&lt;/p&gt;

&lt;p&gt;At the time, unless you were a developer or could pay a developer to build the CRM, it wasn't a viable solution to build it from scratch. What I decided to do was use a workforce management platform with lots of customizability and turn it into a CRM which could be customized based on the different clients and was going to be easy to navigate for the sales reps.&lt;/p&gt;

&lt;p&gt;It worked once built out but needed tweaking constantly, and because I had built it, I was the only one who knew how to customize it and get it working when things weren't right. This meant all data imports had to flow through me. I did eventually end up training another person how to customize it and import, however that was years later.&lt;/p&gt;

&lt;p&gt;The point is, would I have been better off accepting the higher cost for the well-known providers and trying to make it work? Margin says no. The effort that went into building your own CRM says yes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it is happening now
&lt;/h2&gt;

&lt;p&gt;So why is the craze now building your own CRM if it's not worth the effort? Well, the simple answer is, it's a lot less effort now to build your own CRM with AI help.&lt;/p&gt;

&lt;p&gt;Companies have always had different use cases for their CRM, whether it's tracking deals, inbound and outbound data for reps, or client management. Take HubSpot for example: their feature list is so huge that it covers almost every scope a business could require from a CRM. The caveat is that it comes at a cost, with constant bolt-ons for different features.&lt;/p&gt;

&lt;p&gt;Six years ago I had two separate objections to the big providers: too expensive, and not shaped like us. Today a small team can build the shape it wants without a developer on staff. So it's now a cost problem, not a customizability problem, because that one has been removed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually costs
&lt;/h2&gt;

&lt;p&gt;When we look at the cost side, it's clear the big providers have ramped up their prices, and Salesforce's price history is the best documented. It did not raise list prices at all for seven years. That freeze ended in August 2023 with an average rise of 9% across Sales Cloud, Service Cloud, Marketing Cloud, Industries and Tableau, which Salesforce justified by pointing at 22 releases, thousands of features and billions of dollars of research and development, including what it called recent generative AI innovations. A second followed on 1 August 2025, averaging 6%, that time only on Enterprise and Unlimited editions. Two increases in three years, after seven with none.&lt;/p&gt;

&lt;p&gt;August 2023 was within months of generative AI arriving, and Salesforce used that same technology as part of its reason for the rise.&lt;/p&gt;

&lt;p&gt;The reason they can keep doing it is that the big providers know that once you are in their ecosystem, it's harder to get out of than in, so they can hold you to ransom unless you want to do a costly migration to a new platform. &lt;a href="https://operelio.com/blog/risks-of-migrating-your-crm" rel="noopener noreferrer"&gt;Risks of migrating your CRM&lt;/a&gt; is what that bill looks like when somebody finally pays it.&lt;/p&gt;

&lt;p&gt;Businesses no longer have to be held to ransom as they can build their own CRM from scratch and make it suit their needs perfectly, the exact same concept I had when building out the workforce management system into a CRM. So it's not a new concept, it's just that the moat and the willingness to change providers have been lowered drastically.&lt;/p&gt;

&lt;p&gt;When you compare the cost of running your own CRM against one from a big provider, the sum people reach for is licence fees against build hours. That sum is wrong, because the build hours stop and the job does not. A provider's cost is a subscription: it recurs, it rises, and it arrives as an invoice somebody has to approve. A CRM you build costs you the build once, and then costs you a person for as long as you run it.&lt;/p&gt;

&lt;p&gt;A CRM needs the same four things however you got it. Your data and the way you work are yours in both cases. Under that sit the software itself, keeping it online, and being able to show a regulator what it does with personal data. Buying is a decision about who carries those three.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0cd6dnjstzv8hc0bpvbz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0cd6dnjstzv8hc0bpvbz.png" alt="Buying a CRM vs building one: the same four layers either way, but when you build, the application, uptime and compliance are yours to carry" width="799" height="516"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Same four layers either way. What changes is who answers for the bottom three, and whether that arrives as an invoice or as a person.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The provider's bill is visible, and somebody argues about it every year. The bill for the CRM you built is invisible, and nobody argues about it at all.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What the numbers say
&lt;/h2&gt;

&lt;p&gt;So, if anyone can build their own CRM, why aren't the big providers panicking?&lt;/p&gt;

&lt;p&gt;The market has spent 2026 changing its mind about exactly that, in both directions. Salesforce's share price fell about 30% over the first four months of the year, on the fear that AI would undermine software sold by the seat. It then rose 22.6% in a single day in late August when Agentforce numbers and raised guidance landed, and even after that it is still down for the year. HubSpot beat its own second-quarter figures on both earnings and revenue in August, and its shares fell 21% in after-hours trading anyway. Whatever you think a share price is telling you here, it was telling you something else a few months earlier.&lt;/p&gt;

&lt;p&gt;The customer numbers point the other way, though not cleanly. HubSpot reported 306,446 customers at the end of June 2026, up 14% on the year, with revenue up 20%. The reason the shares fell anyway is in the detail: net new customers came in at 7,000 against the company's own target of 9,000 to 10,000, and management flagged longer sales cycles and more cautious buyers for the rest of the year. So more companies are signing up than ever, and fewer are signing up than the company expected. Both are true, and the second one is what the market traded on.&lt;/p&gt;

&lt;p&gt;The reason goes back to my original argument: it's the effort required to maintain your own CRM, not build it. Building your own CRM works fine, the same as it did for me. However it's the hidden cost of having to maintain it, being the only one who knows how it works, and almost becoming the CRM manager as a full-time job. Unless you plan to stay at the company for 10 years, or you own the company, there's a risk attached to it. The person or team who built it are the only ones who know how it works and how to change it safely.&lt;/p&gt;

&lt;p&gt;AI has made building it easier, but it hasn't made it any easier to be the one person who knows how it all works. It won't sit in a compliance review for you, keep it online at 2am, or take the call from an angry client.&lt;/p&gt;

&lt;p&gt;In a small company the risk is small, and it makes it worth it rather than paying huge amounts to the big providers. For medium-sized and large enterprise companies, the risk isn't always worth it. Having a reputable provider as a failsafe means outages in service, employees leaving and data compliance all fall on the provider, and companies are willing to pay for the privilege of not having to deal with it. It's much easier to explain to a client that you didn't get back to them because Salesforce was down, than to say your own in-house CRM messed up. There's a trust factor the big providers instil which isn't easy to remove or replicate.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what is the right choice?
&lt;/h2&gt;

&lt;p&gt;Well, it depends on your use case and the size of your business, and your budget. My belief is that if you're a startup or small company of less than 25 to 40 employees, then yes, it makes absolute sense to build your own CRM, build it out to suit what you need and scale it as you scale.&lt;/p&gt;

&lt;p&gt;Just don't build it in isolation. Build it with others, train as you go, have failsafes so the reliance is not on one person, and accept that the drop in spend on a CRM provider means more time and effort allocated to your own CRM.&lt;/p&gt;

&lt;p&gt;If you are a mid-sized or larger business, unless there's a specific need or it's an obscene cost per year to use the big providers, building your own sounds exciting and looks like it will save the business money long term, but the problems will start stacking up. You will have to worry about maintenance, compliance and failsafes, and what happens if the team or the individual who built it resigns in the morning. CRMs for larger businesses are the lifeblood they run on, and it takes a very driven management team to enact that level of change across an organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting data into one you built
&lt;/h2&gt;

&lt;p&gt;Build your own CRM and you take on a job nobody plans for: getting data into it. There is no native importer, no validation anybody else wrote, and no template for your record shape, because your record shape did not exist until you invented it. A big provider's importer rejects a malformed row and tells you why. Yours does whatever you told it to do, because you wrote that part as well.&lt;/p&gt;

&lt;p&gt;This is actually why I built &lt;a href="https://operelio.com" rel="noopener noreferrer"&gt;Operelio&lt;/a&gt;. You set up a custom template with your own field names and required fields, every row gets checked against it, and the &lt;a href="https://operelio.com/developers" rel="noopener noreferrer"&gt;API&lt;/a&gt; runs the cleanup on a schedule, so every import isn't going through one person like it did for me. &lt;a href="https://operelio.com/developers/connect-operelio-to-a-custom-crm" rel="noopener noreferrer"&gt;How to connect Operelio to a custom CRM&lt;/a&gt; walks through it end to end.&lt;/p&gt;

&lt;p&gt;Ultimately, the fact there is now less of a moat to having a CRM in the first place can only be a good thing. It means businesses now have the option of choice, and not just between which provider to go with. Will it mean the big providers start lowering their prices to reflect the reduction in the moat? Probably not. What it will lead towards is better service and more options from the big providers, hence the examples of HubSpot acquiring companies into its ecosystem to evolve their product line and capabilities. It bought Frame AI for conversation intelligence in January 2025 and folded it into Breeze, then XFunnel that October, which watches how a brand shows up in answers from ChatGPT, Claude and Perplexity.&lt;/p&gt;

&lt;p&gt;The best part of it all is now the argument is not which provider do I go with, it's do I go with a provider or do we build our own.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://operelio.com/blog/building-your-own-crm" rel="noopener noreferrer"&gt;Operelio blog&lt;/a&gt;. Have you built your own CRM, or talked your team out of it? I'd like to hear how it went.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>crm</category>
      <category>ai</category>
      <category>startup</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
