Skip to content
August 2026 · updated 2026-08-25

What Is a CRM, Actually? Priced by What It Costs to Leave

A CRM is the system of record, which means the only number that decides the purchase is what it costs to get your data back out. Ten vendors, ten published API ceilings, and one 500,000-record export that takes 83 minutes on one of them and 12.5 days on another.

Here's the trap. A CRM is the system of record: the one database everything else in your stack writes into, and the only one whose contents still have to be true after you cancel the tool that produced them. Which means the question that decides the purchase is not which one has the best pipeline view. It is what each one costs to leave.

You will not feel that for about three years.

You import 4,000 contacts, you like the interface, the bill is $20 a seat. Then the record count is 500,000, eleven tools are writing into it, four custom objects hold things the vendor's data model never had a place for, and the renewal quote arrives assuming you already know all of that. You are being charged for the cost of the alternative, and the vendor has a much better estimate of that number than you do.

The mechanism is that a system of record accretes shape. Every custom field, every automation, every integration that maps its objects onto yours is a small weld. Individually none is expensive. Together they are why the CRM category churns less than anything else in a sales stack. Think of it as the foundations rather than the furniture: you can replace every other tool in the building over a weekend, and moving the foundations means moving the building.

This page does not sell, resell or broker any CRM. Every price is attributed to the vendor's own page with the date it was read, and every rate limit to the vendor's own developer documentation. Nothing here is a measurement. The export arithmetic is computed from published ceilings, not timed against a live account. Where a question can only be answered by running the export, this page says so and tells you what to measure.

So: what a CRM is and what it is not, the four objects inside every one of them, what ten vendors publish about getting your data back, how long a 500,000-record export actually takes at each one's documented ceiling, the ones that publish no ceiling at all, an audit you can run on your own account this afternoon, what breaks in month three, and whether you need one yet at all.

What is a CRM, in one sentence?

It is the place your company keeps what happened. Customer Relationship Management describes the marketing rather than the machine. The machine is a relational database with four tables, a permission model, an audit trail and an API, sold per seat. Everything demonstrated on top of that is a report or a workflow, and both are cheap to rebuild.

The definition that earns its place is the one that changes what you do: a system of record is any store whose contents must survive the cancellation of every tool that wrote into it.

A system of action is anything whose value ends the day you stop paying. Your sequencer is a system of action. Your dialer is a system of action. Your notetaker is a system of action doing a convincing impression of a system of record, which is why teams keep discovering their call history was a rental.

This directory tracks 264 tools across sixteen categories. Ten are CRMs.

The other 254 find contacts, send messages, place calls, transcribe them and book the meetings, and every one produces a fact that has to land somewhere durable. That is the argument in one line: 254 tools that do things, ten that remember them.

The cancellation test, and what it catches

Ask one question of every tool you pay for: if the invoice stopped today, what disappears?

Cancel the sequencer and you lose the ability to send campaigns. Who is on step three, who bounced, which variant won: all operational, all expiring. The record of who you contacted and what they said back should still exist somewhere else. If it does not, the sequencer has quietly become your system of record and you will find that out during a renewal negotiation rather than before one.

Cancel the CRM and you lose the history itself.

That asymmetry is the whole category, and it is why the switching cost here is measured in memory rather than money.

Four things a CRM is not

  • Not a contact database. The 24 data tools in this directory sell you people you have never spoken to, at a verified cost of 15c to 83c each at the same tier. A CRM records people you have spoken to. The expensive mistake is a CRM full of purchased strangers with no conversation attached, and we priced it in what one contact actually costs.
  • Not a sequencer. Campaign state is operational and expires on schedule. Relationship history does not expire at all.
  • Not a notetaker. A transcript is evidence. A CRM entry is the summary that survives the transcript being deleted, which our audit of sixteen notetakers found is live rather than hypothetical: several make team recordings unreachable after cancellation until the account is reactivated, and only two of the sixteen state the auto-join setting a new account ships on.
  • Not a reporting tool, although it will be demonstrated to you as one. Reporting is a consequence of holding the record, not the reason to hold it.

The four objects inside every one of them

Almost every CRM is a variation on the same four tables. Vendors differentiate on how far you can bend them, not on whether they have them, which is why demos get easier to follow once you know the four. It also tells you which part of your data is the expensive part to move.

ObjectWhat it holdsWho writes to itExports cleanly?Why it matters on exit
CompaniesThe organisations you sell toEnrichment tools, forms, repsYes, one row per recordThe anchor. Everything else hangs off its ID, and IDs do not survive a migration
PeopleHumans at those companiesData vendors, forms, email syncYes, one row per recordDuplicates multiply on import because the matching key changes
DealsA possible purchase, with stage and valueReps, and almost nothing elseYes, but stage history often does notYour forecast is built on stage transitions, and stage transitions live in an audit log
ActivitiesCalls, emails, meetings, notes, filesEvery other tool you ownRarely, and this is the problemThe largest object by row count and the one with per-record API costs

