Many B2B SaaS companies struggle with flat growth because they focus entirely on acquiring new logos while ignoring their existing accounts. In our experience, the most sustainable growth comes when you learn how to find hidden revenue opportunities within the data you already collect. These opportunities represent customers who are already successful with your product but have not yet been approached for a higher tier, additional seats, or complementary modules.
Hidden revenue opportunities are defined as quantifiable patterns in customer behavioral, transactional, and firmographic data that indicate a high probability of successful account expansion. By identifying these signals in your BigQuery or Snowflake warehouse, your data team can transition from being a cost center to a direct driver of Net Revenue Retention (NRR).
In this guide, we will walk through the technical framework and the specific SQL patterns we use at MLDeep Systems to surface these expansion signals for our clients.
What are hidden revenue opportunities in a modern data stack?
In a modern data stack (MDS), a hidden revenue opportunity is an actionable alert generated when a customer hits a specific threshold that correlates with expansion. Most companies sit on a goldmine of data in their CRM and product databases but lack the analytics layer to connect these dots. When we build these systems, we look for "expansion triggers," such as a customer reaching 90 percent seat utilization or a user performing a "power feature" action ten times in a week.
The goal is to move away from "gut feel" account management. Instead of an Account Executive (AE) guessing which accounts to call, the data team provides a prioritized list of leads based on actual product usage. This requires a robust data foundation where your CRM data, billing data from Stripe, and event data from Segment are all unified in a single warehouse.
| Signal Category | Source System | Data Points to Track |
|---|---|---|
| Usage Intensity | Product Database | Daily Active Users (DAU), feature adoption, API calls |
| Capacity Limits | Stripe / Billing | Seat utilization, storage limits, monthly credits used |
| Intent Signals | Website / CRM | Viewing pricing pages, clicking on "Upgrade" modals |
| Firmographic Shifts | 3rd Party / LinkedIn | Recent funding rounds, headcount growth, new leadership |
If you are unsure if your current infrastructure can support this level of analysis, our AI Stack Audit can help you identify the gaps in your data foundation.
How to identify upsell opportunities in customer base through usage patterns
The most reliable way to find expansion revenue is to track how "full" a customer's current plan is. We call this the Seat Utilization Gap. If a customer pays for 50 seats but has 48 active users, they are a prime candidate for an upsell. However, waiting until they hit 50 is often too late; the conversation should happen when they hit 40.
To calculate this, we use dbt (data build tool) to join our billing data with our product usage data. Here is a simplified version of a dbt model that identifies these customers:
-- models/marts/revenue/fct_upsell_opportunities.sql
WITH account_seats AS (
SELECT
org_id,
plan_name,
total_seats_allocated,
monthly_recurring_revenue as mrr
FROM {{ ref('stg_billing__subscriptions') }}
WHERE status = 'active'
),
active_usage AS (
SELECT
org_id,
count(distinct user_id) as active_users_30d
FROM {{ ref('stg_product__events') }}
WHERE event_timestamp >= current_date - interval '30 days'
GROUP BY 1
)
SELECT
s.org_id,
s.plan_name,
s.mrr,
u.active_users_30d,
s.total_seats_allocated,
(u.active_users_30d / nullif(s.total_seats_allocated, 0)) as utilization_rate
FROM account_seats s
JOIN active_usage u ON s.org_id = u.org_id
WHERE (u.active_users_30d / nullif(s.total_seats_allocated, 0)) >= 0.85By surfacing accounts with a utilization rate over 85 percent, we provide the sales team with a list of users who are literally running out of room to grow. This is one of the most effective ways to find expansion revenue because the value proposition is undeniable: the customer needs more capacity to continue their current workflow.
When should you use cross-sell analytics to target existing accounts?
Cross-selling is the act of selling a different product or module to an existing customer. This is harder than a seat upsell because it requires convincing the customer of a new value proposition. We use cross-sell analytics to identify "Propensity to Buy" by looking at feature adjacency.
For example, if a customer uses your "Analytics Module" heavily but has never touched your "Reporting Automation" module, there is a high likelihood they would benefit from the latter. We look for "Lookalike" behavior. We identify which features are most commonly used together by your highest Lifetime Value (LTV) customers, then we find customers who only use one of those features.
In our work with mid-market SaaS companies, we often see that the biggest barrier to cross-selling is not a lack of interest from the customer, but a lack of visibility for the Sales Rep. By creating a "Feature Gap" report, we can tell a Rep: "Customer A looks exactly like our most successful Customer B, but they are missing Module X."
We cover the implementation of these advanced revenue models in detail in our Learn AI Bootcamp, specifically within the Revenue and Marketing Analytics track.
Ready to fix your data foundation?
Book a free diagnostic call and find out where your stack stands.
Book a CallHow to find expansion revenue using predictive scoring models
While SQL based heuristics (like the 85 percent utilization rule) are a great start, they are reactive. To truly scale, we implement predictive expansion scoring. This involves using machine learning or advanced statistical models to predict which customers are likely to expand in the next 90 days.
We look at a variety of leading indicators:
- Velocity of usage growth: Is their usage growing at 10 percent month-over-month?
- Breadth of adoption: Are they using 3 features or 10 features?
- Support ticket sentiment: Are they asking "How do I do more?" or "Why is this broken?"
- Executive sponsorship: Have they added new users with "Director" or "VP" titles recently?
A simple predictive score can be calculated by weighting these factors. For instance, a new VP-level user might be worth 20 points, while a 10 percent usage increase is worth 15 points. Any account that crosses 70 points is automatically pushed to the CRM as a "High Intent Expansion Lead."
Engineering the last mile: Reverse ETL and CRM integration
Surfacing hidden revenue opportunities in a BI tool like Looker or Tableau is only half the battle. If a Sales Rep has to leave Salesforce or HubSpot to find these leads, they likely won't do it. The "Last Mile" of revenue analytics is getting this data back into the tools where sales and success teams live.
We utilize Reverse ETL (Extract, Load, Transform) tools like Census or Hightouch to sync our dbt models back to the CRM. Instead of a static report, the Sales Rep sees a custom field on the Account object called "Expansion Potential Score" or "Upsell Trigger Active."
This allows for automated workflows. When an account's utilization hits 90 percent, the Reverse ETL tool can:
- Update the CRM record.
- Create a "Task" for the Account Manager.
- Post a notification in a specific Slack channel.
- Add the primary contact to a specific "Expansion" sequence in Outreach or Salesloft.
This level of automation ensures that no revenue is left on the table simply because a human forgot to check a dashboard.
Maintaining data quality for revenue expansion signals
The biggest risk to any revenue analytics project is poor data quality. If an AE calls a customer about an upsell based on a "90 percent utilization" alert, but the data is wrong and the customer is only at 40 percent, you have damaged the relationship and the credibility of the data team.
To avoid this, we implement rigorous data contracts and testing. Every revenue-critical model in dbt should have:
- Unique tests: To ensure we aren't double counting seats.
- Not-null tests: To ensure we have the necessary billing IDs.
- Relationship tests: To ensure every usage event maps to a valid account in the CRM.
- Freshness tests: To ensure the usage data is no more than 24 hours old.
At MLDeep Systems, we treat revenue data with the same level of care as financial reporting. We use tools like Monte Carlo or elementary-data to monitor for "data drift," where the volume of expansion signals suddenly drops or spikes, indicating a broken upstream pipeline.
Frequently Asked Questions About Hidden Revenue Opportunities
What is the difference between upsell and cross-sell in data?
An upsell refers to increasing the value of an existing contract for the same product, usually by adding more seats, increasing usage limits, or moving to a higher tier of the same service. A cross-sell refers to selling a different, complementary product or service to an existing customer. In your data warehouse, upsells are tracked via "Seat Utilization" or "Plan Capacity" metrics, while cross-sells are identified via "Feature Adjacency" or "Product Penetration" metrics.
How do we identify hidden revenue opportunities if our data is siloed?
The first step is data centralisation. You cannot find hidden revenue if your product usage is in a Postgres database, your billing is in Stripe, and your account ownership is in HubSpot. We recommend building a centralized data warehouse using BigQuery or Snowflake. Once the data is in one place, you can use dbt to join these disparate sources and create a "Golden Record" for each customer that includes their usage, billing, and firmographic history.
Which team should own the hidden revenue opportunities project?
While the Data Team usually builds the infrastructure and models, the Revenue Operations (RevOps) team should own the strategy and implementation. RevOps sits at the intersection of Sales, Marketing, and Customer Success, making them the ideal partner to define what constitutes a "signal" and how that signal should be handled by the sales team. The most successful projects we have seen are a partnership between a Data Engineer who builds the pipeline and a RevOps Manager who designs the CRM workflow.
How often should we sync expansion signals to the CRM?
For most B2B SaaS companies, a daily sync is sufficient. Expansion signals are rarely "emergency" events that require real-time action. However, if you have a product with high volatility or usage-based pricing where a customer might burn through their entire budget in a few hours, you may need a near real-time sync (every 15 to 30 minutes). Most Reverse ETL tools support both batch and incremental syncs to balance cost and latency.
What is the typical ROI of a revenue analytics project?
We typically see a 5 to 15 percent increase in expansion revenue within the first six months of implementing an automated signal system. The ROI comes from two places: increased win rates (because reps are calling the right people) and increased sales velocity (because reps spend less time researching and more time selling). Additionally, by catching "at-risk" expansion accounts early, you can often prevent churn before it happens.
Ready to build your revenue engine?
Identifying hidden revenue opportunities is the fastest way to improve your NRR and turn your data stack into a profit center. If you are tired of looking at static dashboards and want to start pushing actionable signals to your sales team, we can help.
We offer a focused engagement to build this exact infrastructure for your team. You can book a free consultation to discuss your current data stack and how we can implement these expansion models for you. Whether you need a full data foundation build or a targeted revenue analytics sprint, our team of practitioners will ensure your data is ready to drive growth.