DashboardSign inStart your trial

Approve AI Outbound Follow-ups in Batches

A daily workflow that drafts an AI follow-up per lead and fans them into one batch approval you clear by swipe, with a decision record for every send.

This is the outbound recipe Rills was built for. Every morning, a workflow finds the leads due for a follow-up, drafts a message for each one, and hands you a stack of swipeable cards. You approve, edit, or reject each, or clear the routine ones in bulk, and only the approved messages send. Every decision is recorded: who approved what, when, and against which draft.

Node chain: Schedule (daily) → Data (find leads due) → AI (draft per lead) → Human Review (batch fanout) → Send Email.

#What you need

  • A workspace table of leads, with at least an email column and a status column you can filter on (e.g. needs_followup). Populate it however you like: a form , an import, or an earlier workflow.
  • A verified sender domain (Professional and higher). Outbound follow-ups go to people outside your workspace, so the default @rills.ai address won’t send to them; you must send from a domain you’ve verified.

#Build it

#1. Trigger daily on a schedule

Add a Schedule trigger. Set a cron expression for when you want to draft, 0 8 * * 1-5 for 8am on weekdays, and pick your timezone so daylight-saving shifts are handled for you. Schedules are free and can be enabled or disabled without touching the rest of the workflow.

#2. Find the leads due for follow-up

Add a Data node, operation Find, pointed at your leads table. Filter to the rows that need action, for example status equals needs_followup, optionally sort by oldest first, and set a limit. Find returns up to 1000 rows, but keep the batch sane: the approval fanout downstream caps at 100 items, so filter tightly (a lastContactedAt older than N days is a good bound).

#3. Draft one message per lead with AI

You want one draft per lead, not one summary. Add a Loop node with its items expression pointed at the rows the find returned, and an AI node in the loop body that drafts against a single lead’s fields. Use a loop accumulator to collect each iteration’s draft (plus the lead’s fields) into one array for the approval step. Keep Workspace context on so every draft carries your company’s voice and offer:

Draft a short follow-up email to this lead. Keep it under 90 words,
reference their context, and end with one clear ask.

Name: {{item.name}}
Company: {{item.company}}
Status: {{item.status}}
Last touch: {{item.lastNote}}

Set the AI node’s output mode to JSON with a subject and a body field, so each accumulated item carries a structured draft. Drafting is where AI Credits go, so pick the cheapest model that writes acceptable copy and reach for a heavier one only if quality demands it.

#4. Fan the drafts into a batch approval

Add a Human Review node and configure fanout so one node produces one card per lead instead of a single wall of text:

  • Items expression: point at the accumulated array of drafted leads from the loop.
  • Item template, mapped with dot-notation paths:
    • Title path: the lead name or company (the card headline).
    • Description path: the drafted message body.
    • Meta path: extra context like status or last touch.
    • Confidence path (optional): a per-item score. When an item lands at or above the node’s confidence bar it auto-approves on creation and never reaches your queue.

All the cards from one run share a single batch, so they stay grouped. The fanout caps at 50 items by default, up to 100. If your find returns more, the step fails rather than dropping leads silently, so tighten the filter or split the run.

#5. Approve on the phone

Each drafted follow-up shows up as its own card in the Approvals queue, on web and in the mobile app with swipe-to-approve. Work through them: approve the good ones, edit a draft that needs a tweak, reject the ones that shouldn’t send. Select several and the batch action bar lets you approve or reject them in one move, so you clear routine follow-ups fast and slow down only on the ones that need thought.

When the batch resolves, the node outputs a decisions array: one entry per item with its index and decision (approved, rejected, or edited), plus the batchId. The next step reads this to act on the approved items only.

#6. Send the approved messages

Add a second Loop over the decisions array, with a Condition in the body that only continues when the entry’s decision is approved or edited, into a Send Email node. Set From to an address on your verified domain, To to the lead’s email, and the Subject and Body to the approved (or edited) draft. Rejected leads never send.

#Make it learn

Start the Human Review node in Always ask: every drafted follow-up comes to you. This is the point: early on, you’re not just approving sends; you’re teaching the system your bar. Edit the drafts that miss and reject the ones that shouldn’t go; both feed confidence scoring .

Once your decisions have accumulated and the drafts are consistently good, switch to Confidence gated and set a per-item Confidence path in the fanout. High-confidence follow-ups start auto-approving and send without a stop; anything below your bar, or anything that trips a gate, still lands in your queue. A rejection on the step trips the circuit breaker, pausing auto-approve until it re-earns trust, and Rills spot-checks about 1 in 10 auto-approvals as a built-in audit. You move from approving every message to approving only the ones that actually need you, and the decision record still captures every send either way.

#Cost

  • Schedule trigger, Data find, and Loop: free.
  • AI drafting: bills AI Credits per lead, by token cost. This scales with batch size, so filter before you draft.
  • Human Review (fanout, every card, bulk actions, edits): free, always. The workflow waits at no cost.
  • Send Email: 1 Workflow Credit per approved send. Rejected leads cost nothing.

Bulk workflow email is subject to your plan’s daily send cap ; keep the daily batch within it.