Cindy Zhu.
Free guides
Marketing & ads Fish Audio

Speed to lead: an AI that calls every new lead in 60 seconds

Hey, it's Cindy 馃尡 This is the whole build from the video: your voice, cloned once, calling every new lead within a minute of them filling in your form.
btw the waitlist for AI System Club is now open! If you're keen on using AI to automate your content, video editing, job search, business or build AI agents, feel free to sign up (only if you want to hehe). Ps. the waitlist gets first dibs:)
Read this before you start, because it is the honest version. This is not free and it is not a one-click setup. You need a card, about US$35 to begin, and roughly an hour. You will also need an account on a hosting service, because the connector has to live somewhere that stays on. Every price below was read off the live pricing pages on 5 October 2026.

Speed is the whole point. InsideSales reviewed 5.7 million inbound leads across 400+ companies and found conversions were 8 times higher when the reply came within five minutes. That is their own customer data rather than an academic study, so take it as a strong signal and not a law. Most businesses still take hours.


The eight words you need

The rest of this page uses these. If you already know them, skip ahead.

API key A long password that lets one app act on your account in another. Treat it like a bank card number.
.env file A plain text file in your project folder where keys live, so they are never typed into a chat or pasted into code.
Webhook A message one app sends another the instant something happens. Your form sends one every time a lead fills it in.
Connector The small piece of software you are building. It catches the webhook and tells Fish Audio to dial.
Deploy Putting that software somewhere that is always on, so it works when your laptop is shut. This is a step, not a detail.
E.164 The phone format with the country code and a plus, like +61412345678. Fish Audio refuses anything else.
Dynamic variable A blank in your agent's script that gets filled per call, written {{first_name}}. The double curly braces matter.
Publish Fish Audio keeps a draft and a live version. Calls only ever run the live one, so every change needs publishing again.

What it actually costs

Both sides bill separately, so here is all of it in one place.

WhatCostWhy you need it
ChatGPT PlusUS$20 a monthGPT-6 Astra is not on Free or Go. On Plus, Astra is rationed to roughly 5 to 45 messages per five-hour window, and one long build prompt can use a good share of that.
Fish Audio PlusUS$15 a month, or US$132 a yearThe free plan is for "personal, non-commercial projects" only. Calling your own leads is commercial. Free also gives public voice slots only, so your cloned voice would sit in their public library.
Trial balanceone-time US$5About 60 minutes of conversation at the base rate. The same $5 also pays the phone surcharge and the number rental, so it is well under 60 minutes of real calling.
A phone numberUS$1.20 a monthCharged in daily slices while you hold it, and it stops when you release it.
The conversationUS$0.06 a minuteCovers speech recognition, the voice and the basic models only. Pick a non-basic model in the Builder and its tokens are billed on top.
HostingfreeCloudflare Workers' free plan allows 100,000 requests a day, which is far more than leads.
Then the per-country call charge, and this is the one that bites. The standard surcharge is one cent a minute, but named countries replace that rate rather than adding to it.
Calling aLandlineMobile
US or Canada+$0.01+$0.01
Australia+$0.03+$0.09
United Kingdom+$0.02+$0.03
Italy+$0.02+$0.05
Mexico+$0.02+$0.05
Japan+$0.10+$0.22

So a five minute call to an Australian mobile is $0.30 of conversation plus $0.45 of surcharge, which is $0.75, not the $0.35 a flat one cent rate would suggest. Ringing is never billed: metering starts when somebody picks up.

馃挕 Already have a business number? Importing your own number over SIP carries no telephony charges at all: no surcharge, no rental, no transfer fees. It bills like a web session. That makes it the cheapest route, not the fallback.

Four things that must be true first

All four of these are needed before the connector can place a single call. Sort them now rather than halfway through the build.

  1. Outbound calling switched on for your workspace. If a call returns outbound_disabled, that is what it means. The docs do not say how it is enabled, so message Fish Audio support and ask. Do this first, because waiting on a human is the slowest part of the whole build.
  2. Your agent published, not left as a draft. Calls run the published version. An unpublished agent fails with a 409, and you will not see that error, you will just get no call.
  3. A public https address for your connector. Fish Audio rejects localhost and private addresses. A script on your laptop will never receive anything, and a closed laptop receives nothing at all.
  4. A number and credit. You need a purchased or imported number, and a card on file. The $5 trial balance does not appear without one.

