You configure the target object and wire it to a snapshot in Setup. Build the custom object and its fields first, then create the Reporting Snapshot and map the source report columns onto those fields.
- Create the custom object
In Setup, build a custom object dedicated to snapshot output. Add fields whose data types match the source report columns you plan to capture, plus a date field to record which run each record came from.
- Build or pick the source report
Create a tabular or summary report that returns the data you want to track. Keep it under 2,000 result rows. For trend data, a summary report grouped by a dimension like Stage usually works best.
- Create the Reporting Snapshot
From Setup, open Reporting Snapshots and click New. Give it a name, set a running user whose access matches what you want captured, choose the source report, and choose your custom object as the target.
- Map fields and save
On the mapping screen, pick a grouping level for summary reports, then connect each source column to a compatible target field. Map your snapshot date field too, then save.
- Schedule the run
Set the snapshot to run daily, weekly, or monthly. Pick a time outside business hours so the bulk insert does not compete with user activity.
Required. Must be a custom object with no validation rules, workflow rules, or Apex insert triggers, no master-detail detail role, and at most 100 custom fields.
Required. A custom tabular or summary report. Legacy forecast, Quota vs Actual, and Leads by Source reports cannot be used.
Required. The user whose data access the report runs under. Only users with Modify All Data can set a running user other than themselves.
For summary reports only. Selects which grouping's totals are snapshotted, or use Grand Summary for the overall totals.
Daily, weekly, or monthly, with a start and end date. Sets how often new records are written to the target object.
- Each run adds at most 2,000 records. A source report over 2,000 rows loses the extra rows and finishes as a partial success.
- You cannot map into Created By, Last Modified By, Created Date, or Last Modified Date on the target object.
- A blank Total Row Number on the run history usually means an inactive running user or a deleted or changed source report.
- In multi-currency orgs, map the converted currency amount so all values land in one currency code and avoid mismatch errors.