acqui-radar
Live radar for AI startup acquisitions, acqui-hires, reverse acqui-hires, mergers, and stealth-lab equity moves.
acqui-radar polls a handful of free public news feeds every few minutes, runs each item through a deterministic rules-based classifier, and surfaces the deals that match as a live feed plus a 30-day leaderboard of the most active acquirers.
Why
In 2026, Big Tech is swallowing AI startups at unprecedented pace. OpenAI alone announced 7 acquisitions in the first five months of 2026. Big Tech spent $20B+ on reverse acqui-hires between March 2024 and January 2026 — hiring founder teams without technically acquiring the companies, a structure designed to bypass antitrust review. There is no clean, real-time tracker of this M&A activity from a founder/VC/journalist perspective. Crunchbase is paywalled and slow. TechCrunch fires articles into a stream you have to monitor manually. acqui-radar gives you the dedicated scoreboard view.
Data sources
All free, all public, no API keys required:
| Source | URL | Refresh |
| ---------------------- | ---------------------------------------------------------------- | ------- |
| TechCrunch AI | https://techcrunch.com/category/artificial-intelligence/feed/ | 30 min |
| VentureBeat AI | https://venturebeat.com/category/ai/feed | 30 min |
| Ars Technica AI | https://arstechnica.com/ai/feed/ | 30 min |
| Hacker News (Algolia) | https://hn.algolia.com/api/v1/search_by_date | 20 min |
| Hacker News top stories| https://hacker-news.firebaseio.com/v0/topstories.json | 15 min |
The Algolia fetcher rotates through 8 search queries (acquires AI, acqui-hire AI, acquihired AI, reverse acqui-hire, AI startup acquired, AI lab raises, AI investment billion, AI emerges from stealth).
No mock data. The database starts empty. The first cron tick (or POST /api/refresh) populates it from live sources only.
Stack
- Node.js 20+
- Express, helmet, compression
- better-sqlite3 in WAL mode
- node-cron
- Vanilla JS SPA (no framework, no CDN)
Quick start
npm install
cp .env.example .env
node server.js
# open http://localhost:4831/acqui-radar/
API
All endpoints are mounted under BASE_PATH (defaults to /acqui-radar).
| Method | Path | Notes |
| ------ | ----------------------------- | ----------------------------------------------------- |
| GET | /health | {ok, version, uptime, deal_count, now} |
| GET | /api/deals | List deals. Filters: since, acquirer, type, category, min_value, limit (max 500). |
| GET | /api/deals/:id | Single deal. |
| GET | /api/stats | Aggregate stats over last 30 days. |
| GET | /api/timeline | Daily deal count + value over last 90 days. |
| GET | /api/sources | Source health. |
| POST | /api/refresh | Trigger all fetchers (or ?source=X for one). |
| GET | /api/recent-misses | Last 20 rejected items (audit precision). |
All endpoints are public — no auth, no API key, GET and POST.
Classifier rules
For each fetched item the classifier checks:
- Title or summary contains a deal keyword (
acquires,acquired,acqui-hire,buys,to acquire,merges with,raises $,invests in,emerges from stealth, etc.). - Text contains at least one AI-relevant keyword (
AI,LLM,agent, plus a long allowlist of lab and product names). - Deal type picked by the strongest matching keyword.
- Entities extracted by splitting around the deal verb — best-effort, regex-based.
- Dollar value parsed from currency-prefixed numbers ("$1.16 billion", "$300M").
- Headcount parsed when phrased as "N-person team" / "N engineers".
- Category picked from a small keyword table (
voice,coding,agent,image,video,data,chip,infra,robotics, etc.). - Score combines deal-type weight, value tier, recency, and acquirer notability.
The classifier is deterministic — given the same item, it produces the same output every time. Rejected items are recorded in the misses table so precision can be audited at /api/recent-misses.
File layout
acqui-radar/
├── server.js # Express bootstrap + cron
├── db.js # SQLite schema + prepared statements
├── classifier.js # Rules-based M&A classifier
├── package.json
├── .env.example
├── CLAUDE.md
├── README.md
├── DEPLOY_MANIFEST.json # RNDLAB orchestrator manifest
├── fetchers/
│ ├── index.js
│ ├── rss.js
│ ├── techcrunch.js
│ ├── venturebeat.js
│ ├── arstechnica.js
│ ├── hn-algolia.js
│ └── hn-topstories.js
├── routes/
│ ├── api.js
│ └── spa.js
└── public/
├── index.html
├── app.js
└── style.css
Environment variables
| Var | Default | Notes |
| ------------ | -------------------------------------------------- | ------------------------------ |
| PORT | 4831 | HTTP listen port |
| NODE_ENV | production | |
| BASE_PATH | /acqui-radar | Mount path for everything |
| USER_AGENT | acqui-radar/1.0 (+https://holyai.me/acqui-radar) | Outbound HTTP UA |
| DB_PATH | ./data.db | SQLite file location |
No secret API keys.
License
MIT.