← index

Six free data sources, one LLM, and 3,872 AI companies

I wanted a radar of recently funded AI companies that were actually hiring, so I built one. The result tracks 3,872 AI companies funded between 2023 and 2026: 551 of them have live AI roles open on their job boards right now, and 362 have a registered legal entity in India. It started from roughly 19,700 funding events pulled from six free sources. Total pipeline cost: zero paid APIs, zero data subscriptions. The only money spent was on the LLM calls that decided which companies count as AI.

Why build this

If you’re job-hunting in AI, the companies you most want to find are the ones that raised money recently and are hiring now. That intersection is weirdly hard to see. Funding databases like Crunchbase and PitchBook are paywalled. Job boards don’t tell you who just closed a Series B. And curated “AI 50” lists cover the famous companies you already know about.

The curated lists got me to 1,147 companies. The question was whether free public data could get me meaningfully further. It got me to 3,872, and the India signal went from 22 companies to 362.

Discovery: funding data is lying around if you know where to look

No single free source lists funded startups, but six partial ones overlap into something useful.

The best one required a detour. FinSMEs publishes short posts on nearly every funding round, but the site sits behind Cloudflare and blocks scrapers cold. The Wayback Machine, however, is not blocked, and its CDX API will happily list every FinSMEs URL it has ever archived. Better still, FinSMEs headlines are the data: the URL slug is literally company-raises-usd-25m-series-a. One CDX query per year plus a regex over the slugs yields about 15,000 funding events without rendering a single page.

The second workhorse is the SEC. Every US private raise files a Form D, and the SEC publishes quarterly bulk zips of the structured data. Join the offerings table to the issuers table, keep the tech industry groups, and you get about 11,000 filings with real dollar amounts and dates. This is regulatory-grade data, free, and almost nobody uses it.

The rest fill gaps: TechCrunch’s venture category through its open wp-json API (about 3,500 posts with rich excerpts), StartupTalky’s yearly Indian funding tables (about 1,800 deals the US sources miss), topstartups.io’s server-rendered cards (about 450 companies with rounds and investors), and the CB Insights unicorn list via a community-maintained GitHub CSV (about 80 unicorns minted since 2023).

Each source caches its raw output, and merging by normalized company name produced ~19,700 unique companies. One problem: most of them aren’t AI companies. Form D covers all of US tech. FinSMEs covers all sectors, worldwide.

Classification: the model choice was load-bearing

Separating AI from noise sounds like a keyword problem until you look at the data. For most companies the context is a name, maybe a round, maybe an amount. A famous lab with “AI” in its description is easy. A row like “Hakimo | $10M” matches no keyword at all.

So the filter is an LLM that already knows these companies. Batches of about 70 names with their thin context go to claude -p --model sonnet, which returns a JSON map tagging each as frontier, ai-native, ai-adopter, not-ai, or unknown. Not-ai and unknown get dropped.

The interesting lesson: which model you pick isn’t a cost knob here, it’s a correctness knob. Haiku failed my acceptance test. It tagged Hakimo, the company I work at and my canary for “does this pipeline know obscure startups”, as unknown, which would have silently dropped it from the dataset. Opus classified fine but is overkill for a labeling task. Sonnet was the sweet spot: cheap enough to run over 19,700 companies, knowledgeable enough to recognize a $10M security startup. When your classifier’s whole value is the model’s recall of named entities, benchmark that recall on companies you personally know before trusting the output.

Operationally it’s boring in the good way. Five workers, three retries per batch on parse failures (past five workers you hit rate limits and the failures spike), and an incremental cache flushed after every batch. Interrupt it whenever; a re-run only classifies names it hasn’t seen. The first full pass took about an hour and a half. Roughly 4,400 companies came back AI, 9,300 not-ai, and 5,400 unknown.

That classification pass was the only LLM spend in the entire pipeline.

Enrichment: from “funded” to “hiring, near you”

A funded company is a lead. A funded company with open AI roles is an opportunity. Greenhouse, Lever, and Ashby all expose public JSON APIs for their job boards, no auth required, so the pipeline probes each company in three steps: an exact lookup in community-scraped slug dumps of ~15,000 known boards, then guessed slugs from the domain and name, then sniffing the company’s careers page for an embedded ATS link. A title regex over the live postings counts AI roles. That surfaced 551 companies hiring for AI right now.

The India signal comes from an unexpectedly good source: India’s Ministry of Corporate Affairs publishes its company register on data.gov.in, including a category for “subsidiary of company incorporated outside India”. All 24,102 such records, stem-matched against company names, flag foreign startups with an Indian arm. Hakimo matches HAKIMO AI INDIA PRIVATE LIMITED, incorporated in Karnataka. No job board would have told you that.

What broke

Two war stories from the MCA pull, both dumber than any architecture problem.

First: data.gov.in silently hangs on the default Python urllib User-Agent. Not a 403, not an error, just a connection that never returns. The same URL worked instantly in curl, which sends its own UA. I lost hours comparing request paths before trying the one header. The fix is a single line: User-Agent: Mozilla/5.0.

Second: data.gov.in ships a shared sample API key in its docs, and it works, which is the trap. It caps at about 10 rows per request, meaning ~2,400 throttled requests for the full register. A free personal key takes two minutes to create and allows 1,000 rows per request: all 24,102 records in about 24 requests, roughly 30 seconds. The script also flushes its cache to disk after every request, because I stopped trusting this API to stay up mid-pull.

Honest limits, and what’s next

The hiring signal only sees companies on the big three ATS platforms. A company hiring exclusively on Naukri, LinkedIn, or a custom careers page shows zero roles, and absence of a probe hit is not absence of hiring. The canonical example is Hakimo itself: it’s in the dataset with its funding and India flags, and shows 0 open roles while actively hiring. That irony is the roadmap. The next phase layers in job-aggregator APIs (Adzuna India has a free tier at 250 calls a day) to catch the Naukri-only hirers.

Other caveats: amounts parsed from news slugs are best-effort regex work, so treat them as approximate. And 5,400 companies came back “unknown” from classification and were dropped; some are real AI companies that a second pass with richer per-company context would recover.

Try it

The radar is live at qriousguy.com/unicorn-radar-site, default-sorted by what a job-seeker cares about: live AI roles first, then funding freshness. The code will be open-sourced soon.

← back to index