River
Y CombinatorBacked by Y Combinator

Business & Revenue OpsFree

CRM Audit With a Priceable Scope

Every finding costed in hours against what your platform tier can actually do, ordered by the reporting it breaks, ending in a total.

Start here

Every result for this query is a checklist, and most of them are good checklists. Fifty points, two hundred questions, a weighted score out of a hundred, an Excel file with the formulas already in it. They all stop in the same place. One of the more honest ones says outright that the estimated cost per fix and the rough budget arrive in a thirty-minute call. The number is the thing being sold, and the score is what gets you on the call.

A score of 62 out of 100 is not a proposal. A proposal needs a line per finding, an hour count against each line, the reporting each one breaks, and a total somebody signs. Getting from one to the other is the whole job. It turns on something no checklist asks about: what the platform's own tooling can and cannot do at your subscription tier. That is what decides whether a finding is a morning or a fortnight.

HubSpot's duplicates manager displays up to ten thousand pairs on a Professional subscription. An org holding forty-one thousand cannot see its own backlog inside the product, so the estimate is not an afternoon of clicking merge, it is an export, a match run outside the tool and merges in tranches. That single fact moves one line from six hours to sixty. The output is every finding costed that way, ordered by what it breaks, ending in a total. The cleanup itself then works from a field-by-field dictionary.

Ceilings are what price the work

The second lever on an estimate is what the platform already does for free. HubSpot deduplicates contacts on email address and companies on domain automatically, which means the duplicates that survive to your audit are the hard ones by definition: same person, two addresses, or two companies sharing a parent domain. Nobody quotes for those at the same rate as an email match, and a checklist that reports a duplicate count has told you nothing about which kind you have.

The third is whether a fix holds. HubSpot allows ten custom properties per object that require unique values, and its own documentation notes those constraints are not supported in forms. So the constraint you would reach for does not apply at the point most duplicates are created. That reframes the line item: cleaning forty thousand pairs without changing the intake is a recurring engagement, and saying so in the proposal is the difference between a fee and a retainer.

Severity has to be ordered by consequence rather than by count, or the biggest number wins the argument and the wrong work gets funded. A hundred and eighty-nine properties nobody fills are untidy and cost nothing. Three workflows writing the same lifecycle field in contradiction break the number in the board pack, which is the finding that gets the budget approved. Ranking findings by what a report actually computes is what puts them in that order.

How it works

  1. Send the exports

    The object and field export, plus usage or report data if you have it.

  2. Name the tier

    Which platform, which subscription, and which add-ons, because the ceilings move with all three.

  3. Cost each finding

    Every issue gets hours, a severity, and the specific reporting it currently breaks.

  4. Phase and total

    The work splits into fundable phases, each with a total and what it unblocks.

What you get

  • Every finding with an hour estimate, so the audit ends in a number you can quote
  • Severity ordered by the report each finding breaks, not by how many records it touches
  • Estimates that account for what the built-in tooling can do at your subscription tier
  • The cleanup split into phases, each with a total and what it unblocks
  • Findings that will recur unless the intake changes, marked as retainer rather than project
  • The evidence behind each estimate, so a client can challenge the hours rather than the fee

Common questions

What do I actually need to give it?

The field and object export from your CRM, whatever usage data you can get, and the subscription tier. The tier matters more than people expect, because the ceilings on the built-in tooling move with it and those ceilings are what turn a finding into an hour count. A report inventory sharpens the severity ordering.

How are the hour estimates arrived at?

From the volume, the method the volume forces, and the platform ceiling that decides the method. Forty thousand duplicate pairs against a ten thousand pair display limit is an export and a matched merge, not a session in the interface. Every estimate shows that reasoning, so a client argues with the method rather than the fee.

I am the admin, not a consultant. Is this still for me?

Yes, and the hours are what you need. An internal cleanup competes for time against everything else, and the request that wins is the one carrying a phase, a total and a named report it fixes. A score of 62 out of 100 does not get a sprint. Eighty-two hours against the account rollups does.

Does it work on Salesforce as well as HubSpot?

Both, and the ceilings differ, which is exactly why the tier goes in. The classes of finding are the same everywhere: duplicates the platform will not match automatically, fields nobody fills, automations writing the same value in contradiction, and reports built on all three. Only the hours change with the platform.

We run two CRMs. Where does that fit?

It becomes its own severity line, because two systems disagreeing is a reporting failure with a name and a cost. Work out the size of it first by reconciling the two exports record by record, then bring the attributed gap in as a finding with the hours to close it.

What stops the same audit being needed in a year?

The findings marked recurring. Anything whose cause sits in intake rather than in the data comes back, and the proposal says which lines those are so the client buys the fix instead of the cleanup twice. Duplicate creation at the form, ownership nobody wrote down, and a field with no named owner are the usual three. A standing hygiene system with survivorship rules fixes all three.

Permissions and access always show up as a finding. Should that be its own line?

Yes, and it usually deserves more than one line. A departed employee's account still enabled is a cost and a risk this audit will flag, but the depth that finding needs, matching every account against who is actually still employed, is its own tool. A dedicated access review runs that match and ranks what it finds by permission level.

CRM Audit With a Priceable Scope

Fill in the form and your workspace opens with the work already underway.