Skip to main content
Newspaper illustration

Real-Time Lead Scoring in Marketo: Build a Growth Signals Agent

By Edward Unthank Published Aug 18, 2026

There are tens of thousands of people in your Marketo database. Yesterday, roughly a dozen of them did something worth noticing. One returned after eight months of silence. One worked through four documentation pages in a single sitting. Another was the third person from the same company to visit in a week.

Nobody noticed, and not because the data was missing. It was there, it arrived on time, and you are paying for the platform that collected it. It sat in the activity log until someone got around to running a report. The fix is not another intent data vendor. It is a growth signals agent: a system that reads the behavioral data already flowing into your instance and surfaces the accounts that matter while they still matter.

This is a marketing operations problem before it is a technology problem. Every B2B demand generation team running Adobe Marketo Engage is already collecting the signals. Almost none of them are reading the signals on a timescale that lets anyone act.

The short version

  • Standard lead scoring is cumulative, so it measures lifetime engagement and rewards tenure over urgency.
  • The growth signals that predict a B2B deal are recent, account-level, and relative to that account’s own normal.
  • Scores have to decay on a curve, not a cliff, so the surfaced list stays credible enough that people act on it.
  • The architecture is ordinary engineering: a webhook, a warehouse, and a Slack card. The AI writes summaries and nothing else.

What is a growth signals agent?

A growth signals agent is an always-on system that watches first-party behavioral activity in your marketing automation platform, scores it against each account’s own history, and alerts a human the moment an account’s score crosses a threshold you set, in the same way you already set an MQL threshold. The difference is not the mechanism, it is what feeds the number. It does not purchase data, scrape third parties, or enrich your database. It reads what your instance already captures and does so continuously rather than on a reporting schedule.

You will see the same idea described several ways depending on who is talking. Demand generation teams call them demand growth signals. Growth marketing teams call them growth marketing signals. Sales leaders usually just say buying signals or buyer intent signals, and marketing operations teams tend to call the underlying technique behavioral lead scoring. The label matters less than the distinction underneath it, which is between first-party behavior your own platform recorded and third-party intent data somebody sold you.

The distinction worth holding onto is between a ledger and a monitor. Traditional lead scoring in Marketo is a ledger: it records everything that ever happened and produces a running total. A growth signals agent is a monitor: it watches for change and raises an alarm.

A ledger tells you who has engaged with you the most since 2019. A monitor tells you who is working on a problem right now. Only the second one tells a salesperson what to do this afternoon.

Why Marketo lead scoring misses real buying signals

Two things work against you. Neither is a bug, and both are configuration decisions that made sense when somebody made them.

Alerts are wired to form fills, and not all form fills are alike

A Contact Us submission is an explicit request to be called, and treating it urgently is correct. A whitepaper download is a different thing wearing the same clothes: somebody trading an email address for a PDF. Most instances alert on both identically. Meanwhile the person quietly working through your implementation documentation at 11pm generates no notification at all, and may have solved their problem by Thursday.

Scores are cumulative

Most instances run some form of score deprecation, usually on a thirty or ninety day cycle, so this is not a case of nobody having thought about it. The problem is the shape of the correction. A deprecation flow removes points in a step, on a schedule, from people who have gone quiet. It does not make a visit from this morning outweigh a visit from six weeks ago, because both sit on the same side of the interval. The running total still answers the question of how much a person has engaged with you overall, which is why a contact who pulled six whitepapers across two years can outrank a VP who hit your pricing page three times this week. The score rewards tenure and penalizes urgency, which is precisely backwards for anyone trying to work a list today. Most of the standard optimizations for lead scoring improve the ledger rather than replace it.

The result is that the shortest-lived signals in your stack receive the slowest handling.

What counts as a real B2B buying signal

The naive version of this is to sum the activity and sort descending, which mostly surfaces your largest accounts and your most enthusiastic non-buyers. A few patterns carry considerably more information.

Five behavioral patterns that count as real B2B buying signals: deviation from baseline, multiple people from one company, breaking dormancy, depth within a session, and negative signals

Deviation from an account’s own baseline

Raw volume tells you how big a company is. A large enterprise generates activity constantly and always looks busy, while a fifty-person company might produce nothing for months. What matters is the change against that account’s normal. Twelve touches in a week means little on its own. Twelve touches against a nine-month baseline of zero is the entire story, and the second number is the one worth putting in front of a person.

Multiple people from one company

B2B purchases are committee decisions, and the committee assembles before anyone talks to you. One person reading deeply is interesting. Three people from the same domain arriving independently within a few days is a different event entirely, and it usually means somebody circulated a link internally. A conversation is happening that you are not in. This signal is invisible at the lead level and appears only when you roll activity up by account, which is why account-level scoring finds buying committees that person-level scoring cannot.

Breaking dormancy

A contact who has been silent for months and suddenly returns is more informative than one who engages steadily. Steady engagement is often just a newsletter habit. A return after a long gap usually means something changed on their end: a new budget cycle, a new manager, or a system that finally broke badly enough to matter.

Depth within a session

