
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.
Quick jump:
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 EUR-USD.CC. 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)!
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 |
List of Supported Tags for Financial News:
We have more than 50 tags (parameter “t”) to get news for a given topic:
'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
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)!
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) |
News Word Weights API [coming out in May 2025]
Endpoint:
GET https://eodhd.com/api/v1/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.
Request Example:
https://eodhd.com/api/v1/news-word-weights?s=AAPL.US&api_token=your_api_token
curl --location "https://eodhd.com/api/v1/news-word-weights?s=AAPL.US&api_token=your_api_token&fmt=json"
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://eodhd.com/api/v1/news-word-weights?s=AAPL.US&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/v1/news-word-weights?s=AAPL.US&api_token=your_api_token&fmt=json' data = requests.get(url).json() print(data)
library(httr) library(jsonlite) url <- 'https://eodhd.com/api/v1/news-word-weights?s=AAPL.US&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)!
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 |