Launch and monitor AI calling campaigns from a Google Sheet

Pick a call list, map your columns, and dispatch. Watch every call land in real time, read transcripts, and stop the whole campaign in one click.

App
Bland AIGoogle SheetsSlack BotSalesOperationsData SyncNotifications & Alerts
PromptCreate

Build me an app my operations team opens to launch and babysit outbound AI calling campaigns with Bland AI, instead of uploading a CSV to the Bland dashboard and then squinting at call logs on a separate screen. The app covers list preparation, dispatch, live progress and the kill switch. Working through the results after a campaign has ended is deliberately out of scope.

Call lists (home screen)

The home screen lists the Google Sheets call lists the team has saved in the app. Saving a list means pasting a spreadsheet URL or id and giving it a friendly name, stored in app storage, because there is no operation for browsing Drive. For each saved list show the friendly name, the spreadsheet title, its tabs, and the last campaign run from it. Use Google Sheets Get Spreadsheet to pull the spreadsheet title and tab names.

Campaign setup

Picking a list opens setup. The user chooses a tab, and the app reads the top rows of that tab with Google Sheets Get Values to get the headers and sample data. Present a column mapping panel where sheet columns are mapped to per call variables: phone is required, first name, last name and company are the common ones, and the user can add extra custom variables that get passed into the call. Guess the mapping from the header names and let the user correct it. Remember the last mapping per spreadsheet and tab so a repeat campaign is one click.

Show a preview of the first five to ten mapped rows exactly as they will be sent, so the user can confirm the variables resolve to sensible values before anything dials. Setup also collects the campaign name, the Bland call script or pathway to run, the from number, and the call settings the team changes often such as voice, max duration and whether to record.

Pre launch validation

Validate every row before the launch button is enabled, and show the result as a clear breakdown of ready, flagged and suppressed rows.

  • Normalise every phone number to E.164 using a default country code the user picks. Bland rejects anything that is not E.164, so this has to happen before dispatch rather than after.

  • Flag rows with a missing or malformed number into a Needs attention list showing the row number and the raw value. Flagged rows are excluded from dispatch and never silently dropped. Let the user fix the sheet and re-run validation.

  • Suppress numbers already called recently. Read recent calls with Bland AI List Calls filtered by date, build the set of numbers already dialed inside the suppression window, and hold matching rows back. Default the window to three days and make it editable. Show each suppressed row with the date it was last called.

  • De-duplicate numbers within the list itself so the same person is not queued twice in one campaign.

The launch button states exactly how many rows will actually be dialed and asks for confirmation before dispatching.

Dispatch

Dispatch sends the validated rows to Bland AI Create Batch as a single batch, with the shared call configuration and the per row variables from the mapping. Store the returned batch id on the campaign record along with the row mapping, so every dialed call can be traced back to its sheet row. Respect Bland's rule that outbound calls to the same number within ten seconds are rejected: pace dispatch so a repeated number is never sent twice inside that window, and keep the same pacing if a large list is split across several batches.

Live monitor

After dispatch the app switches to the monitor view for that campaign. Poll Bland AI Get Batch for progress counts and per call status, and Bland AI List Active Calls for what is on the phone right now, refreshing every few seconds while the campaign runs and backing off once it completes. The header shows completed, in flight, failed and remaining counts climbing, plus the connect rate. Below it, a row per call shows the person, number, status, duration and outcome, filterable by status.

Clicking a row opens a detail panel that calls Bland AI Get Call Details for the full transcript, metadata and analysis, so an ops person can read exactly what the agent said without leaving the app. That panel also has a stop button for the single call, using Bland AI Stop Active Call.

Kill switch

The monitor view carries a prominent kill switch, because the whole point of this screen is catching a script that is clearly going wrong. It offers two levels: stop this campaign, which runs Bland AI Stop Batch to cancel the pending calls in the batch, and stop everything, which runs Bland AI Stop All Active Calls to terminate every live call on the account. Both confirm first and spell out what will happen. Record who pulled it and when on the campaign record.

