---
title: "Crunchbase scraper"
description: "Scrape Crunchbase company profiles as JSON: funding rounds, investors, acquisitions, founders, headcount and CB Rank. One API request from Python, Node.js or MCP."
canonical: https://www.zenrows.com/scrape/crunchbase
updated: 2026-10-20
---

# Crunchbase scraper

The Zenrows Crunchbase scraper turns a Crunchbase organization URL into JSON: company name, description, headquarters, employee range, CB Rank, growth and heat scores, monthly web visits, funding rounds, lead investors, acquisitions, founders, key employees and categories. Fetch in Adaptive Stealth Mode opens the page, and Extract returns the fields. Run it from an API call, the CLI or an AI agent.

- Site: crunchbase.com
- Returns: Company profiles, funding, investors and acquisitions

## Run it: one Crunchbase company in, JSON out

```json Input
{
  "url": "https://www.crunchbase.com/organization/stripe",
  "mode": "auto",
  "extract": "auto"
}
```

```json Output
{
  "company": {
    "name": "Stripe",
    "legal_name": "Stripe, LLC",
    "description": "Stripe provides financial infrastructure that supports online and in-person payments, billing, money movement, and financial services.",
    "website_url": "https://stripe.com",
    "city": "South San Francisco",
    "region": "California",
    "country": "United States",
    "employee_count_range": "c_05001_10000",
    "operating_status": "active",
    "ownership_status": "private",
    "cb_rank": 54,
    "growth_score": 93,
    "heat_score": 72,
    "monthly_web_visits": 232542245,
    "num_funding_rounds": 24,
    "num_acquisitions": 24,
    "last_funding_type": "secondary_market"
  },
  "funding_rounds": [
    {
      "transaction_name": "Secondary Market - Stripe",
      "funding_type": "Secondary Market",
      "lead_investors": "Robinhood Ventures",
      "crunchbase_url": "/funding_round/stripe-secondary-market--9d7e5ac9"
    }
  ],
  "acquisitions": [
    {
      "transaction_name": "OpenRouter acquired by Stripe",
      "acquiree_name": "OpenRouter",
      "acquiree_crunchbase_url": "/organization/openrouter"
    }
  ],
  "founders": [
    { "name": "Patrick Collison", "crunchbase_url": "/person/patrick-collison" }
  ]
}
```

Request and output of a live call to a Crunchbase organization page on Oct 20, 2026, trimmed for length. A field is returned when the page shows it.

## What data can you scrape from Crunchbase?

A Crunchbase organization page returns the company profile plus a dozen lists: funding, investors, acquisitions, people, products and subsidiaries. These are the fields teams use most, with the path where each lives in the JSON.

| Field | What it holds | Example |
|---|---|---|
| `company.name` | Company name | `Stripe` |
| `company.legal_name` | Registered legal name | `Stripe, LLC` |
| `company.description` | Crunchbase's short description | `Stripe provides financial infrastructure…` |
| `company.city`, `company.region`, `company.country` | Headquarters location | `South San Francisco`, `California`, `United States` |
| `company.employee_count_range` | Headcount band as Crunchbase codes it | `c_05001_10000` |
| `company.cb_rank` | Crunchbase's company rank | `54` |
| `company.growth_score` | Crunchbase growth score | `93` |
| `company.heat_score` | Crunchbase heat score | `72` |
| `company.monthly_web_visits` | Estimated monthly visits to the company website, with `monthly_web_visits_change_pct` | `232542245` |
| `company.it_spend` | Estimated IT spend | `$393.5M` |
| `company.num_funding_rounds` | Funding rounds on record, next to `last_funding_type` | `24` |
| `company.ownership_status` | Private or public | `private` |
| `funding_rounds[]` | Round name, type, lead investors and link | `{ "funding_type": "Secondary Market", … }` |
| `investors[]` | Investor name, the round they joined, lead flag | `{ "name": "Robinhood Ventures", … }` |
| `acquisitions[]` | Companies acquired, with links to their own pages | `{ "acquiree_name": "OpenRouter", … }` |
| `founders[]`, `key_employees[]`, `board_members[]` | Names and titles of founders, executives and board members | `{ "job_title": "Chief Financial Officer", … }` |
| `categories[]` | Industry tags | `FinTech`, `Payments` |
| `sub_organizations[]` | Subsidiaries and their relationship | `{ "name": "Paystack", "relationship_type": "Subsidiary" }` |

