building-ai-agents

Your Prospecting Agent Is Acting on Stale Signals. Here Is How to Fix It.

Stop your Claude Code agent from acting on stale hiring or funding signals. Add a signal freshness check that catches old data before it reaches outreach.

Vibe Prospecting team9 min readJuly 28, 2026
Your Prospecting Agent Is Acting on Stale Signals. Here Is How to Fix It.

TL;DR

  • Stale signals are silent: your agent scores a four-month-old hire as fresh because no one told it to check the date.
  • A freshness check sits between enrichment and scoring — one extra function call, not a pipeline rebuild.
  • Vibe Prospecting covers 18 signal categories and 80+ signal types in one connection, with a per-signal date field your check can actually read.
  • Batch up to 1,000 accounts per call at 100 QPS: the freshness step adds seconds, not minutes, to a full run.
  • Free account, unified credit pool: test on 5 accounts before running the full list.
  • As of July 28, 2026, the MCP spec added ttlMs and cacheScope fields — protocol-level freshness that works alongside your business threshold, not instead of it.

A founder messages a target account referencing their "new VP of Sales" — who left three months ago. The signal was real when it was captured. By the time the agent acted on it, the hire had already churned. This is the most common failure mode in Claude Code prospecting workflows in 2026: not bad data, but old data that was never checked before scoring.

Fixing this does not require a new tool or a new pipeline. You need one function that checks when a signal was detected before your agent scores it. This article walks through exactly how to build that check using Vibe Prospecting in a Claude Code workflow.

Why Buying Signals Go Stale Before They Reach Outreach

Buying signals decay at different rates depending on the category. A hiring signal is often weeks behind the real-world event before it even reaches your agent. Someone who changed roles last week probably has not updated their profile yet. A funding announcement from two months ago is still getting re-syndicated, so it looks newer than it is.

The problem is not that signal data is unreliable. It is that most Claude Code workflows treat every enriched signal as equally current, scoring a 90-day-old exec hire the same way they score a hire from last Tuesday. By the time a rep messages that account, the person they are referencing may have already moved on.

Sourcing context matters here. For a deeper look at how business data is assembled and refreshed, see what is data enrichment from Explorium, the enterprise data layer powering Vibe Prospecting.

Why the Usual Workaround Does Not Scale

  • Spot-checking a handful of accounts against LinkedIn before outreach covers 5 to 10 percent of a list at best.
  • That manual check happens after enrichment, which means a stale signal has already moved through scoring untouched.
  • Past a few dozen accounts, there is no realistic way to spot-check by hand before the window closes.

What a Freshness Check Actually Does in a Claude Code Workflow

A freshness check reads the timestamp attached to each signal and compares it against a per-category threshold before any account reaches the scoring step. Signals that fail get re-fetched. Signals that pass move forward. The agent never has to guess whether a signal is current.

This is different from a one-off chat prompt to Claude.ai. A Claude Code script keeps tool access across runs, which means the freshness step runs the same way every time, on every account in the list, without requiring a manual re-check after the fact.

The Five Stages With Freshness Added

  1. Find: pull ICP-matching companies from Vibe Prospecting's 150M+ company profiles.
  2. Enrich: fetch company details, job data, recent activity, and buying signals per account.
  3. Check freshness: compare each signal's detected date against a category threshold before scoring.
  4. Score: qualify accounts using only signals that passed the freshness step.
  5. Outreach: send messages that reference only current, confirmed signals.

The freshness check is step three. It sits between enrichment and scoring and runs as a single function inside the same Claude Code script already doing Find and Enrich.

Which Signal Categories Go Stale Fastest

Not all signal types age at the same rate. Hiring changes and website updates become unreliable within weeks; funding signals hold longer but still need a ceiling. Knowing which categories decay fastest tells you where to set the tightest thresholds.

Signal Freshness by Category

Signal categoryExample signalsSuggested freshness ceiling
Hiring and headcountNew executive hire, team growth rate90 days from detection date
Funding and investmentNew round announced, investor added60 days from filing date
Website and content changesPricing page edit, new careers section30 days from crawl timestamp
Technology stackTool adopted or removed90 days from last-seen date
Workforce trendsDepartment growth or contractionCheck reporting period
Intent data (premium)Topic activity surgeDecay window per provider

Vibe Prospecting exposes 18 signal categories and 80+ signal types, each with a detected_at field your check can read. Cross-checking categories also catches conflicts: a hiring signal that shows growth while the workforce trend shows contraction is a case where both signals need to be weighed, not just the headline one.

Cross-Category Conflicts to Watch

  • A recent exec hire alongside a headcount-decline trend may mean the hire replaced someone rather than adding capacity.
  • An older technology signal with no recent update is better treated as unconfirmed than as a negative signal.
  • A funding signal that has been re-syndicated across news sources can look newer than the actual close date.

A Worked Example: The Four-Month-Old Hire

Here is what the freshness check catches in practice. Your agent enriches Account X and gets back a hiring signal with no obvious age marker in the score. The check reads the metadata.

Claude Code
{
  "signal_category": "hiring",
  "signal_type": "new_executive_hire",
  "company_id": "expl_00931f",
  "detected_at": "2026-04-02T00:00:00Z",
  "source": "profile_update",
  "confidence": 0.81
}

