Skip to main content

Batch Run Trigger

A Batch Run fires your flow once for many recipients — one run per row of a list. Instead of a single execution, each fire pulls a list of contacts from a data source (an uploaded CSV or a live query over your leads) and runs the flow once per contact, each on their own conversation. The classic use is a WhatsApp template campaign: upload 1,000 contacts, fire once, and every contact gets a personalized run.

A batch run is a Scheduled Run with fan-out turned on — it uses the same trigger types, timezones, and lifecycle. This page covers what fan-out adds.

note

Batch runs are set up in the Automations section, not on the Start node's canvas. See Automations for the full management experience.

How it works

When the automation fires, Flowera reads your data source, turns each record into a row, and runs the flow once per row:

  1. The timer fires (one-shot or recurring — same as a scheduled run).
  2. Flowera materializes rows from your data source.
  3. Each row runs the flow independently, so one failure never blocks the rest.
  4. Every row reports its own outcome (sent, failed, or skipped).

Adding a batch run

  1. In Automations, create an automation and choose Batch (per recipient) as the execution mode.
  2. Pick the flow to run.
  3. Choose a data source — upload a CSV, or build a live lead query.
  4. Set row mapping to connect list columns to your flow's variables.
  5. Set the schedule and timezone, then save.

Data sources

SourceWhere rows come from
CSV uploadAn uploaded spreadsheet of contacts. Preview the first rows before firing.
Lead queryA live query over your workspace's leads, filtered to the segment you want.

Row mapping

Row mapping connects each row's columns to your flow's state keys, so the flow can personalize per recipient. For a CSV with a name column feeding a state key customerName:

name → customerName

Inside the flow you then read {{$flow.state.customerName}}. Unmapped columns are still carried on the row but aren't injected into flow state.

Session continuity

Each row runs on a chat session, resolved so a batch run lands on the same conversation a real inbound message would — letting a campaign continue an existing thread instead of starting a throwaway one. You can set a session template (e.g. whatsapp-{phone}-...), reuse a lead's existing session, or let Flowera generate one.

Safety features

Fan-out includes guardrails so a campaign behaves responsibly:

FeatureWhat it does
Suppression listContacts who opted out are skipped before any message is sent.
Cross-fire dedupA recurring campaign skips contacts it already messaged in a prior fire (on by default), so a daily send doesn't re-message the same person.
Canary rolloutFor larger batches, a small slice is sent first; the rest release only if the canary looks healthy.
Per-fire row capAn optional limit on how many rows a single fire processes.
tip

Leave cross-fire dedup on for recurring campaigns so contacts aren't messaged repeatedly. Turn it off only when you intentionally want to re-blast the same list each fire.

Example

A one-time WhatsApp promo: upload contacts.csv (columns name, phone), map name → customerName, set a one-shot fire time, and save. On fire, each contact gets a personalized run of your template flow on their own WhatsApp session. Suppressed and already-messaged contacts are skipped automatically.

Inspecting results

After a fire, each row reports a status — success, failed, or a skipped reason (suppressed, already-sent, and so on). Review per-row outcomes to see exactly who was reached and why any were skipped.

Tips

  • Preview your CSV or lead query before firing to confirm the rows and columns look right.
  • Use row mapping to personalize every run — greet each contact by name, reference their data.
  • For a single scheduled run with no recipient list, use a plain Scheduled Run instead.