# Crypto Fear and Greed Index Scraper | Daily + Full History (`dami_studio/crypto-fear-greed-scraper`) Actor

Daily Crypto Fear and Greed readings as dated rows: the 0-100 value, the classification and the source. Full history back to February 2018. Two more free sentiment indexes come with it, including a second Fear and Greed score carrying that day's Bitcoin price. No API key.

- **URL**: https://apify.com/dami\_studio/crypto-fear-greed-scraper.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** Business, AI, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.46 / 1,000 index reading returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Crypto Fear and Greed Index Scraper

The Crypto Fear and Greed Index is one number a day between 0 and 100, with a word attached to it: Extreme Fear, Fear, Neutral, Greed, Extreme Greed. This actor hands you that number as dated rows: today's reading, or every reading since 1 February 2018, or any window in between.

One number a day is a thin thing to buy on its own, so two other free daily indexes ride along in the same row shape. You pick which ones you want.

### Where the numbers come from

Nothing here is estimated, modelled or reconstructed. Every value is the publisher's own, read from the publisher's own feed.

| Index | Published by | Starts | What it actually measures |
|---|---|---|---|
| `fear-greed` | [alternative.me](https://alternative.me/crypto/fear-and-greed-index/) | 2018-02-01 | The original Crypto Fear & Greed Index. Volatility 25%, market momentum and volume 25%, social media 15%, surveys 15% (the publisher has these paused), Bitcoin dominance 10%, search trends 10%. Bitcoin-weighted, not a basket. |
| `cmc-fear-greed` | [CoinMarketCap](https://coinmarketcap.com/charts/fear-and-greed-index/) | 2023-06-29 | A second reading of the same idea, calculated separately. Rows carry that day's Bitcoin price and 24-hour volume alongside the score, which is what you need if you want to test the index against price without joining another dataset. |
| `altcoin-season` | [CoinMarketCap](https://coinmarketcap.com/charts/altcoin-season-index/) | 2024-03-22 | A different question: what share of the top 100 coins beat Bitcoin over the trailing 90 days. 75 and above is Altcoin Season, 25 and below is Bitcoin Season. |

**The Fear & Greed Index data is provided by [alternative.me](https://alternative.me/crypto/fear-and-greed-index/).** Their terms allow commercial use with attribution, so every row carries `source` and `sourceUrl`, and if you republish the numbers you need to credit them where the numbers appear.

The two Fear & Greed indexes disagree, often by ten points or more, because they weight different inputs. That is the reason to pull both rather than a defect in either.

### Input

The smallest useful run:

```json
{ "sources": ["fear-greed"], "historyDays": 1 }
```

That returns today's reading. One row.

Thirty days of both Fear & Greed readings, so you can line them up:

```json
{ "sources": ["fear-greed", "cmc-fear-greed"], "historyDays": 30, "maxItems": 60 }
```

A specific stretch of history, for a backtest:

```json
{
  "sources": ["fear-greed"],
  "dateFrom": "2024-01-01",
  "dateTo": "2024-12-31",
  "maxItems": 400
}
```

Everything, every index, since each one began, about 5,200 rows:

```json
{ "sources": ["fear-greed", "cmc-fear-greed", "altcoin-season"], "historyDays": 4000, "maxItems": 10000 }
```

| Field | Default | Notes |
|---|---|---|
| `sources` | none | Which indexes to pull. Leave it empty and the run returns one free sample row and charges nothing. |
| `historyDays` | 30 | Days back from the newest reading. `1` is today only. Ignored when `dateFrom` is set. Capped at 4000. |
| `maxItems` | 400 | Hard ceiling on rows returned across every index. This is the ceiling on what the run can cost. Capped at 10000. |
| `dateFrom` | none | `YYYY-MM-DD`. Setting this overrides `historyDays`. |
| `dateTo` | none | `YYYY-MM-DD`. Empty means today. |
| `proxyConfiguration` | off | You almost certainly do not need it. These feeds are open. |

**`maxItems` is split evenly between the indexes you picked**, newest first. Ask for two indexes and 20 rows and you get ten days of each, not twenty days of whichever was read first. The run logs how many readings exist in your window before it returns anything, so you can see what you left behind and raise the cap if you want it.

### Output

One row per index per day. A real row, from a run on 2026-09-20:

```json
{
  "ok": true,
  "date": "2026-09-20",
  "timestamp": "2026-09-20T00:00:00.000Z",
  "index": "fear-greed",
  "indexName": "Crypto Fear & Greed Index",
  "value": 71,
  "classification": "Greed",
  "classifiedBy": "publisher",
  "scaleMin": 0,
  "scaleMax": 100,
  "isLatest": true,
  "source": "alternative.me",
  "sourceUrl": "https://alternative.me/crypto/fear-and-greed-index/",
  "btcPriceUsd": null,
  "btcVolume24hUsd": null,
  "altcoinMarketCapUsd": null,
  "scrapedAt": "2026-09-20T00:23:15.336Z"
}
```

And a CoinMarketCap Fear & Greed row from the same run, which fills in the price fields:

```json
{
  "ok": true,
  "date": "2026-09-20",
  "index": "cmc-fear-greed",
  "indexName": "CoinMarketCap Fear & Greed Index",
  "value": 73,
  "classification": "Greed",
  "classifiedBy": "publisher",
  "btcPriceUsd": 81179.95,
  "btcVolume24hUsd": 20388570058.78,
  "source": "coinmarketcap.com"
}
```

`classifiedBy` is there because one of the three indexes does not ship a label with every data point. Both Fear & Greed feeds do, and those rows say `publisher`. The Altcoin Season feed leaves the label blank on historical points, so this actor applies the publisher's own stated cut-offs of 75 and above, 25 and below. Those rows are marked `publisher thresholds`, so you know the value is theirs and the word is not.

`btcPriceUsd`, `btcVolume24hUsd` and `altcoinMarketCapUsd` are `null` on the indexes that do not publish them. They are never filled in from somewhere else.

`isLatest` is true on the newest row of each index in that run.

### What it costs

You are charged per reading returned. Nothing else bills.

- The sample row you get from an empty `sources` list is free.
- Diagnostic rows are free. If an index cannot be reached, or your window predates it, you get a row saying so and you are not charged for it.
- A run that returns no readings at all charges nothing beyond the run fee.
- `maxItems` is honoured before anything is fetched, so the row count you set is the row count you pay for.

The live per-row figure is on the Pricing tab of this page. It is a flat rate with no volume tiers, so a thousand rows cost a thousand times one row and there is nothing to calculate.

### What this does not do

Read this part before you buy.

**It is not a trading signal and it is not advice.** A sentiment index is a description of the mood a market was in on a given day. It has no predictive claim attached to it by its publishers and none is made here. If you are looking for something that tells you when to buy, this is the wrong purchase however cheap it is.

**There is no per-coin Fear & Greed here.** Per-coin sentiment scores do exist, but the publishers that produce them put them behind an account and an API key. This actor uses no accounts and no keys, so it ships what is genuinely open and says nothing about the rest.

**Daily only.** These indexes are published once a day. There is no hourly or 15-minute series in any of these feeds, so there is none in the output.

**The two Fear & Greed publishers capitalise their labels differently.** alternative.me writes `Extreme Fear`; CoinMarketCap writes `Extreme fear`. Rows carry whatever the publisher wrote, unchanged. Lowercase the field before you group by it across both indexes.

**Coverage starts where each publisher's history starts**, not where you ask. A window in 2019 returns rows from the alternative.me index and an uncharged diagnostic row from the other two, because they did not exist yet.

**Today's reading moves during the day.** All three indexes update as the day goes on, so a row dated today is a live value, not a settled close. Rows for past days are final.

**Four days are missing from the alternative.me history.** 14, 15 and 16 April 2018 are absent, and so is 26 October 2024. Those are gaps in the publisher's own series. They are passed through as gaps rather than filled in, so a 3,150-row full pull covers 3,154 calendar days.

### FAQ

**What is the Crypto Fear and Greed Index?**
A 0-100 score published daily by alternative.me that summarises how fearful or greedy the crypto market looks that day. 0 is Extreme Fear, 100 is Extreme Greed. It leans on Bitcoin volatility, trading volume, social media activity, Bitcoin dominance and search trends.

**How far back does the history go?**
To 1 February 2018 for the alternative.me index, which is 3,150 daily readings as of September 2026. The CoinMarketCap score starts 29 June 2023 and Altcoin Season starts 22 March 2024.

**Do I need an API key or an account?**
No. Not for this actor and not for the feeds behind it.

**Can I get just today's number?**
Yes. `{"sources": ["fear-greed"], "historyDays": 1}` returns one row.

**How do I get the whole history without a surprise bill?**
`maxItems` caps it. Set it to what you are willing to pay for and the run stops there, newest readings first. The full history of all three indexes is about 5,200 rows, so leaving `maxItems` at its default of 400 is what stops a "give me everything" run from being larger than you meant.

**Why are there two Fear & Greed indexes?**
Because two organisations publish one and they do not agree. Pulling both gives you a spread, and the CoinMarketCap rows carry the day's Bitcoin price so you can put the score next to what the market actually did.

**What is the Altcoin Season Index?**
The share of the top 100 coins, excluding stablecoins and wrapped tokens, that outperformed Bitcoin over the previous 90 days, scaled to 1-100. At 75 or above CoinMarketCap calls it Altcoin Season; at 25 or below, Bitcoin Season.

**What happens if a feed is down?**
You get an uncharged diagnostic row naming the index and the error, and the other indexes you selected still return their rows. The run ends SUCCEEDED rather than failing, so a half-outage does not cost you a failed run.

**Can I run this on a schedule?**
Yes, and daily is the sensible cadence given the data updates once a day. `{"sources": ["fear-greed"], "historyDays": 1}` on a daily schedule appends one row a day.

**Is the data licensed for commercial use?**
alternative.me allows commercial use of their index with attribution shown next to the data. Every row carries `source` and `sourceUrl` so you have what you need to credit them. Check the publishers' own terms for your specific use.

# Actor input Schema

## `sources` (type: `array`):

Pick one or more daily sentiment indexes. "Crypto Fear & Greed Index" is the original one published by alternative.me and goes back to February 2018. The CoinMarketCap score is a second, separately calculated reading of the same idea and starts in June 2023. Altcoin Season is a different question again: how much of the top 100 is beating Bitcoin over 90 days. Leave this empty and the run returns one free sample row instead of charging you.

## `historyDays` (type: `integer`):

Days of history to return per index, counting back from the most recent reading. 1 gives you just today's number. Ignored when you fill in "From date" below. Days that a given index does not cover are not returned and not charged.

## `maxItems` (type: `integer`):

Hard cap on the rows this run returns, across every index you picked. You are charged per row returned, so this is the ceiling on what the run can cost. When two indexes are selected the cap is split between them so you get the same span of both. The full history of all three indexes is about 5,200 rows.

## `dateFrom` (type: `string`):

Start of the window, as YYYY-MM-DD. Fill this in and "How many days back" is ignored. Example: 2025-01-01

## `dateTo` (type: `string`):

End of the window, as YYYY-MM-DD. Leave empty for today. Example: 2025-06-30

## `proxyConfiguration` (type: `object`):

Optional. Leave this alone unless you need the run to go out through a particular network. Your own proxy servers are used exactly as given.

## Actor input object example

```json
{
  "sources": [
    "fear-greed"
  ],
  "historyDays": 30,
  "maxItems": 400,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One row per index per day: the date, the 0-100 value, the publisher's classification, whether that label came from the publisher or from the publisher's stated thresholds, and the source it was read from. The CoinMarketCap Fear & Greed rows also carry that day's Bitcoin price and 24h volume; Altcoin Season rows carry the altcoin market cap. An empty "sources" list, an unreadable date or an index that cannot be reached writes an uncharged sample or diagnostic row instead.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sources": [
        "fear-greed"
    ],
    "historyDays": 30,
    "maxItems": 400,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/crypto-fear-greed-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sources": ["fear-greed"],
    "historyDays": 30,
    "maxItems": 400,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/crypto-fear-greed-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sources": [
    "fear-greed"
  ],
  "historyDays": 30,
  "maxItems": 400,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call dami_studio/crypto-fear-greed-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/crypto-fear-greed-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/z9QaYXNmHrAkQcwMB/builds/620DZ5sOlfM1PdBA5/openapi.json