Where products genuinely differ is rigidity. Attio lets you reshape the objects like a database, and caps the entry tier at five of them, which binds on exactly the buyer the product suits. Most others hand you the four above and expect you to fit. Salesforce lets you build hundreds, which is where the interesting failure mode lives.

On a 2019 Hacker News thread asking, flatly, "What's Salesforce?" (item?id=20277115, 619 points, 232 comments), a commenter with six years on the platform described the object cap as a licensing trap: "there's nothing stopping you from making 100 custom object available to Customer Community licensed users. However, with the license you get 10 and when they randomly audit your instance find you at +90 the bill will be shocking to say the least. Pay up or get your instance turned off and lose everything."

That is one person's characterisation from 2019, not a finding of fact, and a second commenter in the same thread put enterprise licences at 200 custom objects rather than ten. [thread] The point underneath it holds and it is the point of this page: the schema you build is licensed, not owned. Your data model is a line item on somebody's renewal.

Why the schema is the thing you cannot swap

A CRM's schema is the list of objects and fields your company has decided are real. It starts as the vendor's four tables. Within a year it holds your renewal-date field, your two-stage qualification split, your product-line picklist and the custom object your ops person built for trial accounts. None of that exists anywhere else, and all of it is load-bearing for a report somebody shows a board.

The cost of leaving is not the cost of moving rows. Rows move.

The cost is the cost of re-deciding, in a new vendor's vocabulary, what every one of those fields meant, and then re-pointing every integration that was writing into them.

A commenter on the 2025 thread "SaaS is just vendor lock-in with better branding" (item?id=44203494, 222 points, 135 comments) drew the line precisely: "Locked-in means that switching it out for something else is either A) impossible, or B) would require an investment greater than just sticking with the existing thing." One commenter's definition on a public thread, not a technical standard, but it is the correct framing for a renewal, and it is the arithmetic your account executive has already done. [thread]

There is a specific version of B that only applies to systems of record. Every other tool in your stack has one integration, to the CRM. The CRM has N.

Swapping tool number seven breaks one connection. Swapping the CRM breaks all of them at once, and each of those vendors has its own field mapping, its own sync direction, and its own opinion about what a company record is.

A commenter on the Openkoda thread of 28 May 2024 (item?id=40502956, 318 points, 111 comments) put the same asymmetry from the challenger's side: "If you look at 1000 data integration or marketing automation tools on the market, 1000 of them will have OOTB integration with Salesforce as a selling feature. Just to be realistic, building a better CRM won't be enough to replace Salesforce." That is one person's assessment of a market, not a count anyone verified. [thread] It is also the reason your shortlist is shorter than you think: the switching cost is paid to your other eleven vendors, not to the CRM.

Salesforce told its investors what it will not tell you

Salesforce is public, so once a year its lawyers have to write down what actually protects the business. In the 10-K for the fiscal year ended 31 January 2026, filed 2 March 2026 (CIK 0001108524, accession 0001108524-26-000060), the competition risk factor reads: "Many prospective customers have invested substantial personnel and financial resources to implement and integrate their current enterprise software into their businesses and therefore may be reluctant or unwilling to migrate away from their current solution to a different enterprise software service." [filing]

Read it in the direction it was written.

Salesforce is telling investors that incumbency is the barrier, in the section where it has a legal obligation to be accurate. The same sentence describes your position from the other side of the renewal table.

The same filing discloses that subscription contracts run "typically 12 to 36 months," that subscription and support was about 95 percent of revenue in fiscal 2026, and that total remaining performance obligation as of 31 January 2026 was approximately $72.4 billion, of which $35.1 billion is current. [filing] Seventy-two billion dollars of contracted future revenue is what reluctance to migrate is worth as a number.

HubSpot's 10-K for the year ended 31 December 2025, filed 11 February 2026 (CIK 0001404655, accession 0001193125-26-046646), gives the mid-market version. It reports 288,706 customers in more than 135 countries, average subscription revenue per customer of $11,414, total revenue of $3.1 billion, and net revenue retention of 103.5 percent for 2025 against 101.8 percent in 2024 and 103.0 percent in 2023. [filing]

Net revenue retention above 100 percent means the installed base spends more each year without a single new logo. The filing says how: "Our scalable pricing model allows us to capture more spend as our customers grow, increase the number of their customers and prospects managed on our customer platform." [filing] The meter that expands is the number of records you store, which is the same thing as the size of your system of record. You are billed for remembering more.

That is not a criticism of either company and neither filing is hiding anything. It is the point: the economics of a system of record are disclosed in the filings and absent from the pricing pages, and a buyer who reads only one of the two is negotiating against someone who has read both.

