Feature · Lead Scoring Engine Criteria

Lead scoring engine criteria with the formulas, weights, and decay curves spelled out.

Most lead scoring documentation describes criteria. The useful reference describes the engine: how each criterion is weighted, how decay curves modify the weight over time, how negative signals pull scores down, how segmentation splits the model, and how auto-tuning adjusts weights against observed conversion rates. This page is the technical reference for the Strkr lead scoring engine with concrete formulas, example weights, and the math behind the specific decisions.

The scoring engine architecture

How a criterion becomes a score.

The scoring engine is a weighted sum with decay, segmentation, and auto-tuning layered on top. Each criterion produces a raw contribution. The raw contributions apply their decay curves to reflect recency. The segmented models apply different weights to the same criterion based on which audience the lead belongs to. The auto-tuning layer adjusts the weights monthly against actual conversion rates. The final score is a 0-to-100 number with the three driving criteria visible on the record. Understanding each layer in isolation makes the whole engine readable rather than magical.

Raw contribution

Each criterion fires with a weight.

A criterion either fires (the lead matches the condition) or does not. When it fires, it contributes its weight to the raw score. "Visited pricing page in last 7 days" fires with +15. "Email domain is Gmail" fires with -20. The weights are tunable per criterion in the config.

Decay curves

The contribution shrinks over time.

A behavioral criterion that fired three weeks ago contributes less than the same criterion that fired this morning. Each criterion carries a decay curve: linear, exponential, or step. "Pricing page visit" might decay to zero over fourteen days. "Demo request" might decay slowly over sixty days.

Segmented weights

The same criterion weights differently per segment.

A single lead might belong to the enterprise segment, the SMB segment, or a product-led segment. Each segment has its own weight table for every criterion. "Pricing page visit" might be worth +20 in the enterprise model and +10 in the product-led model. The lead carries scores for each segment it qualifies for.

Composite bonuses

Multiple signals in a window add extra.

When three or more behavioral signals fire within a seven-day window, the engine adds a composite bonus beyond the sum of individual contributions. The composite captures the pattern where buyers who signal across multiple channels in a short window convert at meaningfully higher rates than buyers who signal once.

Normalization

The raw sum maps to 0 to 100.

The raw weighted sum could be any number. The engine normalizes to a 0-to-100 scale with the mapping tuned so the median hot lead sits around 70 and the median cold lead sits around 20. The normalization lets the sales team work with a readable number without the raw math leaking into the UI.

Tier mapping

The score becomes a hot/warm/cold label.

Scores map to tiers through configurable thresholds. "Hot" at 75+, "warm" at 50-74, "cold" at 0-49, for example. The tier label is used in filters, routing rules, and dashboards. The underlying score stays visible for finer-grained analysis.

Reason attribution

The top three signals, named on the record.

The engine identifies the three signals contributing most to the current score and writes them to the lead record in plain English. "Visited pricing page (contribution 14). Downloaded enterprise buyer's guide (contribution 12). Target industry (contribution 10)." Reps see the receipts.

Nightly compute

The score refreshes on a cadence.

The engine computes scores for every lead every night, with real-time updates on specific high-value triggers (demo request, pricing page visit). The nightly compute keeps the whole queue fresh and the real-time updates handle the moments where latency matters.

Audit log

Every score change recorded with reason.

Every score change writes to the audit log with the reason (new signal fired, decay reduced an old signal, nightly re-score, auto-tune adjustment). A score that moved by twenty points overnight has an explanation visible in the log, not a mystery.

Firmographic criteria with formulas

The fit side of the model, in explicit math.

Firmographic criteria measure how well the lead's company matches the ICP. The weights are specific and the formulas are explicit so an ops lead can see exactly how a given lead scored on the fit side. Below are twenty-plus firmographic criteria with the specific formula each uses, the suggested starting weight, and the decay rule (if any). Firmographic signals typically do not decay since the underlying attribute is stable, but the engine supports decay for cases where the fit signal does age.

