A call can leave sales with clear answers and still leave the CRM incomplete. The caller corrected a seat count, declined a budget question, and asked for a callback. A summary may capture all three, but the team still needs the right contact fields and a task someone can act on.
This guide follows a software-demo inquiry from the caller's answers to the resulting CRM record. You'll see which fields change, which stay untouched, and how to handle a callback task that fails to save. The example is fictional: its values and results show the intended behavior, not a customer deployment or a live product test.
What Voice AI CRM Integration Actually Does
A CRM is the system that holds customer records and related activities. Voice AI CRM integration connects an AI phone agent to that system so it can retrieve approved context and request permitted updates at different points:
- Before or during a call: retrieve approved context, such as the assigned sales representative.
- During a call: perform an action needed for the conversation, such as checking availability in a connected scheduling system. The agent needs a verified result before confirming the action.
- After a call: extract the final answers, prepare a note, and request the permitted updates.
Reading information and writing updates are separate capabilities. Confirm both for the connection you choose.
The receiving CRM also needs to store information in the right place. A call activity records the interaction. A note explains what was discussed. A typed field holds a value the CRM can use in filters or workflows, such as a seat count. A task assigns work to someone. Writing "sales should call back" in a note does not create that task.
The field map should follow the use case. In a real estate workflow, that can include the property or project of interest, buyer or renter requirements, viewing request, qualification answers, assigned agent, and unresolved questions; our guide to AI voice agents for real estate shows how those records support routing and follow-up.
Analysis and saving happen separately, too. For example, Retell's webhook documentation distinguishes call_ended, which excludes analysis data, from call_analyzed, which includes it. A webhook is a notification one system sends another when an event occurs. The integration must use the notification that contains the information it needs.
Our AI voice agent guide explains the wider call pipeline. Here, the focus is turning the completed conversation into checked CRM updates.
Choose How the Call Reaches Your CRM
Choose a connection by the operations it supports. A published integration may cover standard call logging while leaving custom fields or task associations to additional configuration.
| Connection method | When to consider it | What to verify |
|---|---|---|
| Packaged CRM connector | Its supported actions match your workflow | Read and write scope, custom fields, related notes and tasks, permissions, and failure handling |
| Workflow automation platform | You need to connect supported events and actions across systems | Field conversion, branching, approvals, saved job history, duplicate handling, and maintenance ownership |
| Custom API integration | Required objects or business rules are not covered by the available connections | Engineering ownership, access controls, validation, recovery, and monitoring |

An API is an interface software uses to request information or actions. With a custom integration, an implementation team uses that interface to apply your rules and communicate with the CRM.
Conditional logic does not automatically require custom code. A connector or automation platform may already support it. Equally, a custom service still needs testing and an owner.
For HubSpot, Salesforce, or another CRM, ask the provider to demonstrate the exact workflow:
- Find the intended contact, lead, or other record type.
- Update the required property, including any custom field.
- Add a note and create a task linked to that record.
- Show what happens when the task cannot be saved.
Confirm required account permissions, plan access, and who maintains the connection. Use the simplest supported route that passes those checks.
Step 1: Define One Outcome and Its Field Map
For this example, the outcome is specific: record a caller's software-demo requirements and give sales a callback task. It does not include booking a meeting.
Field mapping means deciding which piece of call information belongs in which CRM field. Agree on that map before writing the agent's questions.
The following names are proposed fields for this guide, not built-in Airsound properties or a standard CRM format.
| Information | Proposed destination | Type | Save rule |
|---|---|---|---|
| Seats requested | Contact: voice_requested_seats |
Whole number | Use the caller's clear final answer; do not treat it as company headcount |
| Monthly budget in USD | Contact: voice_monthly_budget_usd |
Number | Save only when the amount, currency, and period are clear |
| Intended start date | Contact: voice_target_start_date |
Date | Save a clear date; preserve the old value if the new answer is unknown |
| Job title | Contact: job_title |
Text | Update only when supplied or confirmed |
| Call summary and evidence | Related call note | Text | Add a factual note once, with restricted access to supporting evidence |
| Sales callback request | Related task | Task | Assign an owner and internal due date under the approved routing rule |
Use each CRM property's internal identifier, not just its display label. HubSpot's legacy CRM API documentation, for example, distinguishes the property's name, type, and display configuration. Your CRM administrator should check the identifiers and formats for the API or connector version in use.
For every row, also record who approves changes to the rule, whether the information is required, and what to do when it is missing. A required answer that the caller cannot provide should trigger review, not a guessed value.
A preferred date is not a confirmed appointment. If the workflow will also book meetings, use a separate calendar action and verify its result. Our appointment-booking guide covers timezones, availability, and booking confirmation.
Step 2: Match the Caller Before You Change a Record
Before saving anything, establish which record the call belongs to and what the caller is authorized to change.
Start with a trusted CRM record ID when the workflow already has one. Otherwise, use the organization's approved matching information and confirmation process. HubSpot's legacy contacts API guide describes operations using record IDs and, for specified operations, email or a custom unique identifier. Other systems have their own matching rules.
A supplied ID or matching phone number helps locate a record. It does not prove that the person who answered is the intended contact. Ask the caller to provide appropriate information rather than reading protected details from a candidate record and asking them to agree.
Set explicit rules for uncertainty:
- Multiple possible matches: hold contact-linked updates, notes, and tasks for review.
- No match: follow the approved new-contact process.
- Lookup unavailable: treat it as a system problem, not evidence that the person is new.
For the example below, assume the approved checks have linked call-17 to contact-42. That association comes from the matching process, not from the model inventing a record ID.

