Stage History is captured automatically and surfaced through the Opportunity History report type. The steps below cover building a useful report and the most common reporting patterns sales operations teams need.
- Open a new report with the Opportunity History type
In Reports, click New Report. Search for and pick Opportunity History as the report type. The type exposes both the parent Opportunity fields and the OpportunityHistory row fields.
- Add the relevant columns
Add Opportunity Name, Account Name, Stage at Save, From Stage, To Stage, Created Date, Created By, Amount at Save. The combination gives a full picture of who changed what, when, and where the deal was before the change.
- Apply date and stage filters
Filter Created Date to the period you care about (Last 90 Days for recent transitions, This Fiscal Quarter for current-quarter analysis). Filter Stage to the stages you want to study, or leave open for a full picture.
- Add a grouping for analysis
Group by Stage to see counts per stage. Group by Created By to see per-rep transition patterns. Group by Month to see how transitions are trending over time.
- Save and pin for reuse
Save the report in a folder shared to the sales operations team. Pin the report to the Recent list for quick access. Schedule the report to deliver weekly if the team uses it for stand-up reviews.
The standard report type that exposes OpportunityHistory. Required for any Stage History reporting in the standard report builder.
An admin-built variant that adds related-object fields beyond what the standard type exposes. Useful for cross-object reports.
The most flexible option for very old or very large history queries. Bypasses the report builder limits but requires query knowledge.
- OpportunityHistory only writes on changes to Stage, Amount, Probability, Expected Revenue, Close Date, or Forecast Category. Changes to other fields are invisible to Stage History; configure Field History Tracking for those fields if audit is needed.
- A single save that changes multiple tracked fields produces one history row, not one per field. Parsing the history for specific field changes requires inferring the cause from value differences between consecutive rows.
- Very old Opportunities produce a long history; reports against OpportunityHistory without tight filters can hit row limits on large orgs. Always filter Created Date to a bounded period unless you need the full history for a specific deal.