Alternative Data Signal Aggregator
Pricing
Pay per event
Alternative Data Signal Aggregator
Turn public news, hiring, and SEC filing data into one auditable company research indicator with evidence and cross-run hiring deltas.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Share
Turn public news, hiring, and SEC filing data into one auditable research indicator per US-listed company.
The actor joins three anonymous HTTP sources:
- π° Google News RSS for headline sentiment and velocity
- π§βπ» Public Greenhouse boards for opening counts and cross-run changes
- ποΈ SEC Company Facts for filing-backed revenue and gross-margin changes
Instead of exporting thousands of unrelated raw records, it saves one normalized company row with a -100..100 score, confidence, rationale, timestamps, and evidence URLs.
The score is a transparent research indicator. It is not investment advice, a price forecast, or a buy/sell instruction.
What does Alternative Data Signal Aggregator do?
For every supplied ticker and Greenhouse board mapping, the actor:
- resolves the ticker to an SEC CIK;
- searches recent Google News RSS headlines;
- scores headline words with a deterministic local lexicon;
- loads the company's current public Greenhouse openings;
- compares job IDs with the prior named-store snapshot;
- extracts comparable annual SEC revenue and gross profit facts;
- calculates three component scores;
- combines them using your normalized weights;
- saves one evidence-linked dataset row.
The first run is clearly marked as a baseline. Later runs with the same snapshot settings can report new, removed, and net job openings.
Who is it for?
Quant researchers
Schedule a small ticker watchlist and receive consistent rows that can enter a feature store or review queue.
Equity analysts
Use evidence URLs and plain-language rationale to identify companies that need deeper primary research.
Small funds and family offices
Monitor workforce, narrative, and filing changes without maintaining three collectors and a join pipeline.
Fintech and data-product builders
Call one Actor API and deliver normalized JSON to a dashboard, alerting system, notebook, or warehouse.
Corporate strategy teams
Compare hiring direction and public narrative across peers that use Greenhouse.
Why use this actor?
- β Joined output: one company row, not separate feeds
- β Auditable: source links, filing accession, and collection time are retained
- β Repeatable: named KVS snapshots support scheduled hiring deltas
- β Transparent: component scores, weights, confidence, and rationale are exposed
- β Deterministic: no paid AI key or opaque LLM is required
- β HTTP-only: no browser, login, proxy, or user credential is required
- β Bounded: watchlist and embedded evidence limits keep runs predictable
- β Resilient: one source failure is reported without hiding other components
Supported companies and important limitation
V1 supports US-listed companies that:
- appear in the SEC public ticker mapping;
- have filing facts in SEC Company Facts; and
- expose a public Greenhouse job board.
You must provide the Greenhouse board token explicitly.
For example, the token for https://boards.greenhouse.io/cloudflare is cloudflare.
The actor does not guess the board from the company name. This avoids silently attaching the wrong employer's hiring data.
What data can I extract?
| Group | Fields |
|---|---|
| Identity | ticker, companyName, cik, asOf, windowDays |
| Baseline | baseline, hiring deltaAvailable |
| News | article count, publishers, articles/day, count change, sentiment, component score |
| Hiring | total, new, removed, net change, department mix, location mix, sample job URLs |
| Fundamentals | fiscal year, filing date, accession, revenue, revenue YoY, gross margin, margin delta |
| Composite | score, label, confidence, normalized weights, component scores, rationale |
| Evidence | Google News RSS, Greenhouse board, SEC Company Facts, timestamps |
| Diagnostics | sourceErrors and component-level errors |
Nested component objects remain together so each dataset item is a complete research record.
How is the signal calculated?
News component
Headline titles use a deterministic positive/negative finance-oriented word list.
Average sentiment contributes most of the news score. When a previous snapshot exists, article-count velocity also contributes.
No article body is fetched and no claim of human-level sentiment understanding is made.
Hiring component
Current Greenhouse job IDs are compared with the previous snapshot:
- new IDs become
newOpenings; - missing old IDs become
removedOpenings; - new minus removed becomes
netChange.
On the first run, the hiring component is a baseline with score zero.
Fundamentals component
The actor selects annual 10-K / FY facts for common US-GAAP revenue concepts and GrossProfit.
It calculates revenue year-over-year change and gross-margin percentage-point change when comparable facts exist.
Composite
Component scores are clamped to -100..100 and combined with normalized weights.
Confidence falls when headline coverage is thin, hiring has no prior snapshot, or filing metrics are unavailable.
Input
A minimal input is:
{"companies": [{"ticker": "NET","companyName": "Cloudflare","greenhouseBoardToken": "cloudflare"}],"lookbackDays": 7,"maxNewsArticles": 25,"maxEvidenceItems": 5,"snapshotNamespace": "my-watchlist"}
Available settings:
| Input | Default | Purpose |
|---|---|---|
companies | required | 1β25 explicit company mappings |
lookbackDays | 7 | recent Google News window, 1β30 days |
maxNewsArticles | 50 | headlines scored per company, maximum 100 |
maxEvidenceItems | 8 | embedded headline/job evidence per source |
weights.news | 0.4 | relative news weight |
weights.hiring | 0.35 | relative hiring weight |
weights.fundamentals | 0.25 | relative filing-fundamentals weight |
snapshotStoreName | alternative-data-signal-snapshots | named KVS for comparisons |
snapshotNamespace | default | stable watchlist/client separation key |
secUserAgent | actor contact | descriptive SEC request identity |
Weights can use any non-negative scale. They are normalized automatically.
Output example
{"ticker": "NET","companyName": "Cloudflare","cik": "0001477333","asOf": "2026-07-14T15:00:00.000Z","windowDays": 7,"baseline": true,"news": {"articleCount": 25,"uniquePublishers": 18,"articlesPerDay": 3.57,"articleCountChange": null,"sentimentScore": 4.2,"sentimentLabel": "neutral","componentScore": 2.94,"evidence": []},"hiring": {"totalOpenings": 259,"newOpenings": null,"removedOpenings": null,"netChange": null,"deltaAvailable": false,"departmentMix": {},"locationMix": {},"componentScore": 0,"sampleJobUrls": []},"fundamentals": {"latestFilingDate": "2026-02-20","latestAccessionNumber": "...","latestFiscalYear": 2025,"revenue": 2168000000,"revenueYoYPct": 27.8,"grossMarginPct": 75.1,"grossMarginDeltaPp": -1.2,"componentScore": 24.8},"composite": {"score": 7.38,"label": "neutral","confidence": 0.83,"weights": { "news": 0.4, "hiring": 0.35, "fundamentals": 0.25 },"componentScores": { "news": 2.94, "hiring": 0, "fundamentals": 24.8 },"rationale": []},"sourceErrors": []}
Values above illustrate the shape; live source data changes.
First run and scheduled monitoring
A first run stores:
- current headline count;
- current Greenhouse job IDs; and
- collection time.
It returns baseline: true and hiring.deltaAvailable: false.
For comparisons:
- keep
snapshotStoreNameunchanged; - keep
snapshotNamespaceunchanged; - keep ticker and Greenhouse token unchanged;
- schedule the same Actor input daily or weekly.
Use a unique namespace per watchlist or client. Named stores belong to the Actor account, so careless namespace reuse can merge histories for identical mappings.
How much does it cost to monitor alternative data signals?
The actor uses pay-per-event pricing:
- a small one-time run-start charge;
- one
company-signalevent for each dataset row produced.
The formula-derived BRONZE price is $0.0024617 per company signal, with automatic lower prices on higher Apify tiers.
You are not charged per raw headline or job. The buyer output is the normalized company signal.
Before a production watchlist, run one company to verify mapping and source coverage.
How to run the actor
- Open the Actor input page.
- Add one to 25 company mappings.
- Choose a stable snapshot namespace.
- Keep the default seven-day news window or adjust it.
- Run the Actor.
- Review
sourceErrors, confidence, and evidence. - Export JSON, CSV, Excel, or connect an integration.
- Schedule later runs if hiring deltas are required.
Practical analysis tips
- Start with one company and confirm its Greenhouse token.
- Compare confidence before ranking companies by score.
- Treat small headline samples as weak evidence.
- Inspect rationale and source URLs before acting on an outlier.
- Use the same lookback window across peers.
- Avoid interpreting a first-run hiring score as direction.
- Store raw exported rows if you need your own long history.
- Keep component weights stable when comparing time periods.
Integrations and workflow patterns
Google Sheets
Send each scheduled dataset to a sheet for an analyst review queue.
Slack or email alerts
Trigger an alert only when confidence is above your threshold and score moves materially.
Webhooks
Use the run-finished webhook to pass the dataset URL to an internal pipeline.
Snowflake, BigQuery, or PostgreSQL
Load one row per ticker/run into a research feature table.
Python notebooks
Pull the dataset through the Apify API and compare component scores against your own models.
Zapier and Make
Build no-code workflows around new rows, score bands, or source errors.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/alternative-data-signal-aggregator').call({companies: [{ ticker: 'NET', companyName: 'Cloudflare', greenhouseBoardToken: 'cloudflare' }],snapshotNamespace: 'node-watchlist'});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].composite);
API usage with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/alternative-data-signal-aggregator').call(run_input={'companies': [{'ticker': 'NET', 'companyName': 'Cloudflare', 'greenhouseBoardToken': 'cloudflare'}],'snapshotNamespace': 'python-watchlist',})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items[0]['composite'])
API usage with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~alternative-data-signal-aggregator/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companies":[{"ticker":"NET","companyName":"Cloudflare","greenhouseBoardToken":"cloudflare"}],"snapshotNamespace":"curl-watchlist"}'
Fetch results from the run's defaultDatasetId after it succeeds.
Use with Apify MCP
Connect the Actor to AI clients through Apify MCP.
Claude Code
claude mcp add --transport http apify \"https://mcp.apify.com/?tools=automation-lab/alternative-data-signal-aggregator"
Example prompt:
Run the Alternative Data Signal Aggregator for Cloudflare using its
cloudflareGreenhouse token. Explain each component and cite the evidence URLs. Do not give investment advice.
Claude Desktop
Add this mcpServers JSON to Claude Desktop's configuration:
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com/?tools=automation-lab/alternative-data-signal-aggregator"}}}
Cursor
Open Settings β Tools & Integrations β MCP, add a remote HTTP server, and use the same mcpServers JSON and URL shown above.
VS Code
Open the MCP server configuration in VS Code, choose an HTTP server, and set its URL to:
https://mcp.apify.com/?tools=automation-lab/alternative-data-signal-aggregator
Example prompt:
Compare the news, hiring, and SEC components from my latest cybersecurity watchlist dataset. Flag low-confidence rows.
Error handling
The actor retries transient 429 and 5xx responses up to three times.
If one company source fails:
- the failure appears in
sourceErrors; - the relevant component contains an
errormessage; - other available components still contribute a row;
- confidence is reduced.
Input errors, such as a missing required mapping or duplicate ticker, stop the run early with a clear message.
Data quality and interpretation
Public data has limitations:
- a headline lexicon cannot understand every irony or context;
- Google News coverage varies by company and day;
- Greenhouse shows only roles published on that board;
- a company may use several applicant-tracking systems;
- SEC taxonomies and fiscal calendars vary;
- amended filings can restate facts;
- short windows can exaggerate change.
Use confidence, component values, and evidenceβnot the composite alone.
Legality and responsible use
The actor accesses public Google News RSS, public Greenhouse board APIs, and official SEC data.
Users are responsible for:
- complying with applicable laws and source terms;
- respecting SEC fair-access guidance;
- using a descriptive SEC User-Agent;
- avoiding misleading financial claims;
- protecting exported datasets and client-specific watchlist names;
- obtaining professional advice where required.
This Actor does not execute trades and does not provide financial advice.
FAQ
Does it predict stock prices?
No. It creates a transparent research indicator from three public data components.
Does it use ChatGPT or another paid model?
No. Headline scoring is deterministic and local.
Can it monitor companies that do not use Greenhouse?
Not in v1. A public Greenhouse token is required to preserve a consistent three-source product.
Why is hiring delta unavailable?
The first run is a baseline. Rerun with the same store name, namespace, ticker, and board token.
Why did my company return a Greenhouse 404?
Check the exact token after boards.greenhouse.io/. Do not use a company website slug unless it matches the board URL.
Why are revenue or margin fields null?
The company's SEC taxonomy may not expose comparable annual USD facts under the supported concepts. Inspect the SEC evidence URL.
Can I change the score weights?
Yes. Provide any non-negative values; the actor normalizes them.
Can I backtest years of signals?
No. Historical backtesting is intentionally outside v1. Export scheduled rows to build your own history.
How many companies should I run first?
One. Confirm mappings and evidence, then expand up to 25 companies.
Troubleshooting checklist
If output looks wrong:
- verify the ticker is US-listed and present in SEC mappings;
- open the Greenhouse board URL from
evidence; - inspect
sourceErrors; - compare headline evidence with the selected lookback;
- confirm snapshot namespace consistency;
- check whether this is the baseline run;
- review confidence before interpreting the score.
Related scrapers
Use raw component actors when you need source records instead of one normalized company signal:
- Google News Scraper for individual news articles
- Greenhouse Jobs Scraper for full job listings
- SEC Company Facts API Scraper for flattened XBRL facts
- Financial Statements Scraper for statement-oriented SEC output
Changelog
See the Actor changelog for user-facing releases and behavior changes.
Support
When reporting a problem, include:
- the run URL;
- a redacted input;
- affected ticker;
- Greenhouse board token;
- expected versus actual component;
- any
sourceErrorsvalue.
That evidence makes source-specific diagnosis much faster.