What does leaving actually cost? The exit table

Five questions decide it, all answerable from published documentation before you sign. Can you get custom objects out, or only the vendor's four tables? Do attachments come with the rows? What API ceiling governs a bulk read? How long does the data stay reachable after you cancel? Does anybody charge for the export?

The cells below were read from each vendor's own developer documentation on 25 August 2026. Where a vendor does not publish an answer, the cell says so, and those cells are the most useful ones here. A vendor that publishes its rate ceiling has told you what leaving costs. A vendor that does not has told you something else.

CRMDocumented API ceiling that governs a bulk exportBurst limitCustom objects addressable via APIRetention after cancellationCharge to export
Salesforce100,000 calls per 24h plus 1,000 per Salesforce licence (Enterprise, Professional with API access); 5,000 per licence on Unlimited and Performance [vendor]Not published as a per-second figureYes, subject to the per-edition object capNot stated on the limits documentation; Bulk API 2.0 job results are "accessible within 7 days of job completion" [vendor]No published export fee; API access is an add-on on Professional [vendor]
HubSpot250,000 calls/day Free and Starter, 625,000 Professional, 1,000,000 Enterprise [vendor]100 per 10 seconds Free/Starter, 190 per 10 seconds Pro and Enterprise [vendor]Yes, custom objects on EnterpriseGeneral Terms 5.7 defers to the DPA and Product Specific Terms; no window in the main agreement [vendor]No export fee. API limit increase add-on adds 1,000,000/day, maximum two [vendor]
Pipedrive30,000 base tokens x plan multiplier x seats per day. Lite 1x, Growth 2x, Premium 5x, Ultimate 7x [vendor]20 requests per 2s Lite, 40 Growth, 100 Premium, 120 Ultimate; search 10 per 2s on all plans [vendor]Custom fields yes; custom objects are not a Pipedrive conceptNot stated publiclyNo published export fee
AttioNo daily cap published. 100 read requests per second, 25 write requests per second [vendor]Score-based complexity limit on list endpoints over a 10-second sliding window [vendor]Yes, objects are user-definable; five objects on the Plus tierNot stated publiclyNo published export fee
CloseNot published. The docs state only that "the per Organization limit is currently 3 times higher than individual API key rate limits" and that limits "are high enough that typical API workflows aren't affected" [vendor]Not published; returned in a RateLimit response header only [vendor]Custom fields yes; custom objects not offeredNot stated publiclyNo published export fee
Zoho CRM5,000 credits/day Free; 50,000 + 250 per user (max 100,000) Standard; 50,000 + 500 per user (max 3,000,000) Professional; 50,000 + 1,000 per user (max 5,000,000) Enterprise [vendor]Concurrency 5 Free, 10 Standard, 15 Professional, 20 Enterprise, 25 Ultimate; sub-concurrency 10 on all editions [vendor]Yes, custom modulesNot stated on the API limits documentationNo export fee published. Bulk Read Initialize costs 50 credits, Bulk Write Initialize 500 [vendor]
Microsoft Dynamics 36540,000 requests per licensed user per 24h (Sales Enterprise, Sales Professional). Application and non-interactive users draw a separate tenant pool: 500,000 base plus 5,000 per licence, capped at 10,000,000 [vendor]Service protection limits documented separately from the daily allocation [vendor]Yes, Dataverse tablesNot stated on the request limits documentationNo export fee published. Power Platform request capacity add-on adds 50,000 per 24h [vendor]
CopperNot read. developer.copper.com returned no rate-limit section to us on 25 August 2026 [not tested]Not readCustom fields yesNot stated publiclyNot stated publicly
folkNot stated publicly. folk publishes four consumption meters (enrichments, messages, account sync, AI fields) and a number against none of them [vendor]Not stated publiclyCustom fields yesNot stated publiclyNot stated publicly
FreshsalesNot read. The Freshworks CRM API reference did not render a rate-limit table to us on 25 August 2026 [not tested]Not readCustom modules yesNot stated publiclyNot stated publicly

Four of the ten do not publish the number that governs how fast you can leave.

HubSpot, Attio, Zoho and Salesforce print a ceiling you can divide by. Copper, folk, Freshsales and Close do not.

Close is the interesting one.

It does not merely omit the figure. It explains that the figure exists, declines to print it, and adds the reassurance that the limits "are high enough that typical API workflows aren't affected." That is the vendor's own characterisation of its own ceiling, and a migration is by definition not a typical workflow. You find out your export rate by starting the export.

How long does a 500,000-record export actually take?

Take a mid-sized org: 120,000 contacts, 30,000 companies, 20,000 deals, 330,000 activities. Half a million rows, which is a forty-person sales team after four years and small enough that nobody thinks of it as a data problem.

