What you get
Every article the pipeline reads is broken into statements: one-sentence facts such as "Nvidia expects to grow at a strong pace again in 2027", each with its sentiment (bullish, bearish or neutral), importance (low, medium, high, ultra), the symbols and sector it concerns, the source URL and domain, the article's post time and, when the article has one, its image.
Statements that report the same development are clustered into topics: "30-year Treasury yield breaks 5%" holds 139 statements from 43 outlets. Topics are grouped into standing themes such as Central banks & rates or Energy. Every 2 hours the API ranks the developments the most outlets picked up.
- Window: a rolling 62 days (captured 1 Oct 2026 11:34 UTC: 75,026 statements, 31,490 topics).
- Freshness: the data is rebuilt about every 2.5 minutes. Today a statement reaches the API a median 14 minutes after its article was published (90th percentile 27 minutes): minutes, not seconds.
- Access: through RapidAPI, with your RapidAPI key.
This site, fintopic.news, is a front page built entirely on the same API.
Quick start
1. Get a key. Pick a plan on RapidAPI: the free plan is enough to try every endpoint. Then
copy your X-RapidAPI-Key from the endpoint playground.
2. Make a request. The newest high-importance statements about Nvidia:
curl -G https://finance-pulse.p.rapidapi.com/v2/statements \
--data-urlencode "symbol=NVDA" \
--data-urlencode "importance_min=high" \
--data-urlencode "limit=3" \
-H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: finance-pulse.p.rapidapi.com"
import requests
API = "https://finance-pulse.p.rapidapi.com"
HEADERS = {"X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY", "X-RapidAPI-Host": "finance-pulse.p.rapidapi.com"}
r = requests.get(f"{API}/v2/statements", headers=HEADERS,
params={"symbol": "NVDA", "importance_min": "high", "limit": 3})
for s in r.json()["data"]:
print(s["published_at"][:16], s["sentiment"], s["statement"], f"({s['source_domain']})")
const API = "https://finance-pulse.p.rapidapi.com";
const HEADERS = { "X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY", "X-RapidAPI-Host": "finance-pulse.p.rapidapi.com" };
const r = await fetch(`${API}/v2/statements?symbol=NVDA&importance_min=high&limit=3`, { headers: HEADERS });
for (const s of (await r.json()).data) console.log(s.published_at.slice(0, 16), s.sentiment, s.statement);
3. Read the response. One statement, plus the snapshot block every v2 response carries:
{
"data": [
{
"id": "c3341069-59d6-562d-8a9e-935cdc514665",
"statement": "Amazon is reportedly seeking investors for an $8 billion financing structure for Nvidia chips",
"published_at": "2026-10-02T10:29:29Z",
"indexed_at": "2026-10-02T10:42:04.715725Z",
"sentiment": "bullish",
"importance": "high",
"source_type": "news",
"source_url": "https://finance.yahoo.com/technology/ai/articles/amazon-reportedly-seeks-investors-8-102929408.html",
"source_domain": "finance.yahoo.com",
"image_url": "https://s.yimg.com/ny/mysterio/api/01795bc4f58861436819644f026638cbfdd2437e6e71782cc8c2e46b97cf9a8a/ynews/resizefill_w1200/https://media.zenfs.com/en/investorshub_458/35437a5a165ffeadb112d825c6043626.png",
"symbols": ["AMZN", "NVDA"],
"entities": [
{
"code": "AMZN",
"kind": "equity",
"name": "Amazon.com Inc",
"exchange": "NASDAQ",
"country": "USA"
},
{
"code": "NVDA",
"kind": "equity",
"name": "NVIDIA Corporation",
"exchange": "NASDAQ",
"country": "USA"
}
],
"sectors": ["InformationTechnology"],
"topic_id": "f14f34e4-ebdc-407a-a189-a1d6ad9134a6",
"topic_name": "Amazon offloads $8 billion of Nvidia chips to investors",
"theme_id": "7059ad1e-8ecb-52cc-99fd-c8457a534fda"
},
… 2 more
],
"next_cursor": "WzE3OTA5MzM4MjAsImMyZmE0YWU3LWQwNDEtNWEwZi1iNzc1LWNkYjMxYmY2NTlmYyJd",
"snapshot": {
"built_at": "2026-10-02T10:45:28.835156+00:00",
"anchor": "2026-10-02T10:45:28.835156+00:00",
"window_start": "2026-08-01T10:45:28.835156+00:00",
"lag_days": 0.0
}
}
published_at is when the article was published; indexed_at is when the statement entered the API. topic_id
links the fact to its development, and next_cursor continues the list. GET /v2/meta lists every accepted
filter value.
Prefer Python, or an AI assistant? pip install finance-pulse gives you a Python client and an MCP server for
Claude and Cursor: see Use Finance Pulse from Claude, Cursor or Python.
The data model
| Level | What it is | Example | Endpoints |
|---|---|---|---|
| Statement | One extracted fact from one article | "Brent fell 3% to $81" (reuters.com, bearish, high) | /v2/statements, /v2/feed |
| Topic | One development: the statements of many outlets about the same event | "Oil prices slide to 2-week lows": 188 statements, 42 outlets | /v2/topics, /v2/trending |
| Theme | A standing subject that groups topics | Energy | /v2/themes |
Counts on topics and themes (statements, sources) cover the 62-day window; total_statements is everything the
topic ever held. sources always means distinct outlets (domains), not URLs.
Sentiment is a label on a statement. A symbol's, topic's or theme's sentiment is the count of its statements'
labels, and score is (bullish − bearish) / statements. A bearish sentence that names NVDA and AMD counts for both.
Conventions
- Paging. Lists return
next_cursor; pass it back as?cursor=until it isnull. Cursors stay valid when the data is rebuilt, so pages never skip or repeat rows./v2/feedalways returns a cursor (see the feed guide). - Caching. Every response has an
ETag. Send it back asIf-None-Matchand an unchanged answer comes back as an empty304. - Errors are
application/problem+json:{"title", "status", "detail", "param"}. Any malformed request is a400, including an unknown query parameter (a typo never silently widens your query); an id outside the window is a404. - Repeatable filters.
symbol,sector,sentimentandsource_typeaccept several values:?symbol=NVDA&symbol=AMDor?symbol=NVDA,AMD(OR).
What this data is, and what it is not
- Symbols are entities, and only equities and ETFs are tickers. Every symbol is a canonical code with a
kind: equities and ETFs under their ticker (US plain,NVDA; elsewhere with the exchange suffix,0700.HK,SAP.DE), and indices, rates, currencies, crypto, commodities, organisations and private companies under short codes (SPX,US10Y,USD,BTC,GOLD,FED,OPENAI). The entities are read by a language model and then resolved; codes the resolver can't place are left out, so symbol counts are conservative. Old codes still filter (MICfinds Micron'sMUstatements). See the screener guide. - Sectors are assigned per statement, from its text: the 11 GICS sectors (Energy, Financials, InformationTechnology, …). A sentence about Tesla's view of GDP can be tagged Financials.
- Coverage has a gap. From 20 August to 16 September 2026 news ingestion was down: series over that period show
almost no statements. Don't compute baselines across it.
GET /v2/metalists every known outage and delay underincidents. indexed_atis point-in-time only from 24 September 2026. Older statements were backfilled and carry the backfill date.- There is no backtest-ready history. Event studies on
published_atare possible but contaminated by look-ahead: a late article is filed under the hour it was published. For honest point-in-time tests, record/v2/feedfrom day one; that log is your dataset.
Versions and changes
- 2.0.0 (2 Oct 2026). The unprefixed v1 endpoints (
/statements,/topics,/themes,/trending,/symbols,/meta) are removed; everything they did is in/v2. The deprecatedindustry_groupparameter and field and/v2/industry-groupsare removed too: usesector,sectorsand/v2/sectors./healthis unchanged. - 1.4.0 (2 Oct 2026).
/v2/themestakessymbol=,sector=andsort=(size, topics, recent, velocity). Topics carrystatements_7dandrevision, which changes whenever the topic or its last-7-day statements change: compare it to skip refetching unchanged topics./v2/symbolsreturns up to 20,000 rows. - 1.3.0 (1 Oct 2026). Canonical symbols, in v1 and v2: one code per entity (Micron is always
MU, neverMIC; SpaceX isSPACEX, notSPCE), and codes that resolve to nothing are no longer listed. v2 statements, topics and themes carryentities(code, kind, name, exchange, country);/v2/symbolsrows carrykindandnameand takekind=(e.g.kind=equity,etf). Old codes keep working as filters. Faster first/v2/feedcall. - 1.2.2 (1 Oct 2026).
sectorreplacesindustry_group(the values always were the 11 GICS sectors): responses carrysectors, filters takesector=, and/v2/sectorsreplaces/v2/industry-groups; the old names keep working for one version./v2/metalists dataincidents(outages and delays). - 1.2.1 (1 Oct 2026). Trending counts distinct outlets instead of URLs (a syndicated article under many URLs is one source). Readable endpoint names and descriptions.
- 1.2.0 (1 Oct 2026). The
/v2API: statement search, feed, time series, symbol and sector screeners, topics and themes with outlets and velocity, trending with newest statements, cursor paging, problem+json errors. The documented v1 calls that had stopped working (/statements?symbol=,?industry_group=,?source_type=,?id=and/symbols) work again; v1 is otherwise unchanged and stays available.
Data incidents (also in GET /v2/meta → incidents): 20 Aug – 16 Sep 2026, news ingestion outage; 26–27 Sep,
statement extraction up to a day late; 29 Sep 07:20–10:40 UTC and 30 Sep 14:00–15:00 UTC, short processing delays
(nothing missing).
Guides
/v2/statements
Grounding an LLM in today's market news
Short, dated, sourced facts make better model context than whole articles. Build a prompt block about any ticker in a few lines of Python.
6 min read →/v2/feed
Never miss a statement: an alert stream with /v2/feed
A cursor feed in the order statements enter the API gives you every new fact exactly once, including late articles. Run it as an alert loop, and keep the log as your own point-in-time history.
6 min read →/v2/series
A news-attention and sentiment series for any ticker
How much is the news talking about a company, and in what tone? Hourly or daily, zero-filled, in one request, plus the normalisation that makes it comparable.
7 min read →/v2/symbols
Screening for unusual news attention
Which names is the news suddenly talking about? One request ranks every symbol by its change in mentions, outlets and tone, and one more does the same for sectors. Then filter it the way a quant should.
6 min read →/v2/topics
Detecting developing stories
A story is moving when more outlets pick it up, faster. Rank developments by velocity, check their breadth, and follow one from first report to peak.
7 min read →/v2/statements
Use Finance Pulse from Claude, Cursor or Python
One package gives you both a Python client for scripts and notebooks, and an MCP server so Claude, Cursor and other MCP clients can query the news directly.
5 min read →