Build guide

How I Built a Retell AI Voice Agent That Logs Calls to Google Sheets

A Retell voice agent that extracts caller details and pipes them through n8n into a Google Sheet, one row per call.

Retell AIn8nGoogle Sheets
Feb 5, 2026
Optimized for

What you'll build

A Retell voice agent that answers calls, extracts exactly the data you care about (full name, company, phone number), and pipes it through n8n into a Google Sheet - one clean row per call. No parsing full transcripts, no code. The whole n8n side is three nodes. Swap Google Sheets for Airtable or Excel if that's your stack - the flow is identical.

What you'll need

Step 1: Create the Retell agent

In Retell, create a new voice agent - single prompt is fine here, we're not worried about the prompt today, we're worried about the automation. The only two settings we're actually touching are post-call data extraction and webhook settings.

Delete the template prompt and keep it dead simple:

You are a friendly assistant for company AI Waterside. Your task is to
collect the full name of clients calling in as well as their company
name, as well as storing their phone number.

Keep the call concise after collecting the full name and the company name.

Literally a two-line prompt. Publish it.

Step 2: Set up post-call data extraction

This is the tool that makes the whole thing worth it - instead of taking the entire transcript and piecing it apart, you pull only the parts you want. Add these fields:

full_name      Make sure to extract the full name of the client.
company_name   Make sure to extract the full company name of the client.
phone_number   Extract the phone number from the call logs without
               having to ask the client.

The descriptions can be this simple (toss them in ChatGPT if you want them more detailed). The phone number one is my favorite trick: callers are almost always calling from the number they want a callback on, so pull it from the call logs instead of making the agent ask for it, repeat it back, and get it wrong.

Step 3: Create the webhook in n8n

New workflow in n8n → add a Webhook node:

URL:          Production URL (not test)
HTTP method:  POST

Copy the production URL, paste it into Retell under agent-level webhook in webhook settings, and publish the agent again.

If you use the production URL, calls only reach it after the n8n workflow is published. Forgetting this is the most common mistake here - I made it a million times before figuring it out (and once more on camera).

Step 4: Make a test call and pin the data

Hit Execute workflow in n8n so it's listening, then test-call your agent and give it a fake name and company ("John Smith, Smith Engineers").

Check Executions in n8n - you'll see three executions from that one call. Retell fires three events at your webhook: call started, call ended, and call analyzed. The one you want is call_analyzed - that's where the extracted data lives. Open that execution and Copy to editor, which pins the data in your webhook node so you can map fields in the next steps.

Step 5: Add a filter for call_analyzed

Add a Filter node after the webhook. In the pinned data, find body, drag event into the first value box - it should read:

{{ $json.body.event }}

Set it equal to call_analyzed (type this one in - you can't drag it). If your expression looks any different, it won't work.

Without this filter, call_started and call_ended would flow through too and populate empty rows in your sheet. Execute the step - only the analyzed payload should come out the other side.

Step 6: Create the Google Sheet

Blank sheet with four columns:

Call ID | Full Name | Company Name | Phone Number

Step 7: Connect the Sheets node and map the fields

Add a Google Sheets → Append or update row node (credential is just sign-in-with-Google), pick your sheet, and set Column to match on to Call ID. This matters: Call ID is unique to every call, so rows never get jumbled when multiple calls come through.

Then drag over each field - call ID, full name, company name, phone number. Always map from the filter node's output, not the webhook node - that way future calls populate fresh data instead of replaying the pinned test call.

Execute the step: all four data points land in the sheet. (Phone number will be blank if you called from your laptop - there's no number attached. Call from a real phone and it flows through.)

Step 8: Unpin, publish, and call it for real

Unpin the test data on the webhook node, publish the workflow, and call the agent again - this time without executing anything manually. Three executions fire, the filter lets one through, and the row appears: call ID, name, company.

Bonus debugging trick: if a name in your sheet looks wrong ("that can't be right - the agent definitely misheard it"), copy its Call ID, go to Retell → call history, filter by that call ID, and play the recording to hear what was actually said.

To take real calls: in Retell hit Buy new number, pick Twilio or Telnyx, choose your area code, buy it for about two bucks, and connect it to the agent.

That's it - three nodes in n8n and two Retell settings, and every call logs itself.

Resources

← Back to the library Good luck and happy building