Everything below is computed from the published ceilings in the table above, not measured against a live account. Two cases per vendor, because the spread between them is the finding. Best case is a list or bulk endpoint returning many records per call. Worst case is one HTTP request per record, which is what you get for files, notes and anything the vendor never built a batch reader for, and what most off-the-shelf migration scripts do to everything.

Stated assumption, so you can check our working. The best-case column assumes a page size of 2,000 records for a Salesforce SOQL query, 100 for a HubSpot CRM list endpoint and 500 for a Pipedrive list call. Those are the conventional maxima for each API and they were not re-read on the vendor's page for this table, so treat the best-case column as an order of magnitude and the worst-case column, which needs no page-size assumption at all, as the number to plan against. [computed]
CRM and plan assumedDaily ceilingSustained rate ceilingWorst case: 500,000 single-record readsBest case: batched readsWhat binds first
Salesforce Enterprise, 25 Salesforce licences125,000 callsNot published4.0 days250 calls at a 2,000-record query batch. MinutesThe daily cap, and it is org-wide
Salesforce Unlimited, 25 licences225,000 callsNot published2.2 days250 calls. MinutesThe daily cap
HubSpot Professional625,000 calls19 requests/sec7 hours 19 minutes5,000 calls at 100 records per page. 4.4 minutesThe burst limit, not the daily cap
HubSpot Free or Starter250,000 calls10 requests/sec2.0 days5,000 calls. 8.3 minutesThe daily cap
Pipedrive Lite, 3 seats90,000 tokens10 requests/sec11.1 days (2 tokens per single read)1,000 list calls at 20 tokens each. Under an hourThe token budget
Pipedrive Ultimate, 10 seats2,100,000 tokens60 requests/sec2 hours 19 minutesUnder 10 minutesThe burst limit
Attio, any published planNone published100 reads/sec1 hour 23 minutesBounded by the same per-second ceilingThe read rate. The 25 writes/sec ceiling is what binds the import at the other end: 5 hours 33 minutes
Zoho CRM Enterprise, 20 users70,000 credits20 concurrent calls7.1 days if a record read costs one credit, which the limits page does not state3 bulk read jobs at 50 credits eachThe credit budget, and you cannot compute it because the unit price is unpublished
Zoho CRM Free5,000 credits5 concurrent calls100 days on the same assumption3 bulk read jobs. Under a dayThe credit budget
Dynamics 365 Sales Enterprise, licensed user40,000 requestsService protection limits, published separately12.5 daysDepends on the Dataverse query batch sizeThe per-user daily allocation
Dynamics 365 Sales Enterprise, application user, 25 licences625,000 requestsAs above19 hours 12 minutesUnder an hourThe tenant pool
Close, any planNot publishedNot publishedNot computableNot computableUnknown until the first 429

Three things fall out of that table and none of them is on a pricing page.

The spread inside one vendor is larger than the spread between vendors

Salesforce moves the same half-million rows in 250 API calls or 500,000, out of the same 125,000-a-day budget, depending entirely on whether whoever writes the export knows the query batch size. That is an afternoon against four days, invisible until somebody runs it. Dynamics is worse: 12.5 days on a licensed user account against 19 hours on an application user, identical work, because Microsoft documents two separate request pools and the obvious account is the wrong one. [computed]

The daily cap is org-wide, so every tool you own is spending it

This is the sentence that matters most here.

Salesforce's allocation of 100,000 calls plus 1,000 per licence is not per integration. It is per org, shared by every tool you have ever connected, and it scales with your licence count rather than your vendor count. A 25-seat org divides 125,000 calls a day between its enrichment tool, sequencer, conversation intelligence, billing sync and its own export. If the first four take 80 percent, the four-day export becomes twenty days. [vendor] [computed] Nobody sells you the eleventh integration by mentioning that.

Attachments have no batch endpoint anywhere

Rows batch. Files do not.

Every CRM in this table serves a file one HTTP request at a time, which is why the worst-case column is not a straw man: it is exactly what happens to the attachments, and attachments are where the signed contract lives. 40,000 attached files at Pipedrive Lite's 2 tokens each is 80,000 tokens against a 90,000-token daily budget. That is one day of your export for the files alone, before a single contact has moved. [computed]

The rate limit a practitioner hit before the docs admitted it

Published ceilings are the ones the vendor is willing to print. The binding ones sometimes show up somewhere else first. On an Ask HN thread from 2 April 2024 (item?id=39908514, 51 points, 26 comments), an engineer building HubSpot integrations and comparing them to Outreach, Salesloft, Apollo and Salesforce listed the complaints in order, and the third one is a number: "It's 2024 and somehow none of their APIs support sorting, ordering or filtering and to do so you need to use their /search endpoint. The problem is there's a 4 requests per second rate limit on the endpoint." [thread]

