Free · JSON · No API Key

FTSE 100 Fear & Greed
Public JSON API

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

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

Quick start

Fetch the current score in one line:

curl https://ftse.feargreedchart.com/api/?action=ftse
Base URL: https://ftse.feargreedchart.com/api/ — All endpoints return JSON with Access-Control-Allow-Origin: *, so they work from any browser.
GET /api/?action=ftse
Live Score
Current Fear & Greed score, all four components (Market Momentum, Volatility, Currency, European RS), FTSE 100 level, GBP/USD, and recent history snapshots.
{
  "score": 27,
  "label": "Fear",
  "updated": "2026-05-27",
  "ftse": {
    "level": 10491.56,
    "change_pct": 0.002,
    "recent_30d": [10609.10, 10559.60, 10590.00, ...]
  },
  "gbp_usd": 1.3459,
  "components": [
    { "name": "Market Momentum", "weight": 25, "score": 29, "note": "FTSE 100 is 2.7% above its 125-session moving average — a relatively weak momentum reading by 2-year history." },
    { "name": "Volatility",      "weight": 25, "score": 12, "note": "FTSE 20-session realized volatility at 15.6% annualized — elevated realized risk." },
    { "name": "Currency",        "weight": 25, "score": 59, "note": "GBP/USD has moved -0.12% over 60 sessions — within the usual recent range." },
    { "name": "European RS",     "weight": 25, "score": 7,  "note": "FTSE lagged Stoxx 600 by 1.9pp over 60 sessions — defensive rotation away from the UK." }
  ],
  "history": {
    "prev_close": { "date": "2026-05-26", "score": 40 },
    "week":       { "date": "2026-05-20", "score": 44 },
    "month":      { "date": "2026-04-27", "score": 51 },
    "year":       { "date": "2025-05-27", "score": 64 }
  },
  "meta": {
    "methodology":      "equal-weight 4-component model (25% × 4): Market Momentum, Volatility (20d realized), Currency (GBP/USD 60d), European RS (FTSE 100 vs Stoxx 600 60d)",
    "history_size":     1191,
    "generated_at_utc": "2026-05-27T18:00:04+00:00"
  },
  "available": true,
  "state":     "NEUTRAL"
}
FieldTypeDescription
scoreint 0–100Composite Fear & Greed score.
labelstringOne of: Extreme Fear, Fear, Neutral, Greed, Extreme Greed.
updateddateLondon trading date the score reflects (YYYY-MM-DD).
ftse.levelfloatFTSE 100 closing level.
ftse.change_pctfloatDay-over-day percent change.
ftse.recent_30darrayLast 30 FTSE 100 closes for sparkline use.
gbp_usdfloatLatest GBP/USD rate from FRED DEXUSUK.
componentsarrayEach component: name, weight, score, note.
historyobjectScore values from prev_close, week, month, year ago.
meta.methodologystringStatic model description — FTSE 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://ftse.feargreedchart.com/api/?action=ftse')
  .then(r => r.json())
  .then(d => console.log(d.score, d.label));
Python
import requests
r = requests.get(
  'https://ftse.feargreedchart.com/api/?action=ftse'
).json()
print(r['score'], r['label'])
cURL
curl -s https://ftse.feargreedchart.com\
/api/?action=ftse | jq .score
GET /api/?action=ftse-history
History
Daily Fear & Greed score and FTSE 100 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, "ftse": 18197.45 },
    { "date": "2023-01-03", "score": 49, "ftse": 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[].ftsefloat|nullFTSE 100 close for that date.
JavaScript
const d = await (
  await fetch('https://ftse.feargreedchart.com/api/?action=ftse-history')
).json();
console.log(d.count, 'days');
Python
import requests
hist = requests.get(
  'https://ftse.feargreedchart.com/api/?action=ftse-history'
).json()
print(len(hist['rows']))
cURL
curl -s https://ftse.feargreedchart.com\
/api/?action=ftse-history | jq '.count'
GET /api/?action=ftse-history.csv
CSV Download
The same history as a CSV file (alias: ?action=ftse-csv) for spreadsheets and notebooks.
date,fear_greed_score,label,ftse_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://ftse.feargreedchart.com/api/?action=ftse-history.csv')
df.head()

Caching & refresh

Live score (?action=ftse) 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 London close at 15:30 GMT (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 ftse.feargreedchart.com so others can find the source. The score is informational only — not investment advice — and may be inaccurate. Underlying data: FTSE 100 closes via Yahoo Finance (^FTSE); Stoxx Europe 600 closes via Yahoo Finance (^STOXX); GBP/USD via the Federal Reserve's FRED DEXUSUK series; realized volatility computed from FTSE log returns.