# VC Portfolio Change Monitor — What Changed Since Last Run (`nexgendata/vc-portfolio-page-monitor`) Actor

Monitors VC firm portfolio pages and returns what changed since the last run — companies added, removed, or edited — for a16z, Sequoia, Founders Fund, Greylock, Bessemer, Index, Lightspeed, or any portfolio URL. Schedule it and get a clean change feed.

- **URL**: https://apify.com/nexgendata/vc-portfolio-page-monitor.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Lead generation, Business, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 portfolio change records

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

## VC Portfolio Change Monitor — What Changed Since Last Run

**Stop re-scraping whole VC portfolios to find the handful of changes. This monitor diffs each firm's portfolio page against its previous run and returns only the delta — companies *added*, *removed*, or *edited* — as clean change records you can schedule, pipe into a CRM, or hand to an AI agent.**

Point it at a16z, Sequoia, Founders Fund, Greylock, Bessemer, Index, Lightspeed, or any portfolio URL. `portfolioUrls` is required — an empty input returns 0 records and charges nothing. Built for VC associates, competitive-intelligence teams, biz-dev, and recruiters who need to know *the moment* a fund's book moves — not to re-read 800 companies every week.

### 📊 Sample Output

![2 real rows delivered by VC Portfolio Change Monitor — What Changed Since Last Run — run 28cDu1CqizlVQXPw1 on build 0.0.6](https://api.apify.com/v2/key-value-stores/8gLgXMBveEI1tTz1z/records/vc-portfolio-page-monitor-sample)

| `firm` | `firm_url` | `company` | `change_type` | `baseline` | `detected_at` |
|---|---|---|---|---|---|
| Founders Fund | https://foundersfund.com/portfolio/ | Found | removed | False | 2026-09-05T12:03:51.121552Z |
| Founders Fund | https://foundersfund.com/portfolio/ | All | removed | False | 2026-09-05T12:03:51.121552Z |

Real rows from run `28cDu1CqizlVQXPw1` on build 0.0.6 (2026-09-05), unedited apart from masked emails/phones and shortened long text; fields the source does not publish are empty.

### ⚙️ Sample inputs

This is the Store example input — the same input Apify's automated check runs — so it is proven to return rows on the current build. Paste it into the input form, or send it through the API, CLI or a schedule:

```json
{
  "portfolioUrls": [
    "https://foundersfund.com/portfolio/"
  ],
  "useProxy": true
}
```

### 🔧 Input reference

| Field | Type | Default | What it does |
|---|---|---|---|
| `portfolioUrls` | array | `["https://foundersfund.com/portfolio/"]` | VC firm portfolio pages to monitor. Each URL is diffed against its own snapshot from the previous run. Required — an empty input returns 0 records and charges nothing. Pages that… |
| `useProxy` | boolean | `true` | Route fetches through Apify RESIDENTIAL (US) proxy for reliability against anti-bot. Recommended on. |

### 🧾 JSON sample record

One real record from run `28cDu1CqizlVQXPw1` (emails/phones masked, long text shortened):

```json
{
  "firm": "Founders Fund",
  "firm_url": "https://foundersfund.com/portfolio/",
  "company": "Found",
  "change_type": "removed",
  "baseline": false,
  "before": {
    "name": "Found",
    "url": null,
    "description": null
  },
  "after": null,
  "detected_at": "2026-09-05T12:03:51.121552Z"
}
```

### 💰 Pricing

| Event | Price (USD) | When it is charged |
|---|---|---|
| Actor Start (`apify-actor-start`) | $5e-05 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
| Portfolio change record (`apify-default-dataset-item`) | $0.05 | Per portfolio change record — one company added, removed, or modified |

Pay-per-event: you pay only for what the run delivers. A run that delivers nothing bills no result events (only the actor-start event, when the actor defines one). Example: a run that delivers 100 results costs 100 × $0.05 = $5.00 plus the start fee.

### 🔗 Related Actors

More from the NexGenData **Startup, VC & funding** family:

- [Sequoia Portfolio Scraper — VC Companies, Sectors & Stage](https://apify.com/nexgendata/sequoia-portfolio-scraper?fpr=2ayu9b)
- [Sovereign Wealth Fund Tracker — Holdings & Profiles](https://apify.com/nexgendata/sovereign-wealth-fund-tracker?fpr=2ayu9b)
- [Startup Funding Tracker — SEC Form D, TechCrunch & YC](https://apify.com/nexgendata/startup-funding-tracker?fpr=2ayu9b)

13 more in this family on the [NexGenData Store page](https://apify.com/nexgendata?fpr=2ayu9b).

### ⏱ Made to run on a schedule

The core value is **"what changed since last run."** Each run stores a per-URL snapshot; the next run compares against it and emits only the differences. Put it on an Apify schedule (daily/weekly) and each run is a tidy change feed. **The first run on each firm is a baseline capture — it stores the current portfolio and emits every company as `added` (this is expected and honest; deltas start from run two).**

### 💵 Pricing — pay per change record

- **Portfolio change record — $0.05** (the value event: one added/removed/modified company).
- Actor start — $0.00005 (nominal).
- **$1 ≈ 20 change records.** On steady-state runs a portfolio moves by a few companies, so ongoing runs are cheap; the one-time baseline run emits more (one record per current company) — budget for it on the first run of each firm.

### 📦 Output — field table (from a real run on Founders Fund)

| field | example | notes |
|---|---|---|
| `firm` | `Founders Fund` | firm name derived from the URL |
| `firm_url` | `https://foundersfund.com/portfolio/` | the page monitored |
| `company` | `SpaceX` | portfolio company name |
| `change_type` | `added` | `added` · `removed` · `modified` |
| `baseline` | `true` | true on a URL's first (baseline) run |
| `before` | `null` | prior state (`null` for added/baseline) |
| `after` | `{"name":"SpaceX","url":null,"description":null}` | new state (`null` for removed) |
| `detected_at` | `2026-07-06T06:20:00Z` | UTC run timestamp |

Real companies captured on the Founders Fund baseline run include SpaceX, Palantir, Anduril, and Stripe.

### 🤖 Use with AI agents

The change feed is agent-ready. Example prompts:

- *"Run vc-portfolio-page-monitor on my 7 seeded funds and tell me which companies were **added** this week."*
- *"Diff today's run against last week and draft an outreach note for each newly-added Founders Fund company."*
- *"Watch these 3 competitor VC portfolios daily and alert me when any company is **removed** (a possible exit or failure signal to research)."*

Pair it with an LLM step to summarize the delta into a Slack digest, or push `added` records straight into your CRM.

### 🔗 Related NexGenData actors

**Portfolio scrapers (full snapshot of one firm):** [a16z](https://apify.com/nexgendata/a16z-portfolio-scraper) · [Sequoia](https://apify.com/nexgendata/sequoia-portfolio-scraper) · [Founders Fund](https://apify.com/nexgendata/founders-fund-portfolio-scraper) · [Greylock](https://apify.com/nexgendata/greylock-portfolio-scraper) · [Bessemer](https://apify.com/nexgendata/bessemer-portfolio-scraper) · [Index](https://apify.com/nexgendata/index-ventures-portfolio-scraper) · [Lightspeed](https://apify.com/nexgendata/lightspeed-portfolio-scraper)
**Funding cluster:** [Startup Funding Tracker](https://apify.com/nexgendata/startup-funding-tracker) — new funding rounds across the market.
Use the **portfolio scrapers** for a full company list; use **this monitor** to track how that list *changes over time*.

### ⚠️ Honest capability & coverage caps

- This is a **records / monitoring** tool. It reports observed changes to public portfolio pages. It does **not** provide investment signals, alpha, edge, or recommendations, and change records are not predictions.
- **Coverage depends on how a firm publishes its portfolio.** Firms that render their portfolio in server HTML are fully captured (verified live 2026-09-05: Founders Fund 64 companies, Index Ventures 321). Pure client-side (JavaScript-only) portfolios — currently Sequoia, Bessemer, Greylock — return only their static shell to a plain HTTP fetch, so those runs return no companies until a browser-rendered variant is enabled; the run says so in its status message and charges nothing. Pages behind anti-bot protection (currently Lightspeed) make the run FAIL rather than report a false empty. Extraction is deterministic run-to-run, so it never invents false changes; it can only miss ones on JS-only pages.
- `description`/`status` edit detection is best-effort and depends on the field being present in the page markup.

# Actor input Schema

## `portfolioUrls` (type: `array`):

VC firm portfolio pages to monitor. Each URL is diffed against its own snapshot from the previous run. Required — an empty input returns 0 records and charges nothing. Pages that render their portfolio only in JavaScript (currently Sequoia, Bessemer, Lightspeed) return no companies to a plain HTTP fetch.

## `useProxy` (type: `boolean`):

Route fetches through Apify RESIDENTIAL (US) proxy for reliability against anti-bot. Recommended on.

## Actor input object example

```json
{
  "portfolioUrls": [
    "https://foundersfund.com/portfolio/"
  ],
  "useProxy": true
}
```

# 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 = {
    "portfolioUrls": [
        "https://foundersfund.com/portfolio/"
    ],
    "useProxy": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/vc-portfolio-page-monitor").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 = {
    "portfolioUrls": ["https://foundersfund.com/portfolio/"],
    "useProxy": True,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/vc-portfolio-page-monitor").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 '{
  "portfolioUrls": [
    "https://foundersfund.com/portfolio/"
  ],
  "useProxy": true
}' |
apify call nexgendata/vc-portfolio-page-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgendata/vc-portfolio-page-monitor"
        }
    }
}
```

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/eiWsehoMrRj4VbODW/builds/BJsUXVR4YMi4du0j0/openapi.json