Step 1 路 Account, consent box, voice

  1. Open Agents in Fish Audio. It is in public beta and open to every account, with no application needed, so you can start straight away.
  2. Add the consent tick box to your form now, before anything else. Something like "I agree to receive an AI phone call about my enquiry." The connector you build in step three filters on it, so if the box does not exist when the connector goes live, it silently skips every single lead and you will think nothing is working.
  3. Clone your voice. About ten seconds of clean audio will start it, a minute gives a noticeably better result. Record somewhere quiet, speaking the way you would on a call rather than reading.
  4. Create your API key and save it in a file called .env in your project folder as FISH_API_KEY=your-key. Never paste a key into a chat window, including into Astra.

Step 2 路 Build the agent and write down two ids

This is the part that actually talks to your lead. Work through it in order, because three of these are switches that do nothing if you only mention them in the script.

  1. Create the agent and select your cloned voice.
  2. Paste the instructions below, and fill in every single bracket. This matters more than it looks: Fish Audio's models read anything left in square brackets as ordinary text, so an unedited template has your agent saying "calling a lead who just enquired about open square bracket offer" to a real person.
  3. Turn on the Hang up call switch in the agent's Tools. Telling it to hang up in the script does nothing on its own, the tool has to be enabled. This one matters because Fish Audio removed answering-machine detection, so voicemail now reports as answered and keeps billing. Without the switch your agent pitches a voicemail until the carrier cuts it off.
  4. Open the Analysis page and define what qualified means. Summaries are on by default, but extraction and evaluation are opt-in, set per agent, right here. Add a yes or no field called qualified with a one-line rule for when it is true. Skip this and you get summaries with a permanently empty flag, which is the one output this whole build exists to produce.
  5. Buy a phone number, or import your own over SIP. Numbers are purchasable in the US and Canada, and calls from them reach the US, Canada, Japan, the UK, Italy, Australia and Mexico. Leads outside the US and Canada will see a US caller ID, which does lower pickup rates.
  6. Publish the agent, then copy two things into a note: the agent id and the phone number id. Step three cannot run without both, and nothing else on this page will remind you.
copy the agent instructions
You are {{owner_name}}'s assistant calling a lead who just enquired about {{offer}}. Say you are an AI assistant in the first sentence, every time.

Greet them by name: {{first_name}}. Their enquiry was: {{enquiry}}.

Ask three questions, one at a time, and wait for the answer before moving on:
1. What they are trying to solve.
2. Their budget or the size of what they need.
3. When they want to start.

If they are a good fit, offer to book a call and say you will send the link by text. If they are not, thank them warmly and end the call. If they ask for a human, say someone will call back today, and do not try to keep them on the line.

Never invent prices, availability or guarantees. Keep every reply to one or two sentences. If nobody responds to your first question, say a short goodbye and end the call, because you are probably talking to a voicemail.
Note the double curly braces. {{first_name}} is a dynamic variable that gets filled in per call. If a variable has no matching value, Fish Audio leaves the raw {{first_name}} text sitting in the prompt rather than removing it, so the model may read it out. Set owner_name and offer as defaults on the agent, and the connector will supply first_name and enquiry per call.

Step 3 路 Let Astra build the connector

Open Codex in the ChatGPT desktop app, choose your project folder, and pick Astra Light in the model control under the message box. Work locally rather than in the cloud, because the connector needs your .env file and internet access is off by default in cloud environments until you turn it on.

Why Astra and not the Fish Audio MCP server. This is the thing most people get wrong. The Fish Audio MCP server does speech, transcription, images and video. It cannot create agents or place calls. What dials your leads is your API key, used by code Astra writes for you. Connecting the MCP server alone will never ring a phone. Astra only does the building: once it is deployed, nothing in the live flow touches OpenAI at all.
copy this prompt into Codex
Read these four pages before you write anything:
https://docs.fish.audio/agents/telephony/outbound-calls
https://docs.fish.audio/agents/build/dynamic-variables
https://docs.fish.audio/agents/monitor/webhooks
https://docs.fish.audio/agents/monitor/post-call-analysis

