Skip to main content
Technical Guides

Balance Model Scoring: Prioritize Your Intent Signals

Peter Cools · · 17 min read

TL;DR — The Balance model is the Rodz API’s built-in scoring engine that turns raw intent signals into a single, weighted score per company. Instead of treating every signal equally, you assign relative weights, define thresholds, and let the API rank your prospects so that your sales team focuses on the accounts most likely to convert. This guide covers how the model works, how to configure it through the API, how to set score thresholds for routing, and how to adapt it as your data matures.

What Is Signal Scoring and Why Does It Matter?

Intent signals are powerful, but volume creates its own problem. Once you have configured a dozen signal types across thousands of target accounts, you can easily receive hundreds of events per day. A new job posting here, a LinkedIn mention there, a funding round somewhere else. Each event carries potential, but not every event carries the same weight for your specific business.

Signal scoring solves this by assigning a numerical value to each event and aggregating those values at the company level. The result is a ranked list of accounts ordered by how many relevant things have happened recently, adjusted for which things matter most to you.

Without scoring, your sales reps scroll through a chronological feed and pick whatever catches their eye. With scoring, they open their CRM and see the top ten accounts that accumulated the strongest buyer intent this week. The difference is not subtle. Teams that implement signal scoring consistently report shorter sales cycles and higher conversion rates because reps spend their energy on accounts that are genuinely heating up.

The Rodz API offers several scoring approaches, but the Balance model is the one most teams should start with. It provides a structured, transparent way to weight signals without requiring a data science team or a machine learning pipeline.

What Is the Balance Model?

The Balance model is a weighted-sum scoring engine exposed through the Rodz API. It works on a simple principle: every signal type gets a weight, every detected event contributes its weight to the company’s total score, and the score decays over time so that stale signals do not inflate rankings indefinitely.

Here is the mental model. Imagine you sell HR software. A company that just posted 15 new job offers, hired a new VP of People, and raised a Series B is a much stronger prospect than a company that simply changed its LinkedIn banner. The Balance model lets you encode that intuition into numbers:

  • job-offers: weight 3
  • job-changes (with seniority filter for VP+): weight 8
  • fundraising: weight 10
  • social-mentions: weight 1

When the API detects these events for a given company, it multiplies each event by its weight, applies a time-decay function, and returns a composite score. The company with the job postings, the VP hire, and the funding round would score dramatically higher than the one with a single social mention.

The model is called “Balance” because it encourages you to balance multiple signal categories rather than over-indexing on a single trigger. Teams that rely on one signal type alone tend to miss accounts that show intent through a combination of smaller, correlated events. The Balance model rewards breadth and recency together.

Prerequisites

Before configuring the Balance model, make sure you have the following in place:

  1. A Rodz account with API access enabled on a paid plan. Register at app.rodz.io if you have not set one up yet.
  2. Your API key, generated from the Rodz dashboard under Settings > API Keys. If you need help, follow the authentication and first request guide.
  3. At least two active signal configurations. The Balance model shines when you combine multiple signal types. If you have not configured any signals yet, start with the first intent signal guide and come back.
  4. cURL installed on your machine (pre-installed on macOS and Linux; Windows users can use Git Bash or WSL).
  5. A clear Ideal Customer Profile (ICP). You will need to decide which signals matter most for your sales motion before assigning weights.

Set your API key as an environment variable:

export RODZ_API_KEY="your_api_key_here"

All requests in this guide target the base URL https://api.rodz.io/v1. Authentication is handled via a Bearer token in the Authorization header.

How the Balance Model Calculates Scores

Understanding the mechanics will help you configure better weights and interpret results with confidence. The Balance model runs three steps every time it recalculates a company’s score.

Step 1: Event Collection

The API collects every signal event associated with a company within your configured lookback window. The default lookback is 30 days, but you can adjust it from 7 to 90 days depending on how fast your sales cycle moves. Shorter windows favor recency. Longer windows capture slow-building patterns.

Step 2: Weighted Aggregation

Each event is multiplied by the weight you assigned to its signal type. If a company triggered three job-offers events (weight 3) and one fundraising event (weight 10), the raw weighted sum would be:

(3 x 3) + (1 x 10) = 19

If the same signal type fires multiple times within the window, each occurrence is counted. This means high-frequency signals like job postings can accumulate significant scores even with a modest per-event weight. Keep that in mind when choosing your weights.

Step 3: Time Decay

Raw sums would make a signal detected 29 days ago count the same as one detected this morning. That is rarely what you want. The Balance model applies an exponential decay function that reduces each event’s contribution based on its age.

