Market Signals avatar

Market Signals

Pricing

from $6.00 / 1,000 records

Go to Apify Store
Market Signals

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

Public Money

Maintained by Apify

Actor 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 priceSource and how far the sources disagreed in priceSpreadPercent, 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 sources and the rest of the record still ships.

Use cases

You need toHow this Actor does it
Answer "what is going on with X"Pass one instrument, read one record
Cross-check a priceRead priceSource and priceSpreadPercent instead of trusting one feed
Cover a mixed portfolioPut equities, coins and wallet addresses in the same list
Give an agent one tool instead of fiveCall this over MCP and let the model ask about anything
Cut cost on a big runTurn off the signals you do not need and watch the child runs drop
Build a daily briefingSchedule the full sweep and render the dataset

Quick start

  1. Click Try for free.
  2. Add what you want to research, one per line, mixed freely: AAPL, ^GSPC, EURUSD=X, bitcoin, 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045.
  3. 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.
  4. Set News per instrument if the news signal is on.
  5. Click Start. Rows appear within seconds.
  6. Export as JSON, CSV, Excel or XML, or read the dataset over the API.

Input

FieldTypeDefaultWhat it controls
instrumentsarrayAAPLTickers, coin ids or wallet addresses, mixed freely. Each is classified automatically
signalsarrayquote, news, cryptoMarket, onchainWhich blocks to gather. Also available: sentiment and history
newsPerInstrumentinteger5Stories per instrument when the news signal is on
maxItemsinteger0Caps 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 groupFields
Alwaysstatus, instrument, kind, name, value, changePercent, currency
ProvenancepriceSource, priceValidFrom, priceSpreadPercent, changeWindow, sources
EquitiesyahooFinance.peRatio, yahooFinance.eps, yahooFinance.earningsDate, googleFinance.analystConsensus, googleFinance.analystPriceTargetAverage
Cryptocoingecko.marketCapRank, coingecko.volume24h, coingecko.ath, coinmarketcap.dominance, coinmarketcap.percentChange7d
On-chainonchain.address, onchain.ensDomainName, onchain.nativeBalance, onchain.transactionCount, onchain.isContract
Optional signalsnews, 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 ApifyClient
client = 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.

EventFree tierTop volume tier
Instrument record$0.01$0.004
Actor start$0.00005 per GBSame

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

IssueSolution
A record has data but sources shows a failureThat 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 kindClassification 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 suggestsThe 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 largeThe sources genuinely disagreed, usually because their timestamps differ. Read priceValidFrom and priceSource before acting on it.
The run is slower than the single-source ActorsIt 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 nothingThe 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.

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.