DEV Community

Gulshan Yadav
Gulshan Yadav

Posted on Originally published at misar.blog

AI in Marketing Automation: Where a Model Beats a Rule, and Where It Doesn't

The first "AI-powered" marketing stack I was asked to audit had 214 nodes in its journey builder and exactly one place where a model actually ran: the subject line. Everything else — the wait steps, the branch on lead_source == "webinar", the suppression list, the re-entry guard — was if/else logic a growth marketer had written by hand two years earlier and nobody had touched since.

That gap is the whole story of AI in marketing automation right now. A rules engine with a language model bolted onto the copy step gets sold as intelligence. I've spent seven years in production engineering, most of the recent ones shipping AI systems for clients in India and Dubai, and I keep opening the same box and finding the same thing.

This is not an argument that models are useless here. It's an argument that they belong in three specific places, and that putting them anywhere else makes your system worse in ways that are hard to see until an auditor or an angry customer asks you a question you can't answer.

The quick answer

What does AI actually do in marketing automation? Three jobs, in practice: it ranks things (which leads to call, which offer to show, when to send), it predicts things (churn probability, conversion likelihood), and it reads or writes unstructured text (inbound replies, support tickets, subject lines, product blurbs). Everything else your platform does — branching, timing windows, consent checks, suppression, throttling — is deterministic software and should stay deterministic software.

If a vendor can't tell you which of those three a feature is doing, it's doing none of them.

Most AI in marketing automation is a rules engine with a model on the copy step

Look at the shape of a typical stack. A user does something. An event lands. A trigger fires. A journey evaluates a chain of conditions. A message goes out at a fixed delay. Somewhere in there, a model writes five subject line variants and the platform picks one at random or by a shallow A/B test that never reaches significance on a 4,000-person list.

The model touched maybe 2% of the decisions in that flow, and it touched the least consequential 2%. The branching logic — the part that actually decides who gets what — is untouched. That's why so many teams report that adding AI "didn't move anything." It didn't move anything because it wasn't wired into anything that moves.

The useful reframe: stop asking "where can we add AI" and start asking which decisions in this system are currently made badly by a rule? A rule is made badly when:

  • The rule is a threshold someone guessed (score > 70 — why 70?)
  • The rule has to be re-tuned by hand every quarter as behaviour drifts
  • The rule collapses a continuous signal into a binary (hot/cold, engaged/unengaged)
  • The rule ignores most of your data because nobody could write conditions over 300 event types
  • The input is free text and the rule is a keyword list that misses everything phrased differently

Those five bullets are your candidate list. Nothing else is.

Where AI in marketing automation genuinely beats a rule

Ranking

Ranking is the strongest case. You have 4,000 leads and capacity to call 200. A rule sorts them by a hand-weighted score. A model sorts them by estimated probability of the thing you actually want — a closed deal — learned from every previous lead and outcome you have.

The model wins because it can weigh 40 weak signals at once, and because it learns the weights from outcomes rather than from a meeting. A human cannot hand-tune 40 weights. A human can barely hand-tune four.

Prediction

Anything of the form "how likely is X, for this person, right now" is a model's home turf. Churn risk, conversion likelihood, expected order value, probability of opening in the next six hours. The requirement is a label: a past outcome you recorded honestly. No label, no prediction — you have a vibes generator.

Unstructured text

Inbound replies, form free-text, support tickets, review text, chat logs. Classifying and extracting from these used to require a keyword list that was wrong on arrival. A language model reads them properly. This is the least glamorous and most reliably valuable AI in marketing automation work I do: turning a pile of text nobody reads into structured fields the rules engine can branch on.

Note the direction there. The model produces structure; the rules engine consumes it. That's the correct relationship.

Where AI in marketing automation is strictly worse than an if-statement

Deterministic branching

If the business rule is "customers on the Enterprise plan never receive the upsell sequence," that is one line of code. It is correct 100% of the time, it costs nothing, it takes 0ms, and anyone can read it. Handing that decision to a model makes it probabilistic, slower, more expensive, and occasionally wrong — a downgrade on four axes and an upgrade on none.

Compliance and consent

Consent state, unsubscribe handling, regional sending rules, data residency, quiet hours, frequency caps. These must be enforced by code that cannot deviate. I put them after the model in the pipeline, as a hard gate — the model proposes, the gate disposes. A model that has learned "engaged users tolerate more email" will happily blow through a frequency cap because the training data rewarded it.

Anything needing an audit trail

When someone asks "why did this customer get this message on this date," a rules engine answers with a path through a flowchart. A model answers with a number. If you work in finance, insurance, healthcare, or anywhere a regulator can knock, that difference is the entire ballgame. You can log model inputs and outputs — you should, see below — but "feature vector produced 0.83" is not the same kind of explanation as "matched segment B, day 3 of sequence."

The honest task-by-task verdict

Task Does AI genuinely help? Why
Segmentation Sometimes Clustering finds groups that are statistically real and commercially meaningless ("cluster 4"). Rules over known business facts — plan, region, tenure — beat it most of the time. AI earns its place only when you have dense behavioural data and want lookalikes or embedding-based similarity, not tidier buckets.
Subject lines Marginally Generation was never the bottleneck; selection is. Without a test harness and enough volume to reach significance, you've automated producing mediocre options faster. On a small list this is theatre.
Send-time optimisation Yes, narrowly A real per-recipient prediction problem with a clean label (past open/click timestamps). Gains are real but modest, they decay as behaviour shifts, and they need retraining. Don't expect a step change.
Lead scoring Yes — best fit Ranking with an honest label (closed-won/closed-lost) and enough history. The failure mode isn't accuracy, it's leakage: features that encode the outcome (e.g. "demo booked") make offline metrics beautiful and the model useless.
Content generation Yes, with a human gate Genuinely good for drafts, variants, localisation, and reformatting. Never trust it on prices, claims, availability, or legal language — anything a customer could hold you to. Gate it.
Churn prediction Yes, if you can act The model is the easy half. The hard half is having an intervention that changes the outcome — otherwise you've built an expensive way to know who's leaving. Watch base rates: at 3% churn, a naive model scoring everyone "safe" is 97% accurate.
Attribution Mostly no Multi-touch models output confident numbers nobody can validate, built on the assumption that observed touchpoints caused the outcome. Geo holdouts and incrementality tests answer the real question. A model here mainly launders an assumption into a dashboard.

