Mastering the Newsfeed API: Tracking Real-Time Headlines and Price Drivers in Python
Mastering the Newsfeed API: Tracking Real-Time Headlines and Price Drivers in Python
Mastering the Newsfeed API: Tracking Real-Time Headlines and Price Drivers in Python
Markets respond to information faster than anything else, and most of that information begins with a headline.
by Thomas Cotter
November 21, 2025
Markets respond to information faster than anything else, and most of that information begins with a headline. An earnings update, a regulatory note, a product issue, even a short line from an analyst can move a stock before the chart shows any sign of it. Traders and researchers depend on structured news because it gives them a clearer starting point and keeps them from jumping between scattered sources.
Benzinga’s Newsfeed and Why Is It Moving (WIM) endpoint is built around that need. It delivers real-time headlines along with symbols, tags, timestamps, and short explanations that point to the reason behind a move. The data comes in a format that fits well into trading systems, lightweight dashboards, or internal research scripts, so you spend less time cleaning news and more time using it.
This guide covers the endpoint from top to bottom. We’ll look at how the data is structured, how the parameters shape the response, and how to pull it into Python for different workflows. The plan is simple. Once you finish the article, you should be able to build your own news-based tools without guessing what each field is supposed to represent.
What is Benzinga’s Newsfeed and WIM endpoint?
News plays a specific role in how markets behave. Prices move for many reasons, but the earliest signals usually appear in headlines. A company might release guidance, an analyst may revise a target, or a regulatory body could publish something unexpected. These events shape sentiment before the broader market reacts.
Most traders do not read every article that comes out. They look for structure. They care about the symbol, the category, the time, the importance, and a short idea of what happened. If the headline mentions a filing or an earnings update, they want to know that quickly. If a stock is moving without any obvious reason, they want the explanation without digging through multiple sources.
This is why structured news feeds matter. Raw headlines alone are not enough. What helps is metadata that groups stories by category, attaches relevant tickers, and adds context about why the event may matter. When these fields are consistent and easy to filter, the news can become part of a trading system instead of something you check manually.
Benzinga’s Newsfeed and WIM endpoint is built around these needs. It does not just deliver text. It provides a clean set of attributes that describe each item. This makes it easier to build alerts, track catalysts, and connect headlines with intraday market activity. The entire point is to reduce guesswork and let the data slot into tools that run throughout the day.
Endpoint Walkthrough
The Newsfeed and Why Is It Moving service exposes two REST endpoints.
GET https://api.benzinga.com/api/v2/news
GET https://api.benzinga.com/api/v2/news-removed
In practice, you use the first one to pull articles and WIM items, and the second one only if you are syncing a local store and need to remove items that were taken down.
Base call and authentication
Every request needs your API key passed as token in the query string, plus an accept header.
The displayOutput=”full” flag is important if you want the full HTML body instead of just a headline or teaser.
Key query parameters
You do not need every parameter. For most workflows, a small subset is enough.
Field
Type / Example
What it Controls
token
YOUR_API_KEY
Authentication. Required for every request.
page
0, 1, 2
Page offset for pagination. Default 0.
pageSize
10, 50
Number of results. Max 100.
displayOutput
headline, abstract, full
Level of content returned. Use full for body text.
date
2025-11-19
Single day shortcut for dateFrom and dateTo.
dateFrom
2025-11-18
Start date for a range query. Sorted by published date.
dateTo
2025-11-19
End date for a range query.
updatedSince
Unix timestamp
Delta sync by last update time. Useful for polling.
tickers
AAPL, AAPL,MSFT,NVDA
Filter by one or more symbols, comma-separated values (csv). Max 50.
channels
Earnings, WIIM, Equities
Filter by channel names or ids. Set WIIM to focus on WIM.
topics
AI, autonomous driving
Keyword search across title, tags, and body.
authors
Elon Musk Watch, Shanthi Rexaline
Filter by author
For low latency and production use, it is recommended to use updatedSince as your main filter instead of huge date ranges.
Response fields
Each item in the JSON array is a single article or headline with a consistent structure.
Field
Example Value
Meaning
id
48941961
Unique article id. Also appears in the benzinga.com url.
author
“Badar Shaikh”
Name of the journalist or contributor.
created
“Wed, 19 Nov 2025 00:49:52 -0400”
When the article was first created, RFC 2822 format.
updated
“Wed, 19 Nov 2025 00:49:52 -0400”
Last update timestamp. Changes if the story is edited.
title
“Elon Musk Says This Is When Tesla…”
Plain text headline.
teaser
Short summary string
First sentence or short context, may contain HTML.
body
Full HTML article
Complete article content, returned only when displayOutput=full.
url
Article url on benzinga.com
Public link to the story.
image
List of {size, url} objects
Featured image variations like thumb, small, large.
channels
List of {name} objects
Categories such as Equities, Tech, WIIM, Top Stories.
stocks
List of {name, isin, exchange} objects
Symbols referenced in the article body.
tags
List of {name} objects
Extra tags like themes, people, products.
Removed news endpoint
If you are persisting news locally, you can periodically call:
GET https://api.benzinga.com/api/v2/news-removed
GET https://api.benzinga.com/api/v2/news-removed
GET https://api.benzinga.com/api/v2/news-removed
GET https://api.benzinga.com/api/v2/news-removed
It returns a simple payload like:
{"removed":[{"id":12345678},{"id":23456789}]}
{"removed":[{"id":12345678},{"id":23456789}]}
{"removed":[{"id":12345678},{"id":23456789}]}
{"removed":[{"id":12345678},{"id":23456789}]}
You then delete or flag those IDs in your store.
Use Case 1: Basic Data Extraction
Most workflows begin with simple retrieval. The Newsfeed endpoint supports several filtered pulls that cover common needs. Below are a few straightforward patterns that help you get familiar with the data.
Recent headlines for a single stock
This is the most direct call. It returns the latest items that reference a given symbol.
This returns the HTML version of the article so you can parse it with BeautifulSoup or any other library.
Tesla Rival BYD Could Bring Its Japanese 'Kei'Car To Europe
<p>Chinese EV giant <strong>BYD Co. Ltd.</strong> <a class="ticker-link" data-ticker="BYDDY" data-exchange="OTC" href="https://www.benzinga.com/quote/BYDDY" target="_blank" rel="noopener">(OTC:<a class="ticker" href="https://www.benzinga.com/quote/BYDDY">BYDDY</a>)</a> <a class="ticker-link" data-ti ...
Tesla Rival BYD Could Bring Its Japanese 'Kei'Car To Europe
<p>Chinese EV giant <strong>BYD Co. Ltd.</strong> <a class="ticker-link" data-ticker="BYDDY" data-exchange="OTC" href="https://www.benzinga.com/quote/BYDDY" target="_blank" rel="noopener">(OTC:<a class="ticker" href="https://www.benzinga.com/quote/BYDDY">BYDDY</a>)</a> <a class="ticker-link" data-ti ...
Tesla Rival BYD Could Bring Its Japanese 'Kei'Car To Europe
<p>Chinese EV giant <strong>BYD Co. Ltd.</strong> <a class="ticker-link" data-ticker="BYDDY" data-exchange="OTC" href="https://www.benzinga.com/quote/BYDDY" target="_blank" rel="noopener">(OTC:<a class="ticker" href="https://www.benzinga.com/quote/BYDDY">BYDDY</a>)</a> <a class="ticker-link" data-ti ...
Tesla Rival BYD Could Bring Its Japanese 'Kei'Car To Europe
<p>Chinese EV giant <strong>BYD Co. Ltd.</strong> <a class="ticker-link" data-ticker="BYDDY" data-exchange="OTC" href="https://www.benzinga.com/quote/BYDDY" target="_blank" rel="noopener">(OTC:<a class="ticker" href="https://www.benzinga.com/quote/BYDDY">BYDDY</a>)</a> <a class="ticker-link" data-ti ...
Use Case 2: Applied Filtering and Light Analysis
Once basic extraction is in place, the next step is to shape the feed into something more targeted. In most workflows, this means filtering by channels, tags or symbols, and turning the response into a structure that is easier to scan.
All examples below assume the same base configuration:
Channels group stories into broad categories such as Equities, Markets, Tech or WIIM. This makes it straightforward to focus only on certain types of items.
This pattern narrows the feed to stories that Benzinga flags as Movers while still working off the same endpoint.
48990144Tesla Stock Is Reeling Back Following Previous Gains:What's Going On? ['News', 'Movers']
48944697Is Saudi Arabia About To Become Big Tech's Next Billion-Dollar AI Playground? ['Government', 'News', 'Regulations', 'Top Stories', 'Movers', 'Tech', 'Media']
48990144Tesla Stock Is Reeling Back Following Previous Gains:What's Going On? ['News', 'Movers']
48944697Is Saudi Arabia About To Become Big Tech's Next Billion-Dollar AI Playground? ['Government', 'News', 'Regulations', 'Top Stories', 'Movers', 'Tech', 'Media']
48990144Tesla Stock Is Reeling Back Following Previous Gains:What's Going On? ['News', 'Movers']
48944697Is Saudi Arabia About To Become Big Tech's Next Billion-Dollar AI Playground? ['Government', 'News', 'Regulations', 'Top Stories', 'Movers', 'Tech', 'Media']
48990144Tesla Stock Is Reeling Back Following Previous Gains:What's Going On? ['News', 'Movers']
48944697Is Saudi Arabia About To Become Big Tech's Next Billion-Dollar AI Playground? ['Government', 'News', 'Regulations', 'Top Stories', 'Movers', 'Tech', 'Media']
Working with tags
Tags offer a simple way to group news by theme or topic.
For lightweight analysis, it is often useful to flatten the response into a table.
importpandasas pdparams = {"token":api_key,"tickers":"AAPL,MSFT,NVDA,TSLA","pageSize":40}items = requests.get(url,params=params,headers=headers).json()rows = []forninitems:row = {"id":n.get("id"),"title":n.get("title"),"created":n.get("created"),"url":n.get("url"),"channels":", ".join(c["name"]for c inn.get("channels",[])),"tickers":", ".join(s["name"]for s inn.get("stocks",[])),"tags":", ".join(t["name"]for t inn.get("tags",[])),}rows.append(row)df = pd.DataFrame(rows)df.head()
importpandasas pdparams = {"token":api_key,"tickers":"AAPL,MSFT,NVDA,TSLA","pageSize":40}items = requests.get(url,params=params,headers=headers).json()rows = []forninitems:row = {"id":n.get("id"),"title":n.get("title"),"created":n.get("created"),"url":n.get("url"),"channels":", ".join(c["name"]for c inn.get("channels",[])),"tickers":", ".join(s["name"]for s inn.get("stocks",[])),"tags":", ".join(t["name"]for t inn.get("tags",[])),}rows.append(row)df = pd.DataFrame(rows)df.head()
importpandasas pdparams = {"token":api_key,"tickers":"AAPL,MSFT,NVDA,TSLA","pageSize":40}items = requests.get(url,params=params,headers=headers).json()rows = []forninitems:row = {"id":n.get("id"),"title":n.get("title"),"created":n.get("created"),"url":n.get("url"),"channels":", ".join(c["name"]for c inn.get("channels",[])),"tickers":", ".join(s["name"]for s inn.get("stocks",[])),"tags":", ".join(t["name"]for t inn.get("tags",[])),}rows.append(row)df = pd.DataFrame(rows)df.head()
importpandasas pdparams = {"token":api_key,"tickers":"AAPL,MSFT,NVDA,TSLA","pageSize":40}items = requests.get(url,params=params,headers=headers).json()rows = []forninitems:row = {"id":n.get("id"),"title":n.get("title"),"created":n.get("created"),"url":n.get("url"),"channels":", ".join(c["name"]for c inn.get("channels",[])),"tickers":", ".join(s["name"]for s inn.get("stocks",[])),"tags":", ".join(t["name"]for t inn.get("tags",[])),}rows.append(row)df = pd.DataFrame(rows)df.head()
This produces a compact view that is easy to filter or export, and serves as a bridge to the more advanced workflows in the next section.
Use Case 3: Combining News with Price Action
In many tools, headlines are not viewed in isolation. They are placed next to recent price moves to give a clearer sense of how the market reacted. The Newsfeed endpoint and the Historical Bar Data endpoint can be combined to build that kind of view.
The example below uses WIIM stories for a single stock and aligns them with intraday bars from the same session.
Pulling WIIM headlines for a symbol
First, request WIIM tagged news for a chosen stock and trading day. The channels filter keeps the response focused on items where Benzinga provides a “Why Is It Moving” explanation.
importrequestsimportpandasas pd
api_key = "YOUR API KEY"news_url = "https://api.benzinga.com/api/v2/news"headers = {"accept":"application/json"}news_params = {"token":api_key,"tickers":"TSLA","channels":"Why Is It Moving","date":"2025-11-19","pageSize":50}news_items = requests.get(news_url,params=news_params,headers=headers).json()rows = []forninnews_items:rows.append({"news_id":n.get("id"),"created":n.get("created"),"title":n.get("title"),"url":n.get("url"),})news_df = pd.DataFrame(rows)news_df["created"] = pd.to_datetime(news_df["created"])news_df.sort_values("created",inplace=True)news_df.head(10)
importrequestsimportpandasas pd
api_key = "YOUR API KEY"news_url = "https://api.benzinga.com/api/v2/news"headers = {"accept":"application/json"}news_params = {"token":api_key,"tickers":"TSLA","channels":"Why Is It Moving","date":"2025-11-19","pageSize":50}news_items = requests.get(news_url,params=news_params,headers=headers).json()rows = []forninnews_items:rows.append({"news_id":n.get("id"),"created":n.get("created"),"title":n.get("title"),"url":n.get("url"),})news_df = pd.DataFrame(rows)news_df["created"] = pd.to_datetime(news_df["created"])news_df.sort_values("created",inplace=True)news_df.head(10)
importrequestsimportpandasas pd
api_key = "YOUR API KEY"news_url = "https://api.benzinga.com/api/v2/news"headers = {"accept":"application/json"}news_params = {"token":api_key,"tickers":"TSLA","channels":"Why Is It Moving","date":"2025-11-19","pageSize":50}news_items = requests.get(news_url,params=news_params,headers=headers).json()rows = []forninnews_items:rows.append({"news_id":n.get("id"),"created":n.get("created"),"title":n.get("title"),"url":n.get("url"),})news_df = pd.DataFrame(rows)news_df["created"] = pd.to_datetime(news_df["created"])news_df.sort_values("created",inplace=True)news_df.head(10)
importrequestsimportpandasas pd
api_key = "YOUR API KEY"news_url = "https://api.benzinga.com/api/v2/news"headers = {"accept":"application/json"}news_params = {"token":api_key,"tickers":"TSLA","channels":"Why Is It Moving","date":"2025-11-19","pageSize":50}news_items = requests.get(news_url,params=news_params,headers=headers).json()rows = []forninnews_items:rows.append({"news_id":n.get("id"),"created":n.get("created"),"title":n.get("title"),"url":n.get("url"),})news_df = pd.DataFrame(rows)news_df["created"] = pd.to_datetime(news_df["created"])news_df.sort_values("created",inplace=True)news_df.head(10)
This produces a small table with the headline id, timestamp, title and url. It also ensures the timestamps are in a format that can be joined with price data.
The result is a compact table where each WIIM story is paired with the closing price at the time of the headline and the next bar’s close. It is not a full trading model, but it is enough to support tools that overlay news with price, or to give users a clearer sense of how the market responded around key events.
This pattern can be extended further. For example, by widening the window to several bars, exporting the table to a dashboard, or combining it with other endpoints in the Benzinga suite.
Common Questions About Stock News APIs
What is a news API for stocks?
A news API for stocks provides market headlines in a structured format that includes timestamps, tickers, channels and links. It allows trading systems and research tools to retrieve relevant stories without scraping or manually scanning multiple websites.
How is a stock news API different from a stock data API?
A stock news API focuses on events, while a stock data API focuses on prices and fundamentals. News APIs supply context through headlines and articles. Stock data APIs supply price history, delayed quotes and other numerical data. Both are often used together to understand why a stock is moving and how the market reacted.
Why do traders rely on structured news feeds?
Structured news makes it easier to track specific companies, themes or catalysts. Tickers, tags and channels allow filtering without reading each article individually. This structure also helps connect headlines with intraday price changes or alert systems that surface important updates quickly.
Closing Notes
The Newsfeed and WIM endpoint offers a straightforward way to bring structured market headlines into research workflows and trading tools. It provides consistent fields, reliable timestamps and clear tagging, which makes it easier to filter events, monitor themes and connect headlines with price action.
If you want to explore further or integrate additional data types, the full Benzinga API documentation includes endpoints for quotes, bars and other market datasets that work smoothly alongside the news feed.