That is one person's account from 2024 and not current documentation. What makes it worth quoting is what HubSpot's own current usage page says next to it: certain APIs including the CRM Search API have "limits that are unique from or stricter than the general limits," and the page we read on 25 August 2026 does not print the search figure. [vendor]

So the vendor confirms a stricter limit exists, declines to state it, and a practitioner supplies a number from two years earlier. Take the structure of the finding rather than the digit: if the only way to filter is an endpoint with its own undisclosed ceiling, a selective export is governed by a number you cannot look up.

At 4 requests per second, a filtered read of 500,000 records at 100 per page is 5,000 calls and 21 minutes, which is fine. The same rate against 500,000 individual lookups is 34 hours, which is not. [computed] A HubSpot product manager replied in that thread under their own name offering to take the feedback, which is more accountability than most vendors here offer and does not change the ceiling.

What does the entry price have to do with any of this?

Less than you would think, which is the second reason this category is mispriced by buyers.

The entry prices are close together and mostly irrelevant. The tier you actually need is set by whether the API you would leave with is in it, which is a question Salesforce and Pipedrive answer very differently from HubSpot.

CRMEntry price read on the vendor's pageBasisRead onThe catch that arrives later
HubSpot$0 free tier; $20 per seat listMonthly billing, USD2026-08-12A promotion of $10 monthly or $7 annual is badged new customers only. Contact tiers escalate on records stored, not on records marketed to
Salesforce$25 per seatMonthly billing, USD2026-08-12The API allocation table names Enterprise, Unlimited, Performance and Developer editions, and Professional only "with API access" as a purchase
Attio$0 free up to 3 users; $44 per seatMonthly billing, USD2026-08-11Plus stops at ten users and five objects. The eleventh hire moves everyone to $99 and takes a $440 bill to $1,089
Close$19 per seat Solo; $49 Essentials, $109 Growth, $149 ScaleMonthly billing, USD2026-08-12Calling is metered separately on top, and no rate limit is published on any tier
folk$30 per seat Standard; $60 PremiumMonthly billing, USD2026-08-11Four consumption meters with no published allowance on any tier. Across the doubling from $30 to $60 the only published quantity that changes is custom domains, one to three
Copper$12 entry; $29 per seatMonthly billing, USD2026-08-12Tied to Google Workspace. On Microsoft the reason to own it disappears
PipedriveNot verified for this postn/an/aThe directory holds $14 entry and $24 per seat with no verification date, so this page does not know the current price. We do not publish a price we have not read
Zoho CRM, Freshsales, Dynamics 365Not read for this postn/an/aPresent here for their published API ceilings only. No price is quoted because none was read on the vendor's own page for this page

The Salesforce row is the one to sit with. Its API request limits page lists allocations for Developer, Enterprise, Professional "with API access," Unlimited and Performance editions. [vendor] The qualifier on Professional is the whole story: on at least one edition, the mechanism you would use to leave is a separate purchase. A comparison that stops at the seat rate has priced arriving and skipped the door.

Run this on your own CRM this afternoon

Forty minutes, no purchase, on the account you already have. One question: if we had to be off this by the end of the quarter, could we be?

  • 1. Count what you hold (5 minutes). Read the record count on each object: companies, people, deals, and separately activities. Then count files. The activity and file counts are the two people guess at, and they are the two that set the export time.
  • 2. Start a real export, not a sample (10 minutes). Use the vendor's own export, request every object including custom ones, and tick whatever box mentions attachments. Note the wall-clock start. Pass: it offers custom objects and files. Fail: it silently offers the standard four tables only, which means your custom objects need the API.
  • 3. Read the rate-limit headers (10 minutes). Create an API key, make one authenticated GET against any list endpoint, dump the response headers. Look for RateLimit, X-RateLimit-Remaining, X-HubSpot-RateLimit-Daily-Remaining or the vendor-prefixed equivalent. Pass: a number you can divide your record count by. Fail: no header, so the ceiling gets discovered by hitting it.
  • 4. Divide (2 minutes). Records divided by the daily remaining figure is your floor in days. Do it twice, once for the batch endpoint and once for one request per record. Treat the second as the real number, because attachments make it the real number.
  • 5. Find the retention clause (10 minutes). Search the terms for "retrieval", "retention" and "termination". Pass: a stated number of days in which you can still pull data after cancelling. Fail: the main agreement points at a second document that points at a third. HubSpot's General Terms 5.7, last modified 14 April 2026, defers retention and retrieval of Customer Data to the DPA and Product Specific Terms rather than stating a window. [vendor]
  • 6. Check the renewal window (3 minutes). HubSpot's General Terms 4.1 state a subscription renews for "the shorter of the same duration as your prior term or one year" and that "you may not cancel your subscription prior to the end of your Current Term." [vendor] Salesforce's 10-K puts typical subscription periods at 12 to 36 months. [filing] A 36-month term with a 90-day notice window leaves 275 days a year on which leaving is not an available action.