Industry match

Enum match: fires at weight +25.

Formula: if company.industry in [list of target industries] then +25 else 0. The target industry list is configurable per segment. For a SaaS product, the list might include SaaS, FinTech, HealthTech. For a specific vertical product, the list might be a single industry.

Employee count

Range match: fires at weight +20.

Formula: if company.employee_count between [low, high] then +20 else 0. The low/high range is configurable. For a mid-market product, the range might be 100 to 1000. Leads outside the range do not fire the positive signal; they may fire a negative out-of-ICP signal if configured.

Revenue band

Range match: fires at weight +15.

Formula: if company.annual_revenue between [low, high] then +15 else 0. Revenue data comes from enrichment (Clearbit, ZoomInfo). For products priced per tier, the revenue band often correlates more tightly with purchase intent than headcount does.

Geography

Country/region match: fires at weight +10.

Formula: if company.country in [GTM scope countries] then +10 else 0. Combined with a negative signal for out-of-scope geographies to prevent leads from unreachable markets from inflating the queue.

Tech stack

Compatible system detected: fires at weight +15.

Formula: if any(company.tech_stack in [target systems]) then +15 else 0. For integration-heavy products, companies running the systems you integrate with score higher. The tech stack data comes from enrichment or from an own tracking pixel on your product.

Growth hiring

Hiring in target roles: fires at weight +10.

Formula: if any(company.open_jobs matches [role patterns]) in last 90 days then +10 else 0. For products sold to RevOps teams, a company hiring a RevOps lead is a strong fit-and-timing signal.

Funding

Recent round: fires with decay +12.

Formula: if company.last_funding within last 180 days then +12 * decay(days_since_funding, half_life=180) else 0. For products priced for scaling teams, recent funding is a specific budget-availability signal that decays as the company burns the round.

Public vs private

Entity type match: fires at weight +5.

Formula: if company.entity_type == target_entity_type then +5 else 0. Smaller weight than the structural criteria because the signal is weaker, but useful as a tie-breaker when multiple leads score similarly on other dimensions.

Composite firmographic fit

All of industry, size, revenue match: +15 bonus.

Formula: if (industry match) AND (employee count match) AND (revenue match) then additional +15. The composite captures that a lead matching on all three dimensions is a tighter ICP fit than a lead matching on only one or two.

Behavioral criteria with decay curves

The intent side of the model, with the recency math.

Behavioral criteria carry decay because a behavior loses predictive power over time. The engine applies specific decay curves per criterion, tuned so short-half-life signals (pricing page visits) decay faster than long-half-life signals (demo requests). Below are the behavioral criteria with their formulas, starting weights, and decay curves. The decay math uses exponential decay by default: contribution = weight * exp(-ln(2) * age_days / half_life_days).

Pricing page visit

Weight +15, half-life 7 days.

Formula: for each pricing_page_visit, add +15 * exp(-ln(2) * days_since / 7). A visit today contributes 15. A visit three days ago contributes about 11. A visit seven days ago contributes 7.5. Multiple visits sum, up to a daily cap of three to prevent frantic browsing from dominating.

Demo request

Weight +50, half-life 30 days.

Formula: for each demo_request, add +50 * exp(-ln(2) * days_since / 30). A demo request today contributes 50. One from fifteen days ago contributes about 35. One from thirty days ago contributes 25. The decay is slow because a demo request is a strong intent signal that stays meaningful.

Content download

Weight +10, half-life 14 days (variable by asset).

Formula: for each content_download, add asset_weight * exp(-ln(2) * days_since / asset_half_life). Different assets carry different weights and half-lives. A top-of-funnel blog download has weight +5 and half-life 21 days. A bottom-of-funnel ROI calculator has weight +15 and half-life 10 days.

Webinar attendance

Weight +20, half-life 21 days.

Formula: for each webinar_attendance (not replay), add +20 * exp(-ln(2) * days_since / 21). Attended live scores higher than attended replay (replay has weight +10, half-life 14). The distinction captures the engagement effort gap between live and asynchronous.