Step 3: Turn the Call Into a Checked CRM Update
The next step is to turn the conversation into proposed values, then check them against the field map.
Check the Caller's Words
Here is the illustrative call excerpt:
T1, Caller: "We need 10 seats. Sorry, make that 12."
T2, Agent: "Do you have a monthly budget in US dollars?"
Caller: "I'd rather not share."
T3, Agent: "Do you have a start date in mind?"
Caller: "I don't know yet."
T4, Caller: "Please have sales call me to arrange a demo."
The final requested seat count is 12. The caller has not supplied a budget or start date, and has requested sales follow-up without booking a meeting.
In this example, job title was neither asked nor volunteered anywhere in the complete conversation. A short excerpt alone would not establish that.
Keep a short evidence reference for important values, including the speaker and a turn or timestamp. In T1, the correction supports 12. The agent's budget question in T2 is not evidence of a budget amount.
Keep Missing Answers Separate
Use distinct states for what happened in the conversation:
- Known: the caller supplied a supported value.
- Declined: the caller chose not to provide it.
- Unknown: the answer remained unclear or the caller did not know.
- Not asked: the complete conversation contained neither a question nor a volunteered answer for that field.
Analysis that is pending or failed belongs in a separate processing status. It does not mean the caller declined or had no answer.
Retell's extraction documentation notes that custom extraction fields are not populated when no conversation took place. Check availability before using a field; do not infer a caller's answer from an absent result.
Declining a budget question also does not mean declining future contact. Handle an explicit request to stop contact through the designated opt-out process, separately from missing profile information.
Use a Structured Post-Call Record
A schema defines the fields, types, and allowed values you expect. JSON is one common format for carrying the resulting data between systems.
This is a proposed internal record for our example, not an Airsound payload, a CRM API request, or formal JSON Schema:
{
"call_id": "call-17",
"analysis": {"state": "ready", "revision": 1},
"identity": {"state": "resolved", "record_id": "contact-42"},
"fields": {
"requested_seats": {"state": "known", "value": 12, "evidence": ["T1"]},
"monthly_budget_usd": {"state": "declined", "evidence": ["T2"]},
"target_start_date": {"state": "unknown", "evidence": ["T3"]},
"job_title": {"state": "not_asked", "evidence": []}
},
"follow_up": {
"action": "sales_callback",
"requested": true,
"evidence": ["T4"],
"execution": "not_started"
}
}The processing and matching systems supply the identifiers, analysis status, revision, and execution status. The model proposes conversation-derived values and evidence references. The authorized workflow decides what it may save.
Check the facts even when the JSON is valid. Vapi's structured outputs guide explicitly distinguishes matching a schema from producing truthful values.
Apply Only the Permitted Changes
The contact update should contain voice_requested_seats with value 12, formatted as the receiving CRM requires. The budget, start date, and job title are omitted from that update.
Do not substitute zero, false, null, or an empty string for a missing answer. Keep zero or false when those are the actual answers.
In the documented HubSpot legacy properties API, sending an empty string clears a property. Other CRMs may handle blanks differently. Keep intentional deletion separate from routine extraction.
The note should explain what remained unanswered. Preserving an old budget does not mean the caller reconfirmed it. Asking for a demo does not authorize the agent to change a sales stage, payment status, or record owner.