## How to scrape Crunchbase with Zenrows

1. **Create a free Zenrows account** and copy your API key from the dashboard.
2. **Find the organization URL.** Every company lives at `https://www.crunchbase.com/organization/<permalink>`. The permalink is usually the company name in lowercase; when two companies share a name, Crunchbase adds a short suffix, as in `/organization/parafin-1b48`.
3. **Send it with the default configuration**: Adaptive Stealth Mode to open the page and Extract to return the fields. Crunchbase pages are heavy, so give the request a generous timeout, as in the examples.
4. **Read `parsed`.** To keep only some fields, list them with their paths and the response returns just those.
5. **Run your company list in Batch** with the permalink as your ID.

```python Python
# pip install requests
import requests

params = {
    "apikey": "YOUR_ZENROWS_API_KEY",
    "url": "https://www.crunchbase.com/organization/stripe",
    "mode": "auto",      # Adaptive Stealth Mode
    "extract": "auto",   # structured JSON
}
response = requests.get("https://api.zenrows.com/v1/", params=params, timeout=180)
response.raise_for_status()

data = response.json()["parsed"]
company = data["company"]
print(company["name"], company["cb_rank"], company["employee_count_range"], company["last_funding_type"])
for deal in data.get("acquisitions", []):
    print("acquired:", deal["acquiree_name"])
```

```javascript Node.js
// Node 18+ (built-in fetch)
const params = new URLSearchParams({
  apikey: "YOUR_ZENROWS_API_KEY",
  url: "https://www.crunchbase.com/organization/stripe",
  mode: "auto",
  extract: "auto",
});

const response = await fetch(`https://api.zenrows.com/v1/?${params}`, {
  signal: AbortSignal.timeout(180_000),
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);

const { parsed } = await response.json();
console.log(parsed.company.name, parsed.company.growth_score, parsed.categories.map((c) => c.name));
```

```bash cURL
curl --max-time 180 "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.crunchbase.com%2Forganization%2Fstripe&mode=auto&extract=auto"

# Only the fields you need
curl --max-time 180 "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.crunchbase.com%2Forganization%2Fstripe&mode=auto&extract=auto&extract_fields=company.name%2Ccompany.cb_rank%2Ccompany.num_funding_rounds%2Cfunding_rounds%2Cinvestors"
```

```python Python SDK
# pip install zenrows
from zenrows import ZenRowsClient

client = ZenRowsClient("YOUR_ZENROWS_API_KEY")
response = client.get(
    "https://www.crunchbase.com/organization/stripe",
    params={"mode": "auto", "extract": "auto"},
)
parsed = response.json()["parsed"]
for person in parsed["key_employees"]:
    print(person["name"], "|", person["job_title"])
```

## Input

The scraper takes one Crunchbase organization URL per request. A Batch job applies the same options to every company in it, so the input for a target list is the list of organization URLs and the settings below.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `url` | string | required | A Crunchbase organization page, `https://www.crunchbase.com/organization/<permalink>` |
| `mode` | string | `auto` | Adaptive Stealth Mode: starts with the lightest setup and adds rendering and protected-site handling only when the page needs them |
| `extract` | string | `auto` | Returns the company record as JSON in `parsed`, next to the raw `html` |
| `extract_fields` | string | all fields | Comma-separated paths to keep, such as `company.name,company.cb_rank,funding_rounds,acquisitions` |
| `proxy_country` | string | any | Two-letter country code, optional. Set it when you want the request to come from a specific country |
| `wait_for` | string | none | A CSS selector to wait for before the page is read |

