# Recently Funded Startups Leads Scraper (`nice_dev/startup-funding-rounds-scraper`) Actor

Companies that just raised money, from SEC Form D filings: amount raised, date, industry, the executive to contact, phone, address, website, LinkedIn and e-mails found, lead score. Funds excluded, new raises only by default. B2B sales, recruiting, investors. Export to CSV, Excel or your CRM.

- **URL**: https://apify.com/nice\_dev/startup-funding-rounds-scraper.md
- **Developed by:** [Nice Dev](https://apify.com/nice_dev) (community)
- **Categories:** Lead generation, Business, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.42 / 1,000 company saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

### 🚀 What is Recently Funded Startups Leads Scraper?

**Recently Funded Startups Leads Scraper** gives you a **list of companies that just raised money**, ready to contact: every US startup or company that files a **Form D with the [SEC](https://www.sec.gov/edgar/search/)** after a private raise — **amount raised, date, industry, the executive to contact with their title, phone number, address** — and, as options, the **company website, its domain, its LinkedIn, X, Facebook and Instagram pages, and contact e-mails** found on it. Each row gets a **lead score** and a one-line summary for your CRM.

Pick a **date range** (`7 days`), one or several **states**, click **Start**, and export the leads to CSV, Excel, Google Sheets or your CRM. A company that raises money privately must file a Form D within 15 days of its first sale: you see who just raised, often before the press does — the right moment to sell software or services, recruit, or invest.

### 📋 What data can you extract about recently funded companies?

One row per Form D filing (a company that files two Form D gets two rows), 101 fields:

| Category | What you get |
| --- | --- |
| 🏢 **Company** | name, industry, legal form, state and year of incorporation, former names, SEC number (CIK) — `AutoIVF, Inc.` |
| 👤 **Person to contact** | the CEO, founder or president (else the first executive officer), first and last name, title — `Ravi Kapur, CEO` |
| 📍 **Contact** | business address, phone number (also in international form) — `22 Strathmore Road, Natick, MA` |
| 💵 **Raise** | amount raised so far, offering size, amount remaining, percent sold, number of investors, minimum investment, date of first sale |
| 🌐 **Website and social pages** | optional: the company website found and checked, its domain, its LinkedIn, X, Facebook, Instagram, YouTube, GitHub and Crunchbase pages |
| ✉️ **E-mails** | optional: contact e-mails found on the website, and the best one to write to |
| ⭐ **Lead score** | 0 to 100, with what it counted, and a one-line summary for a CRM, Slack or an AI agent |
| 👥 **People** | every executive officer, director and promoter of the filing, with role and address, and who signed |
| 🤝 **Placement agents** | broker-dealers paid to sell the offering, states where it was offered, commissions |
| 🗂️ **Funding history** | optional: every Form D the company ever filed, with dates, and its EIN |

Every field, with an example, is listed in the **Output** section below.

### ✅ Why use Recently Funded Startups Leads Scraper?

- 🎯 **Fresh raises only**: new offerings by default (the amendments of old raises are left out), operating companies only in the form (investment funds and real estate left out — about 3 filings in 4 are funds).
- 👤 **A person to write to**: the leader of the company, chosen from the filing's executives and its signature, with their title.
- 🌐 **From filing to website**: tick the option and the company website is guessed and checked on its home page; its social pages come with it, its e-mails as another option. The home pages read to look for the website are charged too (see the pricing).
- ⭐ **Sorted for outreach**: a lead score from what each row gives you to reach the company, and a one-line summary.
- 🔔 **A daily feed**: tick **Only new filings**, schedule the Actor, and each run returns (and charges) only the filings it never delivered before.
- 🗺️ **Where you sell**: one or several states, a list of cities, an industry, a minimum raise.
- 🔌 API, scheduling, integrations (Make, Zapier, n8n, HubSpot, Google Sheets…) and JSON/CSV/Excel export via the Apify platform.

### 🚀 How to get a list of recently funded companies

1. Create a free Apify account.
2. Open **Recently Funded Startups Leads Scraper**, set **Filed after** (e.g. `7 days`) and pick **States / countries**.
3. Tick **Find the company website** for the website and social pages (an option, off by default), and **Find e-mails on the company website** for contact e-mails too (an option, off by default, it needs the website); leave both unticked for the SEC data alone.
4. Set **Max filings** (20 in the form, 100 through the API, 0 = no limit), then click **Start**.
5. Download the leads in CSV, Excel or JSON, or send them to your CRM through an integration.

### 💰 How much does it cost to get recently funded companies?

This Actor uses **pay per event** pricing: **$0.75 per 1,000 companies** at the Gold price ($0.95 without a subscription), plus **$0.01 per run start**. Each option is charged on top, only on the rows it gave something to — an option asked for and not obtained is not charged. One exception: the website search. Each home page read while looking for a website is charged, the website found or not (in our test, 1.4 pages read for each company looked up: 95 pages read for 70 companies, a website found for 33):

| You pay for | No subscription | Bronze | Silver | Gold |
| --- | --- | --- | --- | --- |
| Company saved (`apify-default-dataset-item`) | $0.95 per 1,000 | $0.94 | $0.85 | $0.75 |
| Company's SEC profile (`company-profile`, option) | $7.20 per 1,000 | $6.90 | $6.50 | $5.80 |
| Amendment compared with the previous filing (`amendment-comparison`, option) | $8.60 per 1,000 | $8.10 | $7.70 | $7.30 |
| Company website found (`website-found`, option: its domain and social pages included) | $2.70 per 1,000 | $2.40 | $2.20 | $1.90 |
| Page read to find the website (`website-page-read`, part of the Website option) | $3.59 per 1,000 | $3.58 | $3.57 | $3.56 |
| E-mails found on that website (`email-enriched`, option) | $17.00 per 1,000 | $16.99 | $16.98 | $16.97 |
| Filing dropped by a filter after it was opened (`detail-filter-check`) | $0.2 per 1,000 | $0.19 | $0.18 | $0.17 |
| Monitoring run that delivers new companies (`new-filings-watch`, with **Only new filings**: once per run) | $0.045 | $0.045 | $0.045 | $0.045 |
| Run start (`apify-actor-start`, one per GB of memory: one at the default) | $0.01 | $0.01 | $0.01 | $0.01 |

Platinum and Diamond pay the Gold price. Two examples at the Gold price:

- 1,000 companies with the default settings (the website and the e-mails unticked): $0.75 + $0.01 = **$0.76**.
- 1,000 companies with the website and the e-mails ticked, a website found for 500 of them (about 1,400 pages read to look for them, 1.4 for each company) and e-mails for 200: $0.75 + $0.95 (websites) + $4.98 (about 1,400 pages read) + $3.39 (e-mails) + $0.01 = **$10.09** ($10.74 without a subscription).
  The lead score, the summary and the person to contact are included in the row. Filters that read the filing itself (issuer type, industry, amounts, investors, securities, young companies, phone) are applied by the Actor on every filing it opens: a filing you keep costs its normal price, a filing a filter drops costs only a small filter fee (`detail-filter-check`) — filtering never costs more than taking everything. Filters read on the search results (cities, excluded words, amendments, exemptions) cost nothing. Platform usage (compute, proxy) is included in the price.

### ⚙️ Input

Startups of New York and California that raised in the last week, with their website, social pages and e-mails:

```json
{
    "postedAfter": "7 days",
    "states": ["NY", "CA"],
    "issuerCategories": ["company"],
    "findWebsite": true,
    "enrichEmails": true,
    "maxItems": 200
}
```

Biotech and software companies of Massachusetts raising at least $1 million, only the ones not delivered before (a daily feed):

```json
{
    "postedAfter": "3 days",
    "states": ["MA"],
    "issuerCategories": ["company"],
    "industryGroups": ["Biotechnology", "Other Technology"],
    "minOfferingAmount": 1000000,
    "onlyNew": true,
    "stateKey": "ma-biotech"
}
```

Or with company names and CIKs:

```json
{
    "searchQueries": ["therapeutics", "robotics"],
    "ciks": ["1807161"],
    "maxItems": 500
}
```

Or with your own SEC URLs (the other search fields are then not used):

```json
{
    "startUrls": [{ "url": "https://www.sec.gov/Archives/edgar/data/1807161/000180716126000001/" }]
}
```

| Field | Notes |
| --- | --- |
| `query`, `searchQueries` | Company name words, as the SEC search reads them (`therapeutics`, `robotics`); `searchQueries` adds more names, one search each. |
| `states`, `stateType` | US states, Canadian provinces or countries (EDGAR codes); read as the place of business, or the state of incorporation. |
| `cities` | Keep only the companies whose business city is one of these (`New York`, `Austin`); free, read before the filing is opened. |
| `ciks` | SEC CIK numbers (`1807161`), one search per 50 CIKs. |
| `startUrls` | SEC full-text search URLs or Form D filing URLs (`https://www.sec.gov/Archives/edgar/data/1807161/000180716126000001/`). When given, the company names, states and CIKs are not searched. |
| `maxItems` | Stop after this many filings (rows) for the whole run (`0` = unlimited). |
| `maxItemsPerQuery` | Cap for EACH search (name, CIK batch or start URL). `0` = no per-search cap. |
| `extractDetails`, `includeCompanyProfile`, `compareWithPrevious` | Read the full filing (on by default: the person to contact, the phone and the amounts are in it), the company's SEC profile, and the filing an amendment replaces (options, off by default). |
| `findWebsite`, `enrichEmails` | Guess and check the company website (with its domain and social pages), then look for contact e-mails on it (third-party websites; two options, off by default; the e-mails need the website). The website option is charged per website found plus per home page read to look for it, found or not. |
| `postedAfter`, `postedBefore` | Filing date range: `2026-09-01`, or a period before now (`7 days`, `2 weeks`, `1 month`). |
| `includeAmendments` | Also return the amendments (Form D/A) of earlier raises; off by default: new raises only. |
| `issuerCategories`, `industryGroups`, `fundTypes`, `entityTypes` | Operating company / fund / real estate, the SEC industry group, the fund type, the legal form. |
| `minOfferingAmount`, `maxOfferingAmount`, `includeIndefiniteOffering`, `minAmountSold`, `minInvestors` | Size of the raise, amount already raised, investors already in. |
| `securityTypes`, `exemptions`, `incorporatedWithinFiveYears`, `requirePhone` | Securities offered, exemptions claimed (Rule 506(b), 506(c), Rule 506 for filings before September 2013…; read on the search results, free; older codes alone search up to the day the SEC stopped taking them), young companies only, companies with a phone number. |
| `excludeKeywords` | Drop the companies whose name contains one of these words (`fund`, `series`, `SPV`). |
| `onlyNew`, `stateKey`, `resetState` | Monitoring: only the filings never delivered under this memory key; `resetState` forgets the memory. |
| Advanced | `secUserAgent` (your name and e-mail for the SEC; empty works), `proxyConfiguration` (Apify proxy by default, included in the price; the residential proxy is not available), `maxConcurrency`, `maxRequestsPerMinute`, `minRequestIntervalMs`, `maxRequestRetries`, `debugLog`. |

### 📦 Output

A real company of 25/09/2026, with the website and e-mails options, shortened (one person, some e-mails cut):

```json
{
    "id": "0001807161-26-000001",
    "accessionNumber": "0001807161-26-000001",
    "url": "https://www.sec.gov/Archives/edgar/data/1807161/000180716126000001/",
    "primaryDocUrl": "https://www.sec.gov/Archives/edgar/data/1807161/000180716126000001/primary_doc.xml",
    "formType": "D",
    "isAmendment": false,
    "filingDate": "2026-09-25",
    "cik": "0001807161",
    "companyName": "AutoIVF, Inc.",
    "issuerCategory": "company",
    "industryGroup": "Biotechnology",
    "entityType": "Corporation",
    "jurisdictionOfIncorporation": "DELAWARE",
    "previousNames": [],
    "city": "NATICK",
    "state": "MA",
    "address": "22 STRATHMORE ROAD, SUITE 317, NATICK, MA 01760",
    "phone": "781-363-3530",
    "phoneE164": "+17813633530",
    "coIssuers": [],
    "relatedPersons": [
        {
            "name": "Ravi Kapur",
            "firstName": "Ravi",
            "lastName": "Kapur",
            "isCompany": false,
            "relationships": ["Executive Officer", "Director"],
            "city": "Natick",
            "state": "MA"
        }
    ],
    "executives": "Ravi Kapur (Executive Officer, Director); Michael Alper (Director); Mitchell Sayare (Executive Officer, Director); David Sable (Director); Erin Schardt (Director)",
    "contactName": "Ravi Kapur",
    "contactFirstName": "Ravi",
    "contactLastName": "Kapur",
    "contactTitle": "CEO",
    "totalOfferingAmount": 1500000,
    "totalAmountSold": 1500000,
    "percentSold": 100,
    "investorCount": 15,
    "dateOfFirstSale": "2026-08-07",
    "securityTypes": ["securityToBeAcquired", "other"],
    "otherSecurityDescription": "Simple Agreement for Future Equity",
    "federalExemptions": ["06b"],
    "salesCompensationRecipients": [],
    "statesOfSolicitation": [],
    "signerName": "Ravi Kapur",
    "signerTitle": "CEO",
    "fundingHistory": [],
    "edgarCompanyUrl": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0001807161&type=D",
    "changedFields": [],
    "website": "https://www.autoivf.com",
    "websiteMatch": "strong",
    "domain": "autoivf.com",
    "linkedinUrl": "https://www.linkedin.com/company/autoivf",
    "twitterUrl": null,
    "emails": ["info@autoivf.com", "ravi@autoivf.com", "emre@autoivf.com"],
    "emailSource": "https://www.autoivf.com/",
    "contactEmail": "ravi@autoivf.com",
    "leadScore": 100,
    "leadScoreReasons": ["phone", "contact", "website", "email", "newOffering", "moneyRaised"],
    "leadSummary": "AutoIVF, Inc. (Biotechnology, NATICK, MA) raised $1.5M of $1.5M (security to be acquired, Simple Agreement for Future Equity), Form D filed 2026-09-25. Contact: Ravi Kapur, CEO. Phone +17813633530. Website autoivf.com. E-mail ravi@autoivf.com.",
    "searchUrl": "https://efts.sec.gov/LATEST/search-index?page=1&from=0&forms=D&startdt=2026-09-20&enddt=2026-09-28&locationCodes=NY%2CCA%2CTX%2CMA%2CFL",
    "scrapedAt": "2026-09-27T16:03:48.162Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV or Excel. The **Leads** view of the Output tab shows the company, the raise, the person to contact, the phone, the website, the best e-mail, the LinkedIn page and the score.

#### All 101 fields

| Fields | What you get |
| --- | --- |
| `id`, `accessionNumber`, `url`, `primaryDocUrl` | the SEC accession number, the filing page, the filed XML |
| `formType`, `isAmendment`, `previousAccessionNumber`, `previousFilingUrl` | `D` or `D/A`; for an amendment, the filing it replaces |
| `filingDate`, `fileNumber`, `filmNumber` | `2026-09-25` (what the date filters read), SEC file and film numbers |
| `cik`, `companyName`, `issuerCategory`, `industryGroup`, `investmentFundType`, `is40Act` | **Company**: `0001807161`, `company` / `fund` / `realEstate`, the SEC industry group, the fund type |
| `revenueRange`, `netAssetValueRange` | revenue range (companies) or net asset value range (funds) |
| `entityType`, `entityTypeOther`, `jurisdictionOfIncorporation`, `yearOfIncorporation`, `incorporatedWithinFiveYears`, `previousNames` | legal form, state and year of incorporation, former names |
| `street1`, `street2`, `city`, `state`, `stateName`, `zipCode`, `address` | **Contact**: business address, also in one line |
| `phone`, `phoneE164` | `781-363-3530`, `+17813633530` |
| `coIssuers` | other issuers of the same offering |
| `relatedPersons`, `executives`, `relatedPersonCount` | **People**: name, role, address of every executive, director and promoter; one line for spreadsheets |
| `contactName`, `contactFirstName`, `contactLastName`, `contactTitle` | **Person to contact**: the CEO / founder / president, else the first executive officer, else the first person named; the title the filing gives, else the signature's when they signed it, else the role |
| `totalOfferingAmount`, `offeringAmountIndefinite`, `totalAmountSold`, `totalRemaining`, `percentSold`, `amountsClarification` | **Raise** in USD (`null` when indefinite) |
| `minimumInvestment`, `investorCount`, `hasNonAccreditedInvestors`, `nonAccreditedInvestorCount` | minimum investment, investors already in |
| `dateOfFirstSale`, `firstSaleYetToOccur`, `moreThanOneYear` | first sale, duration of the offering |
| `securityTypes`, `otherSecurityDescription`, `federalExemptions`, `isBusinessCombination` | securities offered, exemptions claimed (`06b` = Rule 506(b)) |
| `salesCommissions`, `salesCommissionsEstimate`, `findersFees`, `findersFeesEstimate`, `feesClarification`, `proceedsToInsiders` | commissions, finders' fees, money paid to the people above |
| `salesCompensationRecipients`, `statesOfSolicitation` | **Placement agents**: name, CRD number, broker-dealer, address, states where the offering was sold |
| `signerName`, `signerTitle`, `signatureDate` | who signed the filing |
| `ein`, `sic`, `sicDescription`, `formDFilingCount`, `formDAmendmentCount`, `firstFormDDate`, `fundingHistory`, `edgarCompanyUrl` | **Funding history** (option): from the company's SEC profile |
| `previousTotalAmountSold`, `amountSoldChange`, `previousTotalOfferingAmount`, `previousInvestorCount`, `changedFields` | **Amendments** (option): the replaced filing's figures and what changed |
| `website`, `websiteMatch`, `domain` | **Website** (option): the company website, how sure the match is, its domain |
| `linkedinUrl`, `twitterUrl`, `facebookUrl`, `instagramUrl`, `youtubeUrl`, `githubUrl`, `crunchbaseUrl` | **Social pages** (with the website): the company's pages linked from its home page |
| `emails`, `emailSource`, `contactEmail` | **E-mails** (option): found on the website, the page they were found on, the best one to write to |
| `leadScore`, `leadScoreReasons`, `leadSummary` | **Lead score**: 0-100 and what it counted; one line for a CRM |
| `searchUrl`, `scrapedAt` | the SEC search it was found by, ISO timestamp |

### 💡 Tips

#### How the lead score is counted

Out of 100, from what the row gives you to reach the company: a phone number 20, a named person to contact 20, a website 20 (10 when only the company name matched), an e-mail 20 (12 for a generic inbox such as `info@`), a new offering rather than an amendment 10, money already raised 10. `leadScoreReasons` lists what counted. Sort by it, or keep the rows above the score you want in your spreadsheet or CRM.

#### How to get more results

Leave **Issuer type** empty to get funds and real estate too, tick **Include amendments**, set `maxItems` to `0` and use a wider date range: a range with more than 10,000 filings is read in full, newest first.

#### How to reduce costs

The price is per filing saved, so the levers are `maxItems`, `maxItemsPerQuery`, the filters and `onlyNew` for recurring runs (you never pay twice for the same filing). `cities`, `excludeKeywords`, `includeAmendments` and `exemptions` are read on the search results: a filing they drop is never opened and costs nothing. The website, the e-mails, the SEC profile and the amendment comparison are off by default: tick them only when you need them. The website option costs a website found plus about 1.4 home pages read for each company looked up, found or not: tick it only for the companies you want to contact.

#### Several searches in one run

Fill `searchQueries` (company names) and / or `ciks`: the Actor runs one search per name and one per batch of 50 CIKs, each with the states and dates you chose. A filing found by several searches is saved — and charged — once. Set `maxItemsPerQuery` to give every search its own cap. You can also paste several SEC search URLs into `startUrls`.

#### Monitoring: only the new companies

Tick **Only new filings** (`onlyNew`) and schedule the Actor daily. The first run returns everything; each later run skips the filings already delivered: they are not saved, not charged, and not even opened. The memory lives in a named key-value store of your account (`startup-funding-rounds-scraper-seen`, up to 150,000 filings per key) and is only updated with filings that really reached the dataset, so a failed run never hides anything. A filing that a filter of the full filing dropped (issuer type, industry, amounts…) is remembered too, with those filters' settings: while they stay the same, it is neither opened nor charged a filter fee again, and the last message counts it as filtered out. Give each schedule its own `stateKey`, and tick `resetState` once to start over. A monitoring run that delivers at least one new company counts one `new-filings-watch` (see the pricing table); a run that finds nothing new, or is resumed after it was charged, does not count it again. The SEC lists the newest filings first: a search stops once it meets a long run of filings you already have.

#### Filter by filing date

`postedAfter` and `postedBefore` take a date (`2026-09-01`, the whole day is included, New York time) or a period before now (`7 days`, `2 weeks`, `1 month`). The SEC gives the filing DAY: the date filter reads `filingDate`. Filtered-out filings are not saved and do not count in `maxItems`.

### 🔌 Integrations and API

Call the Actor via the Apify API, the JavaScript or Python clients, or connect it with integrations and webhooks (Make, Zapier, n8n, HubSpot, Google Sheets, Slack, Airtable…). The dataset can be fetched as JSON or CSV from any tool, and `leadSummary` fits a Slack message or a CRM note as it is.

### 🤖 Use with AI agents (MCP)

AI agents (Claude, ChatGPT, Cursor…) can find and run this Actor through the [Apify MCP server](https://mcp.apify.com), billed to their Apify account like any run. It returns one row per Form D filing. Actor id: `nice_dev/startup-funding-rounds-scraper`; MCP server with this Actor only: `https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/startup-funding-rounds-scraper`.

Smallest input, for a cheap first call:

```json
{
    "postedAfter": "3 days",
    "issuerCategories": ["company"],
    "findWebsite": false,
    "enrichEmails": false,
    "maxItems": 10
}
```

Key output fields: `leadSummary`, `companyName`, `filingDate`, `totalAmountSold`, `industryGroup`, `contactName`, `contactTitle`, `phone`, `website`, `contactEmail`, `leadScore`.

Cost: pay per event, see the pricing section above (with `findWebsite` on, each home page read is charged too). Cap each call with `maxItems` and, through the API, with the run option `maxTotalChargeUsd`.

### ❓ FAQ

#### Is it legal to scrape SEC Form D filings?

The Actor only reads what the SEC publishes to everyone on EDGAR: Form D filings are public by law. It logs in to nothing. With the website option, it reads the public home page (and, for e-mails, a few public contact pages) of the company's own website. Results contain personal data (names and addresses of executives and promoters, as filed by the company; e-mails published on the company's website): do not store or use it without a legitimate reason, and follow the laws on marketing messages (CAN-SPAM, GDPR) when you contact people. You are responsible for your use of the data. This Actor is not affiliated with the U.S. Securities and Exchange Commission.

#### Does it need a login or a proxy?

No login, no SEC key. The proxy is included in the price: leave the default setting (the residential proxy is not available). The SEC asks automated tools to say who they are: the Actor does, and you can give your own name and e-mail in `secUserAgent`. A request the SEC turns away is retried at once on a new proxy session, up to 10 times on top of the retries (without a proxy, after a pause of 5 seconds, doubled at each retry up to 150 seconds).

#### What is a Form D, and how fresh is it?

A notice every company files with the SEC when it sells securities privately (Regulation D): startups raising seed or Series A money, growth companies, investment funds, real-estate offerings. It is due within 15 days of the first sale, so a filing is usually days or weeks old — often before any press release. Amendments (Form D/A) update it: new amount sold, new investors, a yearly renewal. This Actor returns the new raises only, unless you tick **Include amendments**.

#### How right are the website, the social pages and the person to contact?

The website is guessed from the company name and checked on its home page: `websiteMatch` is `strong` when the filing's phone, city or an executive's name is on the site, `name` when only the company name is (it can be a namesake). The social pages are the ones the home page links to, never guessed. In our tests on 40 new raises, a website was found for about half of the companies, a strong match for 1 in 5, and every social page returned was linked from the company's home page. The person to contact is read in the filing itself, with the names as the company filed them (sometimes in capital letters).

#### Is the data safe to open in Excel or to show on a web page?

Names and texts are the companies' own words, copied as they are. A text can begin with `-`, `+`, `=` or `@` (every `phoneE164` does): Excel and Google Sheets may read such a cell of a CSV file as a formula or a number. The Actor leaves the text as it is, so that the JSON and the API give the real value: when you open a CSV, import these columns as text. Every URL field holds an `https://` or `http://` URL, or `null`: never `javascript:` nor `data:`. On a web page, escape every field like any text written by a stranger.

#### Known limitations

- The SEC gives the filing day, not the time: the date filters and the monitoring work day by day.
- A Form D names no investors (only how many) and no funding round (seed, Series A): the amounts and the people are what the filing gives.
- The funding history reads the company's last 1,000 SEC filings of every kind: enough for nearly every Form D filer.
- The website is looked for on operating companies only (a fund or an SPV has none of its own); e-mails are read on strong matches only.
- `onlyNew` remembers filing numbers, not their content: an amendment is a new filing, returned as such when you ask for amendments.

**A run that reaches its timeout** stops itself about 45 seconds before it: no new page is asked, what it read is saved and, with `onlyNew`, remembered, and the run ends *Succeeded* with "Stopped before the run's timeout". Resurrect it to go on from there, or give the next run a longer timeout (Run options).

**A run the platform stops without warning** (out of memory, a lost server)

- Resurrect it: it goes on from where it stood at most a minute before the stop. What it had read since is read again, and the filings already saved are skipped: none is delivered or charged twice, and `maxItems` still counts them.
- With `onlyNew`, the memory is saved once a minute: resurrect the stopped run and the filings it had saved meanwhile join the memory; leave it stopped for good, and the next run may return up to a minute of them once more.

#### Something doesn't work?

The last line of the log counts the filings saved, filtered out and no longer on SEC EDGAR, and the requests that failed after every retry. Those requests are listed, with the reason, in the `FAILED_REQUESTS` record of the run's key-value store. A run that saved nothing and had failed requests fails, and its last message gives the cause.

If the SEC changes its pages, you are told instead of paying for blank rows. If the first 20 filings read all lack their company name, filing date or exemption codes — or, with the full filing, industry, phone, offering size, amount sold, investor count, related persons, entity type or security types — the run saves nothing more, stops and fails, and its last message names the missing field: at most those first filings are charged. A filing that a filter (dates, amounts, investors…) drops because it lacks the field that filter reads counts among those 20. A run of fewer filings (a scheduled `onlyNew` run that finds a few new ones, a small **Max filings**) is checked at its end, from 5 filings: its filings are already saved, and the run fails with the missing field instead of ending green.

### 🛟 Support

Open an issue in the **Issues** tab with a link to your run: the run log and the `FAILED_REQUESTS` record of the key-value store show exactly which URLs failed and why.

# Actor input Schema

## `startUrls` (type: `array`):

SEC EDGAR URLs: a Form D filing (its folder, e.g. `https://www.sec.gov/Archives/edgar/data/2156189/000215618926000001/`, or its XML) or an EDGAR full-text search (`https://efts.sec.gov/LATEST/search-index?forms=D&...`, or the `https://www.sec.gov/edgar/search/#/...` page with its filters). When this list is not empty, the company names, states and CIKs below are ignored; the filters, caps and monitoring still apply. Max 1 000 URLs.

## `query` (type: `string`):

Only filings whose issuer name matches these words, as the SEC search does (e.g. `therapeutics`, `capital`). Empty = every Form D filer.

## `searchQueries` (type: `array`):

Several names in one run: one search per name, each with all the states below. Added to **Company name**; a filing found by several searches is saved once.

## `states` (type: `array`):

Where the issuer is: US states, Canadian provinces or countries (EDGAR codes), one or several — done by the SEC search itself. Empty = everywhere.

## `stateType` (type: `string`):

Read **States / countries** as the issuer's principal place of business (default) or as its state of incorporation (most funds and startups are incorporated in Delaware).

## `cities` (type: `array`):

Keep only the issuers whose business address is in one of these cities (e.g. `New York`, `Miami`, `Greenwich`; case and accents ignored). Read on the search result, before the filing is opened: filtered-out filings cost nothing.

## `ciks` (type: `array`):

Only the Form D filings of these companies or funds (SEC Central Index Key, e.g. `2156189` or `0002156189`), searched in batches of 50 CIKs, added to the searches above.

## `maxItems` (type: `integer`):

Maximum number of filings to save for the whole run (after deduplication and filters), newest first. 0 = no limit.

## `maxItemsPerQuery` (type: `integer`):

Cap for EACH search (one company name with all its states, one batch of 50 CIKs, or one start URL), so that the first search cannot use up the whole **Max filings** budget. 0 = no per-search cap.

## `extractDetails` (type: `boolean`):

Open each filing (1 extra request) for the amounts, industry, executives and promoters, placement agents, exemptions and signature. Off = search-result fields only (name, CIK, date, city, state, exemptions): 1 request per 100 filings instead of 1 or more per filing, but the industry, amount, fund and phone filters need it on.

## `includeCompanyProfile` (type: `boolean`):

Read the issuer's SEC profile (1 extra request per company): EIN, former names, and its full Form D history (every raise and amendment filed, with dates). Charged per filing that gets it (`company-profile`).

## `compareWithPrevious` (type: `boolean`):

For an amendment (Form D/A), read the filing it amends (1 extra request) and add what changed: amount sold then and now, offering size, investors, and the list of changed fields. Charged per amendment compared (`amendment-comparison`).

## `findWebsite` (type: `boolean`):

Form D filings carry no website. The Actor guesses the domain from the company name and checks the home page (name present, not a parked domain; strong match when the filing's phone, city or an executive's name is on the page). Visits third-party websites; found for about half of the operating companies in our tests, and not always right: see `websiteMatch`. With the website come its domain and the company's LinkedIn, X, Facebook, Instagram, YouTube, GitHub and Crunchbase pages linked from its home page (no extra request). Off by default: charged per website found (`website-found`), plus a small fee per home page read to look for it, found or not (`website-page-read`, see Pricing).

## `enrichEmails` (type: `boolean`):

Look for contact e-mails on the company website (home, contact, legal and about pages; 3 pages max). Needs **Find the company website** (ticked alone, nothing is read and the run's log says so); only websites with a strong match are searched. `contactEmail` = the best of them (the contact's name, else a named person's). Off by default: charged per company with at least one e-mail (see Pricing).

## `postedAfter` (type: `string`):

Only filings the SEC received on or after this date: `2026-09-01`, or a period before now such as `7 days`, `2 weeks`, `1 month`. Empty = no lower bound (the newest filings come first).

## `postedBefore` (type: `string`):

Only filings received on or before this date (the whole day is included), or older than a period such as `30 days`.

## `includeAmendments` (type: `boolean`):

Off (default) = new raises only: the first Form D of each offering, the fresh leads. On = amendments too: they update an earlier filing (new amount sold, new investors, yearly renewal of a fund), each with the accession number of the filing it amends.

## `issuerCategories` (type: `array`):

Operating companies (startups and businesses raising money), pooled investment funds (hedge, private equity, venture capital) and real-estate offerings (SPVs, REITs, construction), from the filing's own industry group. Empty = all three (about 3 filings in 4 are funds).

## `industryGroups` (type: `array`):

The filing's industry group, as chosen by the issuer on the Form D. Empty = any.

## `fundTypes` (type: `array`):

For investment funds only. Empty = any.

## `entityTypes` (type: `array`):

The issuer's legal form. Empty = any.

## `minOfferingAmount` (type: `integer`):

Only offerings of at least this total size. 0 = no minimum. Offerings of indefinite size are kept unless you untick **Keep indefinite offerings**.

## `maxOfferingAmount` (type: `integer`):

Only offerings of at most this total size. 0 = no maximum.

## `includeIndefiniteOffering` (type: `boolean`):

Keep the offerings declared as « Indefinite » (no total size; most funds) when a size filter is set.

## `minAmountSold` (type: `integer`):

Only offerings that have already raised at least this amount. 0 = no minimum.

## `minInvestors` (type: `integer`):

Only offerings with at least this many investors already in. 0 = no minimum.

## `securityTypes` (type: `array`):

Keep a filing when it offers at least one of these. Empty = any.

## `exemptions` (type: `array`):

Keep a filing when it claims at least one of these federal exemptions. Empty = any. Read on the search result, before the filing is opened: filtered-out filings cost nothing. Filings before September 2013 claim Rule 506 without (b) or (c); older codes alone (Rule 506 before September 2013, Section 4(6), Rule 505) search the filings up to the last day the SEC took them.

## `incorporatedWithinFiveYears` (type: `boolean`):

Only issuers incorporated within the last five years (as ticked on the filing).

## `requirePhone` (type: `boolean`):

Drop the filings without an issuer phone number (rare).

## `excludeKeywords` (type: `array`):

Drop the filings whose issuer name contains one of these words (case and accents ignored), e.g. `fund`, `series`, `SPV`. Read on the search result: dropped filings cost nothing.

## `onlyNew` (type: `boolean`):

Skip the filings that a previous run (same **Memory key**) already delivered: they are not saved and not charged, and are not even opened. First run = everything is new. A run that delivers at least one new filing is charged one monitoring event (`new-filings-watch`, see Pricing); a run that finds nothing new is not.

## `stateKey` (type: `string`):

Name of the memory used by **Only new filings**. Give each schedule / task its own key (e.g. `ny-startups`) so that they do not share their memory. Letters, digits, `-` and `_`.

## `resetState` (type: `boolean`):

Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every filing again. Untick it afterwards.

## `secUserAgent` (type: `string`):

The SEC asks automated tools to say who they are: your company name and a contact e-mail (e.g. `Acme Research data@acme.com`). The e-mail is required: the SEC turns away a name alone or a browser's User-Agent. Empty = the Actor declares itself (works). Accents and special signs are removed before sending. Never shown in the dataset.

## `proxyConfiguration` (type: `object`):

Apify Proxy or your own proxies. Keep the default: it is included in the price, and the SEC answers it. The residential Apify proxy is not available in this Actor.

## `maxConcurrency` (type: `integer`):

Maximum number of requests processed in parallel.

## `maxRequestsPerMinute` (type: `integer`):

Most requests to the SEC in any 60 seconds, all of them counted (search pages, filings, company profiles). The SEC allows 10 per second at most; the default stays at half of it.

## `minRequestIntervalMs` (type: `integer`):

Smallest gap between two requests to the SEC, in milliseconds (200 = 5 per second). Never below 100 (the SEC's limit of 10 per second).

## `maxRequestRetries` (type: `integer`):

Retries per request before it is marked as failed. Behind a proxy, a request the SEC turns away is also retried on a new proxy session up to 10 times without using up these retries.

## `debugLog` (type: `boolean`):

Include debug messages in the run log.

## Actor input object example

```json
{
  "startUrls": [],
  "searchQueries": [],
  "states": [
    "NY",
    "CA"
  ],
  "stateType": "located",
  "cities": [],
  "ciks": [],
  "maxItems": 20,
  "maxItemsPerQuery": 0,
  "extractDetails": true,
  "includeCompanyProfile": false,
  "compareWithPrevious": false,
  "findWebsite": false,
  "enrichEmails": false,
  "postedAfter": "7 days",
  "includeAmendments": false,
  "issuerCategories": [
    "company"
  ],
  "industryGroups": [],
  "fundTypes": [],
  "entityTypes": [],
  "minOfferingAmount": 0,
  "maxOfferingAmount": 0,
  "includeIndefiniteOffering": true,
  "minAmountSold": 0,
  "minInvestors": 0,
  "securityTypes": [],
  "exemptions": [],
  "incorporatedWithinFiveYears": false,
  "requirePhone": false,
  "excludeKeywords": [],
  "onlyNew": false,
  "stateKey": "default",
  "resetState": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 5,
  "maxRequestsPerMinute": 300,
  "minRequestIntervalMs": 200,
  "maxRequestRetries": 5,
  "debugLog": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "states": [
        "NY",
        "CA"
    ],
    "maxItems": 20,
    "postedAfter": "7 days",
    "issuerCategories": [
        "company"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nice_dev/startup-funding-rounds-scraper").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 = {
    "states": [
        "NY",
        "CA",
    ],
    "maxItems": 20,
    "postedAfter": "7 days",
    "issuerCategories": ["company"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("nice_dev/startup-funding-rounds-scraper").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 '{
  "states": [
    "NY",
    "CA"
  ],
  "maxItems": 20,
  "postedAfter": "7 days",
  "issuerCategories": [
    "company"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call nice_dev/startup-funding-rounds-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/startup-funding-rounds-scraper"
        }
    }
}
```

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/mu4tGyvaay7LpOybG/builds/L9XnrqZEHnJDy9zh7/openapi.json