Step 4: Confirm What the CRM Actually Saved
Check the receiving CRM, not just the voice platform's conversation summary. Confirm the intended fields and inspect the related note and task.
For this illustrative example, the contact starts with the values below. Assume the field update and note succeed, but the callback task is rejected before any task is created.
| Item | Before the call | Expected result after the first attempt |
|---|---|---|
| Requested seats | 8 | 12 |
| Monthly budget | USD 2,400 | USD 2,400, preserved but not reconfirmed |
| Intended start date | October 5, 2026 | October 5, 2026, preserved but not reconfirmed |
| Job title | Operations manager | Operations manager, not discussed |
Note for call-17 |
None | One note, represented by note-81 |
Callback task for call-17 |
None | Not created; requires recovery |
| Meeting booking | None | None |
A suitable note would say: "Caller requested 12 seats after correcting an earlier answer. Declined to share a monthly budget. Start date unknown; job title not discussed. Requested a sales callback to arrange a demo. No meeting booked." It should reference the call and retain the relevant evidence.
Track the CRM operations separately. For example:
call-17:fields:v1: the seat update is saved and verified.call-17:note: the note is saved asnote-81and linked tocontact-42.call-17:callback: task creation failed and needs attention.
These are proposed tracking keys, not platform-specific features.
Recover the Failed Task
Fix the cause of the task rejection, then retry that operation without recreating the note. In our example, the approved routing rule assigns the task to rep-9, with an internal due date of September 14, 2026. This is a staff deadline, not a promised callback time.
The expected result after recovery is one open task, task-56, linked to contact-42, assigned to rep-9, and carrying that due date. The original note and preserved profile fields remain unchanged.
Task creation completes the CRM workflow. It does not mean sales has made the callback.
If a request times out instead of returning a clear rejection, its outcome may be unknown. Check the receiving system for an existing task before creating another. Store destination record IDs so recovery can reuse the correct items.
If the CRM accepted work for later processing, keep it pending until the documented completion check succeeds. When you need to verify a saved value or a link between records, check it through the CRM's supported tools. If that check is unavailable, mark the result unverified; do not create another copy.

