Daily AI voice collections calls on overdue QuickBooks invoices

Every weekday at 9am, an AI voice agent calls customers with past due QuickBooks invoices, captures who will pay and who is disputing, and drops a bucketed digest in Slack.

Agentic Task
QuickBooks OnlineBland AISlack BotFinanceOperationsNotifications & AlertsDaily Digests
PromptCreate

Build me an agent workflow that runs every business day (Monday through Friday) at 9am in my local timezone and works my overdue accounts receivable using AI voice calls. Trigger type is cron.

Step 1: Pull the AR aging list from QuickBooks Online. Use Query Entities against Invoice with a WHERE clause of Balance > '0' AND DueDate < today (SQL-like syntax, no OR conjunctions, page through results in chunks of up to 1000). For each overdue invoice, capture Id, DocNumber, TotalAmt, Balance, DueDate, and CustomerRef.

Step 2: For each unique customer with an overdue invoice, call Read Customer in QuickBooks to get PrimaryPhone (or Mobile) and DisplayName. Sum that customer's total outstanding Balance across all their overdue invoices so we know their aggregate exposure. Skip any customer that has no phone number on file and add them to a 'needs manual outreach' list for the digest.

Step 3: Rank customers by (days overdue on their oldest open invoice) then (total outstanding balance), both descending. Apply two configurable thresholds that default to: minimum balance $250 and minimum days late 7. Anyone below either threshold is skipped from calling but still counted in the digest totals.

Step 4: Compliance guard. Before dialing anyone, call Bland AI's List Calls filtered to that phone_number and the last 7 days. If any call exists, skip this customer for today and note them as 'in cooldown' in the digest. Default cooldown = 7 days, configurable.

Step 5: For every remaining customer, dispatch a Bland AI Send Call with record: true and a task prompt that (a) opens politely by name, (b) explains you are calling from {my company} about outstanding invoice {DocNumber} for {Balance} that was due {DueDate}, {days_late} days ago, (c) asks when payment can be expected or whether there is a dispute, (d) offers to send a link or transfer to a human, and (e) is explicitly instructed to stay courteous, never threaten, and end the call immediately if the person asks to stop or says this is a bad time. Phone numbers must be in E.164 format. Space dispatches at least 10 seconds apart per number (Bland's same-number cooldown).

Step 6: After each call completes, run Bland AI Analyze Call on the call_id with a fixed set of 4 questions (Analyze Call is billed per question, so keep it tight): (1) 'Did the customer commit to a specific payment date? If so, what date?', (2) 'Did the customer dispute the charge or say they already paid?', (3) 'Did the customer request a callback or ask us to talk to someone else at the company?', (4) 'Was the call unreachable, voicemail, or wrong number?'.

Step 7: Combine every call's structured answers into a single Slack digest via Slack Bot Send a Message to a configurable channel (default #collections). Group customers into four buckets: 'Committed to pay' (with the promised date next to each), 'Disputes / said already paid' (needs human today), 'Needs human follow up' (voicemail, wrong number, requested callback), and 'Skipped this run' (below threshold or in 7-day cooldown, plus anyone without a phone). Include totals per bucket in dollars, a headline number for total AR called on today, and link each row back to the QuickBooks invoice.

Config the workflow should expose: run time and timezone, minimum balance threshold ($), minimum days late threshold, cooldown window in days, Slack channel, company name and callback number to inject into the call script, and an optional cap on max customers called per run so the first live day is bounded.

Please pick sensible defaults, log every call_id and outcome for auditing, and fail gracefully (partial results still get posted to Slack) if any single customer errors out.

Additional information

What does this prompt do?
  • Pulls every overdue invoice from QuickBooks Online each business morning and ranks customers by how late they are and how much they owe.
  • Places a polite, professional AI voice call to each customer above your minimum balance and days late thresholds, naming the specific invoice, amount, and days past due.
  • Automatically skips anyone we already called in the last seven days so no customer gets chased twice in the same week.
  • Turns every call outcome into structured answers (will pay by, disputes, requested callback, unreachable) and posts a single Slack digest grouped into committed to pay, needs human follow up, and disputes.
What do I need to use this?
  • A QuickBooks Online company file with invoices and customer phone numbers.
  • A Bland AI account with credits available for outbound calls.
  • A Slack workspace and a channel where the daily collections digest should land.
How can I customize it?
  • Change the run time or run days if 9am on business days is not when your team wants to see the report.
  • Raise or lower the minimum balance and days late thresholds so you only chase invoices that are worth the call.
  • Rewrite the call script tone (softer, firmer, industry specific) and swap the Slack channel that receives the digest.

Frequently asked questions

Will this call the same customer over and over?
No. Before dialing anyone, the workflow checks recent call history and skips any phone number that already received a collections call in the last seven days. You can raise or lower that cooldown when you set it up.
What happens if a customer disputes the charge on the call?
The AI agent stays polite, does not push, and captures the dispute. That customer shows up in a dedicated disputes bucket in the Slack digest so a human on your team can follow up directly.
Do we need phone numbers for every customer in QuickBooks?
Only customers that have a phone number on file get called. Overdue invoices for customers without a number are listed in the digest as needing manual outreach so nothing falls through the cracks.
Can it call outside the United States?
Yes, as long as the phone number is stored in international format in QuickBooks and your Bland AI account is enabled for that region. You can also restrict the workflow to only dial certain country codes.
What if someone answers and says stop calling?
The call script instructs the AI agent to acknowledge the request, end the call politely, and flag that customer for human follow up. The Slack digest surfaces those flags so you can honor the request in your CRM.

Stop chasing overdue invoices by hand every morning.

Connect QuickBooks, Bland AI, and Slack once, and Geni works the AR aging report for you every business day at 9am.