# Recent Funding API

> A read-only JSON API of recently funded startups: funding rounds with a source link for every amount, investors, founders, accelerators, acquisitions and new VC funds.

- URL: https://recentfunding.com/docs/
- Base URL: https://recentfunding.com
- OpenAPI spec: https://recentfunding.com/openapi.json
- Version: v1
- Updated: 2026-10-30

The Recent Funding API gives you the data behind [recentfunding.com](https://recentfunding.com/) as JSON: startups and their funding rounds, investors, founders, accelerators, acquisitions and new VC funds. Every amount links to the page it came from.

It's a plain REST API. Every endpoint is a `GET` that returns JSON, and every request needs an API key. A key is free and takes only an email. For the new rounds every day, use [Pro](#plans-and-limits).

## Quickstart

**1. Get a key.** Sign in on your dashboard with your email. Your key is created there and shown once.

[Get your free API key →](https://recentfunding.com/dashboard/?from=docs)Sign in with your email (we send a one-time code). Your key is created on your dashboard and shown once.

**2. Make a request.**

```sh
export RF_KEY=rf_live_…
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies?limit=5"
```

**3. Read the response.** Lists come back as an array plus a `next_offset` for the next page:

```json
{"companies": [{"slug": "…", "name": "…", "stage": "seed", "amount_usd": "…", "announced_at": "…", "raise_source_url": "https://…"}], "count": 5, "next_offset": 5}
```

A few more requests to try:

```sh
# Seed-stage AI agent companies, largest round first
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies?stage=seed&industry=ai-agents&sort=raise"

# One company and all its rounds
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies/shepherd"

# Crypto rounds since September 1, 2026
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/rounds?crypto=true&since=2026-09-01"
```

Track your requests, errors and keys on your [dashboard](https://recentfunding.com/dashboard/).

## Authentication

Send your key in the `Authorization` header:

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies?limit=5"
```

`X-API-Key: rf_live_…` works too. For tools that can't set headers, add `?api_key=rf_live_…` to the URL. Prefer a header, since URLs end up in logs.

- A key is shown once. We store only a hash, so a lost key can't be recovered: create a new one.
- Manage keys (create, name, revoke) on your [dashboard](https://recentfunding.com/dashboard/).
- A missing key returns `401 api_key_required`. An unknown or revoked key returns `401 invalid_api_key`.
- Keep keys out of front-end code anyone can read.

## Plans and limits

|   | Free | Pay as you go | Pro | Max |
| --- | --- | --- | --- | --- |
| Price | No card | Ten cents a call, prepaid | 49 dollars a month | 150 dollars a month |
| Calls | 50 a day | Your balance, up to 500 a day | 1,000 a month | 5,000 a month |
| Data | 14+ days old | Live | Live | Live |
| Stealth startups | No | Yes | Yes | Yes |
| MCP and live feed | No | No | Yes | Yes |

**Which plan?** If you're building anything that needs the new funding rounds every day across the industry (a deal-flow feed, a CRM sync, an alerting bot, an AI agent), choose **Pro**. It gets every new round and stealth startup as it lands, with MCP and the live feed. For occasional live lookups, pay as you go costs less under about 490 calls a month; above that, Pro costs less. Free is for trying the API on older data.

Pay as you go is a prepaid balance: top up 10, 25 or 50 dollars on your [dashboard](https://recentfunding.com/dashboard/) for 100, 250 or 500 calls. Your first top-up adds 100 free calls. Credits never expire. When the balance runs out, your keys are on Free again. Pro and Max quotas are per month across all your keys, reset on the 1st (UTC), and MCP tool calls count like API calls.

Pro and Max start with a 7-day free trial. [Start your Pro trial](https://recentfunding.com/dashboard/?plan=pro&from=docs) or compare [pricing](https://recentfunding.com/pricing/).

Free keys allowed 100 requests a day until 2026-10-30; they now allow 50.

On Free, answers leave out companies and rounds newer than 14 days and stealth companies. Each answer then includes an `access` object saying how many were left out and how to get live data. Asking for one such company returns `403 plan_required`. On pay as you go, every answer carries an `X-RecentFunding-Balance` header with the calls left.

Every response tells you where you stand:

| Header | Meaning |
| --- | --- |
| `X-RateLimit-Limit` | Requests your key may make in the current window: today, or this month on Pro and Max |
| `X-RateLimit-Remaining` | Requests left today |
| `X-RateLimit-Reset` | When the count resets (Unix seconds: midnight UTC, or the 1st of next month on Pro and Max) |

Past a daily limit, requests return `429 rate_limited`. Past a monthly quota, they return `429 monthly_quota_exceeded` with `resets_at` and a `Retry-After` header. Checking your own usage (`GET /api/v1/usage`) is free and never counts.

## Pagination

List endpoints take `limit` and `offset` and return `next_offset`. Pass it back as `offset` until it is `null`.

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies?limit=500&offset=0"
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies?limit=500&offset=500"
```

The maximum `limit` is shown in each endpoint's parameter table. New companies appear at the top of the default sort, so for a stable export use `sort=oldest`.

## Errors

Errors use standard HTTP status codes and one JSON shape:

```json
{"error": {"status": 400, "code": "invalid_parameter", "message": "\"sort\" must be one of: newest, oldest, raise, announced, name.", "param": "sort"}}
```

| Status | Code | Meaning |
| --- | --- | --- |
| 400 | `invalid_parameter` | A value is out of range or badly formatted |
| 400 | `unknown_parameter` | The endpoint doesn't take that parameter (check for typos) |
| 401 | `api_key_required` | No API key was sent |
| 401 | `invalid_api_key` | The key is unknown or revoked |
| 403 | `plan_required` | The record needs a live plan (Pro or Max) |
| 404 | `not_found` | Unknown slug, key or endpoint |
| 405 | `method_not_allowed` | Only `GET`, `HEAD` and `OPTIONS` are allowed |
| 429 | `rate_limited` | The key used its requests for today |
| 503 | `unavailable` | Temporarily unavailable; retry with backoff |

## Companies

### GET /api/v1/companies

Lists startups, newest first by default. Amount filters and `sort=raise` use the company's latest round.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `limit` | integer 1–2000 | `100` | Page size. |
| `offset` | integer 0–1000000 | `0` | Rows to skip. Use the previous response's `next_offset`. |
| `stage` | string |   | Company stage, e.g. `pre-seed`, `seed`, `series-a`, `series-b+`, `stealth`, `unknown`. |
| `industry` | string |   | Industry slug, e.g. `ai`, `ai-agents`, `infra-devtools`, `defi`. See `/api/v1/stats` for the current list. |
| `city` | string |   | Headquarters city, matched exactly in any case; a comma-separated list covers a metro, e.g. `New York,New York City,Brooklyn`. Each company has `hq_city` and `hq_country`. |
| `crypto` | `true` `false` |   | `true` for crypto companies only, `false` to exclude them. |
| `accelerator` | `yc` `speedrun` `yzi` `pioneer` `alliance` `finc` `orange` `outlier` `pnp` `csx` and 54 more |   | Backed by an accelerator, detected from investor names and from the name or description (for example "(YC S26)"). `any` matches every listed accelerator plus investors whose names contain "accelerator" or "incubator". |
| `q` | string |   | Case-insensitive search over name, industry, subcategory, sector, description, city, country, and investor names. Every word must appear (in any order), so a longer query narrows the results. Up to 200 characters; longer is a 400. |
| `min_raise` | string |   | Minimum amount of the latest round, in USD (plain digits, e.g. `5000000`). Companies with no known amount are excluded. |
| `sort` | `newest` `oldest` `raise` `announced` `name` `team_size` `days_early` | `newest` | `newest` (first seen, default), `oldest`, `raise` (largest latest round first, unknown last), `announced` (latest round date, unknown last), `name` (A to Z), `team_size` (largest team first, unknown last), `days_early` (each largest first, unknown last). |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies?stage=seed&sort=announced&limit=20"
```

Returns `{"companies": [Company], "count", "next_offset"}`. See [Company](#company).

### GET /api/v1/companies/{slug}

One company with every funding round on record, newest first, and the people behind it.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `slug` (path) | string |   | The company's `slug` from a list response. |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/companies/shepherd"
```

Returns `{"company": Company, "rounds": [CompanyRound], "founders": [...]}`. An unknown slug returns `404`.

## Rounds

### GET /api/v1/rounds

Funding rounds with a known amount, most recently announced first.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `limit` | integer 1–500 | `100` | Page size. |
| `offset` | integer 0–1000000 | `0` | Rows to skip. Use the previous response's `next_offset`. |
| `since` | string |   | Only rounds announced on or after this date. |
| `stage` | string |   | Round stage, e.g. `pre-seed`, `seed`, `series-a`, `series-b+`, `unknown`. |
| `min_amount` | string |   | Minimum round amount in USD (plain digits). |
| `crypto` | `true` `false` |   | `true` for crypto companies only, `false` to exclude them. |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/rounds?since=2026-10-01&limit=50"
```

Returns `{"rounds": [Round], "count", "next_offset"}`. See [Round](#round).

## Investors

### GET /api/v1/investors

Investors ranked by deals in the last 12 months (default), portfolio size, round capital or most recent deal. `round_capital` is the size of the rounds an investor joined, not its own check.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `q` | string |   | Search by name, ignoring case and punctuation; also matches spellings merged into the investor ("Sequoia Capital" finds Sequoia). Every word must appear, in any order. With q, type defaults to all. Up to 200 characters; longer is a 400. |
| `sort` | `deals_12m` `companies` `capital` `recent` | `deals_12m` |   |
| `type` | `funds` `angels` `corporates` `accelerators` `all` | `funds` | `funds` (default; venture firms), `angels` (individual investors), `corporates` (companies investing directly or through a corporate venture arm), `accelerators`, or `all`. A search covers every type unless one is given. Labels for unnamed investors ("Angel Investors") are not investors and never listed. |
| `limit` | integer 1–500 | `100` |   |
| `offset` | integer 0–1000000 | `0` |   |
| `active` | `0` `1` | `0` | `1`: only investors actively deploying capital, with a deal in a round announced in the last 90 days. Default `0` (all). |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/investors?type=funds&active=1&limit=25"
```

### GET /api/v1/investors/{slug}

One investor: its portfolio (latest deal first), top categories, deals by stage and year, and frequent co-investors. Where researched, it also has the team, disclosed limited partners and disclosed positions, each with a `source_url`.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `slug` (path) | string |   | An investor `slug` from `/api/v1/investors`. |

## Founders

### GET /api/v1/founders

People at active companies, one row per person and company, with role, picture, links and the page that names them. Email addresses and phone numbers are never published.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `scope` | `all` `crypto` `founders` | `all` |   |
| `team` | `any` `solo` `duo` `trio` `more` | `any` | Size of the founding team at the person's company, counted from the people on record as founders: `solo`, `duo`, `trio`, `more` (four or more), or `any`. |
| `q` | string |   | Case-insensitive search over the person's name, company name, and role. Every word must appear, in any order ("jane acme" finds Jane at Acme). Up to 200 characters; longer is a 400. |
| `role` | `all` `founder` `ceo` `cto` | `all` | The person's role at the company: `founder` (a role naming a founder), `ceo`, `cto`, or `all`. `scope=founders` is the same as `role=founder`. |
| `profile` | `true` `false` `1` `0` |   | `true`: only people with a researched founder profile (see `profile_url`). |
| `archetype` | `young-outlier` `capital-allocator` `quant-trader` `technical-builder` `domain-operator` `repeat-founder` `researcher` `community-builder` |   | The primary archetype of a researched profile. |
| `stage` | `pre-seed` `seed` `series-a` `series-b+` |   | Stage of the company's latest round. |
| `category` | string |   | The company's category key, as in GET /api/v1/categories (`ai-agents`, `stablecoins`, `fintech`…). |
| `crypto` | `true` `false` `1` `0` |   | `true`: only people at crypto companies (the same as `scope=crypto`). |
| `photo` | `true` `false` `1` `0` |   | `true`: only people with a picture (`avatar`). |
| `raised` | integer 1–3650 |   | Only people whose company's latest round was announced in the last this many days (the page offers 30 and 90). |
| `country` | string |   | The company's headquarters country, as a slug: `united-states`, `united-kingdom`, `india`… |
| `serial` | `true` `false` `1` `0` |   | `true`: only serial founders, people on record at two or more companies. |
| `sort` | `newest` `raised` `name` `latest_raise` `profile` | `newest` | `newest`: the company newest on record first; `raised`: most raised (sourced rounds); `name`; `latest_raise`: the company's latest round first; `profile`: people with a researched profile first, then by latest round. |
| `limit` | integer 1–2000 | `100` |   |
| `offset` | integer 0–1000000 | `0` |   |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/founders?scope=founders&team=solo&limit=50"
```

## Accelerators

### GET /api/v1/accelerators

Every accelerator program with its company count, batches and what its companies raised.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `sort` | `raised` `companies` `recent` | `raised` |   |

### GET /api/v1/accelerators/{key}

One program, its batches and its companies, newest batch first.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `key` (path) | string |   | A program `key` from `/api/v1/accelerators`. |
| `limit` | integer 1–2000 | `500` |   |
| `offset` | integer 0–1000000 | `0` |   |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/accelerators/yc?limit=100"
```

## Categories and markets

### GET /api/v1/categories

Every category (finer than industry, such as `prediction-markets`) with company counts, sourced capital and the latest raise. No parameters.

### GET /api/v1/categories/{key}

The companies in one category, with sourced capital, first raise and latest raise.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `key` (path) | string |   | A category `key` from `/api/v1/categories`. |
| `sort` | `raised` `first` `latest` | `raised` |   |
| `crypto` | `true` `false` `any` | `any` |   |
| `limit` | integer 1–500 | `100` |   |
| `offset` | integer 0–1000000 | `0` |   |

### GET /api/v1/market-map

Capital raised by industry over a recent window against the window before, the stage mix and the top companies. Only rounds with a known amount count.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `window_days` | integer 30–365 | `90` | Length of the recent comparison window, from 30 to 365 days. |
| `history_years` | integer 1–10 | `5` | Number of calendar years in each industry history, from 1 to 10. |
| `crypto` | `any` `true` `false` | `any` | Scope: `any`, `true`, or `false`. |
| `stage_group` | `all` `early` `series-a` `series-b+` `unknown` | `all` | Funding-round stage scope. `early` includes pre-seed and seed, so later rounds do not dominate the market signal. |

### GET /api/v1/market-map/companies

The companies behind one market-map figure, most capital first.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `industry` | string |   | Market-map industry slug, such as `other` or `ai`. Omit it to rank companies across every industry. |
| `window_days` | integer 30–365 | `90` | Length of the selected window, from 30 to 365 days. |
| `stage_group` | `all` `early` `series-a` `series-b+` `unknown` | `all` | `all`, `early` (pre-seed + seed), `series-a`, `series-b+`, or `unknown`. |
| `crypto` | `any` `true` `false` | `any` | Scope: `any`, `true`, or `false`. |
| `limit` | integer 1–250 | `100` | Page size, from 1 to 250. |
| `offset` | integer 0–1000000 | `0` | Page offset. |

### GET /api/v1/landscapes

Each market landscape with its segments, company counts and sourced capital. No parameters.

### GET /api/v1/landscapes/{key}

Every company in a landscape, each in one segment, with its rounds.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `key` (path) | `prediction-markets` |   | A landscape `key` from `/api/v1/landscapes`. |
| `segment` | `exchange` `sports` `infrastructure` `analytics` `trading-tools` `social` `sports-betting` |   | Only this segment. |

## Acquisitions and private equity

### GET /api/v1/acquisitions

Startup acquisitions, most recently announced first. Acquisitions are never counted as funding.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `since` | string |   | Only deals announced on or after this date. |
| `scope` | `all` `startups` | `all` | `all` (the default): every deal. `startups`: startup acquisitions only, those where the acquired company is one Recent Funding tracks or had raised venture funding (pre-seed through late-stage rounds); each deal's `startup` field says which it is. |
| `buyer` | `any` `pe` | `any` | `any` (the default): every buyer. `pe`: only deals of private equity buyers, on evidence: the buyer is a firm of the Fundraising Fox Open Dataset matched by its website or exact name, a firm Recent Funding checked by hand, or a buyer whose own website or public description calls it a private equity firm; and add-ons, deals by a private equity firm's portfolio company (a headline about the deal says the buyer is backed by the firm, or the firm's purchase of the buyer is on record). Each deal's `buyer_type` and `acquirer.pe_sponsor` say which; the firms are at `/api/v1/pe-firms`. |
| `deal_type` | `any` `take_private` | `any` | `any` (the default): every deal. `take_private`: only take-privates, a listed company bought and delisted, on evidence: a headline about the deal says so ("take private", "go-private", "delist"), or a private equity buyer (or its portfolio company) bought a company whose listing a headline gives (a per-share price, a tender offer, its ticker) or its listing on record together with an article about the deal that confirms it. Each deal's `deal_type` says which. |
| `q` | string |   | Words that must all appear in the acquirer's or the acquired company's name, case-insensitive. |
| `limit` | integer 1–500 | `100` | Page size. |
| `offset` | integer 0–1000000 | `0` | Rows to skip. Use the previous response's `next_offset`. |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/acquisitions?scope=startups&limit=50"
```

Fields worth knowing:

- `price_usd` is set only with `price_source_url`, the article that states it. Otherwise it is `null`.
- `price_estimate` is our estimated range for an undisclosed deal. It is never a price ([method](https://recentfunding.com/money-flow/#estimates)).
- `buyer_type` is `pe` for a private equity buyer. `deal_type` is `take_private` for a listed company taken private.

### GET /api/v1/pe-firms

Private equity firms with their acquisitions, add-ons and take-privates, most recent deal first.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `q` | string |   | Words that must all appear in the firm's name, headquarters or sectors, case-insensitive. |
| `sort` | `recent` `deals_12m` `aum` `name` | `recent` | `recent` (the default): latest acquisition first, firms without one after. `deals_12m`: most acquisitions in the last 12 months. `aum`: largest assets under management first, firms without a figure after. `name`: A to Z. |
| `acquired` | `0` `1` | `0` | `1`: only firms with an acquisition on Recent Funding. |
| `limit` | integer 1–500 | `100` | Page size. |
| `offset` | integer 0–1000000 | `0` | Rows to skip. Use the previous response's `next_offset`. |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/pe-firms?sort=deals_12m&acquired=1&limit=20"
```

`aum_usd` always comes with `aum_source_url`: an SEC Form ADV filing for US firms, or the firm's own published figure.

### GET /api/v1/pe-firms/{slug}

One firm, every acquisition it made and similar firms.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `slug` (path) | string |   | A firm `slug` from `/api/v1/pe-firms`. |

## Funds

### GET /api/v1/funds

New venture capital funds, most recently announced first. The list is compiled by [Shai Goldman](https://twitter.com/shaig) and credited in every response. Funds are never counted as startup rounds.

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `since` | string |   | Only funds announced on or after this date. |
| `q` | string |   | Words that must all appear in the fund's name, its firm's name or its location, case-insensitive. |
| `year` | integer 1990–2100 |   | Only funds announced in this year. |
| `limit` | integer 1–500 | `100` | Page size. |
| `offset` | integer 0–1000000 | `0` | Rows to skip. Use the previous response's `next_offset`. |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/funds?year=2026&limit=50"
```

`amount_usd` is set only with `amount_source_url`.

## Stats and rankings

### GET /api/v1/stats

Totals by stage, industry and source. No parameters.

### GET /api/v1/leaderboard

Companies ranked on one metric, highest first. Ties share a rank.

| Metric | Value |
| --- | --- |
| `raised_ytd` | Total of the company's sourced rounds announced in `year`; each round in `rounds` has its `source_url` |
| `gained_ytd` | Rise in stated valuation between its last two sourced valuations; both have a source link |

| Parameter | Values | Default | Description |
| --- | --- | --- | --- |
| `metric` | `raised_ytd` `gained_ytd` |   | `raised_ytd`: capital raised in the year, summing only rounds with an amount and a source URL. `gained_ytd`: rise in stated valuation over the year - the valuation at the year's last round less the valuation at the round before it, both needing a source URL. |
| `year` | integer 2000– |   | Calendar year, from 2000 to the current year. Defaults to the current year; for the current year the period runs to today. |
| `limit` | integer 1–500 | `25` | Rows to return, highest first. |
| `crypto` | `true` `false` `any` | `true` | `true` (default) ranks crypto companies only, `false` only the others, `any` all companies. |

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/leaderboard?metric=raised_ytd&limit=10"
```

### GET /api/v1/usage

Your key's requests today and over the last 30 days, by endpoint. Free: it never counts against your limit.

```sh
curl -H "Authorization: Bearer $RF_KEY" "https://recentfunding.com/api/v1/usage"
```

## Live feed

New funding rounds pushed over a WebSocket as they are added. Messages have the same fields as [`/api/v1/rounds`](#get-api-v1-rounds) plus `added_at`. Available on Pro and Max.

```js
const ws = new WebSocket("wss://vc-radar-production.up.railway.app/v1/stream?api_key=" + RF_KEY + "&stage=seed&min_amount=1000000");
ws.onmessage = e => {
  const m = JSON.parse(e.data);
  if (m.type === "round") console.log(m.name, m.stage, m.amount_usd, m.source_url);
};
```

- Filters: `stage`, `min_amount`, `crypto`. `backlog` (0 to 100, default 10) replays the latest matching rounds first.
- The first message is `{"type": "hello"}`. The server pings every 30 seconds; reconnect when the socket closes.
- Close codes: `4001` invalid key, `4003` plan required, `4029` too many connections (five per key).

## Contacts

The people to talk to at a company, with confirmed work emails: the founders we list, then decision makers (founders, C-level, VPs, directors), and the addresses the company publishes on its site.

```
GET https://recentfunding.com/api/v1/companies/{slug}/contacts
```

- Each person has `name`, `title`, `email` (a work address confirmed by checking the mailbox, or null), `email_status`, `linkedin` and `source`. Personal Gmail or Yahoo addresses are never returned.
- One lookup is one company for your account. Looking the same company up again within 30 days is free.
- Pro includes 50 lookups a month and Max 100. A free key gets 3 in total. After that, each company uses 10 credits (one dollar) from a [pay as you go](https://recentfunding.com/pricing/) balance; without one the answer is 402 `contacts_quota`.
- In MCP the tool is `get_company_contacts`.
- Use them for relevant business outreach only, and stop when someone asks you to. Anyone can remove their address with `POST /api/v1/contacts/opt-out` and `{"email": "..."}`, or by emailing hello@recentfunding.com.

## MCP

Use Recent Funding from Claude, Cursor and other MCP clients. The server is `https://recentfunding.com/mcp` (Streamable HTTP). Every endpoint is a tool with the same parameters (`list_companies`, `get_company`, `list_rounds` and so on).

```sh
claude mcp add --transport http recent-funding https://recentfunding.com/mcp --header "Authorization: Bearer $RF_KEY"
```

Calling tools needs Pro or Max. Tool calls count toward your daily limit.

## Objects

Image fields (`logo`, `company_logo`, `avatar`) are absolute URLs. Records are identified by `slug` (companies, investors) or `key` (categories, accelerators). A `null` amount means unknown, not zero.

### Company

| Field | Type | Description |
| --- | --- | --- |
| `slug` | string | Stable identifier; use it with `/api/v1/companies/{slug}`. |
| `name` | string |   |
| `stage` | string | `pre-seed`, `seed`, `series-a`, `series-b+`, `stealth`, or `unknown`. |
| `industry` | string \| null | Industry slug, e.g. `ai-agents`. |
| `subcategory` | string \| null |   |
| `sector` | string \| null |   |
| `description` | string \| null |   |
| `crypto` | boolean \| null | Whether the company is a crypto company. null when the evidence can't settle it: such companies are left out of crypto-only lists and totals (`crypto=true`) and of `crypto=false` ones. |
| `first_seen_at` | string (date-time) | When Recent Funding first discovered the company. |
| `website` | string \| null |   |
| `x_handle` | string \| null | Primary X (Twitter) handle, without @. |
| `followers` | integer \| null | X follower count at the last enrichment. |
| `logo` | string \| null (uri) | Logo image as an absolute URL (https://recentfunding.com/logo/... for the copies we keep, else the source's own https URL); null when there is none. The legacy /api/vc keeps the site-relative path (/logo/...). |
| `amount_usd` | string \| null | Latest round amount in USD as a decimal string (e.g. "1700000.00"); null when unknown. |
| `announced_at` | string \| null (date-time) | Latest round date (midnight UTC). |
| `raise_source_url` | string \| null | Where the latest round's amount came from: the enrichment article, else the scan's source page. |
| `raise_publisher` | string \| null | Publisher of the enrichment article, when enriched. |
| `raise_provider` | string \| null | How the amount was found: `scan` (the source listing itself), `google-news`, `website`, `agent-review` (confirmed in manual review), `press` (a press article an import matched the round to), or the news source an import read it from (e.g. `fundraisingfox`, `startupintros`). Null when there is no amount or the source is unknown. |
| `sources` | string[] | Discovery sources, e.g. `accel:yc`, `dropstab`, `coincarp`. |
| `source_links` | object | Source name to the page where it listed the company; null when that listing has no public link. |
| `investors` | string[] |   |
| `flagged` | boolean | A source flagged the company before a round was announced. |
| `flagged_at` | string \| null (date) | Earliest date a stealth-tracking source flagged the company. |
| `x_created_at` | string \| null (date) | X account creation date. |
| `domain_created_at` | string \| null (date) | Website domain registration date. |
| `team_size` | integer \| null | People listed on the company's own team/about page (distinct LinkedIn profile links). Estimate; see team_source_url. |
| `team_source_url` | string \| null | Page the team_size count came from. |
| `smart_follows` | integer \| null | Number of tracked investor and founder accounts following the company's X account, as the stealth-tracking source reports it. |
| `days_early` | integer \| null | Days the company was flagged before its raise became public. |
| `new_follows_7d` | integer \| null | New follows from those tracked accounts in the last 7 days. |
| `trending_rank` | integer \| null | Position in the stealth-tracking source's trending list, when present (1 = top). |
| `hq_city` | string \| null | City the company is based in, as its accelerator lists it. |
| `hq_country` | string \| null | Country the company is based in. |
| `founded_year` | integer \| null | Year founded, as its accelerator lists it. |
| `categories` | string[] | Up to three category keys (see /api/v1/categories). |

### CompanyRound

| Field | Type | Description |
| --- | --- | --- |
| `stage` | string |   |
| `kind` | string \| null | What a round without a venture stage was, when its source says: `debt`, `grant`, `secondary`, `public-offering`, `token-sale`, `crowdfunding`, `convertible-note`, `strategic` or `growth`. A strategic round of 100 million USD or more, and every growth round, also has stage `series-b+`. |
| `amount_usd` | string \| null | Decimal string in USD; null when undisclosed or unknown. |
| `valuation_usd` | string \| null | The company valuation reported with this round, as a decimal string in USD; null when none was stated. Read from the same source as the amount, so it is the figure that source gave. |
| `announced_at` | string \| null (date-time) |   |
| `source_url` | string \| null |   |
| `source_publisher` | string \| null |   |
| `source_provider` | string \| null | How the amount was found: `scan` (the source listing itself), `google-news`, `website`, `agent-review` (confirmed in manual review), `press` (a press article an import matched the round to), or the news source an import read it from (e.g. `fundraisingfox`, `startupintros`). Null when the source is unknown. |

### Round

| Field | Type | Description |
| --- | --- | --- |
| `slug` | string | The company's slug. |
| `name` | string | The company's name. |
| `industry` | string \| null |   |
| `crypto` | boolean \| null | Whether the company is a crypto company. null when the evidence can't settle it: such companies are left out of crypto-only lists and totals (`crypto=true`) and of `crypto=false` ones. |
| `stage` | string | The round's stage. |
| `amount_usd` | string | Decimal string in USD. |
| `valuation_usd` | string \| null | The company valuation reported with this round, as a decimal string in USD; null when none was stated. Read from the same source as the amount, so it is the figure that source gave. |
| `announced_at` | string \| null (date-time) |   |
| `source_url` | string \| null | Where the amount came from. |
| `source_publisher` | string \| null |   |
| `source_provider` | string \| null | How the amount was found: `scan` (the source listing itself), `google-news`, `website`, `agent-review` (confirmed in manual review), `press` (a press article an import matched the round to), or the news source an import read it from (e.g. `fundraisingfox`, `startupintros`). Null when the source is unknown. |
| `investors` | string[] | Investors linked to this round. |

### Acquisition

| Field | Type | Description |
| --- | --- | --- |
| `acquirer` | object | The buyer: `name`, `slug` (its Recent Funding company profile, or null), `investor_slug` (its investor profile, or null), `pe_firm_slug` (its private equity firm profile, or null), `pe_sponsor` (the private equity firm whose portfolio company it is, for an add-on, or null) and `logo`. |
| `acquired` | object | The acquired company: `name`, `slug` (its Recent Funding company profile, or null), `logo`, and for a take-private its `ticker` and `exchange` when known. |
| `announced_on` | string \| null (date) | The day the deal was announced (for news, the day the article was published). |
| `completed_on` | string \| null (date) | The day the deal closed, when known. |
| `price_usd` | string \| null | The price as a decimal string in USD, converted at the rate of the announcement day when stated in another currency. Null when no press source disclosed it. |
| `price_currency` | string \| null | The currency the price was stated in (ISO code). |
| `price_original` | string \| null | The price as stated, in `price_currency`, when that is not USD. |
| `price_source_url` | string \| null | The article that states the price. Always set when `price_usd` is. |
| `price_estimate` | object \| null | No announced price: Recent Funding's estimate of the deal's size, kept apart from `price_usd` (which stays null) and shown on the site as a range marked "*" (Estimate, not announced). `low` and `high` in USD (`high` null for an open range such as "at least what it raised"; `low` equals `high` for a take-private's equity value derived from its per-share price and SEC-reported shares outstanding), `basis` how it was estimated, `method` (`per_share`, `revenue`, `headcount` or `funding`) and `sources`, the public inputs. Null when there is too little data. Method: https://recentfunding.com/acquisitions/#estimates |
| `source_url` | string \| null | An announcement or press article about the deal. |
| `source_publisher` | string \| null | The publisher of `source_url`. |
| `category` | string \| null | The acquired company's industry, e.g. `ai`, `fintech`, `infra-devtools`. |
| `startup` | boolean | Whether this is a startup acquisition: the acquired company is one Recent Funding tracks, or had raised venture funding. `scope=startups` returns only these. |
| `category_from` | string \| null | Where `category` comes from: `acquired` (the acquired company's own industry) or `buyer` (the buyer's, when the acquired company has none). Null when there is no category. |
| `buyer_type` | string \| null | `pe` when the buyer is a private equity firm, `growth` a growth equity firm (a firm of the Fundraising Fox Open Dataset matched by the buyer's website or exact name, or for `pe` a firm Recent Funding checked by hand or a buyer whose own website or public description calls it one); null otherwise or when unknown. An add-on (a PE firm's portfolio company buying) has `buyer_type` null and `acquirer.pe_sponsor` set. `buyer=pe` returns both. |
| `deal_type` | string \| null | `take_private` when a listed company was bought and delisted (see the `deal_type` parameter for the evidence it takes); null otherwise or when unknown. |
| `ai_thesis` | object \| null | For a take-private: an article about the deal says the buyer plans to rebuild the company around AI ("an AI-first company", "accelerate its AI strategy"). `quote` is the article's sentence and `source_url` the article. Null when no article about the deal says so. |

### PeFirm

| Field | Type | Description |
| --- | --- | --- |
| `slug` | string | The firm's slug (`/api/v1/pe-firms/{slug}`, /pe-firms/{slug}/). |
| `name` | string |   |
| `website` | string \| null (uri) | The firm's website. |
| `logo` | string \| null | Logo URL, when one is known. |
| `hq_city` | string \| null | Headquarters city. |
| `hq_country` | string \| null | Headquarters country (ISO 3166-1 alpha-2). |
| `founded_year` | integer \| null | The year the firm was founded. |
| `stages` | string[] | The stages it invests at, as the dataset gives them. |
| `sectors` | string[] | The sectors it invests in, as the dataset gives them. |
| `check_min_usd` | string \| null | Smallest check, in USD (decimal string). Set only with `profile_source.url`, its source. |
| `check_max_usd` | string \| null | Largest check, in USD (decimal string). Set only with `profile_source.url`, its source. |
| `aum_usd` | string \| null | The firm's assets under management in USD, always with `aum_source_url`: for a US firm the regulatory AUM its main SEC-registered adviser reports on Form ADV; otherwise the figure the firm publishes, converted at the ECB rate of its date. Null when neither can be had. `aum` gives the details. |
| `aum_source_url` | string \| null (uri) | The source of `aum_usd`: the adviser's SEC Investment Adviser Public Disclosure page, or the firm's own release or page. |
| `aum` | object \| null | `aum_usd` in detail: `usd`, `original` and `currency` (as the firm states it), `fx_rate` (USD per unit), `as_of`, `source_url`, `method` (`form_adv` or `firm_published`), `adviser` (`name`, `crd`, for Form ADV) and `quote` (the firm's own words, for a published figure). |
| `portfolio_count` | integer \| null | Portfolio companies, as the dataset counts them. |
| `exit_count` | integer \| null | Exits, as the dataset counts them. |
| `profile_source` | object \| null | Where the firm's profile comes from, for a firm of the dataset: `name` (Fundraising Fox Open Dataset), `url` (its page for the firm), `license` (CC BY 4.0) and `version`. Null for a firm the dataset lacks, whose profile is its own public facts (name, website, headquarters). |
| `investor_slug` | string \| null | The firm's investor slug when it is also an investor on Recent Funding (`/api/v1/investors/{slug}`), else null. |
| `acquisitions` | integer | Acquisitions by the firm on Recent Funding. |
| `acquisitions_12m` | integer | Of those, announced in the last 12 months. |
| `acquisitions_90d` | integer | Of those, announced in the last 90 days. |
| `latest_acquisition` | object \| null | The most recently announced: `name`, `slug` (its company profile, or null) and `announced_on`. |
| `top_categories` | object[] | The categories of the companies it bought, most first: `key`, `label`, `acquisitions`. |
| `url` | string (uri) | The firm's page on Recent Funding. |
| `website_says` | object \| null | For a firm the dataset lacks that Recent Funding found through its own website: `quote`, the website's words that describe it as a private equity firm, and `url`. Null otherwise. |
| `addons` | integer | Of `acquisitions`: add-ons, bought by the firm's portfolio companies. |
| `take_privates` | integer | Of `acquisitions`: take-privates, listed companies bought and delisted. |

### Fund

| Field | Type | Description |
| --- | --- | --- |
| `fund_name` | string | The fund as the list or the announcement names it, misspellings fixed from its own source. |
| `firm` | string | The firm the fund belongs to ("Antler US Fund" is Antler's). |
| `fund_number` | string \| null | The fund's number as a roman numeral ("I" for a firm's first fund); null when the list gives none or a source contradicts it. |
| `first_fund` | boolean | Whether this is the firm's first fund (Fund I). |
| `amount_usd` | string \| null | The fund's size in US dollars, as a string, as its source states it; null when no source states a figure in dollars. Set only with amount_source_url. |
| `amount_currency` | string \| null | "USD" when amount_usd is set. |
| `amount_source_url` | string \| null (uri) | The source of the size: the article that states it, or the public fund list. |
| `amount_source` | string \| null | Its publisher, or "Shai Goldman's fund list". |
| `amount_via` | string \| null | `press`: an article or post states the size. `fund-list`: the list itself is the only public source. |
| `amount_note` | string \| null | `first close` or `interim close` when the size the source states is a close before the fund's final one; null for a final size. |
| `announced_on` | string \| null (date) | When the fund was announced (the first of the month or year when date_precision says so). |
| `date_precision` | string \| null | How precise announced_on is. |
| `year` | integer \| null | The year the fund was announced. |
| `location` | string \| null | Where the firm is based, as the list gives it. |
| `regions` | string[] | The /funds/ location filters the location falls in (bay-area, new-york, israel, ...). |
| `announcement_url` | string \| null (uri) | The announcement the list cites, when it is not already amount_source_url. |
| `investor_slug` | string \| null | The firm's investor page on Recent Funding (/investors/<slug>/), when it has one. |

### Stats

| Field | Type | Description |
| --- | --- | --- |
| `companies` | integer | Active companies. |
| `with_amount` | integer | Companies whose latest round has a known amount. |
| `crypto` | integer |   |
| `latest_first_seen_at` | string \| null (date-time) |   |
| `by_stage` | Count[] | Largest first. |
| `by_industry` | Count[] |   |
| `by_source` | Count[] | A company found by several sources counts once per source. |

### LeaderboardEntry

| Field | Type | Description |
| --- | --- | --- |
| `rank` | integer | 1 is the highest. Ties share a rank. |
| `slug` | string |   |
| `name` | string |   |
| `logo` | string \| null (uri) | Logo image as an absolute URL (https://recentfunding.com/logo/... for the copies we keep, else the source's own https URL); null when there is none. |
| `website` | string \| null |   |
| `x_handle` | string \| null |   |
| `industry` | string \| null |   |
| `stage` | string \| null | The company's stage. |
| `value` | string | The metric, as a decimal string in USD: capital raised (`raised_ytd`) or the valuation gained (`gained_ytd`). |
| `source_url` | string \| null | `gained_ytd` only: where the year's valuation came from (the same as `to_source_url`). |
| `round_count` | integer | `raised_ytd` only: rounds in the total. |
| `rounds` | object[] | `raised_ytd` only: the rounds summed, oldest first, each with its `source_url`. |
| `from_valuation` | string \| null | Valuation at the round before the year's last, as a decimal string in USD (gained_ytd). |
| `from_date` | string \| null | Date of that earlier round (gained_ytd). |
| `from_source_url` | string \| null | Where the earlier valuation came from (gained_ytd). |
| `to_valuation` | string \| null | Valuation at the year's last round, as a decimal string in USD (gained_ytd). |
| `to_date` | string \| null | Date of the year's last round (gained_ytd). |
| `to_stage` | string \| null | Stage of the year's last round (gained_ytd). |
| `to_amount_usd` | string \| null | Amount of the year's last round (gained_ytd). |
| `to_source_url` | string \| null | Where the later valuation came from (gained_ytd). |
| `multiple` | string \| null | to_valuation divided by from_valuation (gained_ytd). |

## Data and sources

Every amount links to where it came from: `raise_source_url` on companies, `source_url` on rounds. `raise_provider` says how it was found (`google-news`, `website`, `press`, `agent-review` and so on). Amounts that no public source supports are left out. The data updates daily. [How we source and verify the data](https://recentfunding.com/blog/how-recent-funding-sources-and-verifies-funding-data/) explains the method.

Responses send `Cache-Control: public, max-age=60` and `Access-Control-Allow-Origin: *`, so you can call the API from a browser. Please cache on your side, use filters instead of downloading everything, and back off on `429` and `503`.

The machine-readable spec is [openapi.json](https://recentfunding.com/openapi.json) (OpenAPI 3.1).

## For AI agents

- Make a key in one request, with the email of the person you work for and what it's for. `use_case` is required on your first key: a sentence on what you are building. Later keys for the same email can leave it out.

```sh
curl -X POST https://recentfunding.com/api/keys/new -H "content-type: application/json" -d '{"email": "you@example.com", "company": "Acme Ventures", "use_case": "weekly deal-flow digest of seed rounds in fintech"}'
```

- Tell us what you're building, or want to build, any time. No key needed, and we read every answer. Add `wishes` for data you'd like us to add. In MCP, the tool is `tell_us_what_you_are_building`, open on every plan.

```sh
curl -X POST https://recentfunding.com/api/v1/building -H "content-type: application/json" -d '{"building": "A weekly digest of seed rounds in fintech for our sales team", "wishes": "Partner names on each round", "volume": "200 calls a day"}'
```

- To reach a company's founders or decision makers, call `GET /api/v1/companies/{slug}/contacts` (MCP: `get_company_contacts`). See [Contacts](#contacts): only confirmed work emails, 50 companies a month on Pro, and allow a 120 second timeout for a company nobody has looked up yet.
- On every request, send `X-On-Behalf-Of` naming who you work for (`X-On-Behalf-Of: Acme Ventures (acme.vc)`) and name your tool in `User-Agent`. Tell the person you send this.
- When a response or error includes `upgrade`, pass `upgrade.tell_your_user` to the person you work for, word for word. Don't open the checkout link or pay yourself.
- Start from [llms.txt](https://recentfunding.com/llms.txt) for a short guide.