Step 5: Test Retries, Conflicts, and Failed Saves
Make repeat requests safe before increasing traffic. This is often called idempotency: retrying the same intended operation must not create another note, task, or business effect.
The integration must store and enforce its operation keys, including when attempts arrive at the same time. A key added to JSON does nothing on its own. If the integration stops before recording whether a save succeeded, it must check the CRM before trying again. For multi-account systems, keep keys and record IDs scoped to the correct account.
Event handling and business-action handling need separate rules. Retell's webhook guide recommends combining the event type and call ID for per-call lifecycle notifications. A call-ended event must not suppress a later analysis-ready event. But reanalyzing the same call should not create a second callback task.
Likewise, HubSpot's webhook guide for legacy public apps says outgoing notifications may repeat or arrive out of order, and that eventId is not guaranteed unique. Choose identifiers according to the provider's documented behavior.
Use the following acceptance tests. Business owners can make scripted calls and inspect the records. The integration owner should simulate system failures in a test environment.
| Test owner | Scenario | Expected CRM behavior |
|---|---|---|
| Business owner and reviewer | Run the illustrative call, including the correction | Save 12 seats to the correct contact |
| Business owner and reviewer | Check whether evidence came from the caller or agent | Reject unsupported or wrong-speaker values |
| Business owner and reviewer | Decline budget, leave date unknown, omit title | Preserve the old properties and record distinct answer states |
| Integration owner | Return multiple matches or make lookup unavailable | Hold contact-linked writes; do not guess or create a duplicate |
| Integration owner | Delay analysis or prevent it completing | Wait or raise an exception; do not write empty answers |
| Integration owner | Repeat an event or reanalyze the call | Avoid another note or task for the same action |
| Integration owner | Time out after the CRM saves a task | Find the existing task before attempting another create |
| Integration owner | Save the field and note, but reject the task | Preserve successful work and recover the task |
| Integration owner | Save a note but fail to link it to the contact | Link the existing note instead of creating a replacement |
| Integration owner and CRM administrator | Edit the record before a delayed update arrives | Apply the conflict rule or request review; preserve newer work |
| Integration owner | Send an invalid value or remove write permission | Record the error and fix the cause before retrying |
| Business owner and reviewer | Ask the agent to change its rules or payment status | Reject unauthorized changes |
Temporary failures may justify a limited retry. Invalid data or missing permission needs correction. Keep unresolved work assigned and visible.
Do not rely on arrival order to choose the newest value. Compare the relevant record version or change history using the CRM's supported controls. A delayed result must not overwrite a person's newer edit.
Unresolved wrong-record writes, unauthorized changes, or duplicate actions should block rollout of the affected workflow. Keep those cases under review rather than treating an explanation of the failure as a passed test.

Step 6: Protect Access and Assign a Sync Owner
Give the integration only the information and actions the workflow needs. Use CRM permission controls where available and enforce the approved field list in the integration. Keep credentials out of prompts, transcripts, and routine logs.
Authenticate incoming notifications using the provider's documented method. Treat caller statements and transcript text as data, not instructions that can expand the agent's permissions.
Keep evidence excerpts short and access-controlled. Decide where recordings and transcripts are stored, who may review them, and how retention and deletion work across connected systems. Review recording notices, permitted data use, and deployment terms with the responsible team. Our Privacy Policy and Terms of Service are part of that review.
Assign an accountable owner and backup for the integration. They need a process for failed saves, unresolved identities, mapping changes, and tasks that remain incomplete. Choose a review frequency based on volume and how quickly staff need to act.
Recheck mappings and repeat the relevant failure tests whenever a connector or API version, event format, CRM field, or permission changes.
Monitor more than successful requests:
- Field accuracy: correct decisions divided by all reviewed field decisions, including values written and values deliberately left unchanged.
- Workflow completion: calls with every required item saved and correctly linked, divided by calls requiring that workflow.
- Sync delay: time from call end to the final required CRM result being verified.
- Exception age: how long unresolved work has waited for action.
Start with one clearly defined workflow and a volume the team can review. Keep a way to pause CRM writes and use the agreed human follow-up process while an issue is fixed.
Build the Workflow in Airsound
With Airsound, you can use our visual builder to collect call details and trigger CRM updates. We connect call workflows with CRMs, webhooks, calendars, and help desks.
Use preview calls to check the agent's questions, knowledge responses, and handoff rules. Then work with the integration owner to verify the resulting CRM records and simulate failed saves. Conversation testing and downstream recovery testing cover different parts of the workflow.
Our transcripts, outcomes, and workflow events support review. Configured fallbacks can transfer a call to a person, create a ticket, send a summary, or mark it for follow-up.
Bring the CRM record type, field map, permitted actions, and a sample call to implementation planning. Configure and validate the evidence rules and recovery behavior with the connected systems; the example in this guide is a workflow design, not a ready-made Airsound data format.
Your Next Step
Choose one workflow and complete its field map with the CRM owner. Use a test call to check the resulting record, including fields that should stay unchanged and tasks that need follow-up.
Request a demo and bring that map plus a failed-save scenario so we can discuss the workflow and its implementation requirements. If you're still deciding which inbound calls to automate, our AI receptionist guide covers the main use cases.