Multi-session visits

Three sessions in a week: +15, half-life 7.

Formula: if session_count_in_last_7_days >= 3 then +15 * exp(-ln(2) * days_since_last_session / 7). The criterion fires on sustained visit activity, not individual visits. The decay resets on each new qualifying week-window.

Docs engagement

Deep docs read: +12, half-life 14.

Formula: if session_on_technical_docs with time_on_page >= 180s then +12 * exp(-ln(2) * days_since / 14). The technical docs are a late-funnel signal for technical evaluators and carry a meaningful weight with modest decay.

Comparison page visit

Weight +18, half-life 10.

Formula: for each visit to /vs/ or /compare/, add +18 * exp(-ln(2) * days_since / 10). Comparison traffic is late-funnel shortlisting activity. The weight is higher than pricing visits and the decay faster because the behavior is more time-sensitive to a buying decision.

Chat engagement

Chat started: +10, half-life 7.

Formula: for each chat_conversation_started, add +10 * exp(-ln(2) * days_since / 7). Chat captures expressed intent in a one-to-one channel. The decay is fast because chat conversations rarely survive without a follow-up within the week.

Form abandonment

Weight +5, half-life 7.

Formula: for each tracked form abandonment where first_name was captured, add +5 * exp(-ln(2) * days_since / 7). The partial fill signals intent that did not complete. A short-decay re-engagement path can often convert the lead.

Negative signals and the exclusion ladder

The math that keeps the queue clean.

Negative signals are the specific weight the engine applies when a lead carries a disqualifying attribute. Without strong negatives, the queue bloats with leads that look superficially good on behavior but should never reach a rep. The negatives are typically absolute (large magnitude, non-decaying) because the disqualifying attribute does not get better over time. The exclusion ladder is the specific set of thresholds below which a lead cannot surface regardless of positive signal.

Competitor domain

Weight -100, no decay.

Formula: if email_domain in [competitor domains] then -100. The weight drops the lead permanently out of the sales queue. Competitor research visits accumulate for competitive intelligence but never consume rep time.

Free email domain

Weight -20, no decay.

Formula: if email_domain in [gmail.com, yahoo.com, outlook.com, hotmail.com, ...] then -20. For most B2B motions, free email is a weaker signal than a corporate address. The weight is small enough that strong behavioral signals can lift the lead into the queue.

Previously disqualified

Weight -50, half-life 90 days.

Formula: if disqualified_within_last_90_days then -50 * (1 - days_since_dq / 90). The penalty keeps a recently-disqualified lead from re-surfacing full force. The decay allows the lead to re-enter the queue after a reasonable window with new positive signal.

Student or free email + behavior filter

Composite negative for lead quality.

Formula: if email_domain is free AND behavioral_score < 10 then -40. A free email with no supporting behavior is almost always a drive-by. The composite negative drops these leads harder than either signal alone.

Role mismatch

Weight -15 when title does not match.

Formula: if title in [student, intern, consulting_firm_employee] then -15. The signal catches leads from roles that do not match the buyer profile. The weight is small to allow for the occasional champion in an unusual role.

Geography out of scope

Weight -30 for unreachable markets.

Formula: if country not in [GTM scope countries] then -30. For products with hard geographic scope (regulated markets, data residency requirements), the negative keeps out-of-scope leads below the hot threshold even with strong behavior.

Spam complaint

Weight -50, no decay.

Formula: if ever_marked_spam then -50 permanently. The signal reflects both an intent signal (the lead does not want outreach) and a deliverability risk. The lead stays in the system for suppression but does not reach the queue.

Unsubscribed

Weight -25, with override.

Formula: if unsubscribed then -25. The negative keeps the lead cold until a new high-intent signal (demo request, pricing page revisit) lifts the score above the threshold. The override catches the lead who unsubscribed from newsletters but still wants to buy.

Hard DNC

Weight -500, blocks all outbound.

