What does AI actually do once it is inside a CRM?

Almost none of it is clever. Each rule was written after a specific failure, and the failure is still sitting at the top of the file.

By ·Published

The short answer

Inside a CRM, AI does three unglamorous jobs. It sorts inbound replies so that a bounce or an out-of-office never counts as a human answering. It keeps a real reply nobody has responded to on a daily list until somebody actually moves it. And it throttles its own outbound sending when replies dry up. Scoring, closing and sending money stay with people.

SHT-02What drives the number

01

A bounce is not a reply, and the CRM used to think it was

In lib/followups/reply-classifier.ts every inbound message once counted as a human answering. Bounces from a mail daemon, out-of-office autoreplies and one-word opt-outs all promoted a lead to replied and paused its sequence, and every one of them had to be undone by hand. The classifier now separates four cases, bounce, auto-reply, opt-out and real, and routes each differently. The opt-out check reads only the first couple of hundred characters of the message, because the word unsubscribe sits in the quoted footer of our own outgoing email and a whole-body check would match that footer rather than the reader. That is the texture of this work: not a model, a rule, most of them written after the week they cost.

02

The most expensive record in a pipeline is a reply nobody answered

A lead that wrote back and has heard nothing since is worse than a lead that never wrote at all, because it was already interested and is now being ignored. lib/followups/hot-replies.ts finds them: status still sitting at replied, and no outbound message since before the reply landed. They go into a daily digest and stay in it until somebody moves the record, rather than being announced once and forgotten. An instant alert is easy, and it only works if the person happens to be holding their phone. A punchlist that refuses to shrink until the work is done is the part that survives a bad week.

03

Most of the engine exists to stop the machine doing something stupid

lib/followups/engine.ts is pure decision logic with no database in it, so the rules can be tested without a mail server. It refuses to contact a company whose name reads like a retailer rather than a crew. It detects a lead whose step counter has drifted ahead of its sent history and resets it, because the drifted version opened a first contact with a Re: subject line as if a conversation had already happened. lib/followups/business-days.ts keeps the cadence on weekdays, so a step that would land on Saturday waits for Monday. None of that is intelligence. All of it is the difference between automation you keep and automation you switch off.

04

It slows itself down when nobody is replying

lib/followups/adaptive-cap.ts samples the last fourteen days of sends and real replies and lowers the daily cap when the ratio falls under thresholds written into the file. The reason is not politeness. A domain that sends steadily and hears nothing back is usually a domain whose mail is landing in spam, and another week at full volume does damage that takes months to undo. Below a minimum sample it changes nothing, because a small sample is noise. When the cap moves, the reason travels with it into the daily digest the engine already sends, which in that system is the studio's own founder chat rather than a client's, instead of into a log nobody opens. A throttle nobody is told about looks exactly like a broken cron job.

05

There is no numeric lead score in production, and this page will not invent one

Lead scoring is the feature every CRM comparison asks about, and a model that assigns each lead a number is not running in any of the three systems. What is running is classification and prioritisation: which replies are real, which real ones have gone unanswered, which callers had a conversation long enough to be worth interrupting somebody for. That is less impressive and it is what exists. A score is easy to display and hard to justify, and a number on a lead card that nobody can explain is a number a sales team learns to ignore inside a month.

06

When a CRM should have no AI in it at all

One of the three systems is built that way on purpose. The CRM for a turnkey sauna builder in California has no AI: both AI features it inherited were removed, because neither could run reliably and one of them reported work it had not done. A system that silently claims something happened is worse than a system that does nothing, and there is no way to catch it from the outside. If your process is a small number of high-value jobs that one person already tracks in their head, the thing worth buying is accurate records and a clean schedule, and every dollar spent on a model instead is a dollar spent on the wrong problem.

SHT-04General notes

The questions people actually ask.

N01What does AI do inside a CRM?
It classifies inbound replies, surfaces the real ones nobody has answered, and regulates how much outbound the system sends. Those three jobs are the ones that measurably stop leads being lost, and each of them is a rule in a file rather than a model making a judgement call.
N02Does the CRM score leads with AI?
No numeric lead-scoring model is running in any of these systems, and this page will not claim one. What runs is classification and prioritisation: real replies separated from bounces and auto-replies, and answered leads separated from ignored ones. That is a smaller claim and it is the true one.
N03Can AI write the follow-up emails?
The sequences are written by a person and stored in code, not generated per lead. They live in lib/followups/sequences.ts so the copy can be changed and reviewed like anything else that ships, and so the same lead always sees the same variant if a sequence restarts. Generated-per-send copy is easy to build and impossible to review.
N04What stops the automation from spamming my contacts?
An adaptive daily cap that drops when the reply rate over the last two weeks falls below thresholds written into lib/followups/adaptive-cap.ts, plus a classifier that treats a one-word opt-out as an opt-out and stops immediately. Weekday-only cadence in lib/followups/business-days.ts keeps a sequence from firing on a Sunday.
N05Does a custom CRM need AI to be worth building?
No. Two of the three systems in production earn their place on records, permissions, documents and arithmetic rather than on a model, and one of them deliberately has no AI in it. The CRM is the thing that pays; AI is a layer that pays once there is already a system underneath it.
N06How much does a CRM with AI in it cost?
A custom CRM starts at $2,000 over 30 to 45 days, and the AI is built inside that rather than sold as an add-on. Provider usage for voice, messaging and models is billed to your own accounts. A subscription to the system that already runs is Pro at $99 a month, or Team at $199 a month for ten people and $49 a month for each person past ten.
N07Who owns the code and the data?
You do: your own database, your own repository, your own domain, nothing licensed back to the studio. If you stop working with Orium nothing switches off and the next developer inherits an ordinary project rather than a hostage.

SHT-05Evidence

The systems this argument comes from.

Everything above was learned building these. Each sheet names the business, what the trade's arithmetic actually is, and the file in the repository that proves the capability. No client revenue and no client's customers appear on any of them.