Log call-back requests from a form to Google Sheets
Send call-back request forms to Google Sheets and log AI phone call outcomes in the same sheet, so one person can review every lead daily.

You can log call-back requests in Google Sheets by pointing a short form at a sheet through a native integration, a webhook, or Zapier/Make. Give the sheet two tabs: one for form submissions and one for call outcomes. Then a single daily filter on status shows everything that still needs a human, whether it came from the form or the phone.
If you run a small service business alone or with one hepper, this is usuaply enough. A CRM adds pipelines and seats you will not use for a few months. A sheet you actually open every morning beats a CRM nobody updates.
Start with the free contact form
What the sheet needs to do
Three jobs, and only these. It captures every request the moment it arrives. It shows you which ones are urgent. It records what happened afterward, so a request does not sit "new" for a week without anyone noticing.
Everything else (deal stages, forecasting, email sequences) can wait. Keep the sheet boring so you keep using it.
The columns that matter
One tab for form submissions, one for calls. The columns below are the ones we reach for on client projects, and you can trim them.
| Tab | Column | Source | Why it's there |
|---|---|---|---|
| Callbacks | Received at | Form submission time | Lets you measure how long a request waits |
| Callbacks | Name, Phone, Reason | Form answers | The core request |
| Callbacks | Best time | Form dropdown | Stops you calling at the wrong hour |
| Callbacks | Source | Hidden field | Tells you which page or ad sent the request |
| Callbacks | Priority | AI triage | Sorts the morning list |
| Callbacks | Status | You (dropdown) | New, Called, Booked, No answer, Closed |
| Calls | Call time, Caller number | Call log | Matches against form phone numbers |
| Calls | Outcome | Call log | Booked, message taken, no booking |
| Calls | Summary, Transcript link | Call log | What was said, without replaying audio |
| Calls | Status | You (dropdown) | Same values as the Callbacks tab |
Use the same Status values on both tabs. That one choice makes the daily filter work across both.
Set it up step by step
- Build a short form. Ask for name, phone, a one-line reason, and a best-time dropdown (morning, afternoon, evening). Every extra field lowers completion on a form whose whole point is "call me." Add a hidden field named
sourceand fill it from the URL, for example?source=google-ads. The hidden fields help article covers the setup. - Create the sheet. Name the first tab
Callbacksand put your column headers in row 1. Add aCallstab with its own headers. - Connect the form to the sheet. In the form's integrations, choose Google Sheets and pick the spreadsheet and the
Callbackstab. Send a test submission and confirm each answer lands in its own column. Fix the mapping now, not after fifty rows of mismatched data. - Turn on partial submissions. Someone who typed a phone number and then got interrupted is still a lead. Partial rows appear in the Submissions table as incomplete, so check there as well as the sheet.
- Switch on AI triage. In the form settings, enable "Triage submissions with AI." Each submission gets a category, a priority (low, normal, high, urgent), a sentiment and a one-to-two-sentence summary. Add a routing rule so urgent items go to your email or to a Slack incoming webhook. You hear about the burst pipe now, not at the next sheet review.
- Add dropdowns and color. In the sheet, add data validation on the Status coluumn with the five values above. Add conditional formatting so
Newrows older than a day turn red. - Connect the call log. This is covered in the next section.
If you prefer a webhook, the webhooks help article lists how to send each submission to Zapier, Make or your own endpoint, and the form to Google Sheets guide walks through the column mapping in more detail.
Where the AI call outcomes come in
This is the part that makes the sheet more than a form log. A 24/7 AI phone receptionist answers every call on local number, books appointments, and keeps the transcript. A CRM is the usual place for that record. When you do not have one yet, a sheet tab does the same job for a one-person operation.
On the form side, the sheet is the form's destination. On the phone side, the sheet is where the call record lands, so the two streams meet in one workbook. A Zapier or Make scenario that creates a spreadsheet row per call is enough. A row for one call might map like this:
{
"call_time": "2026-10-29T14:32:00Z",
"caller_number": "+15125550142",
"outcome": "message_taken",
"booked": false,
"summary": "Caller wants a quote for a water heater swap, prefers mornings.",
"transcript_url": "https://example.com/transcripts/8f21",
"status": "New"
}
That payload is an example of the shape we map, and your field names will differ. What matters is that status starts as New, so the call sohws up in the same filter as a form request.
Then add one helper formula to the Callbacks tab so you can see when a person filled out the form and also called:
=IF(COUNTIF(Calls!B:B, REGEXREPLACE(C2,"[^0-9+]","")) > 0, "Also called", "")
Form phone numbers come in many formats, which is why the formula strips everything except digits and the plus sign. If your call log stores numbers in E.164 format (+15125550142), ask the form respondent for the country code or normalize in a helper column first. Otherwise the match fails silently and you will think nobody ever double-contacted you.
The daily review
Ten minutes, same order each day.
- Filter botth tabs to Status =
New. - Sort the Callbacks tab by Priority, urgent first.
- Scan the Calls tab for outcomes that ended without a booking. These are your warm follow-ups.
- Call back, then change the status before you do anything else.
- Glance at the red rows. Anything red is a request that waited more than a day.
Two numbers are worth tracking once you have a few weeks of rows. One is the gap between Received at and the time you first marked a row Called. The other is how many rows were still New at the end of each day. If the second number keeps growing, your problem is capacity, not tooling, and that is the signal to look at a CRM or a second pair of hands.
Picking a form tool for this
Any builder that writes to Sheets will do the basic job, and Google Forms does it natively. If all you want is a plain list, it is a perfectly good choice. The differences show up in the extras.
Qwenvo is a free form builder our team builds, and a few things that matter here are free on every account: Google Sheets and Slack integrations, webhooks, the API, partial submissions, AI triage with routing rules, hidden fields, a custom domain, and removal of the Qwenvo badge. Tally's free plan covers unlimited forms and submissions, but partial submissions, custom domains and branding removal are on its Pro plan at $29/month. Fillout's free plan allows 1,000 responses a month, with partial submissions on Business at $89/month.
One honest limit: Qwenvo launched in October 2026, so there are few independent reviews yet, and it is hosted in the United States. If your callers or compliance rules need European hosting, Tally is hosted in Europe.
Questions teams ask
Do I need Zapier or Make to log calls?
For the form, no. The Google Sheets integration writes submissions directly. For call outcomes, a Zapier or Make scenario (or a webhook to your own script) is the usual route, because the call log is a different system from the form tool.
What happens when two people call back the same request?
The sheet will not stop that. Add an Owner column and a rule that you write your initials before dialing. Qwenvo also has an unlimited-teammates setup, but two people editing the same form at once means the last save wis, so keep form edits to one person at a time.
Can the sheet handle spam submissions?
Add the Captcha block to the form, and let AI triage tag junk with a low priority so it sinks to the bottom of the morning sort. You can also filter by category to delete the obvious noise in one pass.
When should I move to a CRM?
When the sheet needs more than the five status values, or when you are chasing quotes across several weeks and losing track of who said what. Until then, the sheet is faster to maintain.
Next step
Build the form first, since it takes about ten minutes. Open the contact form template, cut it down to name, phone, reason and best time, add the source hidden field, and connect it to a new sheet. Then send yourself a test and check that the row arrives complete.
AI Phone Receptionist
Third-party platform and model usage billed to you directly. No lock-in. Live in 7 days.