```json Batch input
{
  "type": "regular",
  "status": "closed",
  "zenrows_params": {
    "mode": "auto",
    "extract": "auto"
  },
  "tasks": [
    { "url": "https://www.crunchbase.com/organization/stripe", "external_id": "stripe" },
    { "url": "https://www.crunchbase.com/organization/paystack", "external_id": "paystack" },
    { "url": "https://www.crunchbase.com/organization/openrouter", "external_id": "openrouter" }
  ]
}
```

## Output

Every response is JSON with two keys: `html`, the page as Crunchbase served it, and `parsed`, the structured record. The sample below is a trimmed live output with one or two items per list.

```json Organization page
{
  "company": {
    "name": "Stripe",
    "legal_name": "Stripe, LLC",
    "company_type": "for_profit",
    "crunchbase_url": "https://www.crunchbase.com/organization/stripe",
    "linkedin_url": "https://www.linkedin.com/company/stripe",
    "website_url": "https://stripe.com",
    "hub_tags": "Unicorn",
    "employee_count_range": "c_05001_10000",
    "cb_rank": 54,
    "growth_score": 93,
    "heat_score": 72,
    "monthly_web_visits": 232542245,
    "monthly_web_visits_change_pct": 14.42,
    "it_spend": "$393.5M",
    "active_tech_products_count": 66,
    "num_funding_rounds": 24,
    "num_investments": 97,
    "num_acquisitions": 24,
    "num_sub_organizations": 5,
    "registered_patents_count": 391,
    "registered_trademarks_count": 105
  },
  "categories": [
    { "name": "FinTech", "crunchbase_url": "/search/organizations/field/organization/categories/fintech-e067" },
    { "name": "Payments", "crunchbase_url": "/search/organizations/field/organization/categories/payments" }
  ],
  "investors": [
    {
      "name": "Robinhood Ventures",
      "funding_round_name": "Secondary Market - Stripe",
      "is_lead_investor": true,
      "crunchbase_url": "/organization/robinhood-ventures"
    }
  ],
  "acquisitions": [
    {
      "acquiree_name": "Lemon Squeezy",
      "acquiree_crunchbase_url": "/organization/lemon-squeezy",
      "transaction_name": "Lemon Squeezy acquired by Stripe",
      "announced_date": null
    },
    {
      "acquiree_name": "Bridge",
      "acquiree_crunchbase_url": "/organization/bridge-05d0",
      "transaction_name": "Bridge acquired by Stripe",
      "announced_date": null
    }
  ],
  "key_employees": [
    { "name": "Steffan Tomlinson", "job_title": "Chief Financial Officer", "crunchbase_url": "/person/steffan-tomlinson" },
    { "name": "John Collison", "job_title": "President and Co-Founder", "crunchbase_url": "/person/john-collison" }
  ],
  "board_members": [
    { "name": "Diane Greene", "role": "Board Member", "start_year": "2018", "crunchbase_url": "/person/diane-greene" }
  ],
  "products_and_services": [
    {
      "name": "Stripe Billing",
      "description": "A billing platform for recurring, usage-based, tiered, and one-time charges, including subscription management and revenue collection."
    }
  ],
  "sub_organizations": [
    { "name": "Paystack", "relationship_type": "Subsidiary", "crunchbase_url": "/organization/paystack" }
  ],
  "interest_signals": [
    { "topic": "Program Management", "surge_score": 100 }
  ]
}
```

The `crunchbase_url` values in the lists are relative paths. Prefix them with `https://www.crunchbase.com` to request the investor, acquired company or subsidiary as its own page.

## Scrape Crunchbase from your coding agent

Claude Code, Cursor, Codex and any MCP client can research a company on Crunchbase from a prompt.

The agent sends the same Fetch and Extract request shown above and reads the same JSON. Connect the Zenrows MCP server once, or install the CLI and let the agent call it in the terminal.