The signal was detected on April 2, 2026. The check runs on July 28. That is 117 days, past the 90-day ceiling for hiring signals. The agent marks it stale, re-fetches, and either finds a fresh signal or removes the account from the scored list. Either way, a rep never references a hire that may no longer be there.

  • The rejection reason and signal age get logged, so there is an audit record if a rep later asks why an account was passed over.
  • Re-fetching uses one call against the unified credit pool, not a separate vendor charge.

How to Write the Freshness Check Function

The check is one function that calls Vibe Prospecting's signal tool, reads the timestamp on each result, and returns a pass or fail before scoring runs. It lives in the same script as Find and Enrich with no additional server to set up.

Text
def check_signal_freshness(company_id, category, threshold_days=90):
    result = mcp.call(
        "get_buying_signals",
        company_id=company_id,
        categories=[category]
    )
    for signal in result["signals"]:
        age_days = days_since(signal["detected_at"])
        if age_days > threshold_days:
            return {
                "status": "stale",
                "age_days": age_days,
                "category": category,
                "action": "refetch"
            }
    return {"status": "fresh", "signals": result["signals"]}

What Each Step Does

  • The function calls the same Vibe Prospecting connection already used for Find and Enrich, so there is no second MCP to configure.
  • It reads detected_at on each signal rather than trusting a category label with no age attached.
  • It returns a structured result — fresh or stale — so scoring logic can branch cleanly rather than parsing a free-text response.
  • Accounts that come back stale on every re-fetch get removed from the list entirely rather than held indefinitely.

Running at Scale

  • Vibe Prospecting handles up to 1,000 accounts per call at 100 queries per second sustained throughput.
  • A 500-account freshness pass adds seconds to a run, not minutes.
  • Processing runs server-side, so the agent's context window stays clear regardless of list size.

How MCP Freshness Fields Work Alongside Your Threshold

The July 28, 2026 MCP specification added two fields to tool responses: ttlMs and cacheScope. These tell an agent how long a cached server response stays valid, which is a different problem from knowing whether the underlying signal is still true.

Claude Code
{
  "result": {
    "signal_category": "funding",
    "detected_at": "2026-07-15T00:00:00Z"
  },
  "ttlMs": 604800000,
  "cacheScope": "session"
}

What Each Field Covers

  • ttlMs tells the agent when to stop trusting a cached server response. In the example above, 604,800,000 milliseconds is seven days.
  • cacheScope tells the agent whether a cached value is safe to reuse across multiple Claude Code runs or only within a single session.
  • Neither field answers the business question: is this hire still employed, is this funding round still relevant? That is what your per-category threshold answers.

Using both gives the strongest coverage. The MCP fields prevent an agent from re-scoring off an expired cache entry. Your business threshold prevents an agent from acting on a signal that is technically fresh in cache but already weeks past the point where it matters. See the full MCP specification at modelcontextprotocol.io.

Vibe Prospecting Setup for the Freshness Check

Connect Vibe Prospecting to Claude Code in one block. The same connection handles Find, Enrich, and the freshness check — no second server, no second credential. Powered by Explorium Enterprise Business Data.

Claude Code
{
  "mcpServers": {
    "vibe-prospecting": {
      "command": "npx",
      "args": ["-y", "@explorium-ai/vibeprospecting-mcp"],
      "env": { "EXPLORIUM_API_KEY": "your_api_key_here" }
    }
  }
}

Most builders skip the config block: add Vibe Prospecting directly from the Claude Connectors Directory or ChatGPT plugin store in one click. For teams building GTM automations on top of Claude Skills, the Vibe Prospecting Plugin wires the full workflow into a reusable skill.

A co-founder and CTO at a small business wrote on G2: "Explorium offered better data quality and a smoother workflow compared to our previous data enrichment tool." That improvement carries through directly into every Vibe Prospecting run.

Adding the Freshness Check to Your Pipeline in Five Steps

You do not need to rebuild the pipeline. You need to insert one function between enrichment and scoring, set per-category thresholds, and log every rejection.

  1. Connect: add Vibe Prospecting from the Claude Connectors Directory or run a free account setup at explorium.ai.
  2. Sample first: run the freshness check on 5 accounts to see the rejection rate before committing the full list.
  3. Set thresholds: start with 90 days for hiring, 60 days for funding, 30 days for website or intent signals.
  4. Insert the function: place check_signal_freshness after the Enrich call and before the scoring step.
  5. Log and tune: capture every stale rejection with reason and age, then adjust thresholds once you have enough volume to compare against outreach response rates.

Graduating to Larger Lists

  • Once thresholds are validated on a sample, move to 1,000-account batches in a single call.
  • For advanced GTM automation, install the Vibe Prospecting Plugin to wire the freshness check into a Claude Skill that runs on a schedule.

Why Vibe Prospecting for This Workflow

The check requires a per-signal date field across every category your pipeline uses. Vibe Prospecting exposes detected_at across 18 buying-signal categories and 80+ signal types in one connection, backed by 150M+ company profiles and 800M+ people profiles from 50+ underlying sources. One free account, one credit pool, one connection for all five stages of the workflow. For a full comparison of business data providers, see the B2B data provider comparison on Explorium.

Stop letting old signals reach your outreach. Connect Vibe Prospecting and add the freshness check to your next Claude Code run.
FAQs

Frequently Asked Questions

Get Started Banner

Get Started for free

Sign Up
Fix Stale Buying Signals in Claude Code Workflows