# Tech & Startup Jobs Scraper: ATS APIs & B2B Enricher (`junodcreator/b2b-tech-startup-jobs-company-enricher`) Actor

Scrape active tech & startup job openings directly from Greenhouse, Lever, Ashby, and Workable APIs. Extracts 100+ B2B tech stack signals, salary ranges, hiring intent, and enriches company emails, LinkedIn, and pixels.

- **URL**: https://apify.com/junodcreator/b2b-tech-startup-jobs-company-enricher.md
- **Developed by:** [Juno Artha Dinamika](https://apify.com/junodcreator) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 job posting scrapeds

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

## B2B Tech Startup Jobs & Hiring Signal Company Enricher

Scrape active engineering, AI, sales, and executive job postings from **Wellfound (AngelList)**, **Y Combinator (`workatastartup.com`)**, **Greenhouse**, **Lever**, and **Ashby** — and enrich each hiring company with funding stage, salary bands, tech stack, and verified B2B contact details.

When a startup posts high-salary engineering or RevOps roles, it signals fresh capital and immediate budget. This Actor combines multi-board job discovery with company website enrichment so recruiters, dev shops, and B2B SaaS teams can reach out with exact hiring context.

***

### What data can you extract?

| Data Field | Description | Example |
| :--- | :--- | :--- |
| **Job Posting Details** | Job title, role category (`Engineering`, `AI / ML`, `Sales / GTM`, `Product`, `Executive`), employment type, seniority, direct apply URL | `Founding AI Infrastructure Engineer` (`Full-time`) |
| **Compensation & Equity** | Parsed `salaryMinUsd`, `salaryMaxUsd`, currency, raw compensation text, and equity range (`equityMinPercent`–`equityMaxPercent`) | `$180,000 – $230,000 USD` (`0.25% – 0.75% equity`) |
| **Workplace & Geography** | `workplaceType` (`Remote`, `Hybrid`, `Onsite`) and job locations | `Remote` (`["New York, NY", "Remote (US)"]`) |
| **Startup & Funding Profile** | Company name, website domain, funding stage (`Seed`, `Series A`, `Series B`, `YC Backed`), total funding raised, employee headcount range, investors | `Series A` (`$10M raised`, `11-50 employees`) |
| **Tech Stack Signals** | Programming languages, cloud infrastructure, and tools parsed from the job description + company website stack (`Next.js`, `Webflow`, `HubSpot`, `Intercom`) | `["Python", "TypeScript", "Kubernetes", "PostgreSQL", "AWS"]` |
| **Hiring Velocity & Buying Signal** | Open roles count for that company, `hiringVelocityTier` (`Aggressive Scaling (5+ Open Roles)`), and tailored `buyingSignalSummary` | `Active Growth — Hiring Founding AI Engineer ($230k max)` |
| **Company Contacts & Socials** | Business emails, phone numbers, LinkedIn company page, X/Twitter, GitHub, and founders/leadership hints extracted from the company website | `founders@vellum.ai`, `linkedin.com/company/vellum-ai` |

***

### Supported Job Boards & ATS Platforms

You can run keyword discovery across all supported platforms (`"all"`), filter to a single platform, or pass direct company board URLs in `directBoardUrls`:

- **Wellfound (formerly AngelList Talent)**
- **Y Combinator Work at a Startup (`workatastartup.com`)**
- **Greenhouse (`boards.greenhouse.io` / `job-boards.greenhouse.io`)**
- **Lever (`jobs.lever.co`)**
- **Ashby (`jobs.ashbyhq.com`)**

***

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `jobRoles` | `string[]` | `["Founding Engineer", "AI Engineer", ...]` | Job titles, roles, or tech keywords to target. |
| `targetPlatforms` | `string` | `"all"` | Choose `"all"`, `"wellfound"`, `"yc"`, `"greenhouse"`, `"lever"`, or `"ashby"`. |
| `directBoardUrls` | `string[]` | `[]` | Optional direct Greenhouse, Lever, Ashby, YC, or Wellfound URLs (e.g., `https://jobs.ashbyhq.com/linear`). |
| `locationFilter` | `string` | `"Remote"` | Filter by location or `"Remote"` (leave empty for all locations). |
| `minSalaryUsd` | `integer` | `0` | Only output roles where maximum annual salary is at least this USD amount (`0` = include roles without public salary). |
| `fundingStages` | `string[]` | `[]` | Optional filter by funding stage (`["Seed", "Series A", "YC"]`). |
| `enrichCompanyContacts` | `boolean` | `true` | Visit each startup's website once to extract emails, phone numbers, LinkedIn/Twitter links, and web tech stack. |
| `maxJobs` | `integer` | `50` | Maximum number of qualifying job records to output. |
| `maxTotalChargeUsd` | `number` | `10.0` | Hard spending cap in USD for Pay-Per-Event billing. |

#### Example Input JSON

```json
{
  "jobRoles": ["Founding Engineer", "Staff Backend Engineer", "Head of Growth"],
  "targetPlatforms": "all",
  "directBoardUrls": [
    "https://jobs.ashbyhq.com/linear",
    "https://boards.greenhouse.io/vercel"
  ],
  "locationFilter": "Remote",
  "minSalaryUsd": 140000,
  "enrichCompanyContacts": true,
  "maxJobs": 50,
  "maxTotalChargeUsd": 5.0
}
```

***

### Output Example

```json
{
  "jobId": "gh-4481920104",
  "sourcePlatform": "greenhouse",
  "jobTitle": "Founding AI Infrastructure Engineer",
  "roleCategory": "AI / ML",
  "jobUrl": "https://boards.greenhouse.io/vellum/jobs/4481920104",
  "applyUrl": "https://boards.greenhouse.io/vellum/jobs/4481920104#app",
  "postedAt": "2026-10-19T18:10:00.000Z",
  "employmentType": "Full-time",
  "seniorityLevel": "Founding / Lead",
  "workplaceType": "Remote",
  "locations": ["New York, NY", "Remote (US)"],
  "salaryMinUsd": 180000,
  "salaryMaxUsd": 230000,
  "salaryCurrency": "USD",
  "salaryRawText": "$180,000 - $230,000 + Early Stage Equity",
  "equityMinPercent": 0.25,
  "equityMaxPercent": 0.75,
  "techStackKeywords": ["Python", "TypeScript", "Kubernetes", "PostgreSQL", "AWS", "LLM"],
  "companyName": "Vellum AI",
  "companySlug": "vellum",
  "companyWebsiteUrl": "https://www.vellum.ai",
  "companyDomain": "vellum.ai",
  "companyDescription": "Enterprise LLM development platform for prompt engineering, evaluation, and production workflows.",
  "companySizeRange": "11-50",
  "fundingStage": "Series A",
  "totalFundingUsd": 10000000,
  "investors": ["Y Combinator", "Rebel Fund"],
  "openRolesCountForCompany": 4,
  "hiringVelocityTier": "Active Growth (2-4 Open Roles)",
  "buyingSignalSummary": "Series A startup actively hiring Founding AI Infrastructure Engineer ($180k-$230k) with Python, TypeScript, Kubernetes stack.",
  "companyEmails": ["founders@vellum.ai", "support@vellum.ai"],
  "companyPhones": [],
  "companySocials": {
    "linkedin": "https://www.linkedin.com/company/vellum-ai",
    "twitter": "https://x.com/vellum_ai",
    "github": "https://github.com/vellum-ai",
    "youtube": null,
    "instagram": null,
    "facebook": null
  },
  "companyAdPixels": {
    "metaPixel": false,
    "tiktokPixel": false,
    "googleTagManager": true,
    "googleAds": true,
    "klaviyo": false
  },
  "companyWebTechStack": ["Next.js", "Webflow", "Intercom"],
  "extractionTier": "tier1_live_json",
  "scrapedAt": "2026-10-21T16:54:08.512Z"
}
```

***

### Pricing (Pay-Per-Event)

Company website enrichment is **deduplicated per domain** — if a startup has 8 open engineering roles, you only pay `hiring-company-enriched` ($0.004) **once** for that company.

| Event Name | Price (USD) | Triggered When |
| :--- | :--- | :--- |
| `actor-start` | **$0.005** | Charged once when the run initializes. |
| `job-posting-scraped` | **$0.002** | A job posting matching your role, location, and salary filters is saved. |
| `tech-and-salary-extracted` | **$0.001** | Compensation, funding stage, or tech stack signals are parsed for the job. |
| `hiring-company-enriched` | **$0.004** | Charged **once per unique startup domain** when company contact/social enrichment succeeds. |

***

### Integrations & Automation Workflows

Connect live startup hiring signals directly to your outbound tools:

- **Clay.com / Apollo / Smartlead / Instantly:** Trigger runs via Apify API, enrich `companyDomain` + `companyEmails`, and reference exact open roles (`jobTitle`, `salaryMaxUsd`, `techStackKeywords`) in your cold outreach.
- **Make.com / n8n / Zapier:** Monitor Greenhouse, Lever, and Ashby boards daily for high-value roles (`Founding Engineer`, `AI Engineer`, `Head of Growth`) and push qualified companies into HubSpot, Pipedrive, or Slack.
- **CSV / JSON Export:** Download clean, structured job & company enrichment tables directly from Apify Console.

***

### FAQ

**Can I scrape specific Greenhouse, Lever, or Ashby boards directly?**\
Yes. Pass any public board URLs (e.g., `https://boards.greenhouse.io/company` or `https://jobs.ashbyhq.com/company`) in `directBoardUrls`.

# Actor input Schema

## `jobTitleKeywords` (type: `array`):

Filter job openings by role or department keywords (case-insensitive substring match, e.g., 'Software Engineer', 'Account Executive', 'Product Manager', 'RevOps', 'AI', 'Security'). Leave empty to capture all roles.

## `requiredTechStackFilter` (type: `array`):

Optional filter: Only output jobs whose description mentions at least one of these tools/technologies (e.g., 'Snowflake', 'Salesforce', 'HubSpot', 'Kubernetes', 'TypeScript', 'AWS', 'OpenAI'). Leave empty to include all jobs.

## `companyAtsTargets` (type: `array`):

Optional list of specific ATS board URLs or slugs (e.g., 'https://boards.greenhouse.io/stripe', 'https://jobs.lever.co/plaid', 'https://jobs.ashbyhq.com/linear', 'greenhouse:anthropic', 'ashby:ramp'). If left empty, the Actor automatically scans its built-in seed directory of 50+ high-growth tech companies across Greenhouse, Lever, Ashby, and Workable.

## `atsProviders` (type: `array`):

Select which ATS platforms to query when scanning built-in seed companies or bare company slugs.

## `postedWithinDays` (type: `integer`):

Only include active job openings posted or updated within the last N days (e.g., 14 days = fresh hiring intent signals). Jobs older than this threshold are skipped for free.

## `remoteOnly` (type: `boolean`):

If enabled, only extracts job openings marked as Remote / Distributed.

## `enrichHiringCompany` (type: `boolean`):

When enabled, resolves the hiring company's official root domain and crawls it once per unique company to extract business emails, phone/WhatsApp numbers, LinkedIn company URL, website tech stack, and installed ad pixels.

## `maxJobs` (type: `integer`):

Maximum total number of matching job postings to extract across all target ATS boards.

## `maxTotalChargeUsd` (type: `number`):

Hard spending safety limit in USD for Pay-Per-Event (PPE) charges. The Actor gracefully stops extracting once this budget cap is reached.

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

Apify Proxy settings for querying ATS APIs and enriching company domains.

## Actor input object example

```json
{
  "jobTitleKeywords": [
    "Software Engineer",
    "Account Executive",
    "Product Manager",
    "RevOps"
  ],
  "requiredTechStackFilter": [],
  "companyAtsTargets": [],
  "atsProviders": [
    "greenhouse",
    "lever",
    "ashby",
    "workable"
  ],
  "postedWithinDays": 14,
  "remoteOnly": false,
  "enrichHiringCompany": true,
  "maxJobs": 30,
  "maxTotalChargeUsd": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Full B2B dataset containing ATS job postings, detected tech stack tools, extracted salary ranges, B2B hiring intent signals, and company emails, socials, and pixels.

## `outputSummary` (type: `string`):

Execution summary report including total jobs scraped, tech stacks extracted, companies enriched, and Pay-Per-Event (PPE) billing ledger.

# 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 = {
    "jobTitleKeywords": [
        "Software Engineer",
        "Account Executive",
        "Product Manager",
        "RevOps"
    ],
    "requiredTechStackFilter": [],
    "companyAtsTargets": [],
    "atsProviders": [
        "greenhouse",
        "lever",
        "ashby",
        "workable"
    ],
    "postedWithinDays": 14,
    "remoteOnly": false,
    "enrichHiringCompany": true,
    "maxJobs": 30,
    "maxTotalChargeUsd": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("junodcreator/b2b-tech-startup-jobs-company-enricher").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 = {
    "jobTitleKeywords": [
        "Software Engineer",
        "Account Executive",
        "Product Manager",
        "RevOps",
    ],
    "requiredTechStackFilter": [],
    "companyAtsTargets": [],
    "atsProviders": [
        "greenhouse",
        "lever",
        "ashby",
        "workable",
    ],
    "postedWithinDays": 14,
    "remoteOnly": False,
    "enrichHiringCompany": True,
    "maxJobs": 30,
    "maxTotalChargeUsd": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("junodcreator/b2b-tech-startup-jobs-company-enricher").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 '{
  "jobTitleKeywords": [
    "Software Engineer",
    "Account Executive",
    "Product Manager",
    "RevOps"
  ],
  "requiredTechStackFilter": [],
  "companyAtsTargets": [],
  "atsProviders": [
    "greenhouse",
    "lever",
    "ashby",
    "workable"
  ],
  "postedWithinDays": 14,
  "remoteOnly": false,
  "enrichHiringCompany": true,
  "maxJobs": 30,
  "maxTotalChargeUsd": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call junodcreator/b2b-tech-startup-jobs-company-enricher --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,junodcreator/b2b-tech-startup-jobs-company-enricher"
        }
    }
}
```

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/IWAabX6SCT7hYUKts/builds/gSaerg4uHXiGR898e/openapi.json
