# Companies That Raised Series A - Funding Round Detector (`b2bdata/funding-round-detector`) Actor

Find companies that raised a funding round in a date window: pick round types (seed, Series A and later), dates, country, industry and size. One row per company with round, date, amount when recorded, site and HQ. Free plan: 100 per run. Pay per company, empty free. Not a complete list.

- **URL**: https://apify.com/b2bdata/funding-round-detector.md
- **Developed by:** [Open Enrich](https://apify.com/b2bdata) (community)
- **Categories:** Lead generation, Marketing
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 funded company delivereds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Recently Funded Companies by Round and Date

Find companies that raised a funding round in a date window. Pick the round types (seed, Series A and later), the dates, and optionally country, industry and headcount band. You get one row per company with its last round (type, date, amount when recorded), domain, website, industry, headcount and HQ. One row per domain, no repeats. No login, no cookies, no start fee. You pay only for a company row you receive.

**No login | Round type and date window | Country, industry and size filters | One company per domain | Rows that cannot be backed are never delivered or charged | Empty searches = free | JSON/CSV export**

> **Read this before you buy: it is a sample of funding events, not a complete feed.** The funding records in this data currently reach **2025-12-01** (checked 2026-11-06), so "the last 30 days" returns nothing today. Amounts are missing on roughly a third of rows. Round dates are often a month start. See "How to read the rows" below.

[See all actors by b2bdata](https://apify.com/b2bdata)

***

### 💳 Pricing and plans

One event, `funded-company`, charged once per company row delivered. Prices per 1,000 companies (set on the Pricing tab):

| Event | When it is charged | Free plan | Gold plan |
|---|---|---|---|
| `funded-company` | A funded company row is delivered to your dataset | $1.196 | $0.896 |

Bronze and Silver prices are on the Pricing tab. Higher Apify plans only lower the price. Empty searches, failed lookups, skipped rows and notices are free, and there is no start fee.

**Plan-credit math.** The free plan's $5 monthly credit covers about 4,180 companies at the Free price.

#### Success-only billing

You are charged only for a company row you receive. A search that matches nothing gets one free notice row (`reason: "no_matches"`). These rows are skipped: not delivered, not charged:

- no usable domain;
- a second record for a domain you already received;
- a record on a domain the company does not own (a division or regional page that would carry its parent's round);
- a last round of a type you did not ask for, dated outside your window or in the future, or with no date;
- a seed, pre-seed, angel or Series A round on a company with 2,000 or more people (an early round that size is not credible; one such row was seen in a 30-row check).

An upstream failure is a free notice, and companies delivered before it stay delivered. `RUN_SUMMARY` counts every skip by reason.

#### The free plan

Free Apify accounts get up to 100 companies per run, and as many runs as their Apify credit covers. Nothing is stored on our side. If your `limit` is higher and more companies match, the run delivers 100 and adds one free notice row (`reason: "free_plan_limit"`). Narrow the filters and run again, or use a paid Apify plan for no per-run limit.

#### Keep a run small while you test

`limit` (default 10, maximum 10,000) caps the whole run and what is charged. The actor asks for only as many rows as it can still deliver and charge, so a spend cap on the run is never overshot. Try one filter set with `limit: 5`, read the rows, then scale up.

***

### ⚡ Why this funded-company search actor?

- **Round type and dates are the filter.** "Companies that raised a Series A between June and November 2025, US, 11-50 people" matched 280 companies in a check on 2026-11-06.
- **Venture rounds by default.** Bond issues, grants and post-IPO rounds of listed groups are in the data (Oracle and Apple show up as `post_ipo_debt`). They are delivered only when you name those round types.
- **One row per domain.** The data can hold the same company under several records. You get the domain once.
- **Odd rows are not billed.** Shared domains, out-of-window rounds and implausible early rounds are dropped before the charge.
- **Spend is bounded.** `limit` and the run's spend cap decide the cost before you start.

***

### 🎯 Use cases: build a list from funding events

- **Outbound after a raise.** Seed and Series A companies in your territory, with the round date to open the email with.
- **Market maps.** Who raised in an industry and country in a given period, for sizing or investor research.
- **Recruiting and vendor targeting.** Companies with fresh money and a team of 11-50 people.
- **Agent workflows.** An AI agent needs funded companies for a segment, then passes the domains to another actor.

***

### 🚀 Quick start: companies for a window

#### 1. A first look

```json
{ "roundTypes": ["series_a"], "dateFrom": "2025-06-01", "dateTo": "2025-11-30", "countries": ["US"], "sizes": ["11-50"], "limit": 5 }
```

#### 2. Seed and Series A across several countries

```json
{ "roundTypes": ["seed", "series_a"], "dateFrom": "2025-01-01", "dateTo": "2025-11-30", "countries": ["DE", "GB", "FR"], "industries": ["Software Development"], "sizes": ["11-50", "51-200"], "limit": 500 }
```

***

### ⚙️ Inputs

`dateFrom` is required. Everything else is optional.

| Key | Type | Default | What it does |
|---|---|---|---|
| `dateFrom` | string `YYYY-MM-DD` | required | First day of the window. The company's last round must be dated on or after it. |
| `dateTo` | string `YYYY-MM-DD` | today | Last day of the window. |
| `roundTypes` | array of strings | `pre_seed`, `seed`, `series_a` to `series_f` | Round types to keep. `Series A`, `series-a` and `series_a` all mean `series_a`. At most 20. |
| `countries` | array of strings | any | Two-letter country codes, for example `DE`, `US`. Use `GB` for the United Kingdom. At most 10. |
| `industries` | array of strings | any | Industry names, for example `Software Development`. An unknown name stops the run with a free notice that names it. At most 50. |
| `sizes` | array of strings | any | Headcount bands: `1-10`, `11-50`, `51-200`, `201-500`, `501-1000`, `1001-5000`, `5001-10000`, `10001+`. Chosen bands must touch. Companies with no headcount on file are not returned when you set a size. |
| `limit` | integer | 10 | Most companies delivered in the whole run, which also caps what is charged. Maximum 10,000. Free plan: 100 per run. |
| `includeAudit` | boolean | false | Adds an `audit` object to each row. |

Round type names seen in the data: `pre_seed`, `seed`, `series_a`, `series_b`, `series_c`, `series_d`, `series_unknown`, `convertible_note`, `corporate_round`, `equity_crowdfunding`, `initial_coin_offering`, `grant`, `debt_financing`, `private_equity`, `secondary_market`, `post_ipo_equity`, `post_ipo_debt`, `undisclosed`. A name the data does not know matches nothing and ends the run with a free notice.

Any other field stops the run before a lookup with `remove unsupported fields: ...`. Nothing is charged.

***

### 📤 Output

One result row per company, in the order the data returns them. Empty values are left out.

| Key | Type | Meaning, and when it is missing |
|---|---|---|
| `domain` | string | The company's site domain, lower-case. Always present |
| `name` | string | Company name |
| `lastFundingRound` | string | Type of the last round, for example `series_a`. Always present |
| `lastFundingDate` | string | Date of the last round, inside your window. Always present |
| `lastFundingAmount` | integer | Amount recorded for that round. Missing when none is recorded (about a third of rows) |
| `website` | string | Website address as on file |
| `linkedinUrl` | string | Public company page URL |
| `industry` | string | Industry name |
| `employeeCount` | integer | Headcount on file. Missing when none is on file |
| `hqCity` | string | Headquarters place as on file, often written "City, Region" |
| `hqCountry` | string | Two-letter country code |
| `foundedYear` | integer | Year founded. Missing when not on file (a fifth to a third of startup rows) |
| `description` | string | Short company description, cut at about 500 characters |
| `domainOwner` | boolean | Whether the domain belongs to this company. Rows where it is `false` are not delivered, so you see `true` or nothing |
| `audit` | object | Only with `includeAudit`: `requestId`, `latencyMs`, `matched` |

Example output (the shape is real, the values are illustrative):

```json
{
  "domain": "example-bio.com",
  "name": "Example Bio",
  "lastFundingRound": "series_a",
  "lastFundingDate": "2025-07-15",
  "lastFundingAmount": 12000000,
  "website": "https://example-bio.com/",
  "linkedinUrl": "https://www.linkedin.com/company/example-bio",
  "industry": "Biotechnology Research",
  "employeeCount": 11,
  "hqCity": "San Diego, California",
  "hqCountry": "US",
  "foundedYear": 2023,
  "description": "Example Bio develops inhaled therapies.",
  "domainOwner": true
}
```

#### How to read the rows

- **It is the last round only.** Each company is shown with its most recent round on file. A company that raised a Series A in your window and a Series B after it is not matched for the Series A.
- **Coverage ends 2025-12-01.** At the 2026-11-06 check, 11 companies had a round dated 2025-12-01 or later and none had one dated 2025-12-15 or later. A window that starts after 2025-12-01 returns a free notice that says so. If the data is refreshed, this changes.
- **Not every funding event is in the data.** About 600 to 700 funded companies appear per week in the data (672 for 6-12 November 2025, 590 for 6-12 November 2024). Treat it as a large sample, not a complete register.
- **Amounts.** `lastFundingAmount` is the number on file. The data carries no currency field. Six well-known rounds checked against public reports (Verdiva Bio, CuspAI, Buena, Payrails, Sereact, QpiAI) were all in US dollars, including non-US companies, but that is not a guarantee. About a third of rows have no amount.
- **Dates.** The round date is the record's date, which is not always the announcement day. Several rows share a first-of-the-month date (for example 2025-08-01), which looks like a month-only source. Use it to the month.
- **Round labels are as filed.** `series_a` means the record says Series A. In a 20-row check one row was a $85,000 round at a resort company labelled `series_a`. Read the amount before you act on the label.
- **Order.** Rows come in the order the data returns them: by country, then by headcount from the smallest up. With a `limit` you receive the first rows in that order. Set `sizes` when you use a `limit`.
- **Headcount is on file, not live.** A size filter keeps only companies that have one.
- **One company under two names.** In a 20-row check one company appeared under its old and its new name on two domains. Dedupe by domain is all the actor does.
- **Match counts.** With `includeAudit`, `matched` is how many companies match the filters in total, before any `limit` and before rows are skipped.

#### Other records in the run

- **`MISSES`** (key-value store): holds `{input: "filters", reason: "no_matches"}` when nothing matched, otherwise an empty list.
- **`errors-funding-round-detector`** (key-value store): technical failures, so you can run the search again. A note `(partial: ...)` means some companies were already delivered.
- **`RUN_SUMMARY`**: how many companies match, how many were delivered, pages read, and how many rows were skipped for each reason.
- **Notice rows** (`type: "notice"`) appear for a search with no match (`no_matches`), an upstream failure (`upstream_error`), a free-plan cut (`free_plan_limit`), a reached spend limit (`charge_limit_reached`) or invalid input (`invalid-input`). Notices are never charged.

#### What is NOT returned

- Investor names, valuation, or a company's full round history
- Contact details, people or employee lists (use [people-at-company](https://apify.com/b2bdata/people-at-company))
- Rounds dated after 2025-12-01
- Companies with no domain on file

***

### 🛡️ Reliable results

**Our data promise.** We work to keep the data current, and we stand behind it. If a company is missing, a row looks wrong or a round is mislabelled, open the Issues tab with your run link. We review every report and sort it out with you, case by case.

- **No match is free and visible.** A search with no result is a free notice and a `MISSES` record.
- **Repeats are charged once.** One row per domain per run.
- **Each row is saved as it is delivered.** A run that stops, or a page that fails halfway, keeps what it already produced.
- **Bounded pace.** Pages run at about one a second. The run timeout is one hour.
- **Typos fail early.** An unsupported field, a bad date, a bad country code, a size band that does not touch the others or a limit above its maximum stops the run before any charge.

***

### 🤖 For AI agents (MCP)

This actor runs through the Apify MCP server. Prompt to copy:

> "Use b2bdata/funding-round-detector with roundTypes=\["series_a"], dateFrom="2025-06-01", dateTo="2025-11-30", countries=\["US"], sizes=\["11-50"] and limit=20. Return name, domain, lastFundingDate and lastFundingAmount."

**When to use it.** You need companies that raised a given round type in a past window.
**When not to.** You need the latest weeks (the data stops at 2025-12-01), a complete funding register, investor names, or the people at a company (use b2bdata/people-at-company).
**Input contract.** `dateFrom` (YYYY-MM-DD) required; optional `dateTo`, `roundTypes`, `countries`, `industries`, `sizes`, `limit` 1-10,000 (default 10).
**Output contract.** One row per company with `domain`, `name`, `lastFundingRound`, `lastFundingDate`, and when recorded `lastFundingAmount`. Output is deterministic and schema-stable. A search with no match is a free notice row.
**Smoke test.** `limit: 1` with one country and a six-month window returns one row.
**Error cases.** `remove unsupported fields`, a missing or bad date, an unknown industry, a bad country code or size, or a bad number ends the run SUCCEEDED with one free `invalid-input` notice row and nothing charged.

***

### 🔌 Integrations: send results anywhere

1. **API.** Fetch rows from the run's default dataset: `GET /v2/datasets/{datasetId}/items?format=csv`.
2. **Webhook** on run success to push rows to your own endpoint.
3. **n8n, Make, Zapier.** Use the native Apify nodes: run the actor, then read the dataset.
4. **Google Sheets, Airtable, HubSpot, Salesforce, Clay.** Join on `domain` and map `name`, `lastFundingRound` and `lastFundingDate` to account fields.

***

### 🕐 Schedule examples

- **Monthly window run.** A schedule with a saved task that holds your filters. Move `dateFrom` and `dateTo` forward as the data is refreshed.

***

### 🔗 Related actors

- `b2bdata/company-search`: companies by industry, size, country and founding year. [Open](https://apify.com/b2bdata/company-search)
- `b2bdata/people-at-company`: the people at each company domain this actor returns. [Open](https://apify.com/b2bdata/people-at-company)
- `b2bdata/linkedin-company-search`: company pages found by name, keyword or URL. [Open](https://apify.com/b2bdata/linkedin-company-search)

[See all actors by b2bdata](https://apify.com/b2bdata)

***

### ❓ FAQ

#### Data and coverage

**How do I find companies that raised a Series A?**
Put `series_a` in `roundTypes`, set `dateFrom` and `dateTo`, add a country, industry or size if you want, and run. You get one row per company with the round date and, when recorded, the amount.

**Why does "the last 30 days" return nothing?**
The funding records in this data currently reach 2025-12-01. Start your window earlier. The run says so in a free notice.

**Why is `lastFundingAmount` missing on some rows?**
No amount is on file for that round. About a third of rows have none. The row is still delivered because the round itself is on file.

**Is the amount in dollars?**
The data has no currency field. Six well-known rounds checked against public reports were all in US dollars. Treat it as approximate.

**Why did I get fewer companies than I expected?**
Rows stop at `limit` (default 10, free plan 100). Raise it. A size filter also drops companies with no headcount on file. Some rows are skipped for the reasons listed under Success-only billing, and `RUN_SUMMARY` counts them. `includeAudit` shows `matched`.

**Why are bond issues and grants missing?**
Without `roundTypes` you get venture rounds only. Name `debt_financing`, `grant` or `post_ipo_debt` to get those.

**Do I need a LinkedIn account or cookies?**
No. It is a search without login, cookies or an account to ban.

#### Pricing

**What do I pay when nothing matches?**
Nothing. There is no start fee, and empty searches, skipped rows and notices are free.

***

### 🛟 Support

Use the **Issues** tab on this actor's Apify page for bugs, questions and feature requests. We answer within 48 hours on working days. Please include the run ID and the input you used. Published on Apify by b2bdata. Not affiliated with, endorsed by, or sponsored by any company or person named in the examples above.

# Changelog

This Actor's version history is a separate document: https://apify.com/b2bdata/funding-round-detector/changelog.md

# Actor input Schema

## `roundTypes` (type: `array`):

Round types to keep, as lower-case names. Examples: \["seed"], \["series_a", "series_b"]. Names seen in the data: pre_seed, seed, series_a, series_b, series_c, series_d, convertible_note, corporate_round, equity_crowdfunding, grant, debt_financing, private_equity, secondary_market, post_ipo_equity, post_ipo_debt, undisclosed. Leave empty for the venture default: pre_seed, seed and series_a to series_f. Debt, grants and post-IPO rounds of listed groups are delivered only when you name them. A name the data does not know matches nothing and the run ends with a free notice.

## `dateFrom` (type: `string`):

Required. First day of the window in which the company's last round was dated. Example: 2025-06-01. The funding records in this data currently reach 2025-12-01, so a window that starts later finds nothing.

## `dateTo` (type: `string`):

Last day of the window. Example: 2025-11-30. Leave empty for up to today.

## `countries` (type: `array`):

Keep companies in these countries, as two-letter ISO codes. Example: \["DE", "US"]. Use GB for the United Kingdom (UK matches nothing). At most 10. Leave empty for any country.

## `industries` (type: `array`):

Keep companies in these industries, written as industry names. Example: \["Software Development", "Hospitals and Health Care"]. An unknown name stops the run with a free notice that names it. At most 50. Leave empty for any industry.

## `sizes` (type: `array`):

Keep companies in these headcount bands. Example: \["51-200", "201-500"]. Chosen bands must touch (51-200 with 201-500 is fine, 11-50 with 201-500 is not). Companies with no headcount on file are not returned when you set a size. Leave empty for any size.

## `limit` (type: `integer`):

Most companies delivered in the whole run, which also caps what is charged. Default 10, maximum 10000. Free plan: 100 per run. Rows come smallest headcount first, so set sizes when you use a limit.

## `includeAudit` (type: `boolean`):

Adds requestId, latencyMs and matched (how many companies match the filters) to each row under audit. Omit for clean rows.

## Actor input object example

```json
{
  "roundTypes": [
    "series_a"
  ],
  "dateFrom": "2025-06-01",
  "countries": [
    "US"
  ],
  "sizes": [
    "11-50"
  ],
  "limit": 10,
  "includeAudit": false
}
```

# Actor output Schema

## `companies` (type: `string`):

One row per company: name, domain, round type, round date, amount when recorded, website, industry, employees and HQ

## `summary` (type: `string`):

How many companies match, how many were delivered, how many rows were skipped and why, and why the run stopped

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "roundTypes": [
        "series_a"
    ],
    "dateFrom": "2025-06-01",
    "countries": [
        "US"
    ],
    "sizes": [
        "11-50"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2bdata/funding-round-detector").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "roundTypes": ["series_a"],
    "dateFrom": "2025-06-01",
    "countries": ["US"],
    "sizes": ["11-50"],
}

# Run the Actor and wait for it to finish
run = client.actor("b2bdata/funding-round-detector").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "roundTypes": [
    "series_a"
  ],
  "dateFrom": "2025-06-01",
  "countries": [
    "US"
  ],
  "sizes": [
    "11-50"
  ]
}' |
apify call b2bdata/funding-round-detector --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2bdata/funding-round-detector"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LmfyAiU263TY1BVeG/builds/8tlpPHxLUqjBwLOIt/openapi.json
