# Y Combinator \[Only $1💰] Jobs & Companies scraper (`memo23/y-combinator-scraper`) Actor

💰 $1/1K One actor for Y Combinator jobs (Work at a Startup) and companies (Startup Directory). Paste any YC URL — auto-routed — or use filters. Companies via Algolia: no proxy, clean schema. Optional founder enrichment: LinkedIn/Twitter URLs, company socials, open jobs. Full batch history to 2005.

- **URL**: https://apify.com/memo23/y-combinator-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, Lead generation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Y Combinator Scraper

**Y Combinator data, structured. Jobs, companies, founders, socials — one actor, no proxy needed for companies.**

Scrape both surfaces of `ycombinator.com` from a single Apify actor: **jobs** (Work at a Startup) and **companies** (Startup Directory). Auto-routes any YC URL to the right scraper, or compose a query from filters.

### How it works

![How Y Combinator Scraper Works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-yc.png)

---

### ✨ Why use this scraper?

- **Two surfaces, one actor.** Jobs (Work at a Startup) and Companies (Startup Directory) in the same dataset, distinguishable by row shape (`jobId` vs `slug`).
- **Companies fetch via YC's public Algolia index** — no HTML parsing, no proxy required, ~2 s for 100 rows. Clean, structured fields with no scraping artefacts (no leaked alt text, no concatenated values).
- **Rich output schemas.** ~33 fields per job (salary parsed into min/max/currency, equity, founders with bios, JSON-LD `datePosted`). ~26 fields per company (batch, industries, regions, team size, stage, status, top-company / hiring / nonprofit flags).
- **Optional founder enrichment** with proper `name` / `title` separation (e.g. `Brian Chesky` / `Founder/CEO`, not split-on-whitespace), plus LinkedIn + Twitter URLs per founder and company-level socials (linkedin, twitter, facebook, crunchbase, github).
- **Optional open-jobs enrichment** per company, with cleanly separated `title` / `salary` / `location` / `equity` / `experience` fields.
- **Multi-keyword company discovery** — pass several keywords; each runs as a separate Algolia search and results merge by company id with dedupe.
- **Full YC batch history** back to Summer 2005.

---

### Overview

Built for recruiters, sourcers, BD/sales teams, investors, and anyone doing market research on YC-backed startups. The actor produces a heterogeneous dataset: each row is either a **job posting** or a **company profile**. You can run jobs and companies in the same job (mix URLs of both kinds), and tell them apart in downstream tooling by the presence of `jobId` (jobs) vs `slug` (companies).

Companies-mode goes through YC's Algolia search API — fast, no proxy, no HTML parsing. Jobs-mode uses Crawlee + Cheerio against YC's server-rendered job listing/detail pages.

---

### Supported inputs

#### Jobs URLs

| Pattern | What it does |
|---|---|
| `/jobs` | YC's curated jobs index (~20 jobs) |
| `/jobs/role/{role}` | All jobs in a role (`software-engineer`, `designer`, `product-manager`, `operations`, `marketing`, `sales-manager`, `recruiting-hr`, `support`, `science`) |
| `/jobs/role/{role}/{location}` | Role + location (`san-francisco`, `new-york`, `los-angeles`, `seattle`, `austin`, `chicago`, `india`, `remote`) — location applied locally because YC filters it client-side |
| `/jobs/location/{location}` | Location-only listing |
| `/companies/{co}/jobs/{job}` | A single job-detail page |

#### Companies URLs

| Pattern | What it does |
|---|---|
| `/companies` | All companies (paginated through Algolia) |
| `/companies?batch=…&industry=…&query=…&isHiring=true&top_company=true&minEmployeeSize=10%2B&maxEmployeeSize=100` | Companies search with any combination of filters |
| `/companies/{slug}` | Single-company lookup (e.g. `…/companies/airbnb`) |

#### Filter form (when no URLs)

`mode` = `jobs` (default) or `companies`. Then the matching filter set:
- **💼 Jobs**: `role`, `location`.
- **🏢 Companies**: `queries[]`, `topCompany`, `isHiring`, `nonprofit`, `batch[]`, `industries[]`, `regions[]`, `minEmployeeSize`, `maxEmployeeSize`.

---

### 🎯 Use cases

| Team | Typical use |
|---|---|
| **Recruiters / talent sourcing** | Pull active YC job postings filtered by role + city, watch for new postings in `monitoringMode` |
| **Investors / VCs** | Track company batches, stages, and team sizes across every YC cohort back to 2005 |
| **BD / sales** | Build a target list of YC companies by industry, region, employee size; enrich with founder LinkedIns for outreach |
| **Founder / market research** | Discover companies by keyword across the full directory; find similar / competitive companies to map a market |
| **Data engineering / pipelines** | Schedule daily runs into a warehouse for YC startup intelligence; `monitoringMode` keeps datasets incremental |

---

