A Reporting Snapshot is a feature that runs a saved report on a schedule and writes the results into a custom object as records, creating a point-in-time historical archive.
Why it exists: Salesforce reports show data as of right now. If you want to know what the pipeline looked like at end-of-quarter last year, the underlying records may have changed since then — the report rebuilds against current data.
Reporting Snapshots solve this by capturing the report's output rows into a custom object on a schedule. You configure:
- Source Report — a Tabular report (only tabular reports are supported) with the columns you want preserved.
- Target Object — a custom object you've created with matching fields. Each row in the report becomes a record in the custom object.
- Field Mapping — which report column maps to which custom object field.
- Schedule — daily, weekly, or monthly.
- Running User — whose permissions the snapshot runs under.
Example: a Reporting Snapshot of "Open Pipeline by Owner" run weekly creates a custom object Pipeline_Snapshot__c with one record per (week, owner). You can then build a chart of "Pipeline trend by owner over 52 weeks" — impossible from live data alone.
Limitations:
- Tabular reports only — no summary/matrix.
- Data volume — each run inserts rows. Long-running snapshots accumulate millions of rows; storage planning required.
- One-way — you can't query back to the live record from the snapshot row easily; capture any IDs you need at snapshot time.
Modern alternative: CRM Analytics datasets with scheduled refresh, or external warehousing (Snowflake) populated via change data capture. Reporting Snapshots are still the simplest declarative way to keep "as-of" history inside Salesforce.