The decay formula uses a half-life parameter (default: 14 days). An event detected today contributes its full weight. An event detected 14 days ago contributes half. An event detected 28 days ago contributes one quarter. The exact formula is:

effective_weight = weight x 0.5 ^ (days_since_event / half_life)

You can adjust the half-life to match your sales cycle. If you sell to enterprises with long decision timelines, a 21-day or 28-day half-life gives older signals more staying power. If you run a fast transactional motion, a 7-day half-life keeps the score tightly focused on what is happening right now.

The final score is the sum of all time-decayed weighted values, rounded to two decimal places.

Creating a Balance Scoring Configuration

Let’s set up a Balance model through the API. The endpoint is POST /scoring/models.

curl -X POST https://api.rodz.io/v1/scoring/models \
  -H "Authorization: Bearer $RODZ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ICP Priority Score",
    "type": "balance",
    "lookback_days": 30,
    "decay_half_life_days": 14,
    "weights": {
      "fundraising": 10,
      "mergers-acquisitions": 8,
      "job-changes": 7,
      "job-offers": 3,
      "recruitment-campaign": 5,
      "company-registration": 4,
      "social-mentions": 1,
      "competitor-relationships": 6,
      "public-tenders": 5
    }
  }'

A successful response returns the model ID and a summary of your configuration:

{
  "id": "scm_9f8e7d6c5b4a3210",
  "name": "ICP Priority Score",
  "type": "balance",
  "lookback_days": 30,
  "decay_half_life_days": 14,
  "weights": {
    "fundraising": 10,
    "mergers-acquisitions": 8,
    "job-changes": 7,
    "job-offers": 3,
    "recruitment-campaign": 5,
    "company-registration": 4,
    "social-mentions": 1,
    "competitor-relationships": 6,
    "public-tenders": 5
  },
  "created_at": "2026-03-14T09:00:00Z",
  "status": "active"
}

Save the model id. You will reference it in every subsequent scoring request.

For a full overview of the endpoint parameters, response formats, and error codes, see the Rodz API Reference.

Choosing the Right Weights

Weights are the most important decision you will make when setting up the Balance model. There is no universal formula because the right weights depend entirely on your product, your buyer persona, and your sales motion.

Here are some guidelines that work well across different contexts.

Start with your best deals

Look at the last 20 deals you closed. What signals were present before the deal started? If you notice that 15 out of 20 had a recent funding round, fundraising should get a high weight. If job changes at the leadership level appeared in 12 of those deals, that signal deserves a strong weight too. Let your historical conversion data guide the initial numbers.

Use a 1-to-10 scale

Keeping weights between 1 and 10 makes them easy to reason about. A weight of 10 means “this is the strongest possible indicator of purchase intent for us.” A weight of 1 means “this is a mild positive signal, but it should not drive outreach on its own.” Avoid extreme ranges like 1 to 100. They make it harder to rebalance later.

Separate frequency from importance

Some signals fire often (job postings), others fire rarely (funding rounds). A high-frequency signal with a high weight will dominate your scores. If job postings are useful but not decisive, give them a weight of 2 or 3 even if they appear frequently. The Balance model counts every occurrence, so the cumulative effect of many low-weight events can still produce a meaningful score without drowning out rarer, higher-value signals.

Revisit quarterly

Your market changes. Your product evolves. The signals that predicted deals six months ago may not predict them today. Set a calendar reminder to review your weights every quarter. Pull your closed-won deals from the last 90 days, check which signals preceded them, and adjust accordingly.

Setting Score Thresholds for Routing

A score without a threshold is just a number. Thresholds convert scores into actions. The Rodz API lets you define threshold bands on your scoring model, and you can also implement them on your side when processing scored results.

Defining thresholds via the API

Update your scoring model with routing thresholds using PUT /scoring/models/{model_id}:

curl -X PUT https://api.rodz.io/v1/scoring/models/scm_9f8e7d6c5b4a3210 \
  -H "Authorization: Bearer $RODZ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "thresholds": {
      "hot": 25,
      "warm": 12,
      "cold": 0
    }
  }'

With this configuration, the API tags each scored company with a tier:

  • Hot (score >= 25): Immediate attention. Route to your best reps or trigger an automated sequence.
  • Warm (12 <= score < 25): Worth pursuing. Add to a nurture cadence or flag for review at the next pipeline meeting.
  • Cold (score < 12): Monitor passively. These accounts have some activity but not enough to justify direct outreach yet.

Practical routing strategies

Thresholds become powerful when connected to downstream actions. Here are three patterns that work well.