Four pages in one sitting is qualitatively different from four pages across four months, even though a cumulative score treats them identically. Depth suggests someone working a problem rather than browsing.

Negative signals

Unsubscribes, hard bounces, and long silences following heavy engagement all carry information, and most scoring models either ignore them or apply a token deduction. An account that went quiet after a burst of activity usually chose something else.

Why real-time ingestion is the whole architecture

Everything above works only if the signals are current, and that constraint drives the design more than any other decision.

Growth signals agent architecture: a Marketo smart campaign calls a webhook, a dispatch Worker validates and writes to a BigQuery warehouse, and a Slack card surfaces to a human, with hourly collectors underneath as the reconciliation layer

Smart campaigns in Adobe Marketo Engage call a webhook the moment a behavior worth caring about fires. The request hits a dispatch Worker, which validates it and writes to the warehouse immediately. There is no polling interval to wait out and no batch window to fall into. A pricing page visit at 2:14pm is in the scoring model at 2:14pm.

This is the difference between a reporting tool and something you can act on. A system whose entire argument is speed cannot begin by adding an hour of latency to itself. It also means the account timeline stays continuously accurate rather than accurate as of the last sync. When somebody opens an account, they see what happened, not what had happened by the time the last job ran.

Because ingestion is live, threshold crossings can be live as well. An account that crosses the line at 2:14pm can surface at 2:15pm, while the person is still in the documentation, still working the problem, and still receptive to hearing from someone who knows the answer. Sales teams apply a five-minute rule to inbound form fills for exactly this reason. A growth signals agent extends that rule to behavior that never generated a form at all.

Hourly collectors run behind the webhook as a safety net. The webhook sees only the behaviors somebody configured a campaign for, and a dropped request is gone. The collectors sweep the activity API for whatever the live path missed and reconcile against what already landed. The webhook provides latency and the collectors provide completeness. Neither is trustworthy alone: one is fast with holes in it, and the other is thorough and always a step behind.

Why the score has to decay

Live signals are useful only if the scoring treats them as live, which means old signals have to get out of the way.

A cliff is not a curve: a step-function deprecation rule holds full signal weight until day 90 then drops, while a decay curve loses value continuously from day one

Every signal enters with a weight and loses value on a curve as it ages. A pricing page visit from this morning contributes nearly its full weight. The same visit from six weeks ago contributes a fraction. Nothing is deleted, the history stays queryable, and the interaction record stays intact. The signal simply stops driving the number that determines whether an account surfaces right now.

The consequence people find uncomfortable is that accounts fall off the list. An account that scored high last week and has done nothing since will drop, without anyone marking it disqualified. That is the correct behavior. A list that only accumulates becomes a list nobody trusts, because everyone knows it contains everything that ever happened.

A list that can shrink stays credible, and credibility is the entire point. A surfaced account is worth something only if the person receiving it believes it deserves their next hour.

This is also why the scheduled deprecation flow does not go far enough. Removing ten points after ninety days of inactivity is a cliff, not a curve. It treats a signal as fully fresh on day eighty-nine and stale on day ninety-one, and it corrects for silence rather than for age. Lead score decay expressed in the math means every signal ages continuously, the model degrades gracefully, and nobody has to maintain a deprecation schedule to keep it honest.

Why not just build this in Marketo?

This is a fair objection, and the answer is not that Marketo cannot do any of it.

You can approximate parts of this natively. Smart lists can find recent activity, and scoring changes can deduct points over time. What becomes difficult is the combination: comparing an account against its own historical baseline, rolling person-level behavior up to the account, and applying a continuous decay curve rather than a step function. Each is awkward alone and they compound when combined. The usual result is a scoring program only its author understands and nobody dares modify.

There is also a practical reason to keep the computation outside your instance. This is analytical work, running window functions over long activity histories and recomputing constantly, and your production instance is not the place to run it. Pushing activity out to a warehouse lets you ask expensive questions without touching the system your campaigns depend on, and it puts the logic in version control instead of in a scoring program somebody configured two years ago and left behind. This is the same architectural argument behind an AI-first tech stack for revenue: the data core belongs outside the execution platform.

What the system actually produces

The build is three Cloudflare Workers, a BigQuery warehouse, and one Slack channel.

Signals land in tables organized around companies, people, signals, and interaction history, so a behavior attaches to an account rather than floating loose in an activity feed. Scoring runs against that warehouse. Accounts that cross a threshold surface as cards in Slack, immediately when the crossing is sharp enough to warrant it and in a daily roundup for the slower accumulations that matter but are not urgent.

The card leads with the behavior rather than the number. A score of 87 gives you nothing to write with. “Four support articles and a pricing page visit this week, against nine months of nothing” tells you exactly how to open. The output is built for a person who is about to send an email, so it contains the thing that person needs in order to send it.

It is worth being clear about proportions. A language model writes the card summaries, and that is the entire extent of its involvement. It performs no scoring, no ranking, and no deciding. The components that determine whether this system is useful are the webhook wiring, the warehouse schema, and the decay curve. None of those are AI, and all of them are ordinary engineering.

Why human triage still matters

