AI System Design

Design a Sales CRM Agent

Step 1 / 9

Learn AI system design by building an AI agent embedded in a CRM that enriches leads, scores priority, drafts outreach, and suggests next actions for a sales rep — where the agent writes into a…

In the interview room

How you’d open this design in an interview

Before any boxes: agree what it must do, pin the qualities that shape everything, then build — naming each trade-off as you make it. The walkthrough above is that exact order.

Functional requirements

What it must do — agree on these before drawing a single box.

  • Enrich leads: pull company and contact data from multiple external sources automatically.
  • Track provenance: record which source supplied each fact and how recently it was verified.
  • Score & prioritize: rank leads by predicted conversion likelihood so scarce rep time goes to the best.
  • Validate writes: check every write for duplicates and consistency before it lands in the shared CRM.
  • Suggest & log: draft outreach the rep reviews and sends, and auto-capture every call, email and meeting.

Non-functional requirements

The qualities that shape the whole design — each one names the mechanism that buys it.

Free rep time for actual selling
Automated multi-source lead enrichment replaces manual, per-lead research — automating the work, not the relationship.
Direct scarce rep time to the best leads
A Lead Scoring model ranks leads by predicted conversion likelihood using enriched signals, surfacing priority to the rep.
Protect a shared system of record
A Write Validator checks every write for duplicates and consistency and fails closed — writes queue rather than risk corrupting data many people trust.
Human stays the actor for relationship work
Suggest-don’t-act: the Outreach Drafter proposes a next-best-action but the rep reviews and actually sends anything relationship-sensitive.
Preserve reporting without new busywork
Automatic activity logging captures every call, email, and meeting into the CRM without reps re-entering what already happened.
Catch stale facts before they embarrass
Freshness thresholds over the provenance data flag aging enrichment for re-verification, plus drift monitoring on the scoring model.

The trade-offs you say out loud

Senior signal isn’t the boxes — it’s naming what you gave up and why it was the right price.

Automate the research, not the relationshipover manual per-lead research

Research consumes a large share of a rep’s limited time — every minute looking up company details is a minute not spent on the conversations that actually drive sales.

Track source provenance (origin + freshness)over trusting whichever source responds first

Sources vary in reliability and go stale at different rates; a fast but stale source could confidently supply wrong information with no way to flag it.

Score leads by conversion likelihoodover equal effort across every lead

Equal effort spends real time on low-probability leads at the expense of the ones most likely to close — “fair” in that sense doesn’t serve the actual goal.

Validate writes and fail closedover immediate unvalidated writes

The CRM is shared, so a duplicate or inconsistent write corrupts every rep’s view, report, and downstream automation — validation rigor should scale with that blast radius.

Suggest, don’t actover autonomously sending outreach

Sales outreach is relationship-sensitive — tone and timing matter in ways hard to validate automatically, and a wrong or mistimed message can damage a real prospect relationship.

What this teaches

Learn AI system design by building an AI agent embedded in a CRM that enriches leads, scores priority, drafts outreach, and suggests next actions for a sales rep — where the agent writes into a SHARED system of record many people and processes depend on, and stays a suggester rather than an autonomous actor for relationship-sensitive interactions. An interactive guide covering why manual lead research doesn't scale, multi-source enrichment with provenance tracking, lead scoring, write-back validation to protect a shared CRM from corruption, next-best-action suggestion instead of autonomous action, genuine personalization at scale, automatic activity logging, and stale-data safeguards.

Key takeaways

  • Manual lead research consumes rep time that's better spent on actual selling — automate the research, not the relationship.
  • Multi-source enrichment needs explicit provenance tracking (source and freshness) since sources disagree and go stale at different rates.
  • Lead scoring predicts future conversion likelihood, directing scarce rep time — a genuinely different, more predictive problem than simple urgency triage.
  • Writes to the shared CRM are validated and fail closed, because a bad write corrupts a system of record many people and processes trust, not just one user.
  • The agent defaults to suggesting next actions, not autonomously executing them, keeping a human as the primary actor for relationship-sensitive outreach.
  • Personalization at scale comes from using real, relevant enrichment data, not mail-merge templating.
  • Automatic activity logging preserves pipeline reporting accuracy without reintroducing the manual burden the design set out to remove.
  • Freshness thresholds and ongoing scoring-model drift monitoring catch stale data and degrading predictions before they cause real harm.

Concepts covered

  • An agent that writes into a shared, trusted system
  • Manual research, lead by lead
  • Sources disagree and go stale
  • Focus effort where it's actually likely to pay off
  • A bad write corrupts something everyone trusts
  • The agent proposes; the rep decides
  • Real data, not mail-merge
  • Pipeline visibility without manual data entry
  • Stale facts and a scoring model that drifts

Design a Sales CRM Agent — read the full walkthrough as text

the same steps, decisions & trade-offs, for reading, reference & search

The big idea

