How to launch an AI automation agency offering voice AI agents for local businesses A developer has published a guide for building an AI automation agency that offers voice AI agents to local businesses. The service uses n8n, Anthropic's Claude, ElevenLabs, and Twilio to create a hands-free phone front desk that can schedule appointments and qualify leads. The guide includes a step-by-step workflow and a client-acquisition script, with an estimated build time of 12-16 hours. You'll build a repeatable service that lets plumbers, dentists, and other service-business owners answer calls with a natural-sounding, AI-driven voice that schedules appointments, qualifies leads, and captures payments. The result is a hands-free phone front-desk that you can sell as a monthly subscription and use to acquire new clients for your agency. What you'll get: a working n8n workflow that wires Anthropic's Claude, ElevenLabs text-to-speech, and Twilio Programmable Voice together, plus a go-to client-acquisition script that turns the service into a scalable AI automation agency. | Tool | Plan / Price | Role | |---|---|---| | n8n self-hosted Docker | Free self-hosted - see Docker Hub for latest image | Orchestrates API calls, stores conversation state | | Twilio Programmable Voice | Pay-as-you-go - check Twilio pricing page | Provides inbound phone numbers and SIP bridge | | Anthropic Claude API | Usage-based - check Anthropic pricing page | Generates conversational replies | | ElevenLabs TTS API | Usage-based - check ElevenLabs pricing page | Turns Claude's text into a lifelike voice | | Cloudflare DNS + SSL | Free tier available - verify limits | Publishes a secure webhook for Twilio | | Git optional | Free | Version-controls workflow JSON | We avoid stating exact free-tier caps; always verify the current provider pricing. Estimated time-to-build: 12-16 hours total including testing and client-onboarding script . Voice AI is the combination of speech-to-text, natural-language generation, and text-to-speech that lets a computer hold a phone conversation. In this guide we skip the speech-to-text step by letting Twilio forward the caller's audio to our n8n webhook; the rest happens via APIs. Key insight:The biggest revenue lever for an AI automation agency is the repeatable client-acquisition funnel, not the underlying technology. Below is a step-by-step walkthrough. Every step mentions the exact UI field, API endpoint, or n8n node name so you can copy-paste without guessing. docker run -d \ --name n8n \ -p 5678:5678 \ -e N8N BASIC AUTH ACTIVE=true \ -e N8N BASIC AUTH USER=admin \ -e N8N BASIC AUTH PASSWORD=CHANGE ME \ n8nio/n8n:latest voice.youragency.com to your server's IP in Cloudflare DNS. https://voice.youragency.com/webhook to your n8n port 5678 . When you browse to https://voice.youragency.com/webhook , you should see a JSON "Welcome" response - that tells you the endpoint is reachable. https://voice.youragency.com/webhook . CallSid and raw audio stream to your n8n webhook every time the number is dialed. Open n8n, click New Workflow , and add the following nodes in order: | Node | Purpose | |---|---| Webhook | Receives Twilio's inbound call payload | Set named Extract Speech | Pulls CallSid and From fields into variables | HTTP Request Anthropic | Sends the conversation transcript to Claude and gets a text reply | HTTP Request ElevenLabs | Sends Claude's reply text to ElevenLabs TTS and receives an audio URL | Twilio Make Call | Plays the TTS audio back to the caller | NoOp End | Returns a 200 OK to Twilio | What this does: Calls Claude with a prompt that includes the latest caller input and a short service-specific script. { "name": "Anthropic Claude", "type": "n8n-nodes-base.httpRequest", "position": 600,200 , "parameters": { "url": "https://api.anthropic.com/v1/complete", "method": "POST", "jsonParameters": true, "options": { "bodyContentType": "json" }, "bodyParametersJson": { "model": "claude-3-sonnet-20240229", "max tokens": 150, "temperature": 0.3, "prompt": "You are a friendly office assistant for a local {{ $json.service type }}. The caller says: \"{{ $json.caller text }}\". Respond with a concise answer, ask for the needed information e.g., appointment date , and keep the tone professional." }, "authentication": "headerAuth", "headerAuth": { "name": "Authorization", "value": "Bearer {{ $env.ANTHROPIC API KEY }}" } } } Why it matters: The prompt is service-specific {{ $json.service type }} so the same workflow can serve plumbers, dentists, or any other service business automation client. { "name": "ElevenLabs TTS", "type": "n8n-nodes-base.httpRequest", "position": 900,200 , "parameters": { "url": "https://api.elevenlabs.io/v1/text-to-speech/{{ $env.ELEVENLABS VOICE ID }}/stream", "method": "POST", "jsonParameters": false, "options": { "bodyContentType": "raw", "responseFormat": "json" }, "bodyParametersJson": { "text": "{{ $node 'Anthropic Claude' .json.completion }}" }, "authentication": "headerAuth", "headerAuth": { "name": "xi-api-key", "value": "{{ $env.ELEVENLABS API KEY }}" } } } The node streams the generated audio back to Twilio in the next step. Add a Twilio node type Make Call and set: {{ $json.From }} the original caller