Sales Ops and RevOps don't "generate content": they write to the CRM. The wrong model on the wrong job means a wrong lifecycle_stage, a wrong owner_id, a bad merge, a bad forecast.
This guide maps each job to a model, its inputs and outputs, a write policy and a failure mode, with realistic HubSpot / Salesforce field names.
Model map
Seven models cover every job in this guide. Prices are indicative API prices in USD per million tokens (input / output).
| Model | Tier | Good for | Bad for | Indicative API price | ID |
|---|---|---|---|---|---|
| Grok 4.7 | Frontier | Coding, agents, web/X research, knowledge work | High-volume micro-extraction | Under 200K context: $2 in / $0.50 cached / $6 out; 200K and above: $4 / $1 / $12 on the whole request. 500K context | grok-4.7 |
| Claude Opus 5.5 | Frontier | Long-running agents, careful reasoning, deal and forecast memos | 10k-row batches | $4 / $20; cache read $0.20, cache write $5 (5 min). Fast mode $8 / $40. 1M context, 128K max output | claude-opus-5-5 |
| GPT-6 Sol | Frontier | Complex coding and agents, computer use, tools | Cheap high-volume summarization | ~$2 / $10, cached input $0.20 | gpt-6-sol |
| GPT-6 Luna | Light | Summarization, extraction, short Q&A at high volume | Long agents, deal desk work | ~$0.10 / $0.50 | gpt-6-luna |
| GLM-5.3-Flash | Light | Cheap extraction, classification and drafts, if your policy allows it | EU PII without approval | ~$0.15 in / $0.03 cached / $0.50 out. ~1M context | glm-5.3-flash |
| DeepSeek-V4.1-Flash | Light to mid | Batch enrichment, classification, mid-heavy jobs off-peak | Critical jobs without review | Cache miss: ~$0.15–0.30 in / $0.60–1.20 out; cache hits and off-peak pricing are the real lever. Up to 1M context | deepseek-flash |
| MiMo-V2.6-Pro | Heavy low-cost | Coding agents, long-horizon work, tools and terminal | EU PII without approval | ~$0.435 in / $0.0036 cached / $0.87 out. MoE, ~1T parameters, ~42B active. ~1M context | mimo-v2.6-pro |
DeepSeek Flash also covers many mid-heavy jobs at Flash pricing, especially in batch, flexible or off-peak mode.
Sales Ops broken down into jobs
| Job | Typical systems | Expected output |
|---|---|---|
| Inbound | Form → HubSpot/Salesforce → Slack | Normalized lead, owner, SLA |
| Enrichment and TAM | Clearbit/Apollo + CRM + sheets | Firmographics, TAM tags |
| Scoring and routing | Workflow + score + queues | lead_score, territory, owner |
| Outbound personalization | Sequences (Outreach, Salesloft, HubSpot) | First-line draft + tokens |
| CRM hygiene | Dedup tools + CRM | Merge proposals, cleanup |
| Deal desk | Opportunity + Gong/Drive | Draft memo, never an auto-close |
| Forecast | Pipeline report + CRO | Weekly narrative someone reviews |
| RevOps agents | Stage rules + tasks | Missing next steps, scoped writes |
Job → model matrix
For each job: the CRM trigger, the recommended model, the low-cost alternative and the write policy.
| Job | CRM trigger | Recommended model | Low-cost alternative | Write policy |
|---|---|---|---|---|
| Lead intake (normalize + soft enrich) | contact.creation or form submit | Luna | GLM Flash | Soft fields only; never overwrite hard truth |
| ICP / persona + territory routing | Enrichment completed | Luna or GLM Flash | DeepSeek Flash | icp_fit, persona, territory; the owner comes from the rules engine |
| Outbound first-line personalization | Sequence enrollment | Luna | GLM or DeepSeek Flash | Draft to a sequence field; the AE edits before sending |
| Company enrichment batch (1k–10k rows) | Nightly or weekly job | DeepSeek Flash | Luna | Staging table → human QA on a sample → CRM |
| Dedup / merge proposals | Duplicate detected | Sol, Grok 4.7 or MiMo | DeepSeek Flash (proposals only) | Proposal only; a human approves the merge |
| Deal research memo | Opportunity at SQL / demo stage or later | Opus 5.5, Grok 4.7 or Sol | MiMo, if policy allows | Draft note on the opportunity; never touch amount or close date |
| Weekly forecast narrative | Monday morning cron | Opus 5.5 or Grok 4.7 | Sol | Draft to Slack or email; the CRO approves |
| Stage hygiene + missing next step | Stale stage or no open task | Sol or MiMo | DeepSeek Flash | Scoped: create a task or a flag only; no stage skip |
Hands-on playbooks
Lead intake: normalize + soft enrich
Inbound form or CSV: first names in ALL CAPS, free-text countries, misspelled company names.
- Inputs:
email,firstname,lastname,company,jobtitle,country,utm_source,form_id. - Output: JSON with
firstname_clean,lastname_clean,company_normalized,country_iso2,seniority(enum),enrich_confidence(0–1). - Model: GPT-6 Luna, for volume, short extraction and low cost. Low-cost alternative: GLM-5.3-Flash, if your PII policy allows it.
Steps
- CRM webhook → worker with the lead payload.
- Prompt: normalize, map country → ISO2, map seniority to an enum (
IC|Manager|Director|VP|C-level|Unknown). - Validate the output against a JSON Schema; reject if
emailis invalid. - Write soft fields only; don't touch
lifecycle_stageorowner_id. - If
enrich_confidence< 0.6, send the lead to aneeds_reviewqueue.
- Write policy: soft fields only, plus an
ai_normalize_tstimestamp. - Failure mode: wrong country → wrong territory. Validate ISO2 against an allowlist, otherwise write
Unknown.
ICP / persona classification + territory routing
After soft enrichment, classify ICP fit and route the lead.
- Inputs:
company_normalized,employee_count,industry,jobtitle,seniority,country_iso2,arr_band(if known). - Output:
icp_fit(A|B|C|Out),persona(e.g.RevOps|CRO|AE|Other),territory_code,routing_reason(one sentence). - Model: Luna or GLM Flash. It's a closed classification, no long reasoning needed. Low-cost alternative: DeepSeek Flash in batch.
Steps
- Load the ICP rules (YAML or Notion) into the prompt, 2K tokens max.
- Classify
icp_fitandpersonawith strict enums. - Territory: a table lookup after the model (
country_iso2+employee_countband). Don't use the LLM for pure geography. - Owner: round-robin or capacity rules in the CRM workflow, not in the LLM.
- Log
routing_reasonfor audit.
- Write policy: write
icp_fit,persona,territory_code; the owner is set by native automation. - Failure mode: a persona outside the enum. Reject it, set
Out, alert RevOps on Slack.
Outbound first-line personalization
Sequence step 1: one personalized line, not an essay.
- Inputs:
firstname,company,persona,trigger_event(funding, hire, tech),pain_hypothesis,offer_one_liner. - Output:
first_line(180 characters max), thepersonalization_tokensused,risk_flags(e.g. overclaim). - Model: Luna, for short high-volume drafts. Low-cost alternative: GLM or DeepSeek Flash.
Steps
- Pull the trigger from enrichment. Never invent a funding round.
- Prompt for one line, with an explicit "no invented numbers" constraint.
- Regex filter: no competitor URLs, no "AI-powered" spam.
- Write to
sequence_custom_fieldor a merge tag. - The AE sees a preview and sends manually, or it goes out untouched when the confidence score is high.
- Write policy: draft field only; never auto-send without an opt-in process.
- Failure mode: a fake trigger burns the domain. If
trigger_eventis empty, fall back to a generic first-line template.
Company enrichment batch (1k–10k rows)
A TAM list, or accounts missing firmographics.
- Inputs: a CSV batch with
domain,company_name_raw, and optionally scraped site text. - Output: per row,
industry_naics_guess,employee_band,hq_country,tech_hints[],confidence. - Model: DeepSeek Flash, for price, long context and off-peak batch. Luna if you're on an OpenAI-only stack. Low-cost alternative: Luna (more expensive at volume) or GLM Flash.
Steps
- Chunk 50–100 domains per call with a structured extraction prompt.
- Use off-peak or flexible mode if DeepSeek offers it.
- Write to a staging table (
enrich_staging), not directly to the CRM. - QA a 50-row sample, by a human or a frontier-model spot check.
- Upsert to the CRM on
domainmatch; skip rows below the confidence threshold.
- Write policy: staging → sample → CRM; never overwrite
ARRorowner. - Failure mode: a parked domain produces a garbage industry. Require
confidenceand a source URL field.
CRM dedup / merge proposals
Duplicate contacts or companies: email variants, domain variants.
- Inputs: candidate pairs
record_a/record_b, with key fields and activity counts. - Output:
same_entity(bool),merge_winner_id, afield_resolutionmap,confidence,human_summary. - Model: Sol, Grok 4.7 or MiMo, for multi-field reasoning and edge cases. Low-cost alternative: DeepSeek Flash, proposals only.
Steps
- Compute blocking keys (email, domain, LinkedIn) in the ETL.
- Send only ambiguous pairs to the frontier model.
- Write a proposal object to a
dedupe_queue. - RevOps reviews in a UI: approve, reject or change the winner.
- Merge through the CRM API after a human click.
- Write policy: proposal only, zero auto-merge.
- Failure mode: merging the wrong contacts loses data. Use soft-delete, an audit log and a documented rollback playbook.
Deal research memo
Opportunity at SQL or demo stage, for AE / SE prep.
- Inputs: opportunity fields (
amount,stage,close_date,competitors_mentioned), the account website, the last 5 emails or notes, a call transcript excerpt. - Output: a Markdown memo with context, stakeholders, risks, discovery questions and the competitive angle. Draft only.
- Model: Opus 5.5 (long, careful), Grok 4.7 (web and X) or Sol (tools). Low-cost alternative: MiMo-V2.6-Pro, if your policy allows Chinese providers.
Steps
- Assemble a packet that fits the context window; trim the transcripts.
- Use web search tools with Grok or Sol for public news.
- Output to
Opportunity.Noteor a linked Notion page. - Tag it
ai_draft=true. - The AE edits it; nothing syncs to
amountorforecast_category.
- Write policy: draft note only; no writes to financial fields.
- Failure mode: an invented competitive win. Require citation URLs, or "unknown".
Weekly pipeline / forecast narrative (CRO)
Monday: a pipeline snapshot with commentary.
- Inputs: an export of open opportunities by stage, week-over-week delta, commit / best case, slipped deals, top 10 by amount.
- Output: a 400–700-word narrative, risk bullets, questions for managers.
- Model: Opus 5.5 or Grok 4.7, for careful synthesis without hallucinated numbers. Low-cost alternative: Sol.
Steps
- Numbers are pre-computed in SQL or BI; the LLM doesn't recompute totals.
- Prompt: comment only on the deltas provided.
- Draft to Slack
#revopsand email to the CRO. - Human approval before it goes to any wider channel.
- Archive the version and a hash of the inputs.
- Write policy: draft channel, human approval.
- Failure mode: the LLM "corrects" a total. Forbid calculation and inject the numbers verbatim.
RevOps agent: stage hygiene + missing next step
An opportunity with no next step, or stuck in a stage for more than N days.
- Inputs:
stage,stage_entered_at,next_step,next_step_date,amount,owner_id, activity over the last 14 days. - Output:
hygiene_flag,suggested_next_step,suggested_task_due,severity. - Model: Sol or MiMo, as a scoped agent with CRM tools. Low-cost alternative: DeepSeek Flash, flag and suggest only, no writes.
Steps
- Query the stale set every night.
- The model proposes task text and a due date.
- Create a Task linked to the opportunity and ping the owner on Slack.
- Never advance
stageautomatically. - Cap writes at N per owner per day.
- Write policy: scoped writes, a task and a flag field only; no stage skip, no amount edit.
- Failure mode: task spam. Rate-limit and send a daily digest instead of one task per opportunity.
Matrix template
Before go-live, fill in one row per automation with these columns: job, CRM trigger, model, low-cost alternative, input fields, output schema, write policy, failure mode, owner.
A row without a write policy doesn't go to production.
Go-live checklist
- Legal / security: explicit approval if GLM, DeepSeek or MiMo receive PII that leaves the EU, or mask it.
- Logging: prompt version, model id,
record_id, latency, cost, output hash. - Eval set: 50 leads (or 50 opportunities) with gold labels; precision / recall on critical enums.
- Cost alert: a daily budget, plus an alert when spend spikes above 2× baseline.
- Write scopes: least-privilege API keys, no delete unless needed.
- Rollback: a documented way to undo a merge or a task spam.
- Pricing: recheck vendor pricing between September 2026 and your production date.
- Human approval: on merges, forecast publishing, and anything from a deal memo that touches financial CRM fields.
Conclusion
Seven rules cover most routing decisions:
- Volume + short schema (extract, classify, first line) → Luna, GLM Flash or DeepSeek Flash.
- Batches of 1k+ rows, off-peak → DeepSeek Flash, or Luna if you're locked into one vendor.
- Merges, CRM agents, tools → Sol, Grok 4.7 or MiMo, policy permitting.
- Long memos, forecast narratives → Opus 5.5 or Grok 4.7, as a draft with human approval.
- PII + EU → no Chinese provider without legal approval; otherwise anonymize.
- Any destructive CRM write (merge, stage, amount) → human in the loop.
- Numbers → computed outside the LLM. The LLM only comments on them.