An agent that writes into a shared, trusted system

Unlike a personal email inbox, a CRM is a SHARED system of record — every rep, sales manager, and automated report depends on it being accurate. An agent here isn't just risking one user's data; a bad write corrupts something many people and processes trust. And for anything relationship-sensitive (an actual sales conversation), the agent needs to stay a suggester, not an autonomous actor.

We'll build around those two constraints: multi-source enrichment with real provenance tracking, lead scoring, rigorous write-back validation before anything touches the shared CRM, and a suggest-don't-act default for outreach.

How to read this: Each step opens with a real design decision — make the call before I show you what ships. Watch the diagram grow, hover the boxes, and at the end kill the write validator and feed it stale data to see the safeguards actually catch problems. Hit Begin.

Step 1 · The baseline

Manual research, lead by lead

Simplest version: a rep manually researches each lead — company background, contact role, recent news — one at a time. What's the real cost?

Design decision: Reps manually research every lead individually. What's the actual cost of this approach?

The call: Reps spend a large share of their limited time on research and data-gathering rather than actual selling and relationship-building — the highest-value use of a rep's time. — Every minute spent manually looking up company details or a contact's role is a minute not spent on the conversations and relationship-building that actually drive sales — automating the research (not the relationship) targets exactly this misallocation of a scarce resource: rep time.

Manual research consumes a large share of a rep's limited time on data-gathering rather than the actual selling and relationship work that drives revenue. Automating research — not the relationship itself — targets this specific misallocation.

Automate the work, not the relationship: The design goal isn't replacing what a rep does with a customer — it's eliminating the research and admin overhead that competes with their time to actually do it.

Step 2 · Multi-source enrichment with provenance

Sources disagree and go stale

Automate lead enrichment by pulling company and contact data from multiple external sources. Different sources can disagree with each other, and any of them can go stale. Should the system just trust whichever source it checks first?

Design decision: Multiple external data sources are used for enrichment, and they can disagree or go stale. How should this be handled?

The call: Track SOURCE PROVENANCE explicitly for every piece of enriched data — which source it came from and how recently it was verified — so downstream consumers (scoring, drafting) can weigh reliability and freshness rather than treating every fact as equally trustworthy. — Explicit provenance tracking means every downstream use of enrichment data can account for how reliable and how CURRENT it actually is — a fact from a frequently-updated, generally-reliable source is treated differently than a stale or less-reliable one, rather than flattening all enrichment data into equally-trusted facts.

Track Source Provenance explicitly — which source supplied each fact, and how recently it was verified — rather than treating every enriched data point as equally trustworthy. This gives downstream consumers the information needed to weigh reliability and catch staleness before acting on outdated data.

Not all data is equally trustworthy — track why you believe it: Aggregating multiple sources without tracking provenance loses exactly the information needed to later catch a stale or unreliable fact — provenance is what makes a downstream freshness check (Step 8) possible at all.

Step 3 · Score and prioritize leads

Focus effort where it's actually likely to pay off

A rep has far more leads than time to pursue each equally. Should all leads get equal attention?

Design decision: A rep has many more leads than time allows pursuing equally. Should attention be spread evenly?

The call: No — score leads by predicted likelihood-to-convert (based on enriched firmographic and behavioral signals) and prioritize rep effort toward the highest-scoring ones. — Lead scoring directs a rep's genuinely scarce time toward leads statistically most likely to actually convert, using the enrichment data already being gathered — a materially better use of limited effort than spreading it evenly regardless of likelihood.

Add a Lead Scoring model that ranks leads by predicted conversion likelihood, using enriched signals, and surfaces that priority to the rep — directing scarce time toward the leads statistically most worth pursuing.

A different ranking problem than inbox triage: Email triage classifies urgency of something that already exists; lead scoring PREDICTS a future outcome (will this convert) from available signals — a genuinely different, more predictive problem, even though both exist to direct limited human attention efficiently.

Step 4 · Protect the shared system of record

A bad write corrupts something everyone trusts

Enriched and scored data needs to be written back into the CRM. Should writes happen automatically and immediately, with no validation?

Design decision: Enrichment writes need to land in the shared CRM. Should they write immediately with no validation?

The call: No — validate every write (checking for duplicates, consistency with existing trusted data, and provenance quality) before it commits to the shared CRM, failing closed if validation is unavailable. — Because the CRM is a shared system of record many people and automated processes depend on, a bad write is far more consequential than a bad write to one person's private data — validating before commit, and blocking writes entirely if the validator itself is down, protects the shared asset from corruption.

Add a Write Validator that checks every enrichment write for duplicates and consistency before it commits to the CRM — and fails closed: while the validator is unavailable, writes queue rather than risking corruption of a system of record that many people and downstream processes trust.

The stakes of a bad write scale with how many things trust the data: A write to one user's private data affects one user. A write to a shared system of record can silently propagate bad data into every report, every other rep's view, and every downstream automation built on top of it — the validation rigor should scale with that blast radius.

