Improving Forecast Visibility for a Consumption-Based SaaS Company

Like many companies with consumption-based pricing models, our client relied on a manual renewal forecasting process that left nearly half of annual renewals invisible in Salesforce. By automating renewal creation and carrying forward product-level data, we gave leadership complete visibility into more than $22M of previously unforecasted ARR.

Tiana Clemons · Jun 18, 2026

Tiana Clemons · Jun 18, 2026 · Case Studies

About this engagement

Our client is a collaborative data platform that helps analytics teams build, share, and publish data products. They serve a wide range of customers on a consumption-based model, meaning upsells and contract amendments are a regular part of their revenue motion.

When their sole RevOps and Salesforce admin departed, they needed someone they could trust to step in fast, with no 90-day hiring process, no ramp time and no risk. Within days we were in the weeds, keeping the lights on, and we found a structural gap in their renewal process that had been quietly creating a blind spot in their forecast.

Our partnership enabled the following results:

Renewal opportunities automated a year~700
Previously unforecasted ARR$22M+

The Challenge

When their Salesforce admin of four years left the company, they were left with a critical gap: he had been the sole person holding together their entire CRM operation. Working alone, he had been forced to triage constantly, and long-term projects like a proper renewal automation had been deferred in favor of keeping the day-to-day going.

One compromise their one-man team had to make was a manual, batch-creation process. Every six months, he would sit down and create all upcoming renewals for the next two quarters, but to save time he entered a flat dollar amount per opportunity rather than duplicating the full line items. It was unscalable, and it meant the team had no product-level visibility into what was actually renewing. They couldn't report on which products were up for renewal, which were likely to expand, or what the next two quarters actually looked like in Salesforce, because half the year simply didn't exist there yet.

The Solution

This process needed a complete revamp, so we designed a Salesforce Flow automation that triggers every time a contract is activated, automatically creating or updating the corresponding renewal opportunity, carrying over all products, and linking the contract, originating opportunity, and renewal together in a single connected record chain.

The record chain the automation builds: the contract, the originating opportunity and the renewal opportunity, linked together

At a high level, here is what changed:

Before After
Renewals created by hand, twice a year → Renewals created automatically the moment a contract is activated
A flat dollar amount per renewal → Every product line item carried over
No link between contract, opportunity and renewal → One connected record chain
Half the year's renewals missing from the forecast → Every renewal in the forecast immediately

And now, here is how we got there. What made it work was the process before the build: mapping every opportunity type, edge case and branching scenario first.

Mapping the current state

Before any build work began, we ran a structured working session to map the end-to-end renewal workflow to understand the current state. What that session revealed was a process that worked on one side and was completely empty on the other. Contracts were being activated, customers provisioned, Stripe IDs logged, and then nothing: no renewal created, no link back to the originating opportunity and no visibility into what was coming up, until six months later. The gaps required a complete restructuring of the process.

Edge case mapping across all opportunity types

A consumption-based model means this was never going to be a simple "copy the opportunity and create a renewal" build. Customers add seats or expand on existing contracts, they cancel and replace mid-term, and some enterprise accounts need separate contracts for different regional instances all tied to a single opportunity. Each of these scenarios needed its own branch with its own defined behavior. We mapped all six opportunity types before a single line of logic was written.

A full sandbox and structured testing

A sandbox is a safe copy of your Salesforce environment: you build and test there so nothing touches live data. This client was on a partial sandbox, which copies your structure but not your actual records. For a simple build that works fine. For a multi-object automation spanning contracts, opportunities, and products with six branching scenarios, you need real data to test against. We made the case to finance to procure a full sandbox, built and tested everything there first, and only touched production once every scenario was confirmed working. It was a one-time investment that now protects every future build.

Partial sandbox (before) Full sandbox (what we used)
Schema copied, so objects and flows exist → An exact copy of production, schema and data
No real data, so records are empty → Every edge case tested before go-live
Multi-object flows can't be fully validated → Protects every future build, not only this one

Every scenario was documented so the internal team could validate and maintain the build going forward.

Production deployment, backfill and handoff

After successful sandbox testing, the flow was deployed to production. It triggers on contract activation, identifies the most recent closed-won opportunity, routes through branching logic based on opportunity type, creates or updates the renewal with all product line items, and links the contract, originating opportunity, and renewal together, all in seconds. A Renewal Created checkbox guards against duplicate renewals on multi-tenant accounts. After go-live, we ran a backfill to generate renewals for all contracts activated during the build period, ensuring nothing fell through during the transition. The engagement closed with a complete handoff document covering how the flow works, how to test each scenario, and how to troubleshoot the most common edge cases.

The Salesforce Flow: on contract activation it finds the most recent closed-won opportunity, branches by opportunity type, then creates or updates the renewal with its product line items and links the records

The Results

The team went from manually creating renewals twice a year, with no guarantee of accuracy, to a system that runs automatically the moment a contract is activated. Every renewal now carries the correct products, links back to the contract it came from, and is visible in the forecast immediately. With ~$44M in renewals annually, half of that forecast was previously invisible at any given time. Now the full picture is always there.

Renewal opportunities automated per year~700
ARR now visible in forecast$22M+
Renewal opps recovered for forecast350

Request a free consultation to see how we can close the gaps in your renewal process and give your forecast the visibility it's missing.

All case studies