
Add our financial news aggregation and in-house sentiment analysis to your project with just one line of code. Our system continuously analyzes the most crucial financial news portals, providing you with access to constantly updated news data and generating daily sentiment scores for stocks, ETFs, Forex, and Cryptocurrencies based on positive and negative mentions.
For trading enthusiasts and data analysts, a finance news feed could be a valuable addition to essential fundamental and historical data especially when bundled together as one package from the same provider of market data APIs.
Learn more about the News Feed API and the package it is included in on our product page.
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.
Endpoint:
GET https://eodhd.com/api/news
Description:
The Financial News API returns the latest financial news headlines and full articles for a given ticker symbol or topic tag. You must provide either a “s “ (ticker) or a “t” (tag) – at least one is required.
This API supports filtering by date, pagination, and returning results in JSON.
Example:
https://eodhd.com/api/news?s=AAPL.US&offset=0&limit=10&api_token=your_api_token&fmt=json
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)
Parameters:
Parameter | Required | Type | Description |
---|---|---|---|
s | Yes (if t not set) | string | The ticker code to retrieve news for, for example: AAPL.US |
t | Yes (if s not set) | string | The topic tag to retrieve news for, for example: technology |
from | No | string (YYYY-MM-DD) | Start date for filtering news |
to | No | string (YYYY-MM-DD) | End date for filtering news |
limit | No | integer | Number of results to return (default: 50, minimum: 1, maximum: 1000) |
offset | No | integer | Offset for pagination (default: 0) |
fmt | No | string | Response format, either json or xml (default: json) |
api_token | Yes | string | Your unique API access token |
Output Format (JSON):
Each article includes:
Field | Type | Description |
---|---|---|
date | string (ISO 8601) | The publication date and time of the article |
title | string | The headline of the news article |
content | string | Full article body |
link | string | Direct URL to the article |
symbols | array | List of ticker symbols mentioned in the article |
tags | array | Article topic tags (may be empty) |
sentiment | object | Contains sentiment scores: polarity, neg, neu, pos |
Output Response Example:
"date": "2025-08-18T08:48:00+00:00",
"title": "Kenya Healthcare Statistics Databook 2025: Navigate Healthcare Planning with Over 300 KPIs Spanning Patient to Pharmacist Statistics",
"content": "Dublin, Aug. 18, 2025 (GLOBE NEWSWIRE) -- The \"Kenya Healthcare Statistics Databook Q2 2025: 300+ KPIs Covering Detailed Statistics on Patients, Healthcare Facilities, Public and Private Spending, Medical Staff\" report has been added to ResearchAndMarkets.com's offering.This comprehensive report on Kenya's healthcare sector offers a range of statistics covering the entire value chain an in-depth data-centric analysis of the entire healthcare ecosystem, covering a range of modules from demographic data to healthcare .....",
"link": "https://www.globenewswire.com/news-release/2025/08/18/3134815/28124/en/Kenya-Healthcare-Statistics-Databook-2025-Navigate-Healthcare-Planning-with-Over-300-KPIs-Spanning-Patient-to-Pharmacist-Statistics.html",
"symbols": [
"AAPL.US"
],
"tags": [
"DEMOGRAPHICS",
"GLOBAL",
"GROSS DOMESTIC PRODUCT",
"HEALTH PROFESSIONAL",
"HEALTHCARE ANALYTICS",
"HEALTHCARE INFRASTRUCTURE",
"HEALTHCARE LANDSCAPE",
"HEALTHCARE RESOURCES",
"HEALTHCARE SECTOR",
"HEALTHCARE SPENDING",
"HEALTHCARE STATISTICS",
"KENYA",
"MARKET OPPORTUNITIES",
"MARKET RESEARCH REPORTS",
"MEDICAL STAFF",
"MEDICAL STAFFING",
"PHARMACEUTICAL DISTRIBUTION",
"PHARMACIES",
"POPULATION TRENDS"
],
"sentiment": {
"polarity": 0.959,
"neg": 0.008,
"neu": 0.948,
"pos": 0.044
}
.......
Tags in Financial News:
In addition to the standard list of 50 tags, we have introduced AI-powered auto-detected tags. This enhancement makes your search more flexible – now you can use any tags related to your topic of interest.
Standard tags:
‘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’
Examples of new tags:
‘GROWTH RATE’,’TOBACCO’, ‘MERGERS AND ACQUISITIONS’, ‘CATERING’, ‘ARTIFICIAL INTELLIGENCE’, ‘AGRITECH’, etc.
Sentiment Data API
Endpoint:
GET https://eodhd.com/api/sentiments
Description:
Get sentiment scores for one or more financial instruments (stocks, ETFs, crypto). Sentiment scores are calculated from both news and social media, normalized on a scale from -1 (very negative) to 1 (very positive).
You can provide one or multiple tickers, separated by commas.
Request Example:
https://eodhd.com/api/sentiments?s=btc-usd.cc,aapl.us&from=2022-01-01&to=2022-04-22&api_token=your_api_token&fmt=json
curl --location "https://eodhd.com/api/sentiments?s=btc-usd.cc,aapl.us&from=2022-01-01&to=2022-04-22&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=2022-01-01&to=2022-04-22&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=2022-01-01&to=2022-04-22&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=2022-01-01&to=2022-04-22&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)
Parameters:
Parameter | Required | Type | Description |
---|---|---|---|
s | Yes | string | One or more comma-separated tickers, for example: AAPL.US,BTC-USD.CC |
from | No | string (YYYY-MM-DD) | Start date for filtering sentiment data |
to | No | string (YYYY-MM-DD) | End date for filtering sentiment data |
api_token | Yes | string | Your unique API access token |
Output Format (JSON):
Sentiment data is grouped by ticker symbol. Each entry includes:
Field | Type | Description |
---|---|---|
date | string (YYYY-MM-DD) | The date of sentiment aggregation |
count | integer | Number of articles used for sentiment on that day |
normalized | float | Sentiment score between -1 (very negative) and 1 (very positive) |
Output Response Example:
"BTC-USD.CC": [
{
"date": "2022-04-22",
"count": 31,
"normalized": 0.1835
},
{
"date": "2022-04-21",
"count": 41,
"normalized": 0.2555
},
{
"date": "2022-04-20",
"count": 34,
"normalized": 0.2068
},
{
"date": "2022-04-19",
"count": 35,
"normalized": 0.4781
},
{
"date": "2022-04-18",
"count": 29,
"normalized": 0.1618
},
{
"date": "2022-04-17",
"count": 12,
"normalized": 0.0056
News Word Weights API
Endpoint:
GET https://eodhd.com/api/news-word-weights
Description:
This API provides a weighted list of the most relevant words found in financial news articles about a specific stock ticker over a defined date range.
Each word is scored based on its frequency and significance across the processed news, allowing for trend analysis, NLP input, or thematic clustering.
Note: This endpoint leverages AI to process hundreds or even thousands of articles, which may result in longer response times. If you encounter a timeout, consider adjusting your filters (e.g., narrowing the date range or focusing on specific tickers) to reduce the volume of data being processed.
Request Example:
https://eodhd.com/api/news-word-weights?s=AAPL&filter[date_from]=2025-04-08&filter[to]=2025-04-16&page[limit]=10&api_token=your_api_token&fmt=json
curl --location "https://eodhd.com/api/news-word-weights?s=AAPL&filter[date_from]=2025-04-08&filter[to]=2025-04-16&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&filter[date_from]=2025-04-08&filter[to]=2025-04-16&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&filter[date_from]=2025-04-08&filter[to]=2025-04-16&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&filter[date_from]=2025-04-08&filter[to]=2025-04-16&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)
Parameters:
Parameter | Required | Type | Description |
---|---|---|---|
s | Yes | string | The ticker symbol to analyze, for example: AAPL.US |
filter[date_from] | No | string (YYYY-MM-DD) | Start date for filtering news |
filter[date_to] | No | string (YYYY-MM-DD) | End date for filtering news |
page[limit] | No | integer | Number of top words to return |
api_token | Yes | string | Your unique API access token |
Output Description (JSON Format):
The API returns a list of weighted words (terms) relevant to the ticker during the selected period, along with metadata about the processed news.
Field | Type | Description |
---|---|---|
data | object | A list of keywords with their corresponding weights (key-value pairs) |
meta.news_found | integer | Total number of articles matched |
meta.news_processed | integer | Number of articles successfully processed |
links.next | string or null | URL to the next page of results, if available |
Output Response Example:
{
"data": {
"appl": 0.01922,
"tariff": 0.01889,
"stock": 0.01884,
"trump": 0.01115,
"companies": 0.00983,
"market": 0.00919,
"china": 0.0079,
"trade": 0.00723,
"ai": 0.00605,
"price": 0.00577
},
"meta": {
"news_processed": 300,
"news_found": 5748
},
"links": {
"next": null
}
}