Crypto Fear & Greed + BTC Price, Funding & Risk Signals
Pricing
from $0.50 / 1,000 daily index readings
Crypto Fear & Greed + BTC Price, Funding & Risk Signals
Daily crypto sentiment and risk panel: Fear & Greed history joined to BTC closes, 1/7/30-day returns, perpetual funding, current open interest, sentiment percentiles and divergence flags. Keyless sources, graceful partial coverage, optional Telegram alerts.
Pricing
from $0.50 / 1,000 daily index readings
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Features
Share
Collect the daily Crypto Fear & Greed Index (0–100, from alternative.me) joined to Bitcoin market context for the same day: the BTC daily close (Coinbase BTC-USD), 1/7/30-day returns, mean perpetual funding (Hyperliquid), current open interest, a sentiment percentile, regime labels and a fear/greed vs price divergence flag. One row per day, up to a year per run. Built for traders, quant hobbyists and bot builders who schedule a daily run and pipe the JSON into dashboards, alerts or models. No account or API key is needed.
Data only, not financial advice.
Use cases
- Sentiment dashboards: chart the index next to the BTC close and returns, refreshed once a day.
- Extreme-sentiment alerts: get a Telegram message when the latest day reads extreme fear (≤ 25) or extreme greed (≥ 76).
- Divergence screens: flag days when sentiment says fear but BTC rose over the week, or greed while it fell.
- Model features: use the index, its percentile, regime changes and funding as inputs to your own backtests.
Quick start
- Open the Actor and click Start. The form runs with the last 10 days and market enrichment on.
- Read the rows in the Output tab, or export them as JSON, CSV or Excel.
For the last 30 days:
{"limit": 30, "enrichMarket": true}
An empty input ({}) returns the last 10 days with market enrichment on.
Input
| Name | Type | Default | What it does |
|---|---|---|---|
limit | integer | 10 | Days of history to return, newest days, 1–365. |
enrichMarket | boolean | true | Add the BTC price, returns, funding, open interest and divergence fields. false returns index fields only. |
alertExtreme | boolean | false | When true and a Telegram chat is set, sends one alert if the latest day is extreme fear (≤ 25) or extreme greed (≥ 76). |
telegramBotToken | string | empty | Secret bot token for alerts; if empty, the TELEGRAM_BOT_TOKEN secret environment variable is used. |
telegramChatId | string | empty | Chat that receives the alerts. |
A misspelt input field stops the run with an error that names it.
What it returns
One dataset row per day, oldest to newest:
| Field | Meaning |
|---|---|
recordKey | Stable key, fng:{date}. |
source, kind | Record source and type. |
date, timestamp | UTC day of the reading and its Unix timestamp. |
value | Index value, 0–100. |
classification | The provider's own label, unchanged. |
regime | Derived label: extreme-fear (0–25), fear (26–46), neutral (47–54), greed (55–75), extreme-greed (76–100). |
regimeChanged | Whether the regime differs from the previous calendar day; null on the first day or after a gap. |
sentimentPercentile | Share of the returned readings up to this day that are at or below this value (0–100). |
sentimentPercentileBasis | How many readings that percentile used (grows with limit). |
btc.closeUsd | BTC-USD daily close at the index publication time (00:00 UTC on date). |
btc.returnsPct | Percentage returns over 1, 7 and 30 calendar days ending at that close. |
btc.fundingRateDailyMean | Mean hourly perpetual funding rate over the 24 hours before date (decimal, not annualized). |
btc.fundingSamples, btc.fundingDayComplete | How many hourly rates were available; complete means all 24. |
btc.openInterestBtc, btc.openInterestAsOf | Current open interest in BTC and when it was read; only on today's row. |
btc.divergence | fear_price_up (index ≤ 46 with a positive 7-day return), greed_price_down (index ≥ 55 with a negative 7-day return), aligned, or null without prices. |
enrichmentStatus | Whether market enrichment ran and whether price, funding and open interest were available, with notes. |
sourceUrl, collectedAt | Where the reading was published and when it was collected. |
The run summary (OUTPUT) reports the latest reading, the change since
yesterday, the 7-day average with its regime, the alert result and any
warnings.
Output example
Illustrative record (example values; real runs return the live figures):
{"recordKey":"fng:2026-10-30","source":"alternative.me","kind":"fear_greed","date":"2026-10-30","timestamp":1793318400,"value":34,"classification":"Fear","regime":"fear","sourceUrl":"https://api.alternative.me/fng/","collectedAt":"2026-10-30T09:15:02Z","btc":{"closeUsd":77780.33,"returnsPct":{"1":-4.27,"7":2.15,"30":-8.9},"fundingRateDailyMean":0.0000125,"fundingSamples":24,"fundingDayComplete":true,"openInterestBtc":40416.28,"openInterestAsOf":"2026-10-30T09:15:01+00:00","divergence":"fear_price_up"},"enrichmentStatus":{"enabled":true,"price":"available","funding":"complete","openInterest":"snapshot","notes":[]},"sentimentPercentile":40.0,"regimeChanged":false,"sentimentPercentileBasis":10}
Pricing
Current price: $0.0005 per daily row plus a $0.005 start fee, so a 30-day history costs about $0.02 and a full year about $0.19.
Pay per result: each daily row is one result, including rows where some market fields are unavailable. The market fields add no extra rows and no extra charges. See the Actor's Pricing tab on Apify for current rates.
Scheduling and monitoring
- Schedule one run a day shortly after 00:00 UTC, when the new reading is
published.
limit: 1returns just the newest day; de-duplicate onrecordKeyin your own store. - Turn on
alertExtremewith a Telegram chat to be messaged only on extreme days. A failed or skipped send is a warning inOUTPUT, never a failed run.
FAQ
How fresh is the data? One index reading per UTC day, published around 00:00 UTC. Each run returns the newest days available at run time.
How much history is available? The index starts on 2018-02-01; each run returns up to 365 days. Market fields depend on what each market source still keeps for older days.
Why is open interest empty on older rows? Open interest is a current snapshot only, attached to today's row. It is never backfilled.
What if a market source is down? Every index row is still returned; the
missing market values are null and enrichmentStatus says which source was
unavailable. Values are never forward-filled. If the index itself can't be
collected, the run fails with a clear message.
How are the labels chosen? classification is the provider's label,
unchanged; regime uses fixed value bands that match the provider's labels
over its full history. A mismatch is reported as a warning, never a failure.
Export formats? JSON, CSV, Excel, XML or RSS from the dataset, or read it through the Apify API in your own pipeline.
Limits
- Bitcoin market context only; one index (the Crypto Fear & Greed Index).
- Daily granularity; up to 365 days per run.
- Percentiles use only the readings returned in the run, so a 10-day run has
a 10-reading basis. Use a larger
limitfor a broader percentile. - Signals are descriptive research data, not trading signals.
For support, contact Apify support and include the Actor run ID.