# Crunchbase Scraper (`mlg14/crunchbase-scraper`) Actor

Collect public Crunchbase News articles and the organization profiles they reference. Search and filter by date or category; export article metadata and company links.

- **URL**: https://apify.com/mlg14/crunchbase-scraper.md
- **Developed by:** [MLG Data](https://apify.com/mlg14) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$6.40 / 1,000 results

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/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

## Crunchbase Scraper

Scrape Crunchbase News articles and the organization links inside them. Export Crunchbase news data to JSON or CSV for funding coverage, market monitoring, and organization mention tracking. This actor uses the public news feed interface; it does not retrieve private organization profile fields.

### What data can you extract from Crunchbase?

Each result is one article. The article's organization links are collected into aligned arrays, so a downstream process can join a story to the profile URLs it cites. These are **mentions in editorial coverage**, not company profile records. If an article names a business without linking to its profile, that name will not appear in the organization arrays.

| Field | Description | Example |
|---|---|---|
| `articleId` | Stable numeric identifier for deduplication | `94105` |
| `articleUrl` | Canonical link to the story | A news article URL |
| `title` | Headline converted to plain text | “Jumbo-Sized Series A Rounds Are On The Rise” |
| `summary` | Editorial excerpt converted to plain text | A short article synopsis |
| `publishedAt` | UTC publication timestamp | `2026-09-23T11:00:38Z` |
| `modifiedAt` | UTC last-update timestamp | `2026-09-22T15:20:26Z` |
| `author` | Public byline, when supplied | A byline string |
| `categorySlugs` | Editorial categories | `["startups", "venture"]` |
| `tagSlugs` | Editorial tags | `[]` |
| `imageUrl` | Featured image link, when available | An image URL |
| `readingTimeMinutes` | Estimated reading time at 220 words a minute | `3` |
| `companyPermalinks` | Distinct linked organization profile URLs, in article order | An array of profile links |
| `companyNames` | Visible link labels aligned to the profile URLs | An array of link labels |
| `companyCount` | Number of distinct linked profiles | `4` |
| `text` | Full plain article text when requested | Article body |

The profile URLs are normalized to one host and lowercase slugs. This makes them useful as join keys across articles. Names come from the article's visible link labels and can vary between stories. Use the permalink for matching; use the label for display. `companyCount` counts distinct organization profile links, not every business discussed in the article.

The article row remains compact by default. Full text is optional because it can be much longer than the summary. The summary usually supplies enough context for a feed, alert, or review queue. When you need to extract your own signals from the article body, enable `includeText`.

### How to scrape Crunchbase

1. Open the actor and leave the inputs empty to collect the newest public news articles. The default limit is 100 results.
2. Add a phrase in `search`, a category slug, or a publication date window to narrow the list. You can also enter organization URLs or slugs to find articles linking to those profiles.
3. Set `maxItems` to the number of article rows you want. A small value is useful while checking a filter.
4. Run the actor. Each result is written to the default dataset as soon as it is processed.
5. Download the dataset as JSON or CSV, or read it through the platform's dataset interface.

For a company mention search, enter the organization's public profile URL if you have it. The actor searches news content using the profile slug, then checks each returned article for an actual link to that profile. This second check prevents a simple text match from being mistaken for a linked mention. Searches are run separately for multiple URLs and article IDs are deduplicated across them.

### Input

| Parameter | Type | Default | Description |
|---|---|---|---|
| `companyUrls` | String list | Empty | Organization profile URLs or slugs to find in linked article references. |
| `search` | String | Empty | Word or phrase to find in news articles. With organization inputs, the phrase is checked against matched articles. |
| `category` | String | Empty | Exact editorial category slug, such as `venture` or `startups`. |
| `dateFrom` | Date string | Empty | Earliest publication date, inclusive, in `YYYY-MM-DD` format. |
| `dateTo` | Date string | Empty | Latest publication date, inclusive, in `YYYY-MM-DD` format. |
| `includeText` | Boolean | `false` | Add the full article body as plain text. |
| `maxItems` | Integer | `100` | Stop after this many article rows; allowed range is 1 to 4,000. |
| `proxyConfiguration` | Object | Platform proxy | Connection settings for the public news interface. |

To collect a bounded news window, use an input like:

```json
{
  "category": "venture",
  "dateFrom": "2026-09-01",
  "dateTo": "2026-09-30",
  "maxItems": 40
}
```

For a recurring feed, keep the category and search phrase fixed, then adjust the date window for each run. The actor itself does not keep a history of earlier runs. Deduplicate successive datasets by `articleId` in your own workflow. For an organization-focused workflow, set `companyUrls` to one or more public profile links or slugs and use `articleUrl` as the article reference in an alert.

Inputs select **news coverage**. A profile URL in `companyUrls` is a filter, not an instruction to scrape that profile. This distinction matters for anyone expecting funding totals, employee counts, industry tags, investment history, or contact details from a profile page. Those fields are not returned by this actor.

### Output example

The following selected fields come from one item in a successful 40-article run. Long fields and the arrays of individual profile links are omitted from this display; the dataset contains the full item.

```json
{
  "articleId": 94105,
  "title": "Jumbo-Sized Series A Rounds Are On The Rise",
  "publishedAt": "2026-09-23T11:00:38Z",
  "modifiedAt": "2026-09-22T15:20:26Z",
  "tagSlugs": [],
  "readingTimeMinutes": 3,
  "companyCount": 4
}
```

In that run, all 40 requested articles had an identifier, URL, headline, summary, publication timestamp, and at least one linked organization profile. This is a measured result for that run, not a guarantee for every date range or category. The set of editorial links depends on what each article contains.

### Use cases

- **Funding coverage review:** Collect articles from the venture category, sort them by publication time, and review the linked organization profiles alongside each headline.
- **Market monitoring:** Search for a topic and keep a dated archive of article summaries, categories, and linked profiles. This works well when a team wants a repeatable view of a sector rather than a manual reading list.
- **Organization mention alerts:** Supply a profile URL or slug to find articles that link to it. Store `articleId` between runs so only unseen coverage triggers a notification.
- **Research handoff:** Share a CSV of stories with article URLs and organization counts, then open the source article for context before making decisions.
- **Content indexing:** Use the stable article ID, category slugs, timestamps, and optional text to build a searchable internal index of public news coverage.
- **Relationship mapping:** Split `companyPermalinks` into a second table keyed by `articleId`. This yields a simple article-to-organization relationship table without guessing organization names from prose.

These workflows use editorial references as evidence that an article linked to a profile. They do not establish that a company raised a stated amount, participated in a transaction, or currently has a given operating status. The story itself provides the context for any such conclusion.

### How much does it cost to scrape Crunchbase?

The configured result price is **$6.40 per 1,000 article rows**, or $0.0064 per row. A result is charged when it is delivered to the dataset. The examples below count result charges only; check the run page for the final charge and any account-specific usage details.

| Delivered articles | Result charge |
|---:|---:|
| 40 | $0.256 |
| 100 | $0.64 |
| 1,000 | $6.40 |

The golden run delivered 40 rows and finished successfully. Query breadth affects how many pages the actor requests before reaching your limit. A narrow phrase or organization filter may scan returned posts that do not pass the final link check, so the same number of delivered rows can take different amounts of time. Set `maxItems` to the rows you actually need.

The price is per **article**, not per linked organization. An article with several profile links is still one result row. If you need one line per organization mention in a spreadsheet, expand the arrays after export; that transformation does not change how the actor bills its dataset rows.

### Tips for best results

Use a category slug when the topic aligns with an editorial section. Slugs are exact; a display label may not work. A broad search without a date filter returns the latest matches first. For a historical collection, split the timeline into monthly or quarterly windows and combine datasets by `articleId`. This helps keep each run bounded and makes retries straightforward.

Use a profile permalink when monitoring an organization. A slug is accepted as a shortcut, but the permalink makes the intended target easier to review. The actor searches the news interface using words from the slug, then accepts an article only if its body links to that profile URL. Editorial coverage can refer to an organization without linking its profile, and such an article will not pass the final filter.

Leave `includeText` off for lightweight feeds. Turn it on when you need full prose for keyword checks or manual review. The plain-text conversion removes markup and leaves readable spaces between paragraphs, but it does not rewrite editorial content. The summary remains available either way.

For scheduled runs, choose an overlapping date window rather than relying on the exact clock time of the previous execution. Articles can be edited after publication, while their original publication date remains the basis of the date filter. Deduplicate by ID and use `modifiedAt` if you want to detect updates to an existing article.

When exporting to CSV, arrays may appear as serialized values in cells. If you need one row per organization link, expand `companyPermalinks` and the corresponding `companyNames` values in a downstream step. The two arrays have the same order and length.

### Limits

This actor does not return organization profile records, funding-round records, investment amounts, investor lists, employee ranges, or profile predictions. The main organization and Discover pages, related internal data routes, and the public profile interface did not provide anonymous access during development. The news endpoint is a separate public source and supplies article content plus links to profiles, not the profile data behind those links.

The news interface returns at most 40 posts per requested page in this actor. The actor checks up to 100 pages per search and respects `maxItems`. An organization search can return fewer rows than requested because only articles with an exact profile link pass the final filter. Search results are controlled by the news site's index, so a story that is not indexed for the slug may be missed.

Category and tag labels are resolved from the public taxonomy lists. If a list is temporarily unavailable or a term falls outside the first 100 returned entries, that slug can be absent from the row even though the article still appears. Publication and modified times come from the source in UTC. Some older articles may omit a featured image, byline, tags, or linked organization profiles.

The `readingTimeMinutes` field is an estimate based on the extracted word count. It is meant for display and scheduling a reading queue, not as an editorial metric. Profile link labels are copied from the article anchor text; they can be shortened, generic, or different from a profile's formal name. For identity matching, rely on the permalink.

### Use with automated clients

The input and dataset fields support repeatable collection jobs. For example, a client can request “collect 40 recent venture articles and list their linked organization profiles,” then read the dataset's `articleUrl` and `companyPermalinks` fields. Another client can request “find coverage linking to this public organization profile during the last month,” passing that profile URL and a date window.

Treat every returned organization link as an article citation. If another system needs current profile details, it must obtain them from a source that actually supplies those details. Do not infer an amount, status, or contact from the presence of a link alone.

### FAQ

#### Is it legal to collect this data?

The actor reads public news content. Your use of the resulting data should respect the site's terms, copyright rules, and applicable privacy law. Keep article attribution and source links when sharing summaries, and avoid using personal information in ways that the source does not support.

#### Do I need to set up a proxy?

No manual setup is needed for the default configuration. The actor uses its configured platform connection to request public news endpoints. If your account requires different connection settings, the proxy input is available.

#### How fast is a run?

It depends on the number of pages and filters. The 40-result validation run finished in roughly nine seconds of remote execution. A narrow organization filter can require more pages to find qualifying links, so it can take longer for the same number of delivered rows.

#### Can I schedule it and receive only new articles?

You can schedule it, but it does not store a prior-run baseline. Use `articleId` to remove duplicates in the receiving workflow. An overlapping date range helps catch articles that appeared close to a schedule boundary.

#### Can I export to a spreadsheet?

Yes. The dataset can be downloaded as CSV or JSON. Array fields can be expanded into a separate relationship table if a spreadsheet needs one line per article and linked organization.

#### Why is a field empty?

An article may lack a tag, image, byline, or linked profile. Taxonomy lookups can also be temporarily unavailable. Empty profile-link arrays mean no qualifying organization link was found in the article body; they do not prove that the article discusses no businesses.

#### Can I get company funding or headcount from a profile URL?

No. A profile URL is used only to filter news coverage and to identify links found in articles. This actor does not open profile pages or emit their funding, staff, investor, or contact fields.

### Integrations

Run the actor on a schedule or invoke it from an external workflow, then read the default dataset through its URL. A data pipeline can store article rows keyed by `articleId` and expand the profile-link arrays into a related table. A notification flow can compare IDs with a prior run and send only newly published coverage. The source article URL remains the reference for every row.

### Support

Open an issue on the Issues tab; we reply within 24h and add fields on request.

# Actor input Schema

## `companyUrls` (type: `array`):

Optional public organization URLs or slugs. Return news articles that link to these organizations. This does not retrieve organization profiles.

## `search` (type: `string`):

Search article content by a word or phrase. With organization URLs, further filter the matched articles.

## `category` (type: `string`):

Optional news category slug, such as venture or startups.

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

Optional inclusive publication date in YYYY-MM-DD format.

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

Optional inclusive publication date in YYYY-MM-DD format.

## `includeText` (type: `boolean`):

Include the full article body as plain text in each result.

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

Maximum article rows to save. Defaults to 100.

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

Connection settings for public news endpoints.

## Actor input object example

```json
{
  "search": "funding",
  "includeText": false,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Public news articles and organization references in the default dataset.

# 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 = {
    "search": "funding"
};

// Run the Actor and wait for it to finish
const run = await client.actor("mlg14/crunchbase-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 = { "search": "funding" }

# Run the Actor and wait for it to finish
run = client.actor("mlg14/crunchbase-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 '{
  "search": "funding"
}' |
apify call mlg14/crunchbase-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mlg14/crunchbase-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/WoRjgpCIVzwQ6Mj7S/builds/gvbgUrjr1dU91qrnr/openapi.json
