Intent Signals — Public Activity Evidence
Pricing
from $3.40 / 1,000 company activity reports
Intent Signals — Public Activity Evidence
Turn company names and Greenhouse, Lever, or Ashby tokens into public role and dated-headline evidence with source receipts, confidence, gaps, and a manual next action. The score prioritizes research; it does not prove buying intent.
Pricing
from $3.40 / 1,000 company activity reports
Rating
0.0
(0)
Developer
Tim Zinin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Intent Signals — Public Company Activity Evidence
Turn company names and buyer-supplied Greenhouse, Lever, or Ashby board tokens into a review-ready public activity record. Each row combines only the sources you requested, attaches retrieval evidence and freshness, explains a transparent 0–100 activity-priority heuristic, states confidence and data gaps, and recommends a manual next step.
The compatibility fields intentScore and intentSignals remain so existing integrations do not break. They are aliases, not a stronger claim. A job listing or keyword-matched headline does not prove buying intent, budget, growth, demand, purchase timing, legal-entity identity, or permission to contact anyone.

What you get
- Three explicit research modes. A company name requests dated headline research;
provider:tokenrequests only the selected public ATS board;Company|provider:tokenrequests both. The Actor no longer pulls a name search silently when you asked only for a job board. - Current public role observations. Open-role count, sales/marketing/engineering keyword classifications, a bounded role sample, provider, board URL, and ATS-attribution disclosures.
- Fresh, dated headline observations. Google News RSS items are returned only when they carry a parseable publication time inside your requested window. Publisher name, publisher URL, RSS item link, and publication time stay attached.
- A transparent research-priority score. Every point comes from documented current-role counts or headline keyword matches.
scoringBreakdownshows the contribution of each component. - Evidence and failure truth. Source URL, retrieval time, HTTP status, response size, content type, record count, and outcome are included in
evidence. A wrong HTTP-200 payload is a source failure, not a clean zero. - Decision context. Stable entity/observation/event IDs, freshness, source coverage, confidence with reasons, data gaps, a review action, change semantics, and
safeToAutomate: false. - Run reconciliation. KVS
OUTPUTrecords requested, unique, processed, confirmed-delivered, paid, free-failure, withheld, unprocessed, advisory, partial, fatal, and replay-safe state. - Apify-native delivery. Schedule runs, call the API or MCP server, export JSON/CSV/Excel, and route rows through webhooks, Make, Zapier, n8n, a CRM staging table, or your own code.
Who this is for
Founder-led sales and small agencies
Use it to decide which accounts deserve manual research first. A current role mix or a recent dated headline can give a researcher a useful question to investigate. It is not a reason to send automated outreach by itself.
Account-based marketing and RevOps teams
Add evidence receipts and observable public activity to a buyer-defined account list. Keep the score separate from CRM fit, relationship history, firmographics, consent, suppression lists, and sales-qualified status.
Recruiters and specialist service providers
Review the functions represented on a public ATS board and open the source role before deciding whether a staffing, recruiting, training, design, or implementation service is relevant.
Competitive and portfolio research
Collect a consistent point-in-time observation across a watchlist. The Actor records one observation per run; your own scheduled Dataset history can support comparisons, but this Actor does not invent a prior baseline or call one snapshot a trend.
Market researchers and data teams
Use the normalized row as an enrichment input, not a final classification. Stable IDs, evidence, gaps, and OUTPUT make it easier to audit what was actually observed and what was not.
What this Actor is — and is not
It is a narrow evidence aggregator over two public source classes selected by the buyer:
- current public postings on Greenhouse, Lever, or Ashby; and
- dated Google News RSS results for an exact-name query.
It is not a replacement for a commercial intent-data provider. It has no private publisher co-op data, website visitor identity, ad impressions, topic-consumption history, CRM engagement, email behavior, purchase data, or proprietary company-resolution graph. It does not estimate likelihood to buy.
The score answers a smaller question: “How much observable public activity should a human review in this row?” It does not answer: “Will this company buy?”
Choose the right input mode
| Input form | Sources requested | Identity meaning | Good for |
|---|---|---|---|
Microsoft | News only | Exact-name search; entity match remains unverified | Reviewing recent dated coverage around a named account |
greenhouse:stripe | Hiring only | Exact public provider/token selected by the buyer; ownership still not independently verified | Reviewing a known ATS board without adding a name search |
| `Ramp | ashby:ramp` | Hiring + news | Buyer asserts that the name and ATS token belong together; Actor does not independently prove that link |
| `Pulse | pulse` | Hiring + news; all ATS providers probed | Bare ATS token may match multiple unrelated boards |
Prefer an explicit provider:token. A bare token is not a company identifier.
Why bare tokens require review
The same token can exist on more than one ATS. A previously live-verified example is pulse: Greenhouse exposed a high-volume board named “Pulse Healthcare,” while Ashby exposed another real board associated with runpulse.com. Choosing the board with the most roles would be a volume decision, not an identity decision.
The Actor preserves the earlier attribution repair:
- every structurally valid candidate board remains visible;
- the selected provider is disclosed as a role-count choice;
- ATS-declared names and websites are returned when observable;
sameNamecompares only normalized declared names;- a matching name is never labeled common ownership;
- partial provider reachability remains visible in
sourceErrorsandallProvidersChecked.
If identity matters, find the ATS link on the company’s own website and submit the explicit provider/token yourself.