Step 5 · Suggest, don't act

The agent proposes; the rep decides

The system has enriched, scored, and can draft outreach for a lead. Should it autonomously send that outreach, or something else?

Design decision: A drafted outreach message is ready for a promising lead. Should the agent send it autonomously?

The call: No — the agent SUGGESTS the next action (a drafted email, a recommended call) and the rep remains the one who reviews and actually sends or acts, keeping a human as the primary actor for relationship-sensitive interactions. — Defaulting to suggestion rather than autonomous action respects that sales outreach carries relationship stakes an automated check can't fully capture — the rep's judgment stays in the loop for the actual send, while the agent still saves them the drafting and research effort.

Default the Outreach Drafter to suggestion, not autonomous action: it proposes a next-best-action (a drafted email, a recommended call) but the rep remains the one who reviews and actually sends or acts. This keeps a human as the primary actor for anything relationship-sensitive, while still eliminating the drafting and research burden.

A different default posture than an approval-gated agent: Where an email agent might auto-execute well-established low-risk patterns and gate only consequential ones, THIS agent's default is suggest-first for anything relationship-facing — reflecting that sales outreach carries relationship stakes that make "propose, human decides" the more appropriate baseline than "auto-execute unless flagged."

Step 6 · Personalize at scale without genericness

Real data, not mail-merge

Drafting outreach for many leads at once risks reading as obviously mass-produced, generic content — the opposite of what makes outreach effective.

Draft outreach using actually-relevant enrichment data — recent company news, a specific role-based pain point, a concrete detail from provenance-tracked research — rather than templated mail-merge with only a name swapped in. The scale comes from automating the RESEARCH and drafting effort, not from producing identical content with superficial substitution.

Scale the effort, not the genericness: The value of personalization comes from genuinely relevant specifics, not from the mechanical act of inserting a name into a template — using real enrichment data is what lets outreach scale in VOLUME without scaling down in actual relevance.

Step 7 · Automatic activity logging

Pipeline visibility without manual data entry

Sales pipeline reporting depends on accurate records of every call, email, and meeting. Should reps be responsible for manually logging every interaction?

Automatically capture and log every interaction — calls, emails, meetings — into the Activity Log, feeding back into the CRM without requiring reps to manually re-enter what already happened. This keeps pipeline reporting accurate and current without adding administrative burden that competes with the actual selling time this whole design exists to protect.

Don't reintroduce the burden you just removed: A system that automates research but then requires extensive manual activity logging has just moved the time cost, not eliminated it — automatic capture keeps the net time savings real.

Step 8 · The sharp edges

Stale facts and a scoring model that drifts

Two real risks: enrichment data that was accurate when gathered but is now outdated (a contact changed roles months ago), and a lead-scoring model whose predictions quietly degrade as market conditions shift.

Apply freshness thresholds using the Source Provenance data — enrichment past a certain age gets flagged for re-verification before it's used in outreach, catching exactly the kind of stale-fact embarrassment (congratulating someone on a role they've left) that undermines trust in the whole system. For scoring, apply the same drift-monitoring principle used for any production ML model: track the scoring model's real-world accuracy over time and re-validate or retrain as market conditions shift, rather than assuming a model validated once stays accurate indefinitely.

Design for the unhappy path: Write validator down → fail closed, protects the shared CRM. Stale enrichment → freshness thresholds catch it before it's used. Scoring model drift → the same ongoing-monitoring principle as any production ML model. A CRM agent that only works with perfectly fresh data and a permanently-accurate scoring model is a demo; one that catches its own staleness and drift is a product.

You did it

You just designed a sales CRM agent.

  • Manual lead research consumes rep time that's better spent on actual selling — automate the research, not the relationship.
  • Multi-source enrichment needs explicit provenance tracking (source and freshness) since sources disagree and go stale at different rates.
  • Lead scoring predicts future conversion likelihood, directing scarce rep time — a genuinely different, more predictive problem than simple urgency triage.
  • Writes to the shared CRM are validated and fail closed, because a bad write corrupts a system of record many people and processes trust, not just one user.
  • The agent defaults to suggesting next actions, not autonomously executing them, keeping a human as the primary actor for relationship-sensitive outreach.
  • Personalization at scale comes from using real, relevant enrichment data, not mail-merge templating.
  • Automatic activity logging preserves pipeline reporting accuracy without reintroducing the manual burden the design set out to remove.
  • Freshness thresholds and ongoing scoring-model drift monitoring catch stale data and degrading predictions before they cause real harm.
built so a bad write never corrupts the shared system of record every rep depends on — make the calls, feed it stale data, run the gauntlet.
Finished this one? 0 / 61 AI System Designs done

Explore the topic

See this alongside everything else on the same subject — handbooks, system designs, challenges and tools, in one place.

More AI System Designs