
The Financial News API aggregates financial news from major sources and adds in-house sentiment analysis. It continuously processes the leading financial news portals, giving you constantly updated articles and daily sentiment scores for stocks, ETFs, Forex, and cryptocurrencies, based on positive and negative mentions.
This page documents three related endpoints: the Financial News feed, the Sentiment Data API, and the News Word Weights API. All three are authenticated with your api_token and return JSON.
Financial News API
- You can start with "DEMO" API key to test the data for a few tickers only: AAPL.US, TSLA.US, VTI.US, AMZN.US, BTC-USD.CC and EURUSD.FOREX. For these tickers, all of our types of data (APIs), including Real-Time Data, are available without limitations.
- Register for the free plan to receive your API key (limited to 20 API calls per day) with access to End-Of-Day Historical Stock Market Data API for any ticker, but within the past year only. Plus a List of tickers per Exchange is available.
- We recommend to explore our plans, starting from $19.99, to access the necessary type of data without limitations.
Returns financial news articles for a given ticker or topic tag, updated in real time. Filter by ticker with the s parameter or by topic with the t parameter. If both are omitted, the endpoint returns the latest general news feed. Results support date filtering and pagination.
GET https://eodhd.com/api/news
Parameters
api_token
string
required
s
string
optional
t
string
optional
from
date
optional
to
date
optional
limit
integer
optional
offset
integer
optional
Request Example
https://eodhd.com/api/news?s=AAPL.US&offset=0&limit=10&api_token=your_api_token
curl --location "https://eodhd.com/api/news?s=AAPL.US&offset=0&limit=10&api_token=your_api_token&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/news?s=AAPL.US&offset=0&limit=10&api_token=your_api_token&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/news?s=AAPL.US&offset=0&limit=10&api_token=your_api_token&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/news?s=AAPL.US&offset=0&limit=10&api_token=your_api_token&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Example
[
{
"date": "2026-07-15T10:37:18+00:00",
"title": "Alibaba shares jump as China clears Apple's Qwen-powered AI system",
"content": "Investing.com -- Shares of Alibaba Group in the U.S. rose around 5% in premarket trading ...",
"link": "https://finance.yahoo.com/technology/ai/articles/alibaba-shares-jump-china-clears-103718143.html",
"symbols": ["2RR.F", "9988.HK", "AAPL.US"],
"tags": ["ARTIFICIAL-INTELLIGENCE", "CHINA-MARKET", "REGULATION", "TECH"],
"sentiment": { "polarity": 0.987, "neg": 0.007, "neu": 0.89, "pos": 0.103 }
}
]
Response Fields
| Field | Type | Description |
|---|---|---|
| date | string | Publication date and time of the article, ISO 8601 |
| title | string | Headline of the article |
| content | string | Full article body |
| link | string | Direct URL to the original article |
| symbols | array | Ticker symbols mentioned in the article |
| tags | array | Topic tags assigned to the article, may be empty |
| sentiment | object | Sentiment scores: polarity, neg, neu, pos |
News Tags
Besides a standard list of 50 tags, the feed adds AI-detected tags, so you can query by almost any topic related to your area of interest, for example artificial intelligence, mergers and acquisitions, or agritech. Query tags with the t parameter.
Standard tags — 50 supported topic values
balance sheet, capital employed, class action, company announcement, consensus eps estimate, consensus estimate, credit rating, discounted cash flow, dividend payments, earnings estimate, earnings growth, earnings per share, earnings release, earnings report, earnings results, earnings surprise, estimate revisions, european regulatory news, financial results, fourth quarter, free cash flow, future cash flows, growth rate, initial public offering, insider ownership, insider transactions, institutional investors, institutional ownership, intrinsic value, market research reports, net income, operating income, present value, press releases, price target, quarterly earnings, quarterly results, ratings, research analysis and reports, return on equity, revenue estimates, revenue growth, roce, roe, share price, shareholder rights, shareholder, shares outstanding, split, strong buy, total revenue, zacks investment research, zacks rank
Sentiment Data API
Returns daily aggregated sentiment scores for one or more instruments (stocks, ETFs, Forex, crypto), calculated from news and social media and normalized from -1 (very negative) to 1 (very positive). Pass one or several comma-separated tickers.
GET https://eodhd.com/api/sentiments
Parameters
api_token
string
required
s
string
required
from
date
optional
to
date
optional
Request Example
https://eodhd.com/api/sentiments?s=btc-usd.cc,aapl.us&from=2026-06-01&to=2026-06-30&api_token=your_api_token
curl --location "https://eodhd.com/api/sentiments?s=btc-usd.cc,aapl.us&from=2026-06-01&to=2026-06-30&api_token=your_api_token&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/sentiments?s=btc-usd.cc,aapl.us&from=2026-06-01&to=2026-06-30&api_token=your_api_token&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/sentiments?s=btc-usd.cc,aapl.us&from=2026-06-01&to=2026-06-30&api_token=your_api_token&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/sentiments?s=btc-usd.cc,aapl.us&from=2026-06-01&to=2026-06-30&api_token=your_api_token&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Example
{
"AAPL.US": [
{ "date": "2026-07-15", "count": 10, "normalized": 0.6829 },
{ "date": "2026-07-14", "count": 64, "normalized": 0.7071 },
{ "date": "2026-07-13", "count": 64, "normalized": 0.6146 }
]
}
Response Fields
Sentiment data is grouped by ticker symbol. Each daily entry contains:
| Field | Type | Description |
|---|---|---|
| date | string | Aggregation date, YYYY-MM-DD |
| count | integer | Number of articles used for sentiment on that day |
| normalized | number | Sentiment score from -1 (very negative) to 1 (very positive) |
News Word Weights API
Returns a weighted list of the most relevant words in news articles about a given ticker over a date range. Each word is scored by frequency and significance across the processed articles, which is useful for trend analysis, NLP input, and thematic clustering.
This endpoint uses AI to process hundreds or thousands of articles, so responses can take longer. If a request times out, narrow the date range to reduce the volume of data processed.
GET https://eodhd.com/api/news-word-weights
Parameters
api_token
string
required
s
string
required
filter[date_from]
date
optional
filter[date_to]
date
optional
page[limit]
integer
optional
Request Example
https://eodhd.com/api/news-word-weights?s=AAPL.US&filter[date_from]=2026-06-01&filter[date_to]=2026-06-15&page[limit]=10&api_token=your_api_token
curl --location "https://eodhd.com/api/news-word-weights?s=AAPL.US&filter[date_from]=2026-06-01&filter[date_to]=2026-06-15&page[limit]=10&api_token=your_api_token&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/news-word-weights?s=AAPL.US&filter[date_from]=2026-06-01&filter[date_to]=2026-06-15&page[limit]=10&api_token=your_api_token&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/news-word-weights?s=AAPL.US&filter[date_from]=2026-06-01&filter[date_to]=2026-06-15&page[limit]=10&api_token=your_api_token&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/news-word-weights?s=AAPL.US&filter[date_from]=2026-06-01&filter[date_to]=2026-06-15&page[limit]=10&api_token=your_api_token&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Example
{
"data": {
"stock": 0.02227,
"apple": 0.01224,
"companies": 0.01029,
"year": 0.0097,
"market": 0.00945
},
"meta": {
"news_processed": 300,
"news_found": 4126
},
"links": {
"next": null
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
| data | object | Keywords with their corresponding weights, as key-value pairs |
| meta.news_found | integer | Total number of articles matched |
| meta.news_processed | integer | Number of articles actually processed |
| links.next | string or null | URL to the next page of results, if available |