Every card gets claimed, marked spam, marked contacted, or snoozed.

The reason is specific rather than philosophical. A current customer working through troubleshooting documentation produces almost exactly the pattern of a prospect evaluating you, and it might mean expansion interest or it might mean they are struggling and about to leave. The model sees a strong signal either way. A person who knows the account reads it in three seconds.

There is a related problem no amount of scoring solves. Activity is not budget. Someone teaching themselves the platform generates the same behavioral pattern as someone with money allocated to fix a problem. Engagement data does not contain that distinction, and a system pretending otherwise produces a confident list of people who will never buy anything.

The triage reactions are also labeled data. Every spam mark is a small correction to what the scoring should have weighted, and that feedback loop is the only mechanism by which the model improves at your specific database rather than at scoring in general.

Why growth signals matter for B2B marketing operations in 2026

Most of the AI conversation in marketing operations is about generating things: emails, copy, and campaign assets. The larger opportunity is quieter. Your platform already captures far more behavioral signal than any human will ever read, and the gap between capture and attention is where pipeline goes to die.

Closing that gap does not require better models. It requires the discipline to treat behavioral data as perishable, to build the plumbing that moves it in real time, and to keep a human in the position where judgment is actually needed. Marketing operations and revenue operations teams that do this will notice buying committees forming weeks before anyone fills out a form. Teams that do not will keep working lists assembled from things that happened last quarter. It is the same shift we described in bleeding-edge RevTech stacks: the architecture changes before the job titles do.

How to build a growth signals agent, step by step

You do not need the full architecture to get value from the first version.

  • Instrument one behavior. Pick a single high-intent action, such as a pricing page visit or a documentation session, and route it to a webhook rather than a weekly report.
  • Add a baseline. Store enough history per account to compare current activity against that account’s own normal instead of against a global threshold.
  • Put decay in the math. Replace step-function deductions with a curve, so that recency drives the score without anyone maintaining it.
  • Deliver where people already are. A card in a channel your team reads gets acted on. A dashboard someone has to remember to open does not.
  • Keep the triage loop. Make it trivially easy for a human to mark a surfaced account as wrong, and feed those corrections back into scoring.

Frequently Asked Questions

What is a growth signals agent?

A growth signals agent is a system that monitors first-party behavioral activity in your marketing automation platform, scores it against each account’s own historical baseline, and alerts a human when an account crosses a meaningful threshold. It uses data your instance already collects rather than purchased intent data, and it operates continuously rather than on a reporting schedule.

What are growth marketing signals?

Growth marketing signals, sometimes called demand growth signals or simply buying signals, are the behaviors that indicate an account is actively working a problem you solve: repeat pricing page visits, deep documentation sessions, several people from one company arriving in the same week, or a dormant account suddenly returning. In B2B they matter most at the account level, because the buying committee assembles before anyone contacts you.

How is this different from lead scoring in Marketo?

Standard lead scoring is cumulative, so it measures total lifetime engagement and rewards tenure over urgency. Score deprecation flows help, but they remove points on a schedule rather than aging every signal continuously. A growth signals agent applies a decay curve, compares activity against each account’s own baseline, and rolls person-level behavior up to the account so that multiple buyers from one company register as a single stronger signal. It also delivers alerts in real time rather than through a weekly review.

How is this different from third-party intent data?

Third-party intent data is purchased, inferred from activity on other people’s websites, and shared with everyone else who buys the same feed. Growth signals are first-party: they are behaviors recorded inside your own Adobe Marketo Engage instance, under your license, and nobody else has them. The tradeoff is coverage. Third-party data can surface accounts that have never visited you, while first-party growth signals only see people who already have.

Why does a lead score need to decay?

Because buying intent is perishable. A pricing page visit from this morning means something very different from the same visit six weeks ago, and a cumulative score treats them identically. Decay keeps recent behavior dominant, lets stale accounts drop off the list automatically, and keeps the surfaced list credible enough that people act on it.

Do I need a data warehouse to do this?

For the full version, yes. Comparing accounts against their own baselines, rolling activity up to the account level, and applying continuous decay are analytical operations that do not belong inside a production marketing automation instance. A warehouse such as BigQuery or Snowflake lets you run that computation without affecting the system your campaigns depend on.

Does this replace SDRs or sales outreach?

No. It changes what they see and when they see it. The system surfaces accounts and the specific behavior behind them, and a person decides whether the signal is real, whether the account is a customer rather than a prospect, and what to actually say. Human triage is where the judgment lives.

The signals are already yours

None of this generates information you do not already have. The dozen people who did something notable yesterday did it in your instance, under your license, in a system you have already paid for and already trust enough to run campaigns from.

The only real question is how long it takes you to find out.

Etumos is a B2B marketing operations consultancy. We build this kind of infrastructure inside Adobe Marketo Engage and the revenue systems around it. If you want to see what your own behavioral data would surface, our agentic marketing operations team can walk your instance and show you what is already there.

Get in Touch with Us

At Etumos, we love what we do and we love to share what we know. Call us, email us, or set up a meeting and let's chat!

Contact Us