# Y Combinator Jobs Scraper | Pipelines & Alerts (`job-atlas/ycombinator-enrich-translate-normalize-scraper`) Actor

Get Y Combinator startup jobs for recruiting pipelines, job boards, and recurring alerts. Export complete descriptions, salary ranges, company details, and source links in a consistent format, with optional AI enrichment and cross-run deduplication.

- **URL**: https://apify.com/job-atlas/ycombinator-enrich-translate-normalize-scraper.md
- **Developed by:** [Job Atlas](https://apify.com/job-atlas) (community)
- **Categories:** Jobs
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 y combinator job 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

# README

## Y Combinator Jobs Scraper for Pipelines and Alerts

Get Y Combinator startup jobs for recruiting pipelines, job boards, and recurring alerts. Export complete descriptions, salary ranges, company details, and source links in a consistent format, with optional AI enrichment and cross-run deduplication.

Use this normalized Actor when you need repeatable alerts, structured job data,
or records that share a format with the normalized LinkedIn and EURAXESS
Actors. The separate legacy `ycombinator-was-scraper` serves existing flat-export
workflows. Choose this Actor for nested records and pipeline controls; its
stable source identifier keeps job keys compatible with existing YC records.

This is an independent service, unaffiliated with Y Combinator or Work at a
Startup. It reads a regularly refreshed inventory of complete public postings;
a run does not fetch YC pages on demand. Results reflect the last successful
observation, and stale or unavailable inventory causes the run to fail.

### Try five jobs

Open the Input JSON editor, paste the following, and run. Enrichment and
translation are off, and deduplication is off so repeated trials can return
the same jobs. This example costs $0.0045 in result events if five jobs arrive.

```json
{
  "schemaVersion": "nomad-agent-job-search-input-v1",
  "firstRunMode": false,
  "postedWithin": "any",
  "maxItems": 5,
  "dedupe": {
    "enabled": false,
    "key": ""
  },
  "aiEnrichment": {
    "enabled": false,
    "accuracy": "silver"
  },
  "translateToEnglish": false,
  "includeRaw": true,
  "analyticsEnabled": false
}
```

Add `"keyword": "founding engineer"` or `"location": "San Francisco"` to narrow
the search. Leave workplace filters blank for an initial trial. Download JSON
from the Dataset tab; keep the nested record for downstream processing.

### What a result looks like

This shortened excerpt comes from a delivered Knowtex job observed on
2026-09-04. It is a historical example, not a promise that the vacancy remains
open. Fields omitted here are present in the full six-root record.

```json
{
  "schemaVersion": "nomad-agent-job-v1",
  "identity": {
    "source": "ycombinator_was",
    "externalId": "107962",
    "url": "https://www.workatastartup.com/jobs/107962"
  },
  "data": {
    "title": "Engineer Manager, Platform",
    "company": {"name": "Knowtex"},
    "compensation": {
      "raw": "$230K - $280K",
      "minimum": 230000,
      "maximum": 280000,
      "exact": null,
      "currency": null,
      "period": null
    }
  }
}
```

Full records contain `schemaVersion`, `identity`, `data`, `custom`, `llm`, and
`raw`. Company, salary, requirements, application links, and availability
observations live in `data`. YC cohort, equity labels, source skill tags, and
company context live in `custom.data`. The
[public YC v2 schema](https://raw.githubusercontent.com/Exdenta/nomad-agent-job-scrapers/main/integrations/shared/ycombinator-v2.schema.json) describes that extension.
Raw description text and HTML remain available unless `includeRaw` is false.

### Price examples

Current event prices, checked 2026-09-05:

| Event | Per delivered job | Per 1,000 qualifying jobs |
| --- | ---: | ---: |
| Job result | $0.0009 | $0.90 |
| Optional Silver enrichment | +$0.006 | +$6.00 |
| Optional Gold enrichment | +$0.010 | +$10.00 |
| Optional English translation | +$0.006 | +$6.00 |

For 100 delivered jobs, base result events total $0.09. If all 100 also receive
billable Silver enrichment, the total is $0.69; with translation on all 100,
that becomes $1.29. Failed enrichment is not charged as enrichment. Translation
is charged only for confirmed selected-field translation. These are Actor event
examples; consult your Apify plan for any other applicable platform costs.
Prices may change; the live Pricing tab is authoritative.

AI fills only missing fields supported by the description. It does not replace
source facts. English translation is usually unnecessary for this largely
English source and affects selected display fields, not the raw description.
`firstRunMode: true` enables a paid five-result Silver-and-translation preset;
leave it false for the base-price recipe above.

### Build recurring alerts

Enable `dedupe` and use a stable non-empty key for one alert stream, for example
`{"enabled": true, "key": "my-yc-alert"}`. Reuse that key and search scope on
later scheduled runs to suppress previously delivered jobs. An empty key uses
the Actor's default scope. Use `identity.source + ":" + identity.externalId`
as the downstream job key; never deduplicate by job title or company.

`postedWithin` defaults to `any`. The supported `1h`, `24h`, `7d`, and `30d`
windows use the hour when the inventory first saw the job, not a YC publication
date. `orderBy` accepts `newest` or `oldest` using that same observation time.
`maxItems` is capped at 1,000; zero requests that bounded window, not unlimited
results. A bounded scan can return fewer matches and report `resultsLimited`.

For multiple terms, use `ycSearch` with schema version
`nomad-agent-ycombinator-search-v1`, an OR-list in `queries`, and optional
`companyBatches`, `roleTypes`, or `jobTypes`. Do not combine non-empty `queries`
with `keyword`. See the [input guide](https://github.com/Exdenta/nomad-agent-job-scrapers/blob/main/docs/ycombinator.md)
for a full recipe and normalized-filter reference.

### Understand missing values

- `null` means unknown or unavailable; `[]` means explicitly empty.
- A dollar sign alone does not establish USD or an annual pay period.
- A location label can be available while parsed city and country remain null.
- A physical location does not establish onsite or hybrid work. Those filters
  can exclude most jobs with unknown workplace mode; use `location` when you
  mean a city label.
- First-observed dates and availability evidence describe past observations,
  not guaranteed publication dates or current hiring status.
- Founders are company context, not hiring contacts. Source skill tags are not
  automatically required skills.

### API and AI agents

Use the [YC guide and Agent Skill](https://github.com/Exdenta/nomad-agent-job-scrapers/blob/main/docs/ycombinator.md)
for a bounded API call using `latest`. Record the returned run’s immutable build ID and numeric build number. Read the run's `RUN-SUMMARY`
(`nomad-agent-run-summary-v4`) and reconcile `delivered` with the dataset.
`resultsLimited` describes incomplete coverage; a successful Apify status
alone does not establish a complete search. Follow the summary's retry
recommendation only within your authorized spend budget. The Actor never
starts another paid run automatically.

### Changelog

- September 2026: published the YC v2 extension schema and readable result
  links; clarified prices, alert setup, and source limitations. Preserved the
  accepted `any` recency default and existing normalized output semantics.

### Job Atlas

Explore the Job Atlas job-data and matching Actors. Use `latest` and retain the immutable build ID returned by each run.

- [Linkedin](https://apify.com/job-atlas/linkedin-enrich-translate-normalize-scraper)
- [Euraxess](https://apify.com/job-atlas/euraxess-enrich-translate-normalize-scraper)
- [YC](https://apify.com/job-atlas/ycombinator-enrich-translate-normalize-scraper)
- [Scorer](https://apify.com/job-atlas/ai-job-fit-scorer)

[Website and integration guides](https://nomadagent.dev/) | [Source and client examples](https://github.com/Exdenta/nomad-agent-job-scrapers)

# Actor input Schema

## `firstRunMode` (type: `boolean`):

Run a small enriched evaluation without changing search or filter fields. When enabled, the Actor caps effective maxItems at 5, uses Silver AI enrichment, translates supported fields to English, disables cross-run deduplication, returns raw as null, and keeps anonymous analytics off. AI enrichment and translation are paid events.

## `schemaVersion` (type: `string`):

Version of the shared normalized job-search Actor input contract.

## `keyword` (type: `string`):

One search term. Cannot be combined with non-empty ycSearch.queries.

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

Case-insensitive match against YC's published location label.

## `workArrangements` (type: `array`):

Optional union of published workplace modes. YC labels establish remote explicitly; a physical place or missing workplace label is never treated as onsite or hybrid evidence.

## `postedWithin` (type: `string`):

Filter by the UTC hour when the owner inventory first observed the job. YC does not publish a source posting timestamp.

## `orderBy` (type: `string`):

Order matching results by the inventory first-observed hour. YC job ID and canonical URL break ties consistently.

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

Maximum number of complete normalized jobs to return. Set 0 to request the complete bounded delivery window of 1,000; it never means unlimited.

## `ycSearch` (type: `object`):

Optional versioned content-term and YC taxonomy filters applied locally to the cached normalized inventory. Leave queries empty to use keyword or no term filter.

## `dedupe` (type: `object`):

Enabled by default. An empty key derives isolated history from this Apify user and the resolved YC query and filter scope. Provide a distinct opaque alert/profile key only when searches should intentionally share history.

## `filters` (type: `object`):

Optional nomad-agent-job-filter-v1 expression over allowlisted normalized fields. Unknown rich facts never count as an early card rejection.

## `aiEnrichment` (type: `object`):

Reads only a complete public plain-text description and fills normalized fields that deterministic YC parsing left null. Static facts always win, and no customer API key or model is requested. Provider failure leaves the base result unchanged and is recorded in llm status.

## `translateToEnglish` (type: `boolean`):

After normalization, filtering, and optional enrichment, translate only configured short display fields with the Actor owner's DeepL account. Raw descriptions, HTML, company names, taxonomy, and provenance remain unchanged.

## `includeRaw` (type: `boolean`):

When enabled, return the complete YC detail description text and HTML in raw. Disable it to return raw: null after all requested processing.

## `analyticsEnabled` (type: `boolean`):

Opt in to one fail-open operational event with coarse run health and counts. It excludes caller IDs, search values, records, URLs, errors, secrets, source text, translations, and extracted values.

## Actor input object example

```json
{
  "firstRunMode": false,
  "schemaVersion": "nomad-agent-job-search-input-v1",
  "postedWithin": "any",
  "orderBy": "newest",
  "maxItems": 100,
  "dedupe": {
    "enabled": true,
    "key": ""
  },
  "aiEnrichment": {
    "enabled": false,
    "accuracy": "silver"
  },
  "translateToEnglish": false,
  "includeRaw": true,
  "analyticsEnabled": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

Minimal nomad-agent-run-summary-v4 outcome with delivered count and one optional bounded retry recommendation. Only public outcome fields are included.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("job-atlas/ycombinator-enrich-translate-normalize-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("job-atlas/ycombinator-enrich-translate-normalize-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 '{}' |
apify call job-atlas/ycombinator-enrich-translate-normalize-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,job-atlas/ycombinator-enrich-translate-normalize-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/pF4Lk4ifzb9tZXg7K/builds/ijdshjrYsaZ66GQGP/openapi.json