Pattern 1: CRM priority field. Push the score and tier into a custom field on the account record in your CRM. Sales reps filter by tier to build their daily call list. This is the simplest integration and works with any CRM that supports custom fields.

Pattern 2: Automated sequencing. When a company crosses the “hot” threshold, fire a webhook that enrolls the primary contact in an outreach sequence. The signal data (what event triggered the score increase) becomes the personalization hook in the first email. This approach pairs well with the Rodz webhooks setup.

Pattern 3: Slack alerts for high-value accounts. For named accounts or enterprise targets, send a Slack notification to the account owner when the score crosses a threshold. Include the score breakdown so the rep knows exactly which signals fired before they pick up the phone.

Retrieving Scored Companies

Once your model is active, you can pull ranked lists of companies using GET /scoring/models/{model_id}/scores:

curl -X GET "https://api.rodz.io/v1/scoring/models/scm_9f8e7d6c5b4a3210/scores?tier=hot&limit=20" \
  -H "Authorization: Bearer $RODZ_API_KEY" \
  -H "Content-Type: application/json"

The response includes each company’s score, tier, and the signal breakdown:

{
  "data": [
    {
      "company_id": "comp_abc123",
      "company_name": "Acme Corp",
      "score": 34.75,
      "tier": "hot",
      "signal_breakdown": {
        "fundraising": { "count": 1, "weighted_contribution": 10.0 },
        "job-changes": { "count": 2, "weighted_contribution": 11.2 },
        "job-offers": { "count": 8, "weighted_contribution": 13.55 }
      },
      "last_signal_at": "2026-03-13T14:22:00Z"
    }
  ],
  "pagination": {
    "cursor": "cur_xyz789",
    "has_more": true
  }
}

The signal_breakdown object shows exactly how each signal type contributed to the total. This transparency is one of the Balance model’s biggest advantages over black-box scoring systems. When a rep asks “why is this account ranked number one?”, you can give a precise, data-backed answer.

Use the cursor parameter for pagination when dealing with large result sets. The API returns up to 100 records per page by default.

Adjusting the Model Over Time

The Balance model is not a set-and-forget configuration. The best-performing teams treat it as a living system that improves with feedback.

Track conversion by tier

The most important metric is conversion rate by score tier. If your “hot” tier converts at 15% and your “warm” tier converts at 3%, the thresholds are working. If the conversion rates are similar across tiers, your weights or thresholds need adjustment.

Pull a report from your CRM every month that shows closed-won rate by the Rodz score tier at the time the deal was created. This gives you a clear feedback loop.

Watch for score inflation

As you add more signal types, average scores tend to rise. A company that would have scored 20 with five signal types might score 35 with ten signal types, even if nothing changed about the company’s actual intent. When you add new signals, re-evaluate your thresholds. You may need to shift the “hot” boundary upward to maintain its selectivity.

Use the decay half-life as a tuning lever

If your pipeline review shows that accounts are staying “hot” too long after their signals have gone quiet, shorten the decay half-life. If good accounts are dropping to “cold” before your reps can reach them, extend it. The half-life is the single most impactful parameter for controlling how responsive the score is to changes in signal activity.

A/B test weight changes

If you are unsure whether a weight adjustment will help, create a second scoring model with the new weights and run both in parallel for two weeks. Compare the ranked lists. If the new model surfaces accounts that convert better, promote it to your primary model and archive the old one.

The API supports multiple active models, so you can run this kind of test without disrupting your existing workflow.

Combining Balance Scores with Enrichment Data

Scores based on signals alone tell you what is happening. Combining them with enrichment data tells you whether the company is a fit in the first place.

The Rodz API’s company enrichment endpoints return firmographic attributes like industry, employee count, revenue range, and location. You can use these to pre-filter which companies are eligible for scoring, or to post-filter your scored results.

A practical approach is to score all monitored companies, then filter the results by your ICP criteria before pushing them to your CRM. For example:

# Get hot-tier scores, then filter by employee count and industry on your side
curl -X GET "https://api.rodz.io/v1/scoring/models/scm_9f8e7d6c5b4a3210/scores?tier=hot&limit=50" \
  -H "Authorization: Bearer $RODZ_API_KEY"

On your application side, cross-reference the scored companies with enrichment data to discard any that fall outside your ICP. This two-step process keeps the scoring model clean (focused purely on intent signals) while still ensuring that only qualified accounts reach your sales team.

Common Pitfalls and How to Avoid Them

Over-weighting a single signal type

