← back to gallery

acqui-radar

Live AI M&A intelligence — who's buying whom in the AI gold rush

researchaim&aacquisitionsacqui-hireventurelive-datarsshn
Open product ↗

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

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:

  1. Title or summary contains a deal keyword (acquires, acquired, acqui-hire, buys, to acquire, merges with, raises $, invests in, emerges from stealth, etc.).
  2. Text contains at least one AI-relevant keyword (AI, LLM, agent, plus a long allowlist of lab and product names).
  3. Deal type picked by the strongest matching keyword.
  4. Entities extracted by splitting around the deal verb — best-effort, regex-based.
  5. Dollar value parsed from currency-prefixed numbers ("$1.16 billion", "$300M").
  6. Headcount parsed when phrased as "N-person team" / "N engineers".
  7. Category picked from a small keyword table (voice, coding, agent, image, video, data, chip, infra, robotics, etc.).
  8. 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.