Financial news for AI agents and trading bots
4.8(6)6FinanceNewsDevelopment
Pre-analyzed financial news via REST API and MCP. Per-ticker impact, category, and a 1–10 relevance score on every story, plus SEC Form 4 insider data. Free tier, no card.
AlphaAI turns the financial news firehose (GDELT + SEC EDGAR + publisher RSS) into machine-readable signal. Every article gets per-ticker impact analysis, a category, and a 1–10 relevance score at ingest; SEC Form 4 insider filings become scored events ~6 min after they hit EDGAR.
Consume it as a REST API or an MCP server, so Claude Desktop, Cursor, or any agent uses it with zero glue code. Free is a real eval tier: 20 req/min and 100 req/day on both surfaces, no card. Paid from $2.99/mo.
4.8
6 ratings
Owner of alphai.io
AI video with native sound, paid per clip. Nothing stored.
A calmer Mac menu bar, one click away.
Enterprise Software. Intelligent Automation. Global Impact.
Comments
6Owner of alphai.io
I built AlphaAI because every trading bot and agent project I worked on started the same way: crawl news, dedupe it, figure out which tickers it touches, guess how much it matters. That pipeline is expensive to build and boring to maintain, so I turned it into a service. AlphaAI ingests GDELT, SEC EDGAR and publisher RSS, and every story comes out with per-ticker impact analysis, a category and a 1-10 relevance score. You consume it as plain JSON over REST or as an MCP server that Claude Desktop or Cursor can use directly. The free tier (20 requests per minute, 100 per day, no card) is enough to build and test against. Happy to answer questions about the scoring or the SEC filings pipeline.
i write a16z speedrun scout checks within 24hours | Co-Founder & CTO at Dial AI
The MCP server integration is a game-changer for AI agents. Having pre-scored financial news with per-ticker impact directly in Claude Desktop or Cursor eliminates the friction of building custom news ingestion pipelines. The relevance scoring removes noise - agents only see signals that matter rather than parsing the entire financial news firehose. SEC Form 4 insider data coming through structured within 6 minutes is killer for compliance monitoring. Free tier with no card is the right move for indie developers testing trading strategies.
im a developer, I love new ideas
I will use this tool for my website, thank you !
The 6-minute turnaround on scored SEC Form 4 events is the standout feature here — most retail-facing tools that surface insider trades just re-post the raw EDGAR filing with no context, so having impact/category/relevance already attached at ingest is genuinely useful for cluster-buy detection. The MCP + REST dual surface is also a smart hedge, since it works whether you're building a bot or just querying it ad hoc from Claude Desktop. How far back does the historical Form 4 data go for backtesting relevance scores against actual price moves?
AI engener
You list dedupe as one of the four things that pushed you to build this, but I can't find anywhere how you actually do it. Asking because I run a news pipeline myself and dedup is the part that never generalizes cleanly. GDELT plus publisher RSS means one Reuters story comes back at you dozens of times, reworded every time. Headline hashing dies on day one. What I landed on is two passes: shingles + Jaccard first, because it's nearly free and kills reposts and syndication, then embeddings + cosine for the paraphrases. The lexical pass scores a flat zero on "Central bank holds rate at 16%" vs "Regulator keeps key rate unchanged at 16 percent", so the second pass isn't optional. Two things I'd genuinely like to know: 1. Do you dedupe against a rolling window or against all history? Yesterday's Fed decision and next quarter's Fed decision are different stories. If you compare against everything forever, legitimately recurring events get silently suppressed, and for a financial feed that seems like the expensive kind of bug. 2. Are thresholds per-source or global? A wire feed tolerates a much lower semantic threshold than an opinion blog. Mine had to be tuned per feed and I never found a universal number. Separate one on the relevance score: is it a classifier or an LLM call? If it's a model, a version bump quietly reshuffles what "7" means, and somebody's bot is filtering on >= 7 without knowing the scale moved. Do you pin the model, or re-score history when it changes?
Owner of alphai.io
Sorry for delayed response. Dedup is two layers, both windowed. Layer 1 at collect time, no embeddings: normalized title key, then a sorted significant-token signature (catches clause reorder and "By Reuters" tails), then 64-bit SimHash over 3-word shingles of the body lead, hamming <= 3, banded so lookup is 4 indexed queries. This kills syndication, ~31% of rows die before enrichment. Layer 2 is embeddings, cosine 0.90. It runs after enrichment, not before, and that is what made it cheap: enrichment gives us tickers, so candidates are only "same ticker, +/- 48h". Median 4 candidates. No pgvector, no ANN, plain dot product in Python. 1. Rolling window, 48h. And we hit exactly your bug. When we added Fed RSS, the first fetch returned FOMC statements from March, April and July in one batch. Same title key, our in-batch seen-set was time-blind, so every old statement was marked duplicate of the newest one. Fix was to check publication time inside the batch too, not only the key. 2. Global, not per source. Instead of per-feed numbers we made the layers narrower. Body layer is cross-domain only, because two different investing.com articles share boilerplate and hash the same. And cosine has guards: direction guard always on ("AMD up 5%" vs "AMD down 5%" have high cosine), number guard with exemption above 0.92, because currency and rounding were killing true pairs ("S$2.7 Bln" vs "$2.09bn"). Score is an LLM call, not a classifier. Model is pinned to a dated snapshot, temp 0. Prompt changes go through a 112-article hand-labeled golden set, we measure % inside expected band before promoting. But your worry is right and I will not pretend. We do not re-score history. In June we rewrote the rubric (within-band 49% -> 87%), so for new rows the meaning of 7 moved, old rows kept old scores. There is no score version in the API today. Probably there should be.