Formula: if dnc_flag is set then -500. The hard do-not-contact flag drops the lead below any possible hot threshold. The system also blocks all outbound sends to the lead regardless of score. Compliance and brand both demand the hard floor.

Auto-tuning and the ongoing calibration loop

How the engine learns from the book.

A scoring model that stays static for a year drifts out of alignment with the actual conversion patterns in the book. The engine runs a monthly calibration loop that measures each criterion's predictive power against actual closed-won outcomes and suggests re-weights. The admin reviews the suggestions, accepts or rejects, and the model updates on the active production flow. The loop keeps the scoring model honest as the market, the product, and the ideal customer shape evolve, without requiring a quarterly model rebuild from scratch.

Conversion attribution

Each closed-won traces to its scoring signals.

For every closed-won deal, the engine traces back to the lead's scoring history at the time of SQL and identifies which criteria contributed most to the lead reaching the hot tier. The attribution builds the empirical dataset the calibration loop uses.

Per-criterion lift

The uplift each criterion produces.

The engine computes the conversion rate of leads where each criterion fired versus the baseline conversion rate. A criterion whose uplift is +15 points of conversion rate is meaningfully predictive. A criterion whose uplift is +1 point is not. The uplift measurement is the primary input to the calibration.

Weight suggestions

The recommended re-weight per criterion.

The calibration suggests a new weight proportional to the observed uplift. A criterion with higher measured lift gets a higher suggested weight. A criterion with low or negative lift gets a lower suggested weight or a retirement suggestion. The suggestions preserve the overall score scale through normalization.

New criterion detection

What is in the data that is not in the model.

The calibration also surfaces criteria that are not currently in the model but correlate strongly with conversion in the data: specific referrer sources, specific content categories, specific firmographic patterns. The ops lead reviews the candidate criteria and adds the useful ones to the model.

Retirement suggestions

Criteria whose predictive power dropped.

A criterion that was strong three quarters ago but whose uplift has dropped to near zero becomes a retirement candidate. The engine flags the criterion with the trend data. The ops lead reviews and either retires the criterion or investigates whether an underlying signal shift explains the drop.

Monthly review

A specific operational ritual.

The calibration suggestions land in the admin dashboard once a month. The ops lead reviews over a thirty-minute session, accepts or rejects each suggestion, and the model updates on the production flow. The ritual is specific and sized to fit a normal operational cadence.

Explainability

Every suggestion carries its reasoning.

Each weight suggestion carries the empirical reasoning: the measured uplift, the sample size, the confidence interval. The ops lead sees why the engine recommends a change rather than being asked to accept a black-box number.

A/B weight testing

Test a weight change against a holdout.

For large weight changes, the engine can run an A/B test: half the new leads scored with the current weight, half with the proposed weight, and the resulting conversion rates measured. The experiment surfaces the real impact of a change before committing it to production.

Rollback

Any calibration update is reversible.

The weight history for every criterion is versioned. A calibration update can be rolled back if the production conversion rate drops after the change. The engine does not force the ops lead to commit to a change that turns out to be wrong.

A lead scoring engine with the formulas visible and the calibration automatic.

Every criterion carries an explicit weight, an explicit decay curve, and a reason in plain English on the record. Strkr AI runs the monthly calibration loop and suggests re-weights grounded in actual conversion data. The engine is honest, auditable, and learns over time.

Common questions

What buyers ask about this feature.

What is the difference between a scoring criterion and a scoring engine?

A scoring criterion is a single signal with a weight. "Lead visited the pricing page" with a +15 weight is a criterion. A scoring engine is the system that combines many criteria into a composite score, applies decay curves to reflect recency, handles segmentation across different audiences, computes a normalized output, and runs the calibration loop that keeps the weights honest over time. Many lead scoring tools ship a list of criteria without the engine, which means the user ends up maintaining the model by hand and gradually drifting out of alignment with the real conversion patterns. Strkr's approach is to ship both: the criteria library as the starting point, and the engine as the production system that runs the model continuously with explicit math and auditable reasoning.