What this audit cannot detect

It cannot tell you the rate you will get under load. A header returning 124,000 remaining calls at 10am on a Tuesday says nothing about what happens when your export and your nightly enrichment sync collide at 2am, and vendors reserve the right to reduce limits during incidents. Attio's documentation says so explicitly. [vendor]

It also cannot tell you whether the export reproduces your relationships or only your rows. The object IDs that stitch a contact to a company do not survive the move, and rebuilding those associations is a second job nobody budgets for. And it cannot tell you what the export silently omits, because a file that dropped a field looks exactly like a file that did not. [not tested] The only way to know is to import it somewhere and count what arrived.

What breaks in month three

Nothing breaks in month one. Month one is the demo continuing.

Two failures arrive on schedule, and they are related: schema drift, and the integration that stops writing.

Schema drift

Every team adds fields. The ops person adds renewal_date, a rep adds Renewal Date, an integration creates renewal_date__c because it could not find the first one, and by month three three fields hold the same fact with three different values. The report a board sees reads one of them.

On the Twenty thread of 11 June 2024 (item?id=40648082, 378 points, 165 comments), a commenter building on the platform framed this as architecture rather than discipline: "Seems like a lot of the issues are understanding a good db schema. Screw that up and you are in all kinds of trouble." That is one practitioner's framing, not a finding of fact. [thread] The operational version is duller and worse: nobody ever deletes a field, because nobody can prove nothing reads it.

The integration that silently stopped writing

This one has a mechanism you can now name. A sync that polls consumes the org-wide daily allocation whether or not anything changed. Add the eleventh tool and one of the eleven starts taking 429s, and almost none of them raise that as an alert. The failure looks like a quiet gap in activity history, which is exactly the object you cannot reconstruct.

On the Bracket launch thread of 12 December 2023 (item?id=38615232, 92 points, 77 comments), a commenter posting as salesforcequit described abandoning exactly this build: "low-value tenants are on shared infrastructure where things like scheduled jobs can run instantly... or 10 minutes later, and Salesforce make no guarantees about when things will happen, making any attempt to use Salesforce as a source of truth unreliable." That is one person's characterisation from 2023, and Salesforce has shipped change-data-capture APIs since. [thread]

The founder replied that customers watchful of their REST API limits opt into streaming instead, and that the Bulk API gets used only for the initial seed. Those two comments are the operational reality of a system of record in miniature: the bulk read is a one-off, and everything after it is a rate-limit budget you manage forever. On the hotglue launch thread of 22 July 2021 (item?id=27918900, 144 points, 61 comments), the founder answered the custom-object question the same way: query the account for its available objects, then pick. [thread] Everyone enumerates the schema first.

Is the system of record actually up?

Worth asking of the thing you have decided is durable.

HubSpot publishes machine-readable incident history, so it can be counted rather than asserted. Its status API returned 50 incidents on 25 August 2026, spanning 2 October 2025 to 21 August 2026: a 324-day window. [vendor]

QuarterIncidents postedMetricValue
2025 Q410Median time to resolve46 minutes
2026 Q11590th percentile time to resolve18 hours 28 minutes
2026 Q217Longest single incident7 days 1 hour
2026 Q3 to 21 Aug8Incidents naming workflows or automation in 20266

This is not a comparison and cannot be turned into one. Each vendor defines an incident, decides what to post and marks its own homework, so a vendor with more posted incidents may simply be more honest. Salesforce's status page returns {"error":"Direct API access not allowed"} to a machine request, so the same series cannot be built for it, which is itself a difference in posture worth noticing. [vendor]

For a system of record the tail matters, not the median.

Forty-six minutes is nothing. Six incidents naming workflows or automation inside eight months is the shape of the problem, because a workflow that does not fire is not an outage you notice. It is a record that never got written.

Do you need a CRM yet? Four thresholds, not a team size

The trigger is not headcount, revenue or funding stage. It is the first time you cannot answer a question about a customer without asking a colleague. A spreadsheet is a genuine system of record and it fails in four specific ways.

  • Two people editing the same row. The earliest failure and the most under-rated, because it is silent. One edit wins, nothing warns you, and you find out weeks later when somebody calls a customer about a resolved problem. Threshold: the second person touching customer records, not the second employee.
  • One company, many people, many deals. A flat sheet holds one row per thing. Real B2B has a company with four contacts, two open opportunities and one closed last year. Represent that in rows and the company name is now spelled three ways. Threshold: the first account with more than two contacts in a live deal.
  • Nothing arrives on its own. Everything in a sheet is there because somebody typed it, so the record is as complete as your least diligent week. Threshold: the first hire who did not choose this job.
  • Memory stops covering the gap. Under roughly twenty concurrent open deals on a short cycle, a good salesperson simply remembers. Threshold: about twenty open deals, or any cycle running past a month.