```bash Connect the MCP server (Claude Code)
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp
```

```json MCP config (Cursor, Claude Desktop, Windsurf)
{
  "mcpServers": {
    "zenrows": {
      "command": "npx",
      "args": ["-y", "@zenrows/mcp"],
      "env": { "ZENROWS_API_KEY": "YOUR_ZENROWS_API_KEY" }
    }
  }
}
```

```bash Or run the CLI
npx -y @zenrows/cli init
zenrows extract "https://www.crunchbase.com/organization/stripe"
```

```text Then ask your agent
Use Zenrows to read these Crunchbase pages and build a table with
headquarters, employee range, CB Rank, last funding type, number of
acquisitions and the three most recent companies each one acquired:
https://www.crunchbase.com/organization/stripe
https://www.crunchbase.com/organization/paystack
```

## Scrape Crunchbase at scale with Batch and Crawl

**Batch** runs a list of organization URLs as one job, in parallel, with your own ID on each result. Use it to refresh a target account list or a portfolio every week and diff funding, headcount band and scores between runs.

**Crawl** maps the network around a company. Start it on an organization page, keep the links that contain `/organization/`, and it follows the acquisitions, subsidiaries and investors to their own pages. Send the URLs it returns to Batch with Extract to get each one as a company record.

```bash Batch (cURL)
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "regular",
    "status": "closed",
    "zenrows_params": { "mode": "auto", "extract": "auto" },
    "tasks": [
      { "url": "https://www.crunchbase.com/organization/stripe", "external_id": "stripe" },
      { "url": "https://www.crunchbase.com/organization/paystack", "external_id": "paystack" }
    ]
  }'

# Read the results when the job finishes
curl "https://async.api.zenrows.com/v1/jobs/JOB_ID/results?status=successful" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY"
```

```bash Batch (CLI)
# companies.jsonl: one {"url": "...", "external_id": "...", "extract": "auto"} per line
zenrows batch create companies.jsonl --wait
zenrows batch results <job-id> --out crunchbase-companies.jsonl
```

```bash Crawl (cURL)
curl -X POST "https://api.zenrows.com/v1/crawls" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.crunchbase.com/organization/stripe",
    "depth": 1,
    "max_pages": 60,
    "include_patterns": ["/organization/"]
  }'
```

**Scheduled jobs** run the same Batch job on a timetable, on Zenrows' side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can tell your app when a run finishes, and you can pause or resume the schedule at any time, with no cron server to keep alive.

```bash Scheduled job (cURL)
# Runs every day on Zenrows' side; each run keeps its own results
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "type": "scheduled",
      "status": "closed",
      "schedule": {
        "rate": {
          "every": 1,
          "unit": "day"
        }
      },
      "zenrows_params": {
        "mode": "auto",
        "extract": "auto"
      },
      "tasks": [
        {
          "url": "https://www.crunchbase.com/organization/stripe",
          "external_id": "crunchbase"
        }
      ]
    }'

# Or at set times: "schedule": { "calendar": { "times_of_day": ["09:00"],
#   "cadence": { "weekly": { "days": ["mon", "thu"] } } }, "timezone": "Europe/Madrid" }
```

## What teams do with Crunchbase data

| Use case | Data they pull | Who runs it |
|---|---|---|
| Deal sourcing | Last funding type, number of rounds, lead investors, growth and heat scores | Venture capital and private equity analysts |
| Account scoring | Employee range, monthly web visits, IT spend, categories | Sales ops and RevOps teams |
| Competitor and M&A tracking | Acquisitions, subsidiaries and new products of companies in a market | Corporate development and strategy teams |
| Market maps | Categories, headquarters and ownership status across a list of companies | Analysts and consultants |
| Investor research | Investors per round and the companies they backed | Founders raising a round and IR teams |
| CRM enrichment | Legal name, website, LinkedIn URL and headquarters per account | Marketing ops and data teams |

## Tips for scraping Crunchbase

