Real-time aggregation, AI sentiment analysis, and tradeable signal detection — all in one terminal. Stop missing market-moving headlines.
Every feature designed to give you an edge in fast-moving markets
Every headline scored from -1.0 (bearish) to +1.0 (bullish) in real time. Filter your feed by market sentiment to focus on what matters.
Headlines marked with
indicate actionable trading opportunities — earnings surprises, M&A, FDA decisions, policy shifts, and more.
ML-powered sentence embeddings detect when multiple sources report the same story. Cut through the noise — see each story once.
Auto-refreshing from 15+ premium sources including CNBC, Reuters, Bloomberg, Yahoo Finance, and more.
Full programmatic access for trading bots, research pipelines, and custom dashboards. Python, JavaScript, Go, R, and Rust examples included.
Up to 1 year of indexed financial headlines with Pro. Backtest your sentiment strategies against historical data.
Real headlines from real sources, scored and analyzed in real time
Integrate financial news intelligence into your stack in minutes
# Get latest bullish headlines
curl -s "https://www.instnews.net/api/news?sentiment=bullish&limit=10" | jq .
# Search for a keyword
curl -s "https://www.instnews.net/api/news?q=nvidia&limit=5" | jq .
# Get market statistics
curl -s "https://www.instnews.net/api/stats" | jq .
import requests
BASE_URL = "https://www.instnews.net"
# Get latest bullish news
response = requests.get(f"{BASE_URL}/api/news", params={
"sentiment": "bullish",
"limit": 10,
})
for item in response.json()["items"]:
score = item.get("sentiment_score", "N/A")
print(f"[{score:+.2f}] {item['title']}")
const BASE_URL = "https://www.instnews.net";
async function getNews(params = {}) {
const query = new URLSearchParams(params);
const res = await fetch(
`${BASE_URL}/api/news?${query}`
);
return res.json();
}
const data = await getNews({
sentiment: "bullish",
limit: 10,
});
data.items.forEach(item =>
console.log(`[${item.source}] ${item.title}`)
);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type NewsResponse struct {
Count int `json:"count"`
Items []NewsItem `json:"items"`
}
type NewsItem struct {
Title string `json:"title"`
Source string `json:"source"`
Score float64 `json:"sentiment_score"`
}
func main() {
resp, _ := http.Get(
"https://www.instnews.net/api/news?limit=5")
defer resp.Body.Close()
var result NewsResponse
json.NewDecoder(resp.Body).Decode(&result)
for _, item := range result.Items {
fmt.Printf("[%s] %s\n", item.Source, item.Title)
}
}
library(httr)
library(jsonlite)
base_url <- "https://www.instnews.net"
# Get bullish news
response <- GET(
paste0(base_url, "/api/news"),
query = list(sentiment = "bullish", limit = 20)
)
data <- fromJSON(content(response, "text"))
df <- data$items
print(df[, c("source", "title", "sentiment_score")])
use reqwest;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct NewsResponse {
count: u32,
items: Vec<NewsItem>,
}
#[derive(Debug, Deserialize)]
struct NewsItem {
title: String,
source: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let url = "https://www.instnews.net/api/news?limit=5";
let resp: NewsResponse =
reqwest::get(url).await?.json().await?;
for item in &resp.items {
println!("[{}] {}", item.source, item.title);
}
Ok(())
}
Start free. Upgrade when you need more power. Cancel any time.
Aggregating the world's top financial news providers
Join traders who never miss a market-moving headline.