The fear that keeps people on spreadsheets past the useful point is picking wrong, and it splits into two migrations that are nothing alike. Spreadsheet to CRM is a CSV import and an afternoon, built deliberately by every vendor because it is how they acquire customers. CRM to CRM is the exit table above. Moving too early costs almost nothing. Agonising over the choice while still on a spreadsheet is optimising the cheap decision.

Can a spreadsheet or an assistant be your CRM?

For one person, genuinely yes, and anyone who says otherwise sells CRMs. A Notion database plus Claude at $17 a month on annual billing, or $20 monthly, gives you conversational capture and review: describe the call, have it written down, then ask which deals have not moved in two weeks instead of building a filter. We run a full outbound motion this way in our $17 a month stack.

It fails at the same four thresholds and fails one of them harder. Capture friction drops. Volume gets easier, because the assistant does the remembering. Concurrency is worse. Two people driving one database through separate conversations cannot see each other's writes, and the assistant answers confidently from a state that changed thirty seconds ago. A shared spreadsheet at least shows you the conflict.

It is also the only setup on this page with an exit cost of zero, which is the honest argument for it. The database is a CSV and every CRM imports one. The condition is that the record lives in the database and not in a chat transcript, because a transcript is a system of action wearing the other one's clothes.

Is Outreach a CRM? No, and the cancellation test settles it

Outreach and Salesloft get listed alongside CRMs, hold contacts, track activity and cost enough to feel like a system of record.

Apply the test. Cancel one and you lose sequences, cadence logic, the dialer and the reporting built on them. Who your customers are and what was agreed should survive in the CRM. If it does not, the engagement platform has become your system of record and you have the exit problem twice.

What they add is governance: sequence approval, shared cadence libraries, activity capture reps cannot skip, territory and permission structure, and forecasting built from activity rather than optimism. Worth paying for at roughly twenty reps and up, when there is an org chart to govern.

Below it you pay an unpublished sum, on top of a CRM you still need, to replace a $47 sequencer that already sends the emails. Neither publishes a price, which puts them among the 114 of 264 tools here that will not quote you without a call. The same test disqualifies conversation intelligence, scheduling, enrichment, chat and every AI SDR on this site. All systems of action.

So which one, and what do you do this week?

  • One person selling, still on a spreadsheet: stay there. Move when the second person touches customer records, and move to a free tier. HubSpot and Attio both have genuine free plans, so the step costs an afternoon.
  • Under ten people, unusual sales motion: Attio, and read the five-object cap on Plus before you build the sixth. Its 100 reads per second is the most generous ceiling in the table by a wide margin, which makes it the cheapest to leave.
  • Growing through ten people: not Attio at Plus. The eleventh hire moves everyone to $99 and takes a $440 bill to $1,089, a 2.48x increase in one invoice on both billing bases.
  • An outbound team that lives on the phone: Close, eyes open about the unpublished rate limit. Calling is built in rather than integrated, which removes a tool instead of adding one.
  • Committing to Salesforce or Dynamics: get the API edition and the daily allocation in writing before signing, because on Professional the API is a separate purchase and on Dynamics the account type moves the export from 19 hours to 12.5 days.
  • Whatever you pick, this week: run steps 3, 4 and 5 of the audit above on your current system. Forty minutes, and you finish holding a number you can put in a renewal conversation.

What this page does not know

The measured export time. The missing measurement is wall-clock elapsed time for a complete export of a real production CRM, per vendor, including attachments and associations, run to the point where the same record count reads back out of a second system. The experiment is a paid seat on each of the ten, a seeded org of 500,000 records with realistic attachment density, and one export script per vendor with response headers logged.

No vendor publishes that number, because no vendor benefits from publishing it. No independent party we could find has run it. This page has not run it either, and every duration here is arithmetic over a published ceiling rather than a stopwatch. Run steps 3 and 4 of the audit on your own account and trust that result over anything on this page.

What the export omits. Nobody publishes a field list of what their export leaves behind. Establishing it needs a round trip: export, import into a second system, diff the field inventory on both sides. Our reading of the documentation suggests the losses cluster in stage history, audit trails and the association graph rather than in the rows, but that is inference from the shape of the APIs and not a measurement. Diff the field inventory before you cancel, not after.

Three things this page does not know. How long Salesforce keeps your data after you cancel, and Copper's and Freshsales' API rate limits. None is stated in documentation available to this page, so those cells say so rather than guess. Ask for the retention window in writing while somebody is still answering your email.

How thin the practitioner record is. Only seven public threads carry real discussion of CRM migration and lock-in, and all seven are cited here. Not one is about an export that went wrong.

