Market Signals
Pricing
from $6.00 / 1,000 records
Market Signals
One record per instrument, merged from five sources: equity and crypto quotes, news, crypto market data and on-chain balances, with the price source and how far the sources disagreed. Export data, run via API, schedule and monitor runs, or integrate with other tools.
Pricing
from $6.00 / 1,000 records
Rating
5.0
(1)
Developer
Public Money
Maintained by ApifyActor stats
1
Bookmarked
4
Total users
3
Monthly active users
21 hours ago
Last modified
Categories
Share
Answering "what is going on with this" usually means five API calls, five schemas and a merge you wrote yourself. This Actor does it in one: pass tickers, coin ids and wallet addresses in the same list and get one flat record per instrument with quotes, news, crypto market data and on-chain balances, plus the price spread between the sources that disagreed and a per-signal status so you know what actually landed.
What it does
- Takes mixed inputs in one list: a ticker, an index, an FX pair, a coin id or a wallet address, and classifies each one for you.
- Merges five sources into one record: Yahoo Finance and Google Finance for quotes, CoinGecko and CoinMarketCap for crypto, and block explorers for on-chain balances.
- Reports which source the price came from in
priceSourceand how far the sources disagreed inpriceSpreadPercent, so a cross-checked price is visible rather than assumed. - Carries a per-signal status in
sources, so a record where news failed but the quote succeeded is honest about it instead of looking complete. - Lets you turn signals off. Fewer signals means fewer child runs, so a quote-only run is faster and cheaper than the full sweep.
- Never fails the run on a child failure. A broken source is reported in
sourcesand the rest of the record still ships.
Use cases
| You need to | How this Actor does it |
|---|---|
| Answer "what is going on with X" | Pass one instrument, read one record |
| Cross-check a price | Read priceSource and priceSpreadPercent instead of trusting one feed |
| Cover a mixed portfolio | Put equities, coins and wallet addresses in the same list |
| Give an agent one tool instead of five | Call this over MCP and let the model ask about anything |
| Cut cost on a big run | Turn off the signals you do not need and watch the child runs drop |
| Build a daily briefing | Schedule the full sweep and render the dataset |
Quick start
- Click Try for free.
- Add what you want to research, one per line, mixed freely:
AAPL,^GSPC,EURUSD=X,bitcoin,0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045. - Pick your Signals. The default is quotes, news, crypto market data and on-chain. Crowd sentiment and price history each add a request per instrument.
- Set News per instrument if the news signal is on.
- Click Start. Rows appear within seconds.
- Export as JSON, CSV, Excel or XML, or read the dataset over the API.
Input
| Field | Type | Default | What it controls |
|---|---|---|---|
instruments | array | AAPL | Tickers, coin ids or wallet addresses, mixed freely. Each is classified automatically |
signals | array | quote, news, cryptoMarket, onchain | Which blocks to gather. Also available: sentiment and history |
newsPerInstrument | integer | 5 | Stories per instrument when the news signal is on |
maxItems | integer | 0 | Caps how many instrument records are written. 0 writes one per instrument |
{"instruments": ["AAPL","bitcoin","0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"],"signals": ["quote","news","cryptoMarket","onchain"],"newsPerInstrument": 5}
Output
One dataset item per instrument, whatever kind it is. Source-specific fields are nested under the source that produced them, so yahooFinance.peRatio and coingecko.ath never collide. The dataset has four views: all instruments, stocks, coins and on-chain.
| Field group | Fields |
|---|---|
| Always | status, instrument, kind, name, value, changePercent, currency |
| Provenance | priceSource, priceValidFrom, priceSpreadPercent, changeWindow, sources |
| Equities | yahooFinance.peRatio, yahooFinance.eps, yahooFinance.earningsDate, googleFinance.analystConsensus, googleFinance.analystPriceTargetAverage |
| Crypto | coingecko.marketCapRank, coingecko.volume24h, coingecko.ath, coinmarketcap.dominance, coinmarketcap.percentChange7d |
| On-chain | onchain.address, onchain.ensDomainName, onchain.nativeBalance, onchain.transactionCount, onchain.isContract |
| Optional signals | news, sentiment, priceHistory |
{"status": "ok","instrument": "AAPL","kind": "equity","name": "Apple Inc.","value": 319.97,"changePercent": -2.51,"currency": "USD","priceSource": "yahooFinance","priceSpreadPercent": 0.02,"priceValidFrom": "2026-09-04T20:00:01.000Z","sources": {"yahooFinance": "ok","googleFinance": "ok","coingecko": "notRequested","onchain": "notRequested"},"yahooFinance": {"peRatio": 36.65,"eps": 8.73,"earningsDate": "Oct 29, 2026"},"googleFinance": {"analystConsensus": "Buy","analystPriceTargetAverage": 352.18}}
Integrations
Run it over the API and get the rows back in one call:
curl -X POST "https://api.apify.com/v2/acts/publicmoney~market-signals-mini/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"instruments": ["AAPL", "bitcoin", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"], "signals": ["quote", "news", "cryptoMarket", "onchain"], "newsPerInstrument": 5}'
From Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("publicmoney/market-signals-mini").call(run_input={"instruments": ["AAPL", "bitcoin", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"], "signals": ["quote", "news", "cryptoMarket", "onchain"], "newsPerInstrument": 5})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["name"], item["value"])
Give an AI agent the Actor over MCP:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=publicmoney/market-signals-mini"}}}
Schedules run it on any cron, webhooks fire when a run finishes, and platform integrations push the dataset to Google Sheets, Slack, Airtable, Zapier or your own endpoint.
Cost
Pay per event, so you pay for records rather than compute time.
| Event | Free tier | Top volume tier |
|---|---|---|
| Instrument record | $0.01 | $0.004 |
| Actor start | $0.00005 per GB | Same |
Two things are charged, and it is worth being explicit about the second. The instrument record above is this Actor's own event. On top of that, this Actor runs the Yahoo Finance, Google Finance, CoinGecko, CoinMarketCap and Blockchain Scanner Actors as child runs on your account, and each one charges its own per-record price. So the true cost of a full sweep is this Actor's record plus the records its children produced, which will not appear in this Actor's own usage total. Turning signals off is the lever: a quote-only run starts two children instead of five. A record that returned no data is published as a failure row and is never charged.
Troubleshooting
| Issue | Solution |
|---|---|
A record has data but sources shows a failure | That is the design. A child Actor that failed is reported per signal and the rest of the record still ships, so read sources before treating a record as complete. |
| An instrument was classified as the wrong kind | Classification is by shape. A bare word that is both a ticker and a coin id is ambiguous, so disambiguate with a suffix: AAPL:NASDAQ for the equity, a full coin id for the coin. |
| The run costs more than the record price suggests | The child Actors charge their own per-record price on your account, and those charges are not in this Actor's usage total. Turn off signals you do not need. |
priceSpreadPercent is large | The sources genuinely disagreed, usually because their timestamps differ. Read priceValidFrom and priceSource before acting on it. |
| The run is slower than the single-source Actors | It starts child runs and waits for them, so a full sweep takes minutes rather than seconds. Cut signals or split the list. |
| An on-chain address returned nothing | The chain was not inferred from the address shape, or the address has no activity. Use the Blockchain Scanner Actor to pin the chain. |
FAQ
What does this do that the single-source Actors do not?
It merges them. One flat record per instrument instead of five datasets to join, plus provenance they cannot give you: which source the price came from and how far they disagreed.
Why is it priced above the other Actors in this fleet?
Because one record fans out into several child runs. The record itself is $0.01 on the free tier, and the child Actors charge their own per-record price on your account on top of that. The cost section above spells this out.
Which sources does it read?
Yahoo Finance and Google Finance for quotes and news, CoinGecko and CoinMarketCap for crypto, and block explorers for on-chain balances. Each is a separate Actor in this fleet.
Can I mix stocks, coins and wallets in one run?
Yes, and that is the point. Each input is classified by shape, and kind tells you how it was read.
How do I make it cheaper?
Turn signals off. A quote-only run starts two child runs instead of five, so the child charges fall with it. If you only need one source, run that source's Actor directly.
Do I need a the sources it reads API key?
No. There is no key for any of the five sources. You need an Apify token to call the Actor over the API, and the child Actors run on your own account.
Can I get this data in Python?
Yes, with the apify-client package as shown above. It returns parsed JSON, so there is no HTML or response handling on your side.
Can I get the data into Excel or Google Sheets?
Yes. Export the dataset as XLSX or CSV, or connect the Google Sheets integration so each run appends to a sheet.
Can an AI agent call this Actor?
Yes. Add it to an MCP client with the config above and the model can request what it needs on its own. Every record is flat JSON with named fields, so no post-processing is needed.
Is it legal to use this data?
Every source behind this Actor is public and needs no login, and no personal data is collected beyond the pseudonymous addresses you pass in yourself. How you store, redistribute or act on market data is governed by your own agreements and local rules. Take your own legal advice for your use case.
Changelog
- 0.0.2 Added the price spread across sources, per-signal status, crowd sentiment and OHLC history.
- 0.0.1 First release. Quotes, news, crypto market data and on-chain balances in one record.
Feedback
Found a source that should be in the merge, or an instrument that was classified as the wrong kind? Open an issue on the Issues tab with the input and what you expected. A daily test runs every Actor in the fleet against live sources, so fixes ship fast.