How do decay curves work and why do most behavioral signals need them?

A decay curve reduces the contribution of a signal over time to reflect that the signal's predictive power weakens as it ages. The engine uses exponential decay by default: contribution = weight * exp(-ln(2) * age_days / half_life_days). A pricing page visit with a half-life of 7 days contributes its full weight when fresh, half the weight at 7 days, a quarter the weight at 14 days, and so on. Different signals carry different half-lives tuned to the real buying-cycle data. Pricing page visits decay quickly (half-life around 7 days) because the shortlisting intent they signal is time-sensitive. Demo requests decay slowly (half-life around 30 days) because the active-evaluation intent they signal persists. Firmographic signals usually do not decay because the underlying attribute (industry, headcount) does not change on the same timescale.

What are segmented models and when do we need them?

Segmented models are separate weight tables that apply to different audiences. An enterprise model weights firmographic fit heavier and gives credit to executive-title engagement. A product-led model weights in-product usage signals heavier and treats inbound forms as a weaker signal. An SMB model weights different criteria to reflect the different buying motion. A single lead might belong to one or multiple segments; the engine computes a score per segment and the routing rules use the appropriate score. Teams need segmented models when the business has multiple distinct motions with different ideal customer profiles. For teams with a single consistent motion, a single global model is often sufficient and the segmented approach adds complexity without proportional accuracy gain. Strkr supports both patterns through the config, letting teams start with a single model and split into segments as the business matures.

How does the auto-tuning loop work and what does the admin need to do?

The auto-tuning loop runs monthly. For each criterion currently in the model, the engine measures the actual uplift the criterion produces: the conversion rate of leads where the criterion fired versus the baseline conversion rate. The uplift measurement becomes the empirical input to a weight suggestion: criteria with high measured lift get suggested higher weights, criteria with low lift get suggested lower weights or retirement, and new candidate criteria that show strong correlation in the data but are not currently in the model get surfaced for review. The admin reviews the suggestions in a dedicated dashboard once a month, accepts or rejects each one, and the model updates on the production flow. The whole review session typically takes 30 minutes. Rollback is always available if a change produces unexpected results. The loop keeps the scoring model honest as the market and the business evolve, without requiring a quarterly rebuild.

How many criteria can we have in the model before it becomes unmanageable?

The practical ceiling is around 20 to 25 active criteria for a mid-market B2B motion. Beyond that, individual criterion weights become small enough that their marginal signal falls below the normal noise floor, and the model becomes harder to explain to the SDR layer. A healthy balance is typically 6 firmographic criteria, 6 to 8 behavioral criteria, 2 to 3 intent criteria, and 2 to 4 negative criteria. Strkr's engine supports more than 25 criteria technically, but the admin dashboard surfaces a warning when the model exceeds the practical ceiling because the marginal signal from each additional criterion tends to shrink below the noise floor. For teams whose business genuinely requires more criteria (highly segmented motions with specific industry signals), segmented models are usually a cleaner solution than piling more criteria into a global model.

How does Strkr's engine integrate with the broader marketing automation and sales workflow?

The engine lives on the same database as the CRM, the messaging layer, the forms, and the dashboards. The score and the tier update on the lead record in real time, visible to every downstream surface. The lead router reads the score to route to the right queue. The nurture flows read the score to escalate hot leads into the sales handoff. The sales dashboards read the score for queue sorting. The segment builder for campaigns can use the score as an audience filter. The assistant can read the score when drafting replies or classifying intent. The entire operating stack treats the score as a first-class attribute rather than a bolt-on. Because the engine runs natively, score updates take milliseconds, which matters for high-value real-time triggers like a hot lead crossing the SQL threshold during a live demo session.

Try it free. Bring your team next week.

No sales call, no migration consultant, no four-month implementation. Enter your card, get 14 days of the full Pro tier, cancel any time before day 14 with zero charge. Spin up a workspace, import your CSV, and have something useful before lunch.