Sales · 03 · Pipeline ops & reportingLesson 2 of 4
Call notes -> CRM, automatically
- Turn transcripts into structured CRM updates
- Extract next steps and deal risks from every call
The CRM-update tax
You leave this lesson with your last three real call transcripts turned into structured CRM notes, dated tasks, and a drafted follow-up email - by a /call-extract skill that only writes what was actually said.
Every seller knows the ritual: the call ends, the next one starts in four minutes, and "I'll update the CRM later" becomes a half-remembered note on Friday - or nothing. The 2026 industry research puts numbers on it: sellers lose hours every week to data entry and admin, and users of agent-based tools are 1.7x overrepresented among top performers. The correlation isn't magic; it's reclaimed selling time and a CRM that actually reflects reality.
You already have the raw material. Whatever meeting recorder you use produces a transcript for every call - that's the only thing this lesson needs from it. This lesson builds the pipeline: transcript in, structured CRM update plus follow-up draft out, within minutes of the call ending.
Define the extraction schema first
The discipline that makes this reliable: decide the exact fields BEFORE any extraction. Free-form "summarize this call" output drifts; a pinned schema produces the same shape every time, which is what lets code route it into the CRM without a human re-reading everything.
{
"type": "object",
"properties": {
"summary": { "type": "string" },
"pain_points": { "type": "array", "items": { "type": "string" } },
"metrics_mentioned": { "type": "array", "items": { "type": "string" } },
"decision_process": { "type": ["string", "null"] },
"decision_makers": { "type": "array", "items": { "type": "string" } },
"champion": { "type": ["string", "null"] },
"competition": { "type": ["string", "null"] },
"objections": { "type": "array", "items": { "type": "string" } },
"risks": { "type": "array", "items": { "type": "string" } },
"next_steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"action": { "type": "string" },
"owner": { "type": "string" },
"due": { "type": ["string", "null"] }
},
"required": ["action", "owner", "due"],
"additionalProperties": false
}
},
"stage_recommendation": { "type": ["string", "null"] }
},
"required": ["summary", "next_steps", "risks"],
"additionalProperties": false
}Build the pipeline
Six steps, all from parts you've used before: a drop folder, a skill, a headless structured call, and your CRM connection.
- Get transcripts landing in a folder: most recorders export via integration, webhook, or email - the simplest reliable start is a transcripts/inbox/ folder you (or a hook) drop files into.
- Write the extraction skill: /call-extract reads a transcript, applies call-schema.json, and includes your pipeline-stage definitions from the /crm-hygiene skill so stage_recommendation speaks house vocabulary.
- Run the structured extraction headless per file: claude -p with --output-format json and --json-schema "$(cat call-schema.json)" (the flag takes the schema text, not a file path) - the
structured_outputfield goes to processed/{call_id}.json. - Route to the CRM via your MCP or API: the summary becomes a timestamped note on the deal, next_steps become tasks with owners and due dates, risks append to the deal's risk field.
- Draft the follow-up email from the same JSON - recap, agreed next steps, owed materials - into the rep's drafts folder. Drafted, never auto-sent; the rep reads and sends.
- Process your last 3 real calls and compare the output to whatever notes you took by hand. The machine's notes are usually more complete; your judgment on stage and risk is usually better - which is why stage changes stay human-approved.
claude -p "/call-extract transcripts/inbox/acme-2026-09-26.txt" \
--output-format json \
--json-schema "$(cat call-schema.json)" \
| jq '.structured_output' \
> processed/acme-2026-09-26.json
# --json-schema takes the schema itself, not a path, and the
# typed result arrives in the structured_output field.
# No --bare here: bare mode skips skills and CLAUDE.md, so
# /call-extract would not exist. -p starts in Manual permission
# mode on every plan, so pass --allowedTools for anything the
# skill needs beyond reading the transcript.Risks and next steps: the fields that pay rent
Summaries are nice; next_steps and risks are the fields that change outcomes. A deal where every call's commitments land as dated CRM tasks doesn't develop the "wait, who was sending that proposal?" gap. A deal where every mentioned risk accumulates in one field gives your pipeline review actual material instead of vibes.
- Next steps with owners and dates become CRM tasks automatically - including the PROSPECT's commitments, which are the ones reps forget to track and the strongest signal of deal momentum.
- Risks compound across calls: "budget owner not yet involved" appearing in three consecutive extractions is a forecast conversation waiting to happen.
- stage_recommendation versus actual stage is your deal-drift detector - when they disagree for two calls running, the hygiene agent from lesson 4 flags it.
For teams: consent, consistency, and coaching
A solo seller's transcripts are their own business. A team's transcripts are shared pipeline data, coaching material, and a privacy surface - which means a few decisions need making once, out loud.
Do this now
Sources and further reading
Want us to set it up with you, end to end?
Three one-on-one sessions. We train you on your real stack and build your first agents together, until you can run it yourself. You keep everything.