Free · JSON · No API Key

DAX 40 Fear & Greed
Public JSON API

Live composite score, full history, and CSV download. Updated daily after Frankfurt close. Free for personal & commercial use, no authentication required.

Endpoints
  1. Live Score — ?action=dax
  2. History — ?action=dax-history
  3. CSV Download — ?action=dax-history.csv

Quick start

Fetch the current score in one line:

curl https://dax.feargreedchart.com/api/?action=dax
Base URL: https://dax.feargreedchart.com/api/ — All endpoints return JSON with Access-Control-Allow-Origin: *, so they work from any browser.
GET /api/?action=dax
Live Score
Current Fear & Greed score, all four components (Market Momentum, Volatility, Currency, European RS), DAX 40 level, EUR/USD, and recent history snapshots.
{
  "score": 44,
  "label": "Neutral",
  "updated": "2026-05-19",
  "dax": {
    "level": 24635.04,
    "change_pct": 1.346,
    "recent_30d": [22921.59, 24080.63, 23806.99, ...]
  },
  "eur_usd": 1.1627,
  "components": [
    { "name": "Market Momentum", "weight": 25, "score": 37, "note": "DAX 40 is 1.9% above its 125-session moving average — a relatively weak momentum reading by 2-year history." },
    { "name": "Volatility",      "weight": 25, "score": 19, "note": "DAX 20-session realized volatility at 18.7% annualized — elevated realized risk." },
    { "name": "Currency",        "weight": 25, "score": 77, "note": "EUR/USD has moved -1.31% over 60 sessions — euro on the softer side of its recent 2-year range (tailwind for exporters)." },
    { "name": "European RS",     "weight": 25, "score": 43, "note": "DAX lagged Stoxx 600 by 0.4pp over 60 sessions — within usual cross-market range." }
  ],
  "history": {
    "prev_close": { "date": "2026-05-16", "score": 47 },
    "week":       { "date": "2026-05-12", "score": 35 },
    "month":      { "date": "2026-04-19", "score": 52 },
    "year":       { "date": "2025-05-19", "score": 68 }
  },
  "meta": {
    "methodology":      "equal-weight 4-component model (25% × 4): Market Momentum, Volatility (20d realized), Currency (EUR/USD 60d), European RS (DAX vs Stoxx 600 60d)",
    "history_size":     1205,
    "generated_at_utc": "2026-05-19T17:00:04+00:00"
  },
  "available": true,
  "state":     "NEUTRAL"
}
FieldTypeDescription
scoreint 0–100Composite Fear & Greed score.
labelstringOne of: Extreme Fear, Fear, Neutral, Greed, Extreme Greed.
updateddateFrankfurt trading date the score reflects (YYYY-MM-DD).
dax.levelfloatDAX 40 closing level.
dax.change_pctfloatDay-over-day percent change.
dax.recent_30darrayLast 30 DAX 40 closes for sparkline use.
eur_usdfloatLatest EUR/USD rate from FRED DEXUSEU.
componentsarrayEach component: name, weight, score, note.
historyobjectScore values from prev_close, week, month, year ago.
meta.methodologystringStatic model description — DAX uses a fixed 4-component model with no fallback.
meta.history_sizeintTotal number of dates in the history series.
meta.generated_at_utcstringISO-8601 timestamp of when the cron generated this score.
availableboolTrue when a valid score is available (mirrors the score-file presence).
statestringUppercase label, consumed by the homepage sector-card and /global page.
JavaScript
fetch('https://dax.feargreedchart.com/api/?action=dax')
  .then(r => r.json())
  .then(d => console.log(d.score, d.label));
Python
import requests
r = requests.get(
  'https://dax.feargreedchart.com/api/?action=dax'
).json()
print(r['score'], r['label'])
cURL
curl -s https://dax.feargreedchart.com\
/api/?action=dax | jq .score
GET /api/?action=dax-history
History
Daily Fear & Greed score and DAX 40 close for every date in the series.
{
  "count": 842,
  "range": { "from": "2023-01-02", "to": "2026-05-16" },
  "rows": [
    { "date": "2023-01-02", "score": 51, "dax": 18197.45 },
    { "date": "2023-01-03", "score": 49, "dax": 18232.55 },
    ...
  ]
}
FieldTypeDescription
countintNumber of rows.
range.fromdateFirst date in the series.
range.todateMost recent date.
rows[].datedateTrading date.
rows[].scoreint|nullScore for that date (may be null on bootstrap days).
rows[].daxfloat|nullDAX 40 close for that date.
JavaScript
const d = await (
  await fetch('https://dax.feargreedchart.com/api/?action=dax-history')
).json();
console.log(d.count, 'days');
Python
import requests
hist = requests.get(
  'https://dax.feargreedchart.com/api/?action=dax-history'
).json()
print(len(hist['rows']))
cURL
curl -s https://dax.feargreedchart.com\
/api/?action=dax-history | jq '.count'
GET /api/?action=dax-history.csv
CSV Download
The same history as a CSV file (alias: ?action=dax-csv) for spreadsheets and notebooks.
date,fear_greed_score,label,dax_close
2023-01-02,51,Neutral,18197.45
2023-01-03,49,Fear,18232.55
2023-01-04,52,Neutral,18042.95
...
import pandas as pd
df = pd.read_csv('https://dax.feargreedchart.com/api/?action=dax-history.csv')
df.head()

Caching & refresh

Live score (?action=dax) is cached for 5 minutes via Cache-Control: public, max-age=300. History endpoints are cached for 1 hour. The underlying score regenerates once per trading day, shortly after Frankfurt close at 15:30 CET (10:00 UTC) Mon–Fri. Be considerate with polling — once every few minutes is plenty.

Attribution & terms

Free for personal & commercial use. Please link back to dax.feargreedchart.com so others can find the source. The score is informational only — not investment advice — and may be inaccurate. Underlying data: DAX 40 closes via Yahoo Finance (^GDAXI); Stoxx Europe 600 closes via Yahoo Finance (^STOXX); EUR/USD via the Federal Reserve's FRED DEXUSEU series; realized volatility computed from DAX log returns.