- **Keep the permalink as your key.** The part after `/organization/` never changes when a company renames its website. Use it as the `external_id` in Batch.
- **Map Crunchbase's employee codes once.** `employee_count_range` uses codes like `c_05001_10000`. Translate them to your own bands (5,001 to 10,000) in one lookup table.
- **Follow the relative links.** Investors, acquisitions, subsidiaries and people come with `crunchbase_url` paths such as `/organization/paystack`. Add the domain and send them through the same request to go one level deeper.
- **Read the counts next to the lists.** The page shows the latest items of each list, while `num_funding_rounds`, `num_acquisitions` and `num_investments` hold the full totals. Use the counts for scoring and the lists for names.
- **Join with LinkedIn.** `company.linkedin_url` links straight to the company's LinkedIn page. Send it through the [LinkedIn scraper](/scrape/linkedin) to add LinkedIn headcount and followers to the same record.
- **Diff runs to spot change.** A new item in `acquisitions[]`, a new `last_funding_type` or a jump in `heat_score` between two weekly runs is the signal deal and sales teams act on.

## Frequently asked questions

### Is it legal to scrape Crunchbase?

Collecting company data that Crunchbase shows publicly, such as company profiles, categories and the names of acquired companies, is common practice for market research. Founder, executive and board member names are personal data under the GDPR and the CCPA, so keep only what you need and have a lawful basis for. Crunchbase's terms restrict automated collection and reuse of its data, so check them for your use case and ask your lawyer if you are unsure.

### Is there an official Crunchbase API?

Yes. Crunchbase API v4 requires a Crunchbase license; the broader data needs an Enterprise license. Teams that need a handful of fields across many companies, or data from the public page as it stands today, use a scraper instead.

### What Crunchbase pages can I scrape?

Organization pages at https://www.crunchbase.com/organization/<permalink> , which hold the company profile, funding, investors, acquisitions, people, products and subsidiaries. Investor firms have organization pages too, so the same request works for them.

### Can I scrape Crunchbase funding rounds and investors?

Yes. funding_rounds[] returns each round's name, type and lead investors, and investors[] returns each investor with the round and a lead flag. num_funding_rounds and last_funding_type sum it up in the company record.

### Does the scraper return contact details?

No. The scraper returns public company data and the names and titles of founders and executives as Crunchbase lists them. It is not a tool for finding emails or phone numbers of people.

### How do I scrape Crunchbase with Python?

Send a GET request to https://api.zenrows.com/v1/ with your API key, the organization URL, Adaptive Stealth Mode and Extract turned on, as in the Python example above. The parsed key holds the company as a dictionary. The zenrows package on PyPI wraps the same request.

### How many Crunchbase companies can I scrape?

Send one URL per request, or a list as a Batch job that runs the URLs in parallel and keeps your own ID on each result. One Batch job accepts more than 10,000 URLs, sent inline or as a CSV file.

### Can AI agents scrape Crunchbase with Zenrows?

Yes. Connect the Zenrows MCP server to Claude, Cursor, Codex or any MCP client, or give your agent the Zenrows CLI. Ask for the companies you want in plain language and the agent calls Fetch and Extract for you.

### Can I scrape Crunchbase on a schedule?

Yes. Create a scheduled Batch job with your Crunchbase URLs and the same settings as a single request, and Zenrows runs it on its side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can notify your app when a run finishes, and the schedule can be paused or resumed at any time.

### Which integrations work with the Crunchbase scraper?

Zenrows works with n8n, Make, Zapier, Clay, Dify, LangChain, LlamaIndex, CrewAI and Mastra, plus the Python, Node.js and Go SDKs and any HTTP client. A Clay table can add Crunchbase funding and scores to every account in a list. See the integrations page for the full list.

### What format does the data come in?

JSON by default, with the structured record in parsed and the original page in html . You can also ask for the page as Markdown or plain text, which suits company research done by an LLM.

All scrapers: https://www.zenrows.com/scrape. Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