Wrap up

When a campaign finishes, or the moment someone pulls the kill switch, the app writes results back. Append one row per dialed contact to a results tab in the same spreadsheet with Google Sheets Append Values, carrying the original sheet row, the name, the number in E.164, call status, duration, outcome, and the Bland call id. Then post a short campaign summary to Slack with Slack Bot Send a Message: campaign name, list and tab, totals dialed, completed, failed and suppressed, connect rate, run time, and a note if it was stopped early and by whom.

History, persistence and behaviour

Keep a campaign history view listing past campaigns with their counts and status, held in app storage and refreshed against Bland AI List Batches, so the monitor view can be reopened for a campaign that is still running. Persist saved call lists, per tab column mappings, suppression window, default country code, results tab name and the Slack channel in app storage so the team is not re-entering settings on every run.

Guardrails matter more than speed here. Never dial a row that failed validation, never dial a suppressed number, always show the exact dial count before launch, and keep the kill switch reachable from anywhere in the monitor view.

What does this prompt do?

  • Lists the call list spreadsheets your team has saved, lets you choose a tab, and matches columns like first name, company and phone to the details each call needs.
  • Checks every row before you launch: phone numbers are cleaned into a standard international format, bad or missing numbers are flagged, and anyone already called in the last few days is held back.
  • Shows a live campaign board where completed, in flight and failed counts climb as calls land, and lets you open any row to read the full transcript.
  • Gives you a one click stop for the campaign, then writes each row's outcome back to your spreadsheet and posts a short summary to Slack.

What do I need to use this?

  • A Bland AI account with calling enabled and a number you can dial from
  • A Google account with your call list spreadsheets
  • A Slack workspace and a channel for campaign summaries
  • A call script or pathway set up in Bland AI for the campaign to run

How can I customize it?

  • Change the suppression window, three days by default, so numbers called recently are not dialed again
  • Choose which Slack channel gets the campaign summary and which results tab the outcomes are written to
  • Adjust the required columns, the preview size, or add your own extra call variables such as renewal date or account owner

FAQs

Do I still need to upload a CSV to Bland AI?
No. The app reads your call list straight from Google Sheets, so you keep working in the spreadsheet your team already maintains. You pick the tab, confirm the column mapping, and launch from the same screen.
What happens to rows with a missing or invalid phone number?
They are caught before the campaign launches, not after. Bad rows appear in a Needs attention list with the row number and the raw value, and they are excluded from the dial count. Fix them in the sheet and re-run the check.
Can I stop a campaign once it has started?
Yes. The monitor screen has a kill switch with two levels: stop just this campaign, which cancels its pending calls, or stop everything, which ends every live call on your account. You can also end a single call from its detail panel.
Will it call the same person twice?
No. Duplicate numbers inside a list are removed, anyone dialed within your suppression window is held back, and calls are paced so the same number is never dialed twice in quick succession.
Where do the results end up?
When a campaign finishes or is stopped, the outcome for every dialed row is added to a results tab in the same spreadsheet, and a short summary with totals and connect rate is posted to your Slack channel.

Related templates

Prospecting desk that builds account lists from the live web

Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.

Hyperbrowser
HubSpot
Google Sheets
App
Share of voice dashboard for your brand and competitors

See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.

GDELT
Notion
Slack Bot
App
Approval war room for every social post awaiting sign-off

One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.

Hootsuite
Slack Bot
App
Turn champion job changes into new pipeline in Attio

Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.

Boomerang
Attio
Slack Bot
Agentic Task
Collect social post requests and schedule them in Hootsuite

Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.

Hootsuite
Slack Bot
General Input Database
App
Influencer campaign roster board with AI creator briefs

Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.

HypeAuditor
Google Sheets
Notion
App

Stop uploading CSVs and squinting at call logs.

Give your ops team one screen to prepare, launch, watch and stop every AI calling campaign.