How the workflow works
- Validate before source work. The Actor requires 1–100 company strings. It rejects non-strings, empty values, unsupported ATS prefixes, malformed tokens, out-of-range integers, and invalid keyword arrays instead of coercing them silently.
- Deduplicate by source semantics. Google News names are case-folded. Greenhouse and Ashby tokens are case-folded because their observed endpoints are case-insensitive. Lever token case is preserved. Duplicate count is written to
OUTPUT. - Request only the selected sources. Hiring-only input does not make a news request. News-only input does not probe ATS providers. Combined input requests both concurrently.
- Bound every response. Requests time out after 20 seconds. The response body is capped at 3 MB, content type is checked, and JSON/RSS structure is validated before a source is considered usable.
- Normalize ATS observations. Title, department, location, source URL, and posting time are mapped to one role shape. Function counts are keyword classifications, not employer-authored facts in every case.
- Filter headline freshness. The Google News query includes the requested window, and the Actor independently filters returned items by their parseable publication time. Missing-date, out-of-window, and implausibly future items are excluded and counted.
- Calculate an explainable score. The score uses only the documented formula below. Multiple keywords in the same headline still count as one matched headline.
- Separate score from confidence. More observed activity can increase
activityScore; identity ambiguity, partial coverage, or a name-only news query can reduceconfidence. One cannot compensate for the other. - Attach a decision layer. Stable IDs, evidence receipts, freshness, confidence reasons, gaps, a manual action, score semantics, and
safeToAutomate: falseare added to the same backward-compatible row. - Deliver and reconcile. A successful report uses one linked Dataset/PPE call. The runtime requires the exact Apify SDK aggregate receipt. Ambiguous delivery stops the run, marks
replaySafe: false, and is never retried as a second free row.
Score methodology
activityScore is clamped to 0–100. intentScore is the exact compatibility alias.
| Observable component | Points | Cap |
|---|---|---|
| Current public roles | 2 per role | 30 |
| Roles classified as sales | 3 per role | 20 |
| Roles classified as marketing | 3 per role | 15 |
| Roles classified as engineering | 2 per role | 15 |
| Dated headline containing at least one configured activity keyword | 10 per headline | 40 |
Role-function points intentionally overlap the general role-count component. Headline presence without a configured keyword match contributes zero points: a name query can return namesakes or common-word matches, so presence alone is not a reason to raise review priority. This makes the score useful as a deterministic review queue for teams interested in commercial and technical activity. It does not make the score a calibrated probability, a growth metric, or a commercial-intent measurement.
What the live local acceptance run exposed
On 2026-08-10T23:28Z, the upgraded runtime was executed once with Microsoft, greenhouse:stripe, and Ramp|ashby:ramp, a 30-day window, five returned headlines, and the custom phrases launch, partnership, acquisition. The three source checks completed and KVS OUTPUT reconciled requested=3, processed=3, confirmedDelivered=3, partial=false, and replaySafe=true. That run exposed one final score defect: unmatched headline presence still added five points. The final source makes that contribution zero. The source counts/headline below are the exact captured observations; the displayed scores apply the corrected deterministic formula that the platform canary must confirm.
[{"input": "Microsoft","inputMode": "news_only","activityScore": 0,"sourceCoverage": { "hiring": "not_requested", "news": "ok" },"confidence": { "score": 40, "level": "low" },"safeToAutomate": false},{"input": "greenhouse:stripe","inputMode": "hiring_only","hiring": { "provider": "greenhouse", "openRoles": 557 },"activityScore": 80,"sourceCoverage": { "hiring": "ok", "news": "not_requested" },"confidence": { "score": 80, "level": "high" },"safeToAutomate": false},{"input": "Ramp|ashby:ramp","inputMode": "combined","hiring": { "provider": "ashby", "openRoles": 128 },"recentNews": [{"title": "Intel Completes RAMP-C Program, Accelerating Momentum for Secure Enclave - Intel Newsroom","sourceName": "Intel Newsroom","pubDate": "2026-07-28T07:00:00.000Z"}],"activityScore": 80,"sourceCoverage": { "hiring": "ok", "news": "ok" },"confidence": { "score": 65, "level": "medium" },"safeToAutomate": false}]
The last row is exactly why score and confidence are separate: the Google News exact-name query for the common word “Ramp” returned an Intel RAMP-C headline unrelated to Ramp the company. It carried source evidence but no configured keyword-match points, and the row kept the name-query identity gap. A downstream system that treated every headline as company evidence would be wrong.
The default headline phrases are:
funding, raises, series a, series b, series c, seed round, investment, launch, launches, unveils, expands, expansion, partnership, partners with, acquires, acquisition, ipo, hires, appoints, new ceo, new cmo.
Supply activityKeywords to replace that list with terms relevant to your research. A text match means only that the phrase appeared in an RSS headline. It does not validate the story, sentiment, materiality, company identity, or commercial relevance.
Confidence is not the score
confidence.score explains how safely the row can be interpreted as an observation of the requested sources. It is not confidence that a company will buy.
Confidence can increase when:
- the buyer supplied an explicit ATS provider/token;
- every requested source returned a structurally valid response; and
- source-level retrieval evidence is present.
Confidence can decrease when:
- a name query is used and the legal entity was not resolved;
- a bare ATS token has namesake candidates or no observable owner name;
- one requested source is partial or unavailable; or
- no usable source was observed.
Every reason is returned in confidence.reasons. The highest possible score is intentionally below 100 because public-source observations do not independently establish corporate ownership or business meaning.
Source coverage and failure semantics
Each requested source has one of four states:
| State | Meaning |
|---|---|
ok | The requested source returned a supported content type and structurally valid payload |
partial | Usable evidence exists, but part of a multi-provider ATS probe failed |
error | The requested source could not produce a usable observation |
not_requested | Your input mode did not request that source |
sourceErrors preserves the reason. Clean no-board/not-found responses are not treated like timeouts, invalid JSON, wrong response shapes, or oversized bodies.
If every requested source fails, the row has found: false, activityScore: null, intentScore: null, zero confidence, and a retry action. If requested sources return cleanly but yield no qualifying board or dated headline, the row has found: false and score 0. Those are different outcomes.
If one source succeeds and the other fails, the Actor can deliver a partial row. Coverage, confidence, gaps, and summary all disclose the missing side.
Input
| Field | Required | Contract |
|---|---|---|
companies | yes | 1–100 strings. Company name, provider:token, or `Company name |
activityKeywords | no | 1–50 non-empty strings, maximum 100 characters each. Replaces the default headline phrase list. |
newsWindowDays | no | Integer 1–90. Default 30. Only items with parseable times inside the window are returned. |
maxNewsItems | no | Integer 1–30. Default 15. Applied after freshness filtering. |
maxConcurrency | no | Integer 1–10. Default 4. Source work may be concurrent; paid delivery is serialized. |
Example:
{"companies": ["Microsoft","greenhouse:stripe","Ramp|ashby:ramp"],"activityKeywords": ["launch","partnership","acquisition"],"newsWindowDays": 30,"maxNewsItems": 10,"maxConcurrency": 3}
Output example
The following illustrates the upgraded contract using fields derived from the Actor’s live source classes. Counts and headlines change over time; always use observedAt, evidence, and the cited URLs from your own run.
{"input": "Ramp|ashby:ramp","inputMode": "combined","companyName": "Ramp","found": true,"hiring": {"provider": "ashby","token": "ramp","matchBasis": "explicit","boardUrl": "https://api.ashbyhq.com/posting-api/job-board/ramp","openRoles": 118,"salesHiring": 46,"marketingHiring": 16,"engineeringHiring": 30,"roleSample": [{"title": "Security Engineer, Cloud","department": "Engineering","location": "New York, NY (HQ)","url": "https://jobs.ashbyhq.com/ramp/example","postedAt": "2026-04-07T17:12:35.753Z"}],"ownerName": null,"ownerWebsite": null,"candidates": [],"sourceErrors": [],"allProvidersChecked": true},"recentNews": [{"title": "Ramp launches new product capability - Example Publisher","link": "https://news.google.com/rss/articles/example","pubDate": "2026-08-10T12:00:00.000Z","sourceName": "Example Publisher","sourceUrl": "https://publisher.example","freshnessStatus": "within_window"}],"newsMetadata": {"query": "\"Ramp\" when:30d","requestedWindowDays": 30,"feedItemCount": 100,"qualifyingItemCount": 12,"returnedItemCount": 10,"excludedOutsideWindow": 88,"excludedMissingDate": 0,"entityMatchBasis": "exact_name_query_unverified"},"activitySignals": ["observed 118 open roles (ashby)","observed sales-role listings (46)","headline match: \"Ramp launches new product capability - Example Publisher\" (launch)"],"activityScore": 90,"scoringBreakdown": {"openRoles": 30,"salesRoles": 20,"marketingRoles": 15,"engineeringRoles": 15,"matchedHeadlines": 10,"unmatchedHeadlinePresence": 0},"intentSignals": ["observed 118 open roles (ashby)","observed sales-role listings (46)","headline match: \"Ramp launches new product capability - Example Publisher\" (launch)"],"intentScore": 90,"sourceCoverage": {"hiring": "ok","news": "ok"},"sourceErrors": {"hiring": null,"news": null},"entityId": "company_query_…","observationId": "observation_…","eventId": "event_…","observedAt": "2026-08-11T12:00:00.000Z","freshness": {"observedAt": "2026-08-11T12:00:00.000Z","ageSecondsAtDelivery": 0,"newsWindowDays": 30,"hiringBasis": "live_public_board_at_request_time","newsBasis": "dated_headlines_filtered_to_requested_window"},"change": {"basis": "single_observation","previousObservationAvailable": false,"delta": null},"evidence": [{"evidenceId": "evidence_…","source": "ats_ashby","evidenceType": "public_ats_response","url": "https://api.ashbyhq.com/posting-api/job-board/ramp","retrievedAt": "2026-08-11T11:59:59.000Z","httpStatus": 200,"contentType": "application/json","responseBytes": 123456,"outcome": "valid_response","recordCount": 118},{"evidenceId": "evidence_…","source": "google_news_rss","evidenceType": "public_news_search_response","url": "https://news.google.com/rss/search?q=…","retrievedAt": "2026-08-11T11:59:59.000Z","httpStatus": 200,"contentType": "application/xml","responseBytes": 98765,"outcome": "valid_response","recordCount": 100,"qualifyingRecordCount": 12}],"evidenceCoverage": 100,"confidence": {"score": 65,"level": "medium","reasons": ["The buyer supplied an explicit ATS provider and token.","A Google News name query can include namesakes or unrelated mentions; entity identity was not independently resolved.","Every requested source returned a structurally valid response.","Source-level retrieval evidence is attached."]},"dataGaps": ["Google News results are selected by a name query; confirm entity identity and open the cited source before outreach.","The activity score is a transparent prioritization heuristic; it does not measure buying intent, budget, demand, or purchase probability.","This run is a single observation and does not calculate change versus a prior run."],"recommendedAction": "Review the cited board and headlines, confirm the company identity and business context, then decide whether this account deserves manual research.","safeToAutomate": false,"scoreSemantics": {"primaryField": "activityScore","compatibilityAlias": "intentScore","meaning": "Observation-priority heuristic from current public job-board counts and dated headline keyword matches.","doesNotProve": ["buying intent","budget","purchase timing","growth","demand","entity identity"]},"summary": "Ramp — 118 current public role(s) on ashby; 10 dated headline(s) inside 30 days; activity-priority score 90/100. Review evidence manually; this is not proof of buying intent.","checkedAt": "2026-08-11T12:00:00.000Z"}
The values above are an explanatory contract example, not a promise that Ramp currently has those counts or headlines. The source evidence in your run is the authoritative observation.
Field guide
| Field | Meaning |
|---|---|
input | Exact normalized submitted string |
inputMode | news_only, hiring_only, or combined |
companyName | Name used for the news query, or the ATS token label for hiring-only input |
found | Whether at least one qualifying board observation or dated headline was delivered |
hiring | Normalized selected ATS board and bounded role evidence, or null |
recentNews | Dated RSS items inside the requested window, up to maxNewsItems |
newsMetadata | Query, window, feed counts, exclusions, and entity-match basis |
activityScore | Primary transparent review-priority heuristic, 0–100 or null on all-source failure |
intentScore | Exact backward-compatible alias of activityScore |
activitySignals | Human-readable observed inputs that contributed points |
intentSignals | Exact backward-compatible alias of activitySignals |
scoringBreakdown | Point contribution by role and headline component |
sourceCoverage | Per-source ok, partial, error, or not_requested state |
sourceErrors | Failure/partial reasons that must not be interpreted as zero activity |
entityId | Stable hash for the normalized query identity and input mode |
observationId | Stable hash for this entity plus observation time |
eventId | Stable hash for this observation and its event class |
freshness | Observation time and source-specific freshness basis |
change | Explicit single-observation state; no fabricated prior delta |
evidence | Source-level retrieval receipts with stable evidence IDs |
evidenceCoverage | Percentage of requested source classes with usable evidence |
confidence | Interpretation confidence plus human-readable reasons, not purchase probability |
dataGaps | Material boundaries a downstream user must retain |
recommendedAction | Conservative manual research or retry step |
safeToAutomate | Always false; sources are insufficient for autonomous outreach or CRM verdicts |
scoreSemantics | Machine-readable meaning and non-claims for the legacy score alias |
summary | Plain-English observation and limitation |
KVS OUTPUT reconciliation
The Dataset tells you what rows exist. KVS OUTPUT tells you whether the run completed as intended.
Important counters include:
requestedCompanyCountanduniqueCompanyCount;duplicateInputCount;processedCompanyCount;confirmedDeliveredCompanyCount;paidCompanyCountandfreeFailureCompanyCount;withheldCompanyCountandunprocessedCompanyCount;advisoryRowCount;partialandbudgetStopped;replaySafe; andfatalError.
Do not infer completeness from run status alone. Check OUTPUT.status, every counter, and replaySafe before replaying a failed or partial run.
Pricing and billing semantics
The active model is pay per event. Tier-specific prices observed on the Actor configuration are:
| Apify tier | Run start | Delivered company activity report |
|---|---|---|
| Free | $0.00500 | $0.00400 |
| Bronze | $0.00475 | $0.00380 |
| Silver | $0.00450 | $0.00360 |
| Gold | $0.00425 | $0.00340 |
| Platinum | $0.00410 | $0.00328 |
| Diamond | $0.00400 | $0.00320 |
result-found means one successfully linked Dataset/PPE delivery for one unique company input with at least one qualifying observation. It does not mean one charge per role, headline, keyword, or evidence object.
Clean zero-observation rows and source-failure rows do not use result-found. The automatic run-start event can still be charged even if input is invalid or sources fail. Equivalent duplicate inputs are processed once and reported in OUTPUT.
Before a paid delivery, the runtime checks whether the configured maximum charge can cover another combined row. Paid delivery is serialized across concurrent workers. On the current pinned Apify SDK, a linked Dataset/PPE operation produces an aggregate chargedCount of exactly 2; any other receipt is treated as ambiguous. A thrown or ambiguous linked delivery stops the run and sets replaySafe: false rather than retrying a row whose delivery state is unknown.
Pricing shown by Apify is authoritative if platform configuration changes after this README was published.
API use
Apify API with curl
curl -X POST \"https://api.apify.com/v2/acts/zinin~intent-signal-aggregator/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companies": ["Microsoft", "greenhouse:stripe", "Ramp|ashby:ramp"],"newsWindowDays": 30,"maxNewsItems": 10,"maxConcurrency": 3}'
Keep tokens in your secret manager or Apify integration settings. Do not hard-code them in a public repository.
JavaScript client
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('zinin/intent-signal-aggregator').call({companies: ['Microsoft', 'greenhouse:stripe', 'Ramp|ashby:ramp'],activityKeywords: ['launch', 'partnership', 'acquisition'],newsWindowDays: 30,maxNewsItems: 10,maxConcurrency: 3,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const output = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('OUTPUT');console.log(items);console.log(output?.value);
Python client
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("zinin/intent-signal-aggregator").call(run_input={"companies": ["Microsoft", "greenhouse:stripe", "Ramp|ashby:ramp"],"newsWindowDays": 30,"maxNewsItems": 10,"maxConcurrency": 3,})items = list(client.dataset(run["defaultDatasetId"]).iterate_items())output = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("OUTPUT")print(items)print(output["value"] if output else None)
Practical workflows
Manual account-research queue
- Export a buyer-defined account list from your CRM.
- Add explicit ATS tokens where your researchers have identified them.
- Run this Actor with vocabulary relevant to the campaign.
- Sort by
activityScore, then byconfidence.score. - Open
evidenceand the headline/role URLs. - Confirm company identity, relevance, decision maker, suppression status, and lawful outreach basis.
- Write a human-qualified note back to a CRM staging field — never overwrite a sales stage from the score alone.
Agency vertical research
A web agency might watch phrases such as rebrand, website, ecommerce, or launch; a recruiting firm might use sales, engineering, or new office; a logistics consultant might use distribution, warehouse, or supply chain. These are text filters, not proofs of pain or demand. Use them to find source material worth reading.
Scheduled monitoring
Run a stable input list on an Apify schedule and retain Dataset history. Compare rows using entityId, observedAt, source evidence, role counts, and headline identities in your own warehouse. This Actor sets change.previousObservationAvailable: false because it does not own a baseline; your monitoring layer should calculate a delta only when two comparable successful observations exist.
CRM enrichment
Store source evidence and the manual review outcome in separate fields. Recommended minimum columns:
- company/account ID from your system;
entityIdandobservationIdfrom this Actor;activityScoreandconfidence.scorein separate columns;- source coverage and observation time;
- reviewer decision and review time; and
- the evidence URLs used for that decision.
Privacy, rights, and responsible use
- The Actor requests public job-board APIs and public Google News RSS metadata. It does not log in, use cookies, scrape private profiles, or collect article bodies.
- Role samples can contain job titles and public source URLs. Headlines can mention people, executives, or other entities. Treat all output as research data and minimize what you retain.
- “Publicly accessible” does not automatically grant every reuse right. Review the terms, licenses, database rights, and applicable laws for your jurisdiction and use case.
- Publisher ownership remains with the publisher. Open the cited source and follow its terms; an RSS headline is not a license to republish the article.
- Do not use the Actor to make employment, credit, insurance, housing, legal, medical, or similarly high-impact decisions about individuals.
- Do not infer sensitive attributes or build personal profiles from job or news data.
- This Actor does not create consent or legitimate interest for outreach. Apply your own suppression, consent, privacy, and anti-spam controls.
- Apify storage retention and access depend on your account and run settings. Delete or export datasets according to your own data-governance policy.
Reliability and security boundaries
- Source hosts are fixed by the runtime: Greenhouse, Lever, Ashby, and Google News. Buyers do not submit arbitrary fetch URLs.
- Requests have a 20-second timeout and 3 MB response cap.
- JSON and XML content types are checked before parsing.
- Provider-specific response shapes are validated. An empty valid array is distinct from a malformed payload.
- Only headlines with parseable dates inside the selected window are returned.
- Input values and integers are validated without silent string/number coercion.
- Source coverage is independent from activity score.
- Paid delivery is guarded by a mutex, budget preflight, exact linked receipt, and
OUTPUTreconciliation. - No automatic retry occurs after an ambiguous Dataset/PPE delivery.
External sources can change, rate-limit, block, redirect, or alter schemas without notice. The Actor reports those failures; it cannot guarantee continuous third-party availability.
Limitations
- Google News name matching can return namesakes, subsidiaries, similarly named products, quoted references, or unrelated organizations. The Actor does not resolve a legal entity.
- RSS coverage is selected and ranked by Google. It is not an exhaustive news database.
- The query locale is currently English/United States (
hl=en-US,gl=US,ceid=US:en). Non-English or local coverage can be incomplete. - Publication time is the feed’s value, not an independently verified publication or event time.
- Keyword matching is literal, case-insensitive substring matching. It does not understand negation, sarcasm, rumor, materiality, or article context.
- The Actor does not fetch or fact-check article bodies.
- ATS boards show currently exposed postings, not internal requisitions, hires, filled roles, workforce changes, budget, or company growth.
- Function classification uses title/department keywords and can misclassify ambiguous roles.
- Explicit provider/token input identifies an endpoint selected by the buyer; it does not independently prove ownership.
- Bare-token provider selection remains a discovery aid. Role count is not identity.
- The Actor produces one point-in-time observation. It does not calculate a historical trend without an external comparable baseline.
activityScoreis not trained or calibrated against outcomes and must not be presented as predicted intent.
FAQ
Does this tell me which company is ready to buy?
No. It tells you which submitted rows contain more observable public role/headline activity under a documented heuristic. Confirm identity, relevance, actual needs, and lawful outreach basis yourself.
Why keep the name “Intent Signal Aggregator” and the intentScore field?
The Actor already has a public slug and integrations using those fields. Removing them would break compatibility. The Store title, README, activityScore, scoreSemantics, and row-level gaps now state the narrower supported meaning. intentScore is exactly the same number as activityScore, not a hidden model.
Is a high score better than high confidence?
They answer different questions. Score ranks the amount/type of observed activity. Confidence describes how safely the row can be interpreted as evidence for the requested sources. A high-score, low-confidence namesake result should be reviewed carefully, not promoted automatically.
Why did greenhouse:stripe stop returning news?
That syntax is documented as hiring-only. Earlier runtime behavior still issued a news query using the token text, creating an undocumented and potentially ambiguous extra source. Use Stripe|greenhouse:stripe when you intentionally want both.
Why is a valid board with zero roles a delivered report?
The report still contains a structurally valid source observation, evidence receipt, provider/token context, confidence, gaps, and next action. Pricing is per delivered company report, not per role.
Why is my news result empty even when the feed returned items?
Items without a parseable publication time, outside the requested window, or implausibly in the future are excluded. newsMetadata shows feed, qualifying, returned, missing-date, and outside-window counts.
Can one headline match several keywords?
Yes, all matching phrases are shown in the signal text, but the headline contributes only one 10-point match. This prevents multiple phrases in one title from being counted as multiple independent articles.
Can I use non-English keywords?
You can supply any bounded Unicode string as an activity keyword, but the Google News query locale is English/US and coverage may be poor for other languages. ATS tokens remain ASCII slugs.
Does it need source API keys or proxies?
No. The supported sources are public and keyless. You still need your Apify token to call the Actor through the API.
What happens when one source times out?
If the other requested source succeeds, the Actor can deliver a partial row with lower confidence, explicit coverage/error fields, and a gap. If all requested sources fail, the row is free, unscored, and recommends a retry.
Will it retry a failed paid delivery?
Not automatically when delivery state is ambiguous. Retrying could duplicate a row or charge. Read KVS OUTPUT, the Dataset, and charge events first; obey replaySafe.
Can an AI agent call it?
Yes, through Apify API or MCP. The row deliberately includes machine-readable non-claims and safeToAutomate: false. An agent can organize evidence, but should not turn the score into autonomous outreach or a commercial verdict.
Is this legal or compliance advice?
No. Source access, storage, enrichment, marketing, privacy, copyright, and anti-spam obligations depend on your jurisdiction and use case. Obtain professional advice when needed.
Related Actors
| Actor | Use it when |
|---|---|
| Company Hiring Radar | You need deeper evidence from Greenhouse, Lever, or Ashby: full roles, locations, remote share, posting-time coverage, role matching, and ATS attribution without news aggregation. |
| Website Contact Extractor | After manual qualification, you need public first-party business contact channels with source pages and coverage limits. |
| Lead List Qualifier | You need a broader transparent account-research score across submitted domains while keeping source identity and confidence separate. |
| Company Profile Lookup | You need a company/domain profile for additional firmographic context. |
| Company Registry Enricher | You need official registry context to help resolve legal-entity identity. |
| Counterparty Risk Rollup | You need a separate compliance-research workflow; it is not a substitute for legal review. |
Support
When reporting a problem, include the run ID, normalized input, source coverage, evidence outcome, and KVS OUTPUT. Do not post Apify tokens or sensitive CRM data publicly.