Setting up Statements is mostly about configuring three things: the Statement Frequency that drives cycle dates, the Statement Template that controls PDF output, and the scheduled job that runs generation and delivery. The Billing Account itself needs the right anchor date and the right frequency reference, and the underlying Invoices and Payments need to be flagged for statement inclusion. None of the steps is hard individually, but they have to be configured in order so the first scheduled run produces a clean statement that finance can sign off on.
- Configure Statement Frequencies for each billing cadence
Open Setup, search Statement Frequency, and create one record per cadence your customers use (Monthly, Quarterly, Annual, and any custom intervals). For each frequency, set the cycle length, the anchor date method (calendar-aligned or account-anchor), and the cutoff time for posting transactions to the period. Activate the frequency only after you have tested it in a sandbox against a fixture billing account, since changing a live frequency mid-cycle creates orphaned transactions that have to be manually reassigned to the right cycle. Document each frequency in the billing operations runbook for finance team reference.
- Build the Statement Template for PDF rendering
From Setup, open the Statement Template object and create a template that matches your brand guidelines. The standard sections are header (logo, account info, cycle dates), summary block (opening balance, period totals, closing balance), line items (Invoices, Payments, Credits with date and amount), aging buckets, and footer (legal text, support contact, payment instructions). Test the template by previewing it against a fixture Statement record in a sandbox. Iterate on the design with finance and customer success before promoting to production, since customers will see the output and brand issues are expensive to fix after the first delivery.
- Configure each Billing Account with the right frequency and template
On each Billing Account record, set Statement Frequency to the frequency the customer agreed to in the contract, and set Statement Template to the brand-specific template that matches the customer segment (default, enterprise, partner channel). Also set the Anchor Date that determines when the cycle starts and the Delivery Method (email, portal, integration) for how the rendered PDF reaches the customer. Bulk-update existing accounts through a Data Loader pass if you are migrating from a manual statement process, and validate the data with a report before activating the generation schedule.
- Schedule and monitor the Statement Generation job
Salesforce ships a Statement Generation scheduled Apex job that runs daily and processes any billing accounts whose cycle ended that day. Activate the job from Setup, Apex Jobs, Scheduled Jobs, and confirm it is running on the right user identity (a System Administrator profile with access to Billing Accounts, Invoices, and Payments). Add the job to a monitoring dashboard so failures surface within hours, not days. The generation job is the single point of failure for billing operations; treat it as a tier-1 production job and assign explicit ownership in the runbook.
- Changing Statement Frequency on a live billing account mid-cycle creates orphaned transactions that have to be manually reassigned. Change frequencies at cycle boundaries, never mid-period.
- The Statement Generation job runs as a scheduled Apex job. If it fails silently, customers do not get statements and AR collections stops. Add it to a tier-1 monitoring dashboard with paging on failure.
- Statement totals are frozen at generation time. If a back-dated Payment posts to a closed cycle, the Statement does not automatically refresh. Either regenerate the Statement or post a correction in the next cycle.
- Salesforce Billing (legacy managed package) and Revenue Cloud Billing use different Statement object schemas. Code, reports, and dashboards built on the legacy schema break on migration. Plan the rewrite as part of the move.
- Aging buckets on the Statement reflect the cycle-end date, not today. A 60-day-old invoice on a quarterly statement may already be 90+ when the customer reads it. Make this clear in the template footer.