DEV Community

Cover image for How to Collect B2B Intent Signals From Public Activity Without a Paid API
Tim Zinin
Tim Zinin

Posted on Originally published at apify.com

How to Collect B2B Intent Signals From Public Activity Without a Paid API

The problem

Sales and marketing teams want to know which accounts deserve research first. The classic signals are public: a company is hiring aggressively for sales roles, or it just announced funding, a launch, or a partnership. Collecting that by hand means checking each company's careers page and news mentions one by one, then arguing about which account looks "hot."

Commercial intent-data platforms automate this, but they bundle private co-op data, visitor identity and proprietary scores behind annual contracts — overkill when the question is simply "which of these 100 accounts show observable public activity worth a human look?"

What the actor does

The Intent Signal Aggregator turns company names and buyer-supplied ATS tokens into a review-ready public activity record, combining exactly two public, keyless source classes:

  • Hiring: current open roles from public Greenhouse, Lever or Ashby board endpoints, with open-role counts and sales/marketing/engineering keyword classifications.
  • News: dated Google News RSS headlines inside your requested window, with publisher name, item link and publication time attached. Items without a parseable date, outside the window, or implausibly in the future are excluded and counted.

Three explicit input modes control which sources are requested: Microsoft (news only), greenhouse:stripe (that one ATS board only), and Ramp|ashby:ramp (both). Every delivered report includes a transparent 0–100 activity-priority score with a scoringBreakdown (points per role and per keyword-matched headline), source coverage states, evidence receipts (URL, HTTP status, response size, retrieval time), confidence with reasons, data gaps, and a recommended manual next action.

The README is blunt about the boundary: the score is an observation-priority heuristic, not proof of buying intent, budget, growth or purchase timing — and safeToAutomate is always false. The legacy field names intentScore/intentSignals remain as aliases, not a stronger claim.

Example: input and output

Input mixing all three modes:

{
    "companies": ["Microsoft", "greenhouse:stripe", "Ramp|ashby:ramp"],
    "newsWindowDays": 30,
    "maxNewsItems": 10
}
Enter fullscreen mode Exit fullscreen mode

The README's output contract example (abridged to key fields):

{
    "input": "Ramp|ashby:ramp",
    "inputMode": "combined",
    "found": true,
    "hiring": { "provider": "ashby", "openRoles": 118, "salesHiring": 46, "marketingHiring": 16, "engineeringHiring": 30 },
    "recentNews": [
        { "title": "Ramp launches new product capability - Example Publisher", "pubDate": "2026-08-10T12:00:00.000Z" }
    ],
    "activityScore": 90,
    "scoringBreakdown": { "openRoles": 30, "salesRoles": 20, "matchedHeadlines": 10 },
    "sourceCoverage": { "hiring": "ok", "news": "ok" },
    "confidence": { "score": 65, "level": "medium" },
    "recommendedAction": "Review the cited board and headlines, confirm the company identity and business context, then decide whether this account deserves manual research.",
    "safeToAutomate": false
}
Enter fullscreen mode Exit fullscreen mode

A live acceptance run documented in the README shows why score and confidence are separate: the exact-name news query for "Ramp" returned an unrelated Intel RAMP-C headline — evidence the row kept visible instead of silently counting it.

Pricing and the free limit

Pay-per-event: $0.005 per run start plus $0.004 per delivered company report. Clean zero-observation rows and source-failure rows are free. A run delivering 100 reports costs $0.005 + 100 × $0.004 = $0.405. Apify's free plan gives $5 of usage credits per month, so $5 covers about 12 such runs — roughly 1,200 company reports.

Try it

Paste an account list, optionally add explicit ATS tokens, and press Start: Intent Signals — Public Activity Evidence

For AI agents and MCP

The actor accepts JSON input and returns structured rows plus a KVS OUTPUT reconciliation record, callable from the Apify API, the SDKs, or the hosted Apify MCP server documented in the README. An agent can sort a research queue by activityScore and confidence.score, then attach the cited board and headline URLs as evidence — while safeToAutomate: false and the row-level non-claims keep the score from becoming autonomous outreach.

Top comments (0)