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:
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.

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.
.png)
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.
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.