# Startup Funding Signals — SEC Form D, TechCrunch & YC Leads (`opensignals/startup-funding-signals`) Actor

Find companies that just raised money — the classic B2B buying signal. Official SEC Form D filings (amounts, executives with roles, phone numbers, still-raising status), TechCrunch announcements and recent YC batches. Scored leads, watch mode, CSV-ready output.

- **URL**: https://apify.com/opensignals/startup-funding-signals.md
- **Developed by:** [Andrey](https://apify.com/opensignals) (community)
- **Categories:** Lead generation, Automation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Startup Funding Signals — SEC Form D, TechCrunch & YC Leads

*Startup funding scraper & investor lead finder — SEC Form D filings, TechCrunch rounds and Y Combinator companies as scored B2B sales leads.*

**Companies that just raised money have budgets.** A fresh raise is the classic B2B buying signal: new headcount, new tooling, new vendors — decided in the following weeks. This Actor turns three public sources into scored, outreach-ready lead records:

| Source | What you get |
|---|---|
| **SEC EDGAR Form D** | Official US capital-raise filings — amounts, executives with roles, **company phone numbers**, revenue range, still-raising status. Companies must file within 15 days of first sale, so this is fresher than most databases |
| **TechCrunch** | Announced rounds worldwide, parsed from the venture feed into company + amount + round |
| **Y Combinator** | Current-batch companies with websites and team sizes — funded by definition |

No API keys, no Crunchbase account, no paywalls — 100% public primary sources.

### What makes these leads different

Fields competitors don't surface:

- **`phone`** — the issuer phone number straight from the official filing. A direct channel that no scraped database gives you.
- **`raise_status: still_raising`** — Form D shows `amount_remaining` > 0: the round is **open right now**. These companies are simultaneously (a) spending and (b) looking for investors — two audiences, one record.
- **`officers`** with roles (Executive Officer, Director, Promoter) plus ready-made **LinkedIn people-search links** per officer — from filing to outreach in one click.
- **`is_amendment`** — D/A filings update earlier ones and reveal raise progress over time.
- **`revenue_range`**, **`investors_count`**, **`minimum_investment`**, **`year_of_incorporation`** — qualification fields for free.
- **`funding_score` 0–100** — transparent lead scoring (see below). Sort descending, call the top first.

#### 💥 Composite intent: funded AND hiring

For the top-scored leads, the Actor probes **7 ATS job boards** (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Workday, Personio): does the freshly-funded company have a live job board? `hiring_check` returns the board URL and open-jobs count, and `composite_intent_score` adds +15.

Money in the bank AND actively hiring = spending mode confirmed by two independent sources. (Toggles: `checkHiring`, `checkHiringTop`.)

#### The `funding_score`

| Component | Max | Meaning |
|---|---|---|
| Filing freshness (30-day decay) | 30 | New money = active decisions |
| Amount actually raised | 25 | $1M+/$10M+/$50M+ buckets |
| Round still open | 15 | Actively fundraising right now |
| Named officers | 10 | Reachable decision makers |
| Brand-new filing (not amendment) | 10 | First signal, not an update |
| 5+ investors already in | 10 | Momentum |

### Typical setups

- **B2B sales:** `daysBack: 7`, `excludeRealEstate: true`, `minAmountRaised: 1000000`, schedule weekly → fresh operating companies with $1M+ in the bank, sorted by score, with phones and officer names.
- **Agencies & service providers:** watch mode (`onlyNewEvents: true`) daily → only new raises since yesterday, piped to Slack/Sheets via Apify integrations.
- **Investors & bizdev:** `raise_status == "still_raising"` → companies with open rounds; `is_amendment` tracking shows whose raise is progressing.
- **Real-estate capital markets:** leave `excludeRealEstate` off — Form D is the richest public feed of syndication sponsors raising capital, with sponsor phones.

### Filters

`daysBack` (1–90) · `minAmountRaised` · `keywords` (name/industry/description) · `industryFilter` · `locationFilter` (state/city) · `excludeInvestmentFunds` (on by default — hides VC/PE fund vehicles) · `excludeRealEstate` · `excludeAmendments` · `maxFilings` · `maxYcCompanies`

### Modes

- **`outputMode: flat_leads`** — one flat row per event (no nested objects): company, score, amount, status, phone, officers as text, first-officer LinkedIn link. Export to CSV/Google Sheets/CRM with zero post-processing.
- **Watch mode** (`onlyNewEvents`) — remembers seen events in your account and emits only new ones. First run = baseline; schedule it daily and get a clean fresh-raises feed. No extra "watch fee" — you pay only for actual new results.
- **`market_summary`** — every run ends with one analytics record: totals, medians, largest round, top industries and states, open-rounds count.

### Honest limitations

- Form D covers **US** private placements only; TechCrunch adds global announced rounds.
- Some filings state `Indefinite` amounts — kept, with `null` amount fields.
- Form D is filed up to 15 days after first sale — "fresh", not "real-time".
- TechCrunch parsing is headline-based; only clear "X raises $Y" announcements are captured.

### FAQ

**Is this legal?** Yes — SEC EDGAR is a public government database explicitly published for public use; TechCrunch RSS and the YC directory are public feeds. The Actor respects SEC fair-access guidelines (identified requests, throttled rate).

**Why do I see real-estate LLCs?** Form D is heavily used by real-estate syndications. Turn on `excludeRealEstate` if you sell to tech companies.

**Something broken or missing a feature?** Open an issue on the Actor's Issues tab — I respond within 1–2 business days.

***

*Pair it with [ATS Hiring Signals](https://apify.com/opensignals/ats-hiring-signals): a company that just raised AND is hiring for your keywords is the hottest lead there is. Run both on a schedule and join on company name.*

# Actor input Schema

## `sources` (type: `array`):

`sec_form_d` = official SEC EDGAR capital-raise filings (US, richest fields: amounts, officers, phone). `techcrunch` = announced rounds worldwide from TechCrunch. `ycombinator` = recent YC batches with websites.

## `daysBack` (type: `integer`):

How many days of funding events to pull (max 90). Fresh raises are the strongest signal.

## `minAmountRaised` (type: `integer`):

Skip events below this amount (0 = no minimum). E.g. 1000000 keeps only $1M+ raises.

## `keywords` (type: `array`):

Match against company name, industry and description. E.g. `AI`, `health`, `fintech`.

## `industryFilter` (type: `array`):

Only include events whose industry contains any of these substrings, e.g. `Technology`, `Healthcare`, `Commercial`.

## `locationFilter` (type: `array`):

Only include companies whose state or city contains any of these, e.g. `California`, `New York`, `Texas`.

## `excludeInvestmentFunds` (type: `boolean`):

Form D is also filed by VC/PE/hedge funds raising their own vehicles. Keep this ON to see operating startups only.

## `excludeAmendments` (type: `boolean`):

Amendments update earlier filings (often show raise progress). OFF keeps them with `is_amendment: true`.

## `onlyNewEvents` (type: `boolean`):

Remember previously seen events and output only NEW ones. Schedule daily for a fresh-raises alert feed.

## `maxFilings` (type: `integer`):

Cap on Form D filings fetched per run (each needs one SEC request).

## `outputMode` (type: `string`):

`signals` = full records with nested officers/scores. `flat_leads` = one flat row per event, ready for CSV/Sheets/CRM import.

## `maxYcCompanies` (type: `integer`):

Cap on Y Combinator current-year batch companies returned per run.

## `excludeRealEstate` (type: `boolean`):

Form D is heavily used by real-estate syndications (DST/LLC deals). Turn ON if you sell to tech/operating startups; leave OFF if real-estate sponsors ARE your leads.

## `checkHiring` (type: `boolean`):

For top-scored funding leads, probe 7 ATS job boards: is the freshly-funded company also hiring? Raised money AND hiring = the hottest B2B lead. Adds `hiring_check` and `composite_intent_score`.

## `checkHiringTop` (type: `integer`):

How many top-scored leads to probe for live job boards.

## `raiseHistory` (type: `boolean`):

For Form D leads, fetch the company's past filings: `raise_count` and dates. Repeat raisers = growth trajectory.

## Actor input object example

```json
{
  "sources": [
    "sec_form_d",
    "techcrunch",
    "ycombinator"
  ],
  "daysBack": 7,
  "minAmountRaised": 0,
  "keywords": [],
  "industryFilter": [],
  "locationFilter": [],
  "excludeInvestmentFunds": true,
  "excludeAmendments": false,
  "onlyNewEvents": false,
  "maxFilings": 200,
  "outputMode": "signals",
  "maxYcCompanies": 300,
  "excludeRealEstate": false,
  "checkHiring": true,
  "checkHiringTop": 50,
  "raiseHistory": true
}
```

# Actor output Schema

## `leads` (type: `string`):

Companies that just raised — sorted by funding\_score, with officers, phones and links

## `allResults` (type: `string`):

Full records including the market summary

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("opensignals/startup-funding-signals").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("opensignals/startup-funding-signals").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 '{}' |
apify call opensignals/startup-funding-signals --silent --output-dataset

```

## MCP server setup

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

```

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/KWXdrZg4mpYfyMlhL/builds/6FiijDuBadNofDWbW/openapi.json