That absence is worth naming. People who complete a CRM migration do not write it up, and people who abandon one write about the vendor instead. Reddit has no anonymous access route, so none of its threads are cited. Read the silence as missing scrutiny, not as evidence that migrations go well, and budget for the association rebuild.

One live docket, and what it does not say. Boykin v. HubSpot, Inc., docket 1:26-cv-13864 in the District of Massachusetts, was filed on 21 August 2026, four days before this page. The complaint is not yet in the public RECAP archive and the docket carries no recorded cause of action, so this page cannot and does not say what it alleges. [docket] It is noted because a reader doing their own diligence will find it, and an unread complaint is not evidence of anything. Check the docket before drawing any conclusion.

What is a CRM, actually?

It is the one system in your stack priced on exit rather than entry.

Everything else makes something happen and can be swapped over a weekend. The CRM is where what happened is remembered, so its real cost is the number of days your data takes to come back out through a door the vendor built and sized.

That number runs from 83 minutes to 12.5 days across the ten vendors here on identical work.

Four of them do not publish enough to compute it at all, and one sells the door separately on its mid tier. None of that appears in a feature comparison, and all of it is readable before you sign. Price the exit, then look at the pipeline view.

Questions

What is a CRM in simple terms?
The system of record for your customer relationships. Every other tool in a sales stack makes something happen: finds a contact, sends a message, places a call, books a meeting. The CRM is where the fact that it happened is stored, so the history survives cancelling any of those tools. Underneath, it is a relational database with four tables (companies, people, deals, activities), a permission model and an API.
How do I get my data out of a CRM?
Two routes, and they behave very differently. The built-in export handles standard objects and usually offers a CSV, which is fine for rows and poor for attachments and stage history. The API handles everything else, and it is governed by a published rate ceiling: 100,000 calls per 24 hours plus 1,000 per licence at Salesforce Enterprise, 625,000 a day at HubSpot Professional, 30,000 tokens times a plan multiplier times seats at Pipedrive, all read 25 August 2026. Divide your record count by that ceiling before you promise anyone a date.
Which CRM is easiest to leave?
Of the ten here, Attio publishes the most generous ceiling: 100 read requests per second with no daily cap stated, which computes to 83 minutes for 500,000 single-record reads. Dynamics 365 on a licensed user account is the slowest at 40,000 requests per user per 24 hours, or 12.5 days for the same work, though the same tenant's application-user pool does it in 19 hours. All of these are computed from published ceilings, not measured.
Does my CRM charge me to export my data?
None of the ten publishes an export fee. What some of them charge for is the mechanism: Salesforce's API allocation table lists Professional edition as "with API access," which is a purchase, and HubSpot sells an API limit increase add-on that adds 1,000,000 calls a day, capped at two. So the honest answer is that nobody bills you for leaving and at least one vendor bills you for the ability to.
How long does my data stay available after I cancel?
Look it up rather than assume, because the answer is usually two documents deep. HubSpot's General Terms section 5.7, last modified 14 April 2026, defers retention, deletion and retrieval of Customer Data to the DPA and Product Specific Terms rather than stating a window in the main agreement. Salesforce's Bulk API 2.0 documentation states that job results are accessible within seven days of completion, which is an export-file expiry rather than an account retention window. Get the number in writing before you sign, while somebody is still trying to sell you something.
Do I need both a CRM and a sales engagement platform?
If you use an engagement platform, yes. Outreach and Salesloft are designed to sit on top of a CRM and write back to it, and every deployment assumes one exists. The real question is whether you need the engagement platform yet, which below about twenty reps is usually no. What they add is governance rather than sending, and neither publishes a price.
At what team size do you need a CRM?
No size decides it. The useful trigger is the second person touching customer records, because that is when silent overwrites start. A ten-person company with one salesperson may not need one. A three-person company with two people selling probably does. The other three triggers are the first account with more than two contacts in a live deal, the first hire who did not choose this job, and roughly twenty concurrent open deals.
Is HubSpot's free CRM actually free?
Yes, with unlimited users, contact management, deal pipelines and basic email, and many small teams run on it for a year or more. The free tier's API allowance is real too: 250,000 calls a day and 100 requests per 10 seconds, read 25 August 2026. What costs money later is seat types and contact tiers, because stored records accumulate whether or not you market to any of them, and HubSpot's own 10-K describes that as the growth mechanism.
Can a spreadsheet work as a CRM?
Genuinely yes, until one of four things breaks: two people editing the same row, one company needing several contacts and deals attached, nothing arriving automatically, or more open deals than anyone can hold in their head. Before that, a spreadsheet is a real system of record, and it is the only option on this page with an exit cost of zero.

Tools mentioned

All tools →

Sources

Source interests are labelled. Almost everything published about this subject is written by someone selling into it.

More from the blog

All posts →