Call notes to CRM
Converts messy call notes into a CRM update a salesperson can check in a minute. Every field points back to the words in the notes, so nothing is invented.
Inputs
- Call notes: typed notes, a voicemail transcript or a meeting summary. See examples/call-notes.txt.
- The CRM's shape: the fields the team actually uses, the pipeline stages by their exact names, and who owns which kind of lead. A lightweight spreadsheet CRM counts. Ask for these once per business and keep them in the agent's notes, not the CRM login.
Read existing records only through the AHL Action Gateway or an export the owner gives you. The agent holds an agent token, never the CRM password or an API key, and stores no credentials in files or prompts. A write to the CRM is made by a person, or asked through the gateway and always held for the owner: in HubSpot, hubspot.create_note, hubspot.create_task or hubspot.update_property (a stage or a lead status, from a short list), once the owner has switched them on; for another CRM, a webhook.post to an address the owner registered. (Creating a deal, which needs a deal name, a stage and a pipeline by their internal ids, is not a gateway action; a person or the owner's integration does it.)
Steps
- Read the whole note first. Separate what the customer said, what our person said or promised, and our person's guesses ("I think", "not sure").
- Fill the contact fields the CRM uses. Copy phone numbers, emails and addresses exactly as written. For each field, keep the phrase from the notes it came from.
- Check for an existing record. If the notes hint the customer is already known, or a search of the export finds the same email or phone, say "update record X" instead of "create". If unsure, ask.
- Propose the deal: a name in the team's pattern, the stage chosen from the team's own list (never a new stage), what they want, and any budget or competing quote exactly as the customer put it, marked as their words.
- Write the next step: who, what, by when. Use the date and time the customer asked for. If the notes name no owner, propose the default owner for that lead type and mark it as a proposal.
- Write a short note for the record: 3 to 5 sentences of facts and commitments. Record promises exactly ("told her we'd check, nothing promised"), never stronger than the notes.
- Leave out sensitive details. Health conditions, children's details, immigration status, religion, finances beyond a stated budget, and anything about a third person stay out of the CRM. If a detail matters to the job, keep only the job-relevant part ("asked about air filtration"). List what you left out and why.
- List questions for the salesperson: conflicts, guesses, missing owners or dates.
Output
Markdown like examples/expected-crm-update.md: Contact table (field, value, source phrase), Deal table, Next step, Note to attach, Left out on purpose, Questions. If the business wants a file to import, add a CSV with the same fields after the person approves the proposal.
Edge cases
- Several people on one call: one contact block each; link them to one deal only if the notes say they buy together.
- Notes in shorthand you cannot read: quote the fragment under Questions; do not guess.
- A price was discussed: record it as said on the call and who said it. Quoting is a separate step from the price list.
- Customer said "don't call me" or asked not to be emailed: put the do-not-contact flag at the top and propose no follow-up by that channel.
- Recorded call: use only the transcript you were given; the owner is responsible for having told the caller.
Never
- Write, merge or delete CRM records itself, or create pipeline stages or fields.
- Invent a field value, a date, an owner, a budget or a promise that is not in the notes.
- Store health, children's or third-party personal details in the CRM.
- Send any message to the customer as part of this step.
- Keep a CRM password, API key or token anywhere.
Hand over
The salesperson who took the call checks each field against what was said, answers the questions, and enters or approves the update. In the first weeks, the owner compares a few proposals with the calls to tune the field list and the stage names.
The skill folder
Every file in the folder. Download each one into a folder with the same layout, or copy it.
call-notes-to-crm/ SKILL.md examples/call-notes.txt examples/expected-crm-update.md
SKILL.md
---
name: call-notes-to-crm
description: Turns rough notes from a sales or customer call into a proposed CRM update - contact fields, deal, stage, next step with an owner and date, and a short note - quoting the notes for every field and flagging anything uncertain or sensitive. Use when someone pastes call notes, a voicemail transcript or a meeting summary and wants it logged in the CRM or a lead spreadsheet. Proposes only; a person enters or approves the update.
metadata:
ahl-category: sales
ahl-jobs: sales, nurturing, quotes
ahl-industries: hvac, plumbing, roofing, consulting, insurance-agency, it-services, real-estate
ahl-connectors: hubspot, google-sheets
ahl-workflows: sales--05-turn-call-notes-into-a-draft-quote, sales--1863-consulting-statement-of-work-from-call-notes, sales--2341-any-lightweight-team-crm, front--02-after-hours-voicemail-to-callback-list
ahl-human-check: The salesperson checks every field against the call and enters or approves the update; nothing is written to the CRM without them.
ahl-proposed-status: approved
ahl-version: 2
ahl-sources: |
HubSpot — CRM API, Deals guide — https://developers.hubspot.com/docs/api-reference/crm-deals-v3/guide — 2026-10-06
---
# Call notes to CRM
Converts messy call notes into a CRM update a salesperson can check in a minute. Every field points back to the words in the notes, so nothing is invented.
## Inputs
- **Call notes**: typed notes, a voicemail transcript or a meeting summary. See [examples/call-notes.txt](examples/call-notes.txt).
- **The CRM's shape**: the fields the team actually uses, the pipeline stages by their exact names, and who owns which kind of lead. A lightweight spreadsheet CRM counts. Ask for these once per business and keep them in the agent's notes, not the CRM login.
Read existing records only through the AHL Action Gateway or an export the owner gives you. The agent holds an agent token, never the CRM password or an API key, and stores no credentials in files or prompts. A write to the CRM is made by a person, or asked through the gateway and always held for the owner: in HubSpot, `hubspot.create_note`, `hubspot.create_task` or `hubspot.update_property` (a stage or a lead status, from a short list), once the owner has switched them on; for another CRM, a `webhook.post` to an address the owner registered. (Creating a deal, which needs a deal name, a stage and a pipeline by their internal ids, is not a gateway action; a person or the owner's integration does it.)
## Steps
1. **Read the whole note first.** Separate what the customer said, what our person said or promised, and our person's guesses ("I think", "not sure").
2. **Fill the contact fields** the CRM uses. Copy phone numbers, emails and addresses exactly as written. For each field, keep the phrase from the notes it came from.
3. **Check for an existing record.** If the notes hint the customer is already known, or a search of the export finds the same email or phone, say "update record X" instead of "create". If unsure, ask.
4. **Propose the deal**: a name in the team's pattern, the stage chosen from the team's own list (never a new stage), what they want, and any budget or competing quote exactly as the customer put it, marked as their words.
5. **Write the next step**: who, what, by when. Use the date and time the customer asked for. If the notes name no owner, propose the default owner for that lead type and mark it as a proposal.
6. **Write a short note** for the record: 3 to 5 sentences of facts and commitments. Record promises exactly ("told her we'd check, nothing promised"), never stronger than the notes.
7. **Leave out sensitive details.** Health conditions, children's details, immigration status, religion, finances beyond a stated budget, and anything about a third person stay out of the CRM. If a detail matters to the job, keep only the job-relevant part ("asked about air filtration"). List what you left out and why.
8. **List questions** for the salesperson: conflicts, guesses, missing owners or dates.
## Output
Markdown like [examples/expected-crm-update.md](examples/expected-crm-update.md): Contact table (field, value, source phrase), Deal table, Next step, Note to attach, Left out on purpose, Questions. If the business wants a file to import, add a CSV with the same fields after the person approves the proposal.
## Edge cases
- **Several people on one call**: one contact block each; link them to one deal only if the notes say they buy together.
- **Notes in shorthand** you cannot read: quote the fragment under Questions; do not guess.
- **A price was discussed**: record it as said on the call and who said it. Quoting is a separate step from the price list.
- **Customer said "don't call me" or asked not to be emailed**: put the do-not-contact flag at the top and propose no follow-up by that channel.
- **Recorded call**: use only the transcript you were given; the owner is responsible for having told the caller.
## Never
- Write, merge or delete CRM records itself, or create pipeline stages or fields.
- Invent a field value, a date, an owner, a budget or a promise that is not in the notes.
- Store health, children's or third-party personal details in the CRM.
- Send any message to the customer as part of this step.
- Keep a CRM password, API key or token anywhere.
## Hand over
The salesperson who took the call checks each field against what was said, answers the questions, and enters or approves the update. In the first weeks, the owner compares a few proposals with the calls to tune the field list and the stage names.
examples/call-notes.txt
Call w/ Dana Whitfield, Tue 6 Oct 2026 ~2:10pm, she called in (found us on the website) - owns a 3-bed house at 22 Alder Way, furnace is 19 yrs old, making a banging noise when it starts - wants a quote for replacement, maybe heat pump?? asked if there are rebates - told her I'd check, didnt promise anything - budget "around 8 or 9k" her words - best time to call back: weekday after 4. cell 555-010-6612. email dana.w@example.com - her husband has asthma so she asked about filters/air quality - wants someone out next week, Thurs or Fri ideally - said she got a quote from another company already, didnt say how much - Already a customer? I think we did her AC tune-up last spring, not sure - me: said Chris would call to book the in-home estimate
examples/expected-crm-update.md
# CRM update proposal: call with Dana Whitfield, 2026-10-06 (invented example: Northgate Heating & Air) Status: proposal only. A person checks it and enters it in the CRM. ## Contact | Field | Value | From the notes | |---|---|---| | First name | Dana | "Call w/ Dana Whitfield" | | Last name | Whitfield | same | | Mobile | 555-010-6612 | "cell 555-010-6612" | | Email | dana.w@example.com | stated | | Service address | 22 Alder Way | stated | | Best time to call | Weekdays after 4 p.m. | stated | | Lead source | Website | "found us on the website" | | Existing customer? | **Check**: notes say "I think we did her AC tune-up last spring, not sure". Search the CRM before creating a new contact. | | ## Deal | Field | Value | |---|---| | Deal name | Whitfield, 22 Alder Way, furnace replacement | | Stage | New lead, estimate to book (the business's own stage name; pick from the pipeline) | | Interest | Furnace replacement; asked about a heat pump | | Budget the customer stated | "around 8 or 9k" (her words; not a quote) | | Competing quote | Yes, amount not given | ## Next step - **Owner:** Chris. **Action:** call Dana to book the in-home estimate. **By:** next weekday after 4 p.m. (Wed 7 Oct). **Customer asked for:** a visit Thu 15 or Fri 16 Oct. ## Note to attach to the deal > Inbound call 2026-10-06. 19-year-old furnace banging on start-up; wants a replacement quote, open to a heat pump. Asked about rebates: told her we would check, nothing promised. Asked about filters and air quality. Has another quote. Wants an estimate visit next Thu or Fri. Chris to call back to book. ## Left out on purpose - "Her husband has asthma": a health detail about a third person. Not stored in the CRM. If filtration matters to the estimate, the note says "asked about filters and air quality", which is enough. ## Questions for the person entering this 1. Is Dana already a contact (AC tune-up last spring)? If so, update that record instead of creating one. 2. Who checks rebate eligibility before Chris calls? The notes promise only that we would check.
Use it in Claude Code
Put the folder at .claude/skills/call-notes-to-crm/ in your project (or ~/.claude/skills/call-notes-to-crm/ to use it in every project). Claude Code finds SKILL.md there and uses the skill when a request matches its description.
Other agents that read the Agent Skills format take the same folder.
Sources
- HubSpot: CRM API, Deals guideChecked 6 Oct 2026