Implementation: what this looks like when it's built properly

Here's the architecture I keep landing on. It's deliberately boring.

Where the model sits

Outside the journey, behind an HTTP call. The automation platform does not contain the model. It calls a scoring service, gets back a number or a short structured object, writes it to a field, and then branches on that field with ordinary deterministic logic.

warehouse/CDP  →  feature builder  →  scoring service  →  score field on contact
                                            ↓
                                     decision log
                                            ↓
automation platform  →  reads field  →  deterministic branch  →  compliance gate  →  send
Enter fullscreen mode Exit fullscreen mode

Three properties matter about that layout:

  • The branch is auditable. The model contributed a number; the routing decision is still a readable rule.
  • The model can fail. Timeout, 500, garbage output — the service returns a default score and the journey continues on the rules path. No model call should ever be able to stall a send. Build the fallback before the model.
  • You can swap the model without touching 214 journey nodes.

For text steps, same rule: generation happens in the service, the output is validated (length, banned phrases, required placeholders present, no invented prices) and then either passed through or dropped in favour of static copy.

What data it needs

Less than vendors imply, more than teams usually have:

  • An event stream with stable identity resolution. If you can't reliably join anonymous behaviour to a contact record, nothing downstream works. This is where most projects actually die.
  • Outcome labels with timestamps. Not just "converted" — when, so you can construct training rows as of a point in time and avoid using the future to predict the past.
  • Enough negatives. Teams archive or purge closed-lost records and then wonder why lead scoring won't train.
  • A frozen feature snapshot at scoring time. Otherwise your offline features and your online features quietly diverge and the model degrades for reasons nobody can reproduce.

This is the layer I build with Misar AI — the model endpoints, feature snapshots, and logging live there, and the automation platform only ever sees a score or a string.

What you log

One row per decision, and I mean every decision. At minimum:

  • Request ID, contact ID, timestamp
  • Model name and version, prompt template version if it's an LLM step
  • The exact feature vector or input text used (or a hash plus a pointer to the snapshot)
  • Raw model output, including the score before any thresholding
  • The action actually taken, and whether a fallback fired
  • For generated text: the draft, the final sent version, and whether a human edited it

That last one is free evaluation data. The edit rate on generated copy tells you more about model quality than any benchmark, and it costs nothing to capture.

How you evaluate it

  • Offline, before launch: split train/test by time, not at random. Check calibration, not just AUC — a lead score of 0.8 should convert around 80% of the time or your thresholds are meaningless.
  • Online, forever: keep a permanent holdout running the old rules. Not for two weeks — permanently, at 5–10% of traffic. It's the only thing that tells you the model still beats the rule it replaced, and the only defence against a silent pipeline break that degrades scores for a month before anyone notices.
  • Business metric, not model metric. Meetings booked, revenue per send, unsubscribe rate. A model with better AUC and a worse unsubscribe rate is a worse model.
  • Drift checks: alert on input distribution shift and on score distribution shift. When marketing launches in a new region, the model meets a population it has never seen.

What I'd build first

If you're starting from a rules-only stack, the order that has worked for me:

  1. Instrumentation. Events, identity, outcome labels. No model until this is trustworthy.
  2. Text structuring. Classify inbound replies and free-text fields into fields your existing rules can branch on. Low risk, immediate, and it doesn't touch sending logic.
  3. Lead or churn scoring as a field, with rules-based routing intact and a holdout from day one.
  4. Generation with a human gate, logged, with edit rate tracked.
  5. Only then, per-recipient send time — the smallest prize of the four.

Most teams do this list backwards, starting at 4, because that's the demo that looks impressive in a meeting.

The short version

Use a model where you're ranking, predicting, or reading text. Use a rule everywhere a wrong answer is expensive, everywhere a regulator might ask, and everywhere the logic is already correct and free. The good systems I've built aren't AI systems with rules attached — they're rules engines with three well-placed models feeding them better inputs, and a log good enough to prove it.

FAQ

Is AI in marketing automation worth it on a small list?

For generation and text structuring, yes — those don't depend on volume. For anything statistical, no. If you can't reach significance in an A/B test, you can't evaluate a model either, and an unevaluated model is just a rule you can't read. Below a few thousand outcomes, spend the effort on data plumbing instead.

Can AI replace my marketing automation platform?

No, and you shouldn't want it to. The platform's real value is reliable scheduling, deliverability, suppression, and consent handling — deterministic infrastructure that must not become probabilistic. Add a model beside it, not inside it.

What data do I actually need before any of this works?

Identity resolution that holds across sessions, an event stream with timestamps, and outcome labels including negatives. If you have those three, most of the work is done. If identity resolution is broken, fix that first; every model built on broken joins fails in the same confusing way.

How do I stop generated copy from making things up?

Don't ask the model for facts. Pass prices, product names, dates, and availability in as variables, have the model write around them, then validate the output programmatically — required placeholders present, no currency symbols the template didn't supply, length within bounds. Anything that fails validation falls back to static copy. Prompting alone is not a control.

Top comments (0)