My Fish Audio key is FISH_API_KEY in .env. Load it from there and never print it.
My agent id is [agent id]. My phone number id is [phone number id].
My leads arrive from [Tally form / HighLevel / Pipedrive / Attio / Calendly].

1. Write a small connector for Cloudflare Workers that receives a webhook when a new lead arrives, reads their first name, phone number and enquiry, converts the number to E.164 using my country code [+61], and skips anyone who did not tick the consent box.
2. Place the call with POST /v1/agent/phone-calls, passing first_name and enquiry as dynamic variables, with an Idempotency-Key built from the lead id so nobody is ever called twice.
3. Handle the call.analyzed webhook and write the summary and the qualified flag back onto that lead in my CRM.
4. Walk me through deploying it to Cloudflare Workers step by step, including creating the account and setting FISH_API_KEY as a secret rather than putting it in the code.
5. Tell me the exact URL to paste into my lead source, and where to paste it.
6. Then send one test lead using my own phone number so I can hear it end to end.
Deploying is not optional, and this is where most people quietly fail. If Astra runs the connector on your machine it will work while you watch, then stop the moment you shut the laptop, with no error anywhere. Cloudflare Workers is free for this: 100,000 requests a day, always on, no card needed to start. Do not skip point 4 of the prompt. If your CRM cannot send new leads out on its own, put a Tally form in front of it, which fires a webhook instantly on the free plan.

Step 4 路 Check it actually works

Every one of these can fail while looking fine, so run all six yourself rather than trusting the test call.

  1. Submit your own lead through the real form, ticking the consent box, with your own mobile in international format. Your phone should ring within about a minute.
  2. Listen for your name. If the agent says "first name" or reads out curly braces, the variables are not connected and every call will do it.
  3. Let it reach the end and check it hangs up by itself. If it keeps talking after you stop responding, the Hang up call tool is still off.
  4. Open the call in Fish Audio and read the transcript. Confirm the summary is there and that the qualified field has a value. An empty flag means the Analysis page was never set up.
  5. Check your CRM for the summary written back onto that contact. If the call happened but nothing landed, the CRM credentials were never created.
  6. Close your laptop, wait five minutes, submit another test lead. If that one does not call you, the connector is running locally and nothing is deployed. This is the single most common failure and the only way to catch it.

The rules, so you do not get fined

An AI calling strangers in your voice is regulated, and the rules are not optional.

  1. Get consent in writing and keep the record. In the US, the FCC ruled in 2024 that AI-generated voices count as artificial voices under the TCPA, so marketing calls need prior express written consent. The tick box from step one is that record.
  2. Say it is an AI in the first sentence, every time. It is in the agent instructions above. Do not remove it.
  3. Tell people the call is recorded. Fish Audio stores the audio and the transcript of every call. Several US states require all parties to consent to recording, and Australian states have their own rules. Add a line to the opening and a line to your form.
  4. In Australia, check the Do Not Call Register and the permitted calling hours before any outbound campaign.
  5. Read the transcripts before you trust a qualified flag, at least for the first few dozen calls. A voicemail still reports as answered.

What this is, and what it is not

This is one voice agent making one outbound call per lead, asking three questions and offering a booking link. It is a fast first touch, which is the part most businesses lose leads on. It is not a sales team: there is no second attempt if nobody answers, no follow-up sequence, no inbound handling and no nurture. Build those separately once this one works.

Two more things worth knowing. The agent can warm transfer a live caller to a real person, briefing them first, which costs $0.025 a minute from the moment they are joined, and a transfer destination has to be configured before it will work. And Fish Audio says one agent handles ten calls at once, though they publish no concurrency figure in their docs, so treat ten as their number rather than a documented limit.


Fish Audio My link gives you 10,000 text-to-speech credits. Worth saying plainly: those are TTS credits, not agent minutes, and they are separate from the $5 trial balance that pays for calls.
Agent pricing Every figure on this page, including the per-country surcharge table.
Outbound calls Which countries you can reach and every error code you might hit.
Agent tools Where the Hang up call switch lives.
Post-call analysis Setting up the qualified field.
Cloudflare Workers Where the connector lives so it keeps running.
the waitlist is now open

AI System Club is launching soon

Build AI systems with me through recorded lessons you can follow at your own pace. Join the waitlist for first access and the founding price.

btw this list gets first dibs
the moment doors open :)