Skip to content

Customer statements at scale

One template, one run, thousands of PDFs — each one holding a single customer's data and delivered to that customer.

What it produces

A separate document per customer, generated in one job and emailed to each recipient's own address, or written to cloud storage under a per-customer path.

How you build it

  1. Build the statement once, as an ordinary report
  2. Create a Report Generation Job and add your customer data source
  3. Turn on the data source's Repeating flag — the job then produces one entry per row
  4. Add the statement template to the job
  5. Add an Email delivery and bind the recipient to the row's address
  6. Set a schedule, or trigger runs through the API

What makes it tricky

  • The Repeating toggle is the whole mechanism. Without it the job produces one document containing every customer, which is rarely what anyone wants.
  • Inside a repeating job, the current row is {$record.…}. {$data.…} reaches the whole set. Getting this backwards is the most common cause of every statement showing the same customer.
  • One SMTP server can send from several addresses. Define a From address per brand or department, and let each job choose — see SMTP Settings.
  • Turn on hold-for-review for the first runs. Deliveries wait until someone approves them, which is worth doing before a thousand emails leave the building.

Report Generation Jobs · Repeating Elements · Data Sources