If one signal type has a weight of 10 and everything else is at 1 or 2, your scoring model is essentially a filter for that one event. The whole point of the Balance model is to reward combinations. Keep your weight distribution balanced enough that a company needs multiple positive signals to reach the top tier.

Ignoring time decay

Setting the half-life to 90 days with a 90-day lookback effectively disables decay. Old signals will count almost as much as fresh ones. For most B2B sales motions, a half-life between 7 and 21 days produces the best results.

Setting thresholds too low

If 60% of your scored companies land in the “hot” tier, the tier is meaningless. Hot should feel exclusive. A good starting point is to set the hot threshold so that only 10-15% of scored companies qualify. Adjust from there based on your team’s capacity.

Never reviewing the model

Markets shift. Competitors emerge. Buyer behavior changes. A scoring model that worked perfectly six months ago may be outdated today. Schedule quarterly reviews, and let your conversion data drive the adjustments.

Frequently Asked Questions

How many scoring models can I run at the same time?

The Rodz API allows up to five active scoring models per organization. This gives you room to run your production model alongside experimental configurations. Each model operates independently with its own weights, thresholds, and lookback window. You can retrieve scores from any active model by referencing its unique ID.

Can I use the Balance model with only one signal type?

Technically, yes. The API will accept a configuration with a single weight. However, the Balance model is designed to reward signal diversity. With only one signal type, you are not scoring, you are filtering. If you only need to track one event type, a direct signal feed with severity thresholds will serve you better. The Balance model adds value when you combine at least three or four signal types.

How often are scores recalculated?

Scores are recalculated in near real time. When a new signal event is detected for a company, the API updates the score within minutes. Time decay is also applied continuously, so a company’s score will gradually decrease if no new signals arrive. When you query the /scores endpoint, you always receive the current score reflecting all events within the lookback window and the latest decay calculations.

What happens when a signal event is retracted or corrected?

Occasionally, a signal source may retract an event (for example, a funding round announcement that turns out to be inaccurate). When this happens, the Rodz API removes the event from the company’s signal history and recalculates the score. The corrected score is available on the next query. You do not need to take any manual action.

Can I weight individual signal events differently within the same type?

The Balance model assigns weights at the signal-type level, not at the individual-event level. However, you can achieve finer granularity by combining signal filters with scoring. For example, if you want job-changes at the VP level to score higher than job-changes at the manager level, create two separate signal configurations with different seniority filters. Each configuration produces its own event stream, and you can assign different weights to each in your scoring model.

How do I choose between the Balance model and other scoring options?

The Balance model is the best starting point for most teams. It is transparent, configurable, and does not require training data. The Rodz API also offers a Predictive model that uses machine learning to learn from your historical conversion data. The Predictive model can outperform Balance once it has enough data (typically 200+ closed deals), but it operates as more of a black box. Start with Balance, build your feedback loop, and consider switching or layering the Predictive model once your data set is large enough.

Does the score reset when I change the weights?

When you update the weights on an existing model, the API recalculates all scores using the new weights. Historical events within the lookback window are re-evaluated immediately. There is no need to delete and recreate the model. Note that score changes after a weight update may shift companies between tiers, so notify your sales team before making significant adjustments.

Can I export scored data for use in external analytics tools?

Yes. The /scores endpoint supports pagination through cursor-based navigation, allowing you to export the full scored data set. You can pull all companies (not just a single tier) by omitting the tier query parameter. Many teams export this data nightly into a data warehouse or BI tool for trend analysis, comparing how scores evolve over time and correlating them with pipeline outcomes.

Next Steps

You now have a working Balance scoring model that weights your intent signals, applies time decay, and segments companies into actionable tiers. From here, you can:

  1. Connect the scores to your CRM by pushing tier and score data into custom fields. Most teams use the webhook + middleware approach described in the webhooks guide.
  2. Explore the full endpoint reference for scoring parameters you may want to fine-tune, including pagination, filtering, and batch operations. See the Rodz API Reference.
  3. Dive into the interactive API documentation at https://api.rodz.io/docs to test scoring endpoints directly in your browser.
  4. Set up a quarterly review cadence. Block 30 minutes every quarter to compare conversion rates across tiers, adjust weights, and recalibrate thresholds.

The Balance model is intentionally simple. That simplicity is its strength. You can explain every score to every rep, debug unexpected rankings in minutes, and iterate without waiting for a model to retrain. Start here, build the feedback loop, and let your data tell you when it is time to layer in more advanced approaches.

Share:

Generate your outbound strategy for free

Our AI analyzes your company and creates a complete playbook: ICP, personas, email templates, call scripts.

Generate my strategy