Using the Recent Funding API
A hands-on guide to the Recent Funding API. Filter recently funded startups, page through results, pull recent rounds with their sources, and handle errors, with curl and JavaScript examples.

On this page
The Recent Funding API is a read-only JSON API of recently funded startups, their funding rounds (each amount with its source URL), investors, founders and acquisitions. Every request needs a free API key sent as Authorization: Bearer <key>; it takes just an email and allows 50 requests a day.
The full reference is the API documentation, generated from the OpenAPI spec; agents can read it as Markdown at /docs.md or start from /llms.txt.
Endpoints
| Endpoint | Returns |
|---|---|
GET /api/v1/companies | Companies, filtered and sorted |
GET /api/v1/companies/{slug} | One company and all its funding rounds |
GET /api/v1/rounds | Recent rounds with an amount, newest first |
GET /api/v1/acquisitions | Who bought whom, when, and the price when a source states it |
GET /api/v1/stats | Counts by stage, industry and source |
Investors, founders, categories, accelerators and the market map have endpoints too (docs). Everything lives under https://recentfunding.com, CORS is open, and successful responses can be cached for 60 seconds.
First request
Keep the key in an environment variable:
export RF_KEY=rf_live_…
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies?accelerator=yc&sort=raise&limit=1"
The response on October 9, 2026 (some fields left out):
{
"companies": [
{
"slug": "river-ai",
"name": "River AI",
"stage": "series-a",
"industry": "ai",
"amount_usd": "1100000000.00",
"announced_at": "2026-08-11T00:00:00.000Z",
"raise_source_url": "https://techcrunch.com/2026/08/11/general-catalyst-leads-1-1b-round-into-2-month-old-river-ai/",
"raise_provider": "agent-review",
"investors": ["General Catalyst", "Temasek", "Y Combinator", "…"]
}
],
"count": 1,
"next_offset": 1
}
That is River AI's $1.1B Series A. amount_usd is a decimal string, so large values keep their precision; raise_source_url is where the amount came from; a non-null next_offset means more results. Every response reports what is left of the day's quota in X-RateLimit-Remaining.
Filtering and sorting
| Parameter | Example | Meaning |
|---|---|---|
stage | seed | Company stage |
industry | ai-agents | Industry slug (listed by /api/v1/stats) |
crypto | true | Only crypto companies, or false to exclude them |
accelerator | speedrun | Backed by an accelerator; any matches all |
q | prediction market | Search over name, description, sector and investors |
min_raise | 5000000 | Latest round of at least this many USD |
sort | raise | newest (default), oldest, raise, announced or name |
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies?industry=ai-agents&min_raise=5000000&sort=raise"
Paging
Pages hold up to 2000 companies (limit, default 100). Request again with offset set to the previous next_offset until it is null:
const BASE = "https://recentfunding.com";
const headers = { Authorization: `Bearer ${process.env.RF_KEY}` };
async function allCompanies(filters = {}) {
const out = [];
for (let offset = 0; offset !== null; ) {
const params = new URLSearchParams({ ...filters, sort: "oldest", limit: "500", offset: String(offset) });
const res = await fetch(`${BASE}/api/v1/companies?${params}`, { headers });
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
out.push(...body.companies);
offset = body.next_offset;
}
return out;
}
sort=oldest puts newly found companies at the end, so they don't shift results across page boundaries during an export.
One company, every round
Company objects carry only the latest round. The slug endpoint returns {"company": {...}, "rounds": [...]}, each round with stage, amount_usd (null when unknown), announced_at and its own source_url:
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies/river-ai"
Rounds and acquisitions
/api/v1/rounds lists rounds with an amount, newest first, and also takes stage, crypto, limit (up to 500) and offset. /api/v1/acquisitions lists deals newest first; scope=startups keeps startup acquisitions, and a price_usd always comes with the price_source_url that states it. Acquisitions never appear as rounds. The same list is the acquisitions page.
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/rounds?since=2026-10-01&min_amount=10000000"
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/acquisitions?scope=startups&since=2026-10-01&limit=20"
Errors
Every error has the same shape and a matching HTTP status:
{"error": {"status": 400, "code": "invalid_parameter", "message": "\"limit\" must be an integer from 1 to 2000.", "param": "limit"}}
| Code | Status | Meaning |
|---|---|---|
invalid_parameter | 400 | A value is out of range, malformed or repeated |
unknown_parameter | 400 | A parameter the API doesn't know, such as the typo stag |
api_key_required | 401 | No key sent; the body says how to get one |
invalid_api_key | 401 | Unknown or revoked key |
not_found | 404 | Unknown slug or path |
method_not_allowed | 405 | Anything other than GET, HEAD or OPTIONS |
rate_limited | 429 | The day's 50 requests are used; Retry-After says when it resets (midnight UTC) |
unavailable | 503 | Database temporarily unavailable; retry with backoff |
Using the data
When you show an amount, link it to raise_source_url (or source_url on rounds), as Recent Funding does; how we source and verify funding data explains each provider. Cache responses for their Cache-Control lifetime, fetch the whole dataset at most a few times a day, and back off on 429 and 503 (rate limits).
Related on Recent Funding
- Get a free API key
- Money flow: raises, acquisitions and new funds
- AI investors: the VC firms and accelerators backing the most AI startups
- Game startups: the gaming startups that raised most recently
- Green startups: the climate and clean energy startups that raised most recently
- Recent Funding API docs: every endpoint behind this post; a free API key takes just an email