1. **You provide YC URLs (Option A) or filters (Option B).** Mix Jobs and Companies URLs freely; the actor routes each one.
2. **Jobs URLs** hit a Crawlee CheerioCrawler. The listing's inlined `jobPostings` JSON is parsed; the location slug from the URL is applied as a local substring filter against each job's location string (YC's listings filter location client-side, so we compensate).
3. **Companies URLs** hit YC's public Algolia index (`YCCompany_production`). All Algolia filters compose with AND across attributes / OR within attribute. Multi-keyword runs union the results and dedupe by `objectID`.
4. **Optional company enrichment.** When `scrapeFounderDetails` or `scrapeOpenJobs` is on, the actor fetches `/companies/{slug}` and/or `/companies/{slug}/jobs` per row and merges the parsed founders/socials/openJobs into the company row. Concurrency = 5.
5. **Output to dataset.** Job rows and company rows go into the same dataset; jobs are also exported as `data.csv` / `data.json`.

> Banner source is [`readme-stuff/how-it-works-yc-v1.svg`](readme-stuff/how-it-works-yc-v1.svg) — edit the SVG and re-rasterize when you change the copy. A 2× retina version is at [`readme-stuff/how-it-works-yc-v1@2x.png`](readme-stuff/how-it-works-yc-v1@2x.png) (this is the version hosted at the URL above). The hosted PNG is served from a GitHub Pages repo so it renders in both GitHub and the Apify Console.

---

### Quick start

```jsonc
// Recent SF software-engineering jobs
{ "mode": "jobs", "role": "software-engineer", "location": "san-francisco", "maxItems": 50 }

// Top hiring B2B companies from the last two batches, 100-500 employees
{ "mode": "companies", "batch": ["Spring 2026", "Winter 2026"], "industries": ["B2B"],
  "minEmployeeSize": "100+", "maxEmployeeSize": "500", "isHiring": true, "topCompany": true,
  "maxItems": 100 }

// Multi-keyword company discovery (results merged + deduped by company id)
{ "mode": "companies", "queries": ["dev tools", "observability", "feature flags"], "maxItems": 50 }

// Companies + founder/social/jobs enrichment (one extra HTTP per company per toggle)
{ "mode": "companies", "batch": ["Spring 2026"], "isHiring": true,
  "scrapeFounderDetails": true, "scrapeOpenJobs": true, "maxItems": 25 }

// Or skip the form and paste any YC URL — the actor auto-routes
{ "startUrls": [
    "https://www.ycombinator.com/jobs/role/software-engineer/san-francisco",
    "https://www.ycombinator.com/companies?batch=Spring%202026&industry=Healthcare",
    "https://www.ycombinator.com/companies/airbnb"
  ], "maxItems": 50 }
````

***

### Input configuration

The form is two collapsible sections — **alternatives, not steps**:

**Three top-level sections.** Option A and Option B are alternatives; Run options apply to both regardless of which you pick.

- **Option A | Search by URL 🔗 — Jobs or Companies (recommended)** — `startUrls[]`. If non-empty, Option B is ignored.
- **Option B | Configure with Filters 🎛️** — used only when Option A is empty. Field titles inside the panel are prefixed by category:
  - `Mode` — `"jobs"` (default) or `"companies"`.
  - `💼 Jobs · …` — `role`, `location`.
  - `🏢 Companies · …` — `queries[]`, `topCompany`, `isHiring`, `nonprofit`, `batch[]`, `industries[]`, `regions[]`, `minEmployeeSize`, `maxEmployeeSize`.
  - `🙌 Companies Enrich · …` — `scrapeFounderDetails`, `scrapeOpenJobs` (each adds one HTTP per company; concurrency 5).
- **Run options ⚙️ — applies to both** — shared run-time settings:
  - `maxItems` — **output cap** (max records to return, default 100). Applies to both modes.
  - `maxPages` — **pagination depth** (max listing pages per URL, default 10). Jobs scraper only; Companies paginates Algolia automatically.
  - `monitoringMode`, `maxConcurrency`, `minConcurrency`, `maxRequestRetries`, `proxy` — Jobs scraper only. Companies hits Algolia directly and ignores them.

Multi-select filters (`batch[]`, `industries[]`, `regions[]`) use **AND across attributes, OR within**. The `"All …"` sentinel values (default) are stripped before the Algolia query so leaving them = no filter.

Non-paying users are capped at 100 items and have `monitoringMode` disabled.

***

### Note on YC's location filtering

YC's listing pages include a location segment in the URL but apply that filter **client-side** — the SSR'd `jobPostings` JSON is role-filtered only. This actor compensates by parsing the location slug out of the URL and applying a substring filter against each job's `location` string locally. Special cases: `remote` matches anything containing "Remote"; `india` matches the country (`/\b(india|IN)\b/i`). Cities use a case-insensitive substring match against the slug with `-` replaced by space.

A job listed as `"San Francisco, CA, US / Remote (US)"` matches both the `san-francisco` and `remote` slugs.

***

### Output overview

Heterogeneous dataset — job rows and company rows have different shapes but share the same dataset. Distinguish by:

- presence of `jobId` (jobs) vs `slug` (companies)
- or the `url` path (`/companies/{co}/jobs/{job}` vs `/companies/{slug}`).

***

### Output samples

#### Job row (truncated for display)

Captured with `startUrls=["https://www.ycombinator.com/jobs/role/software-engineer/san-francisco"], maxItems=1`:

```jsonc
{
  "jobId": "gD334As-systems-engineer",
  "title": "Systems Engineer",
  "url": "https://www.ycombinator.com/companies/substack/jobs/gD334As-systems-engineer",
  "companyName": "Substack",
  "companySlug": "substack",
  "companyUrl": "https://www.ycombinator.com/companies/substack",
  "ycBatch": "W18",
  "jobType": "Full-time",
  "roleCategory": "Engineering",
  "roleSubcategory": "Devops",
  "salaryRange": "$185K - $225K",
  "salaryMin": 185000,
  "salaryMax": 225000,
  "salaryCurrency": "USD",
  "equity": "",
  "location": "San Francisco, CA, US / New York, NY, US",
  "postedAgo": "2 days",
  "experience": "6+ years",
  "visaSponsorship": "",
  "description": "Substack is building a new economic engine for culture …",
  "descriptionHtml": "<p>Substack is building …</p>",
  "companyDescription": "Start a newsletter. Build your community. …",
  "companyFounded": 2017,
  "companyTeamSize": 90,
  "companyStatus": "Active",
  "companyLocation": "San Francisco",
  "founders": [
    { "name": "Chris Best",      "role": "Co-founder & CEO at Substack…" },
    { "name": "Hamish McKenzie", "role": "COO" },
    { "name": "Jairaj Sethi",    "role": "👋🏽" }
  ],
  "datePosted": "2025-09-11T18:28:34Z",
  "companyWebsite": "https://substack.com",
  "scrapedAt": "2026-05-02T10:49:39.558Z"
}
```

#### Company row, with both enrichment toggles on (truncated)

Captured with `startUrls=["https://www.ycombinator.com/companies/airbnb"], scrapeFounderDetails=true, scrapeOpenJobs=true`:

```jsonc
{
  "id": 271,
  "slug": "airbnb",
  "name": "Airbnb",
  "url": "https://www.ycombinator.com/companies/airbnb",
  "batch": "Winter 2009",
  "industry": "Consumer",
  "subindustry": "Consumer -> Travel, Leisure and Tourism",
  "industries": ["Consumer", "Travel, Leisure and Tourism"],
  "regions":    ["United States of America", "America / Canada"],
  "allLocations": "San Francisco, CA, USA",
  "oneLiner": "Book accommodations around the world.",
  "teamSize": 6132,
  "status": "Public",
  "stage": "Growth",
  "topCompany": true,
  "isHiring": false,
  "nonprofit": false,
  "launchedAt": "2012-01-17T09:00:56.000Z",
  "website": "http://airbnb.com",
  "tags": ["Marketplace", "Travel"],
  "formerNames": [],
  "appVideoPublic": false,
  "demoDayVideoPublic": false,
  "founders": [
    {
      "name": "Brian Chesky", "title": "Founder/CEO",
      "linkedinUrl": "https://www.linkedin.com/in/brianchesky/",
      "twitterUrl":  "https://twitter.com/bchesky",
      "isActive": true, "hasEmail": true
    },
    { "name": "Nathan Blecharczyk", "title": "Founder/CTO", "linkedinUrl": "…", "twitterUrl": "…" },
    { "name": "Joe Gebbia",         "title": "Founder/CPO", "linkedinUrl": "…", "twitterUrl": "…" }
  ],
  "socials": {
    "linkedin":   "https://www.linkedin.com/company/airbnb/",
    "twitter":    "https://twitter.com/Airbnb",
    "facebook":   "https://www.facebook.com/airbnb/",
    "crunchbase": "https://www.crunchbase.com/organization/airbnb"
  },
  "openJobs": [],
  "scrapedAt": "2026-05-02T10:49:25.606Z"
}
```

***

### Output fields

#### Jobs row (~33 fields)

| Field | Description |
|---|---|
| `jobId` | YC's job id, e.g. `gD334As-systems-engineer`. |
| `title`, `url` | Posting title and absolute URL (`https://www.ycombinator.com/companies/{co}/jobs/{id}`). |
| `companyName`, `companySlug`, `companyUrl`, `companyTagline` | Company display name, slug, profile URL, one-liner. |
| `ycBatch` | YC batch (e.g. `S21`, `W18`). |
| `jobType`, `roleCategory`, `roleSubcategory` | E.g. `Full-time`, `Engineering`, `Devops`. |
| `salaryRange` | Raw display string from the listing (`"$185K - $225K"`). |
| `salaryMin`, `salaryMax`, `salaryCurrency` | Parsed numeric range and currency (`USD`/`GBP`/`EUR`/`INR`). |
| `equity` | Equity range string from YC. |
| `location` | Job location string from YC. |
| `postedAgo` | Relative time from listing (e.g. `"2 days"`). |
| `applyUrl` | Direct apply link (the YC OAuth bridge to workatastartup.com). |
| `experience` | Min experience requirement. |
| `visaSponsorship` | `"Will sponsor"` if offered, else empty. |
| `description`, `descriptionHtml` | Full description as text and as HTML (preserves newlines). |
| `companyDescription`, `companyFounded`, `companyTeamSize`, `companyStatus`, `companyLocation` | Company metadata. |
| `founders` | Array of `{ name, role }` — `role` falls back through `founder_bio` → `title` → `"Founder"`. |
| `datePosted` | ISO datetime from the embedded `JobPosting` JSON-LD. |
| `companyWebsite`, `companyLogo` | External website and YC small-logo URL. |
| `scrapedAt` | ISO timestamp of when the row was produced. |

#### Companies row (~26 fields, plus enrichment fields)

| Field | Description |
|---|---|
| `id`, `slug`, `name` | YC company id, slug, display name. |
| `url` | Profile URL (`https://www.ycombinator.com/companies/{slug}`). |
| `batch` | E.g. `"Winter 2009"`, `"Spring 2026"`. |
| `industry`, `subindustry`, `industries[]` | Top-level industry, second-level subindustry, full industries array. |
| `regions[]` | HQ region tags. |
| `allLocations` | Free-form location string. |
| `oneLiner`, `longDescription` | Short tagline and full description. |
| `teamSize` | Headcount or `null`. |
| `status` | `"Active"` / `"Acquired"` / `"Public"` / `"Inactive"` / etc. |
| `stage` | YC's stage label: `"Early"` / `"Growth"` / `"Public"` / etc. |
| `topCompany`, `isHiring`, `nonprofit` | Booleans. |
| `launchedAt` | ISO datetime (converted from epoch). |
| `website` | External company website. |
| `logo` | Small-logo URL from YC's S3. |
| `tags[]` | Free-form YC tags. |
| `formerNames[]` | Past company names if YC has them. |
| `appVideoPublic`, `demoDayVideoPublic` | Whether YC's videos are publicly available. |
| `scrapedAt` | ISO timestamp. |

**With `scrapeFounderDetails: true`:**

| Field | Description |
|---|---|
| `founders[]` | `{ name, title, bio, linkedinUrl, twitterUrl, avatarUrl, isActive, hasEmail }`. `name` and `title` are properly separated. |
| `socials` | `{ linkedin, twitter, facebook, crunchbase, github }` (non-empty values only). |
| `appVideoUrl`, `demoDayVideoUrl` | Direct video URLs when YC has them and they're public. |

**With `scrapeOpenJobs: true`:**

| Field | Description |
|---|---|
| `openJobs[]` | `{ jobId, title, url, type, roleCategory, roleSubcategory, salaryRange, equity, location, experience, applyUrl, postedAgo, visaSponsorship }`. |

***

### Monitoring mode

When `monitoringMode` is enabled (jobs only), the actor only emits jobs whose numeric id has not been seen in previous runs by the same Apify user. Useful for:

- Tracking new YC job postings as they appear
- Building a historical archive without re-scraping
- Keeping downstream notifications free of duplicates

The actor maintains a per-user Key-Value store keyed `YC-JOBS-SEEN-{apifyUserId}`. On each run with `monitoringMode: true`, every listing job is checked against this store; new ids are added (with a small stub: `id`, `url`, `title`) and only those new jobs are enqueued for detail scraping. Reset by deleting the corresponding KV store from the Apify console.

`monitoringMode` is currently jobs-only. Companies-mode dedup is planned but not implemented.

***

### Local development

```bash
npm install
npm run start:dev   ## runs src/main.ts via tsx
npm run build       ## tsc to dist/
npm run lint        ## eslint src/
```

Local input is read from `storage/key_value_stores/default/INPUT.json`. For fully isolated runs set `APIFY_LOCAL_STORAGE_DIR` and `CRAWLEE_STORAGE_DIR` to a temp path.

***

### Limitations / known gaps

- **Single-company URL** uses Algolia full-text query + post-filter to exact slug match (slug isn't in YC's filterable attributes). Returns 1 row max regardless of `maxItems`.
- **Companies mode ignores `monitoringMode`** — dedup is jobs-only for now.
- **Mixed start URLs** (jobs + companies): `maxItems` is shared. Companies first, jobs gets the remainder.
- **Multi-`queries` budget** is shared across keywords. If `maxItems` is small, later keywords may not fire.
- **Companies enrichment cost** — `scrapeFounderDetails` and `scrapeOpenJobs` each add one HTTP per company (concurrency = 5). For 100 companies, expect ~10–20 seconds extra per toggle.

***

### ❓ FAQ

**Can I scrape both jobs and companies in the same run?**
Yes. Mix any `/jobs/...` and `/companies...` URLs in `startUrls`; each one auto-routes. With `maxItems` shared, companies path consumes its share first and jobs gets the remainder.

**Does the Companies path need a proxy?**
No. It hits YC's public Algolia index directly, no rate-limit issues, no IP blocks. The proxy setting only applies to the Jobs scraper.

**What does the Jobs `location` slug actually filter on?**
A case-insensitive substring of the slug (with `-` → ` `) against each job's `location` string. `remote` matches anything containing "Remote"; `india` matches the country code `IN` or the word `India`. YC applies that filter client-side, so we replicate it locally.

**Can I get founders' LinkedIn URLs?**
Yes — set `scrapeFounderDetails: true`. Each founder row includes `linkedinUrl` and `twitterUrl` parsed from the inlined company JSON on `/companies/{slug}`.

**Does `scrapeOpenJobs` overlap with running Jobs mode?**
Different surface. `scrapeOpenJobs` enriches a company row with that company's open postings. Jobs mode (or a `/jobs/...` URL) returns each job as its own row in the dataset.

**What's `monitoringMode` and when should I use it?**
Jobs-only flag that dedupes against a per-user KV store of seen job ids. Use it for scheduled runs that should only emit new postings.

**Can I use the actor with a single-company URL like `/companies/airbnb`?**
Yes. It returns exactly one row regardless of `maxItems` because slug isn't a filterable Algolia attribute — the actor full-text-searches the slug and post-filters to an exact match.

**How do I control cost?**
Use `maxItems` strictly. Companies-mode hits Algolia paginated 100 at a time; jobs-mode follows pagination up to `maxPages`. Disable both enrichment toggles if you don't need founders/socials/jobs — they add HTTP per row.

***

### Support

- File an issue or a feature request via the Apify Console **Issues** tab on the actor page.
- Custom integrations (different output shape, additional filters, scheduled feeds into a warehouse) — open an issue describing the use case.
- The repo source is open in [`src/`](src/) — `main.ts` orchestrates dispatch, `lib/ycScrape.ts` handles jobs HTML parsing, `lib/ycCompanies.ts` is the Algolia client + enrichment.

***

### License

ISC. See [`package.json`](package.json).

# Actor input Schema

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

Any YC URL. Auto-routed by path. Mix Jobs and Companies URLs freely. The two URLs prefilled below are sample defaults — clear them and paste your own when running.

**Jobs URLs:**

- `https://www.ycombinator.com/jobs` (curated index)
- `https://www.ycombinator.com/jobs/role/{role}` (e.g. `…/jobs/role/software-engineer`)
- `https://www.ycombinator.com/jobs/role/{role}/{location}` (e.g. `…/jobs/role/software-engineer/san-francisco`)
- `https://www.ycombinator.com/jobs/location/{location}` (e.g. `…/jobs/location/new-york`)
- `https://www.ycombinator.com/companies/{co}/jobs/{job}` (single job detail)

**Companies URLs:**

- `https://www.ycombinator.com/companies` (all companies)
- `https://www.ycombinator.com/companies?batch=Spring%202026&industry=B2B&query=fintech` (filtered search)
- `https://www.ycombinator.com/companies/{slug}` (e.g. `…/companies/airbnb` — single-company lookup)

## `mode` (type: `string`):

Pick a target surface; the matching filter fields below will be used. Jobs uses the role/location selectors; Companies uses the keyword/batch/industry/region/size block.

## `role` (type: `string`):

Used when Mode = Jobs and Start URLs is empty. YC role category.

## `location` (type: `string`):

Used when Mode = Jobs. City slugs match the city name in each job's location string; `remote` matches anything containing 'Remote'; `india` matches the country.

## `queries` (type: `array`):

Used when Mode = Companies. One or more keywords (product category, market, technology, location, …). Multiple keywords run as separate Algolia searches and are merged by company id with dedupe. Empty = no keyword filter.

## `topCompany` (type: `boolean`):

Limit results to companies marked as Top by Y Combinator. Use when you want a smaller, more selective set.

## `isHiring` (type: `boolean`):

Limit results to companies currently marked as hiring. Useful for recruiting and active-growth research.

## `nonprofit` (type: `boolean`):

Limit results to companies marked as nonprofits. Leave disabled to include both commercial and nonprofit organizations.

## `batch` (type: `array`):

Select one or more batches to narrow results by cohort.

## `industries` (type: `array`):

Select one or more industries to focus the run.

## `regions` (type: `array`):

Select one or more regions to narrow geographically.

## `minEmployeeSize` (type: `string`):

Smallest team size to include. Select '1+' for no minimum.

## `maxEmployeeSize` (type: `string`):

Largest team size to include. Select '1000+' for no maximum.

## `scrapeFounderDetails` (type: `boolean`):

Companies mode only. Adds an extra HTTP per company (concurrency = 5) — slows runs. Fetches `/companies/{slug}` and adds `founders[]` (name, title, bio, linkedinUrl, twitterUrl, avatarUrl, isActive, hasEmail) plus `socials` (linkedin, twitter, facebook, crunchbase, github), `appVideoUrl`, `demoDayVideoUrl`.

## `scrapeOpenJobs` (type: `boolean`):

Companies mode only. Adds an extra HTTP per company (concurrency = 5) — slows runs. Fetches `/companies/{slug}/jobs` and adds `openJobs[]` (title, role, location, salary, equity, experience, applyUrl, posted-ago).

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

Hard ceiling on dataset rows. Stops the run after this many job-detail pages or company hits have been emitted. Applies to both Jobs and Companies. Free-tier accounts are capped at 100 regardless.

## `maxPages` (type: `integer`):

Jobs scraper only: how many `?page=N` listing pages to follow per start URL. Companies scraper paginates Algolia automatically until `maxItems` is reached, ignoring this setting.

## `monitoringMode` (type: `boolean`):

Jobs scraper only: only jobs whose numeric id has not been stored in your Key-Value store yet are enqueued (per Apify user id). Useful for scheduled runs that should only emit new postings.

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

Jobs scraper only: max parallel HTTP requests.

## `minConcurrency` (type: `integer`):

Jobs scraper only: min parallel HTTP requests to keep active.

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

Jobs scraper only: retries before a request is marked failed.

## `proxy` (type: `object`):

Proxy for the Jobs scraper. Companies mode hits YC's Algolia API directly and does not use a proxy regardless of what's configured here.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.ycombinator.com/jobs/role/software-engineer/san-francisco",
    "https://www.ycombinator.com/companies?batch=Spring%202026&industry=B2B"
  ],
  "mode": "jobs",
  "role": "",
  "location": "",
  "queries": [],
  "topCompany": false,
  "isHiring": false,
  "nonprofit": false,
  "batch": [
    "All Batches"
  ],
  "industries": [
    "All industries"
  ],
  "regions": [
    "Anywhere"
  ],
  "minEmployeeSize": "1+",
  "maxEmployeeSize": "1000+",
  "scrapeFounderDetails": false,
  "scrapeOpenJobs": false,
  "maxItems": 100,
  "maxPages": 10,
  "monitoringMode": false,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 3,
  "proxy": {
    "useApifyProxy": 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 = {
    "startUrls": [
        "https://www.ycombinator.com/jobs/role/software-engineer/san-francisco",
        "https://www.ycombinator.com/companies?batch=Spring%202026&industry=B2B"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/y-combinator-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 = {
    "startUrls": [
        "https://www.ycombinator.com/jobs/role/software-engineer/san-francisco",
        "https://www.ycombinator.com/companies?batch=Spring%202026&industry=B2B",
    ],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/y-combinator-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.ycombinator.com/jobs/role/software-engineer/san-francisco",
    "https://www.ycombinator.com/companies?batch=Spring%202026&industry=B2B"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call memo23/y-combinator-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/y-combinator-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Y Combinator [Only $1💰] Jobs & Companies scraper",
        "description": "💰 $1/1K One actor for Y Combinator jobs (Work at a Startup) and companies (Startup Directory). Paste any YC URL — auto-routed — or use filters. Companies via Algolia: no proxy, clean schema. Optional founder enrichment: LinkedIn/Twitter URLs, company socials, open jobs. Full batch history to 2005.",
        "version": "0.0",
        "x-build-id": "QUosuhVXsVOPA6ISY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~y-combinator-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-y-combinator-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~y-combinator-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-y-combinator-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~y-combinator-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-y-combinator-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs (accepts Jobs and Companies URLs)",
                        "type": "array",
                        "description": "Any YC URL. Auto-routed by path. Mix Jobs and Companies URLs freely. The two URLs prefilled below are sample defaults — clear them and paste your own when running.\n\n**Jobs URLs:**\n- `https://www.ycombinator.com/jobs` (curated index)\n- `https://www.ycombinator.com/jobs/role/{role}` (e.g. `…/jobs/role/software-engineer`)\n- `https://www.ycombinator.com/jobs/role/{role}/{location}` (e.g. `…/jobs/role/software-engineer/san-francisco`)\n- `https://www.ycombinator.com/jobs/location/{location}` (e.g. `…/jobs/location/new-york`)\n- `https://www.ycombinator.com/companies/{co}/jobs/{job}` (single job detail)\n\n**Companies URLs:**\n- `https://www.ycombinator.com/companies` (all companies)\n- `https://www.ycombinator.com/companies?batch=Spring%202026&industry=B2B&query=fintech` (filtered search)\n- `https://www.ycombinator.com/companies/{slug}` (e.g. `…/companies/airbnb` — single-company lookup)",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "jobs",
                            "companies"
                        ],
                        "type": "string",
                        "description": "Pick a target surface; the matching filter fields below will be used. Jobs uses the role/location selectors; Companies uses the keyword/batch/industry/region/size block.",
                        "default": "jobs"
                    },
                    "role": {
                        "title": "💼 Jobs · Role",
                        "enum": [
                            "",
                            "software-engineer",
                            "designer",
                            "product-manager",
                            "operations",
                            "marketing",
                            "sales-manager",
                            "recruiting-hr",
                            "support",
                            "science"
                        ],
                        "type": "string",
                        "description": "Used when Mode = Jobs and Start URLs is empty. YC role category.",
                        "default": ""
                    },
                    "location": {
                        "title": "💼 Jobs · Location",
                        "enum": [
                            "",
                            "san-francisco",
                            "new-york",
                            "los-angeles",
                            "seattle",
                            "austin",
                            "chicago",
                            "india",
                            "remote"
                        ],
                        "type": "string",
                        "description": "Used when Mode = Jobs. City slugs match the city name in each job's location string; `remote` matches anything containing 'Remote'; `india` matches the country.",
                        "default": ""
                    },
                    "queries": {
                        "title": "🏢 Companies · Search Keywords",
                        "type": "array",
                        "description": "Used when Mode = Companies. One or more keywords (product category, market, technology, location, …). Multiple keywords run as separate Algolia searches and are merged by company id with dedupe. Empty = no keyword filter.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "topCompany": {
                        "title": "🏢 Companies · Include Top Companies Only",
                        "type": "boolean",
                        "description": "Limit results to companies marked as Top by Y Combinator. Use when you want a smaller, more selective set.",
                        "default": false
                    },
                    "isHiring": {
                        "title": "🏢 Companies · Include Hiring Companies Only",
                        "type": "boolean",
                        "description": "Limit results to companies currently marked as hiring. Useful for recruiting and active-growth research.",
                        "default": false
                    },
                    "nonprofit": {
                        "title": "🏢 Companies · Include Nonprofit Companies Only",
                        "type": "boolean",
                        "description": "Limit results to companies marked as nonprofits. Leave disabled to include both commercial and nonprofit organizations.",
                        "default": false
                    },
                    "batch": {
                        "title": "🏢 Companies · YC Batches",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more batches to narrow results by cohort.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "All Batches",
                                "Fall 2026",
                                "Summer 2026",
                                "Spring 2026",
                                "Winter 2026",
                                "Fall 2025",
                                "Summer 2025",
                                "Spring 2025",
                                "Winter 2025",
                                "Fall 2024",
                                "Summer 2024",
                                "Winter 2024",
                                "Summer 2023",
                                "Winter 2023",
                                "Summer 2022",
                                "Winter 2022",
                                "Summer 2021",
                                "Winter 2021",
                                "Summer 2020",
                                "Winter 2020",
                                "Summer 2019",
                                "Winter 2019",
                                "Summer 2018",
                                "Winter 2018",
                                "Summer 2017",
                                "Winter 2017",
                                "Summer 2016",
                                "Winter 2016",
                                "Summer 2015",
                                "Winter 2015",
                                "Summer 2014",
                                "Winter 2014",
                                "Summer 2013",
                                "Winter 2013",
                                "Summer 2012",
                                "Winter 2012",
                                "Summer 2011",
                                "Winter 2011",
                                "Summer 2010",
                                "Winter 2010",
                                "Summer 2009",
                                "Winter 2009",
                                "Summer 2008",
                                "Winter 2008",
                                "Summer 2007",
                                "Winter 2007",
                                "Summer 2006",
                                "Winter 2006",
                                "Summer 2005"
                            ],
                            "enumTitles": [
                                "📆 All batches (no filter)",
                                "📆 Fall 2026 batch",
                                "📆 Summer 2026 batch",
                                "📆 Spring 2026 batch",
                                "📆 Winter 2026 batch",
                                "📆 Fall 2025 batch",
                                "📆 Summer 2025 batch",
                                "📆 Spring 2025 batch",
                                "📆 Winter 2025 batch",
                                "📆 Fall 2024 batch",
                                "📆 Summer 2024 batch",
                                "📆 Winter 2024 batch",
                                "📆 Summer 2023 batch",
                                "📆 Winter 2023 batch",
                                "📆 Summer 2022 batch",
                                "📆 Winter 2022 batch",
                                "📆 Summer 2021 batch",
                                "📆 Winter 2021 batch",
                                "📆 Summer 2020 batch",
                                "📆 Winter 2020 batch",
                                "📆 Summer 2019 batch",
                                "📆 Winter 2019 batch",
                                "📆 Summer 2018 batch",
                                "📆 Winter 2018 batch",
                                "📆 Summer 2017 batch",
                                "📆 Winter 2017 batch",
                                "📆 Summer 2016 batch",
                                "📆 Winter 2016 batch",
                                "📆 Summer 2015 batch",
                                "📆 Winter 2015 batch",
                                "📆 Summer 2014 batch",
                                "📆 Winter 2014 batch",
                                "📆 Summer 2013 batch",
                                "📆 Winter 2013 batch",
                                "📆 Summer 2012 batch",
                                "📆 Winter 2012 batch",
                                "📆 Summer 2011 batch",
                                "📆 Winter 2011 batch",
                                "📆 Summer 2010 batch",
                                "📆 Winter 2010 batch",
                                "📆 Summer 2009 batch",
                                "📆 Winter 2009 batch",
                                "📆 Summer 2008 batch",
                                "📆 Winter 2008 batch",
                                "📆 Summer 2007 batch",
                                "📆 Winter 2007 batch",
                                "📆 Summer 2006 batch",
                                "📆 Winter 2006 batch",
                                "📆 Summer 2005 batch"
                            ]
                        },
                        "default": [
                            "All Batches"
                        ]
                    },
                    "industries": {
                        "title": "🏢 Companies · Industries",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more industries to focus the run.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "All industries",
                                "B2B",
                                "Consumer",
                                "Healthcare",
                                "Fintech",
                                "Engineering, Product and Design",
                                "Industrials",
                                "Education",
                                "Real Estate and Construction",
                                "Government",
                                "Unspecified"
                            ],
                            "enumTitles": [
                                "🌐 All industries (no filter)",
                                "🤝 B2B (enterprise and business tools)",
                                "🛍️ Consumer (consumer products and services)",
                                "🩺 Healthcare (health and life sciences)",
                                "💳 Fintech (financial technology)",
                                "🛠️ Engineering, Product and Design",
                                "🏭 Industrials (manufacturing and logistics)",
                                "🎓 Education (edtech and learning)",
                                "🏗️ Real Estate and Construction",
                                "🏛️ Government (public sector)",
                                "❓ Unspecified (not categorized)"
                            ]
                        },
                        "default": [
                            "All industries"
                        ]
                    },
                    "regions": {
                        "title": "🏢 Companies · HQ Regions",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more regions to narrow geographically.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Anywhere",
                                "United States of America",
                                "America / Canada",
                                "Canada",
                                "Mexico",
                                "Latin America",
                                "Europe",
                                "United Kingdom",
                                "Africa",
                                "Middle East and North Africa",
                                "South Asia",
                                "India",
                                "Southeast Asia",
                                "East Asia",
                                "Oceania",
                                "Remote",
                                "Fully Remote",
                                "Partly Remote",
                                "Unspecified"
                            ],
                            "enumTitles": [
                                "🌐 Anywhere (no region filter)",
                                "🇺🇸 United States of America",
                                "🌎 America / Canada",
                                "🇨🇦 Canada",
                                "🇲🇽 Mexico",
                                "🌎 Latin America",
                                "🌍 Europe",
                                "🇬🇧 United Kingdom",
                                "🌍 Africa",
                                "🌍 Middle East and North Africa",
                                "🌏 South Asia",
                                "🇮🇳 India",
                                "🌏 Southeast Asia",
                                "🌏 East Asia",
                                "🌊 Oceania",
                                "🛰️ Remote",
                                "🛰️ Fully Remote",
                                "🛰️ Partly Remote",
                                "❓ Unspecified"
                            ]
                        },
                        "default": [
                            "Anywhere"
                        ]
                    },
                    "minEmployeeSize": {
                        "title": "🏢 Companies · Minimum Employee Size",
                        "enum": [
                            "1+",
                            "5+",
                            "10+",
                            "25+",
                            "50+",
                            "100+",
                            "250+",
                            "500+",
                            "1000+"
                        ],
                        "type": "string",
                        "description": "Smallest team size to include. Select '1+' for no minimum.",
                        "default": "1+"
                    },
                    "maxEmployeeSize": {
                        "title": "🏢 Companies · Maximum Employee Size",
                        "enum": [
                            "1+",
                            "5",
                            "10",
                            "25",
                            "50",
                            "100",
                            "250",
                            "500",
                            "1000+"
                        ],
                        "type": "string",
                        "description": "Largest team size to include. Select '1000+' for no maximum.",
                        "default": "1000+"
                    },
                    "scrapeFounderDetails": {
                        "title": "🙌 Companies Enrich · Scrape Founder Details",
                        "type": "boolean",
                        "description": "Companies mode only. Adds an extra HTTP per company (concurrency = 5) — slows runs. Fetches `/companies/{slug}` and adds `founders[]` (name, title, bio, linkedinUrl, twitterUrl, avatarUrl, isActive, hasEmail) plus `socials` (linkedin, twitter, facebook, crunchbase, github), `appVideoUrl`, `demoDayVideoUrl`.",
                        "default": false
                    },
                    "scrapeOpenJobs": {
                        "title": "🙌 Companies Enrich · Scrape Open Job Postings",
                        "type": "boolean",
                        "description": "Companies mode only. Adds an extra HTTP per company (concurrency = 5) — slows runs. Fetches `/companies/{slug}/jobs` and adds `openJobs[]` (title, role, location, salary, equity, experience, applyUrl, posted-ago).",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Output cap — max records to return",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard ceiling on dataset rows. Stops the run after this many job-detail pages or company hits have been emitted. Applies to both Jobs and Companies. Free-tier accounts are capped at 100 regardless.",
                        "default": 100
                    },
                    "maxPages": {
                        "title": "Pagination depth — max listing pages per URL (jobs only)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Jobs scraper only: how many `?page=N` listing pages to follow per start URL. Companies scraper paginates Algolia automatically until `maxItems` is reached, ignoring this setting.",
                        "default": 10
                    },
                    "monitoringMode": {
                        "title": "Monitoring mode (jobs only)",
                        "type": "boolean",
                        "description": "Jobs scraper only: only jobs whose numeric id has not been stored in your Key-Value store yet are enqueued (per Apify user id). Useful for scheduled runs that should only emit new postings.",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency (jobs only)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Jobs scraper only: max parallel HTTP requests.",
                        "default": 10
                    },
                    "minConcurrency": {
                        "title": "Min concurrency (jobs only)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Jobs scraper only: min parallel HTTP requests to keep active.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries (jobs only)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Jobs scraper only: retries before a request is marked failed.",
                        "default": 3
                    },
                    "proxy": {
                        "title": "Proxy configuration (jobs only)",
                        "type": "object",
                        "description": "Proxy for the Jobs scraper. Companies mode hits YC's Algolia API directly and does not use a proxy regardless of what's configured here.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
