# Welcome to the Jungle Scraper · Hiring Signals & Lemlist Push (`corent1robert/wttj-hiring-signal-scraper`) Actor

Scrape Welcome to the Jungle job postings and turn them into outreach-ready B2B leads. Filter by sector, job type, and contract. Get company name, open roles, headcount, founding year, and optional CEO/CTO/VP Sales LinkedIn. Push directly to Lemlist with a pre-filled icebreaker. No login. No API key

- **URL**: https://apify.com/corent1robert/wttj-hiring-signal-scraper.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 company extracteds

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

## WTTJ Hiring Signal · Companies Actively Recruiting

A company that is actively hiring is a company with budget, a growth signal, and a decision-maker under pressure to deliver. Turn Welcome to the Jungle job postings into a clean, outreach-ready list — filtered by sector, job type, contract, and recency. Optionally enrich each company with the CEO, Founder, CTO, CMO, VP Sales, or HR contact LinkedIn profile — and push leads directly into a Lemlist campaign with a pre-filled icebreaker.

**No login. No API key. No WTTJ account needed.**

---

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|-------------|-----------------|
| **B2B SaaS / software vendor** | Find tech companies scaling their sales team | Sectors: SaaS + Software · Job types: Sales · Contract: Full-time · Last 3 months |
| **Recruiter / headhunter** | Build a pipeline of companies hiring in your niche | Sector of your choice · Contract: Full-time or Apprenticeship |
| **Outbound SDR / BDR** | Identify companies with budget signal (active hiring) | Any sector · Job type: Sales or Tech · Enrich CEO LinkedIn |
| **Market researcher** | Map which sectors are hiring and where | Multiple sectors · No job type filter · No cap |
| **HR tech vendor** | Find companies posting HR / People roles | Sectors: any · Job types: HR / People |
| **Investor / analyst** | Track hiring activity as a growth signal | One sector · Last 1–3 months · Download full dataset |

What you get by default: company name, WTTJ profile URL, matching open role count and titles, headcount, size label, city, and country code — one row per company, ready to export.

When to enable contact enrichment: turn on **Find LinkedIn contact** when you need a direct decision-maker for outreach. You get their name, exact LinkedIn URL, title, and an AI confidence score. Adds $0.05 per company.

When to enable Lemlist push: add your **Lemlist API key + campaign ID** to push each lead directly into your outreach sequence — no CSV export needed. Each lead is created with a pre-filled icebreaker (FR or EN) mentioning the open roles and city. Works with or without contact enrichment. Adds $0.005 per lead pushed.

---

### What it extracts

| Field | Description |
|-------|-------------|
| `company_name` | Company name as listed on WTTJ |
| `wttj_url` | Direct link to their WTTJ profile |
| `jobs_count_matching` | Number of open roles matching your filters |
| `jobs_matching_titles` | List of matching job titles |
| `nb_employees` | Approximate headcount |
| `size_label` | Human-readable size range (e.g. "50–149 employees") |
| `founding_year` | Year the company was founded — useful to filter early-stage vs. established |
| `company_summary` | One-line pitch from WTTJ — perfect for personalizing cold emails |
| `city` | Primary office city |
| `country_code` | ISO country code (FR, GB, DE…) |
| `contact_name` | CEO / Founder / HR name *(enrichment ON)* |
| `contact_linkedin_url` | LinkedIn profile URL *(enrichment ON)* |
| `contact_title` | Exact title on LinkedIn *(enrichment ON)* |
| `contact_certainty` | AI confidence score 0–100 *(enrichment ON)* |
| `lemlist_lead_id` | Lemlist lead ID (`lea_xxx`) if pushed, `duplicate` if already in campaign *(Lemlist ON)* |
| `scraped_at` | ISO timestamp |

---

### Quick start

1. Open the Actor in Apify Console
2. **Sectors** — pick one or more (e.g. SaaS / Cloud Services)
3. **Job types** — pick what roles to look for (e.g. Sales & Customer Service)
4. **Contract types** — pick Full-time (CDI) or others
5. **Published within** — set the recency window (default: 3 months)
6. **Max companies** *(optional)* — cap the number of results or leave at 0 for all matches
7. **LinkedIn contact** *(optional)* — choose CEO, CTO, CMO, VP Sales, or HR to automatically find that person's LinkedIn profile for each company ($0.05 per company)
8. **Lemlist** *(optional)* — add your Lemlist API key and campaign ID to push each lead directly into your sequence ($0.005 per lead). Choose FR or EN for the icebreaker language. Works with or without contact enrichment.
9. Click **Start** — results appear in the Dataset tab as they are collected
10. Export as CSV, JSON, or Excel — or let Lemlist handle the outreach automatically

---

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `sectors` | string[] | `["saas-cloud-services"]` | Industry sectors to target (select from 70+ options) |
| `professionCategories` | string[] | `["Sales & Customer Service"]` | Job types to match (20 categories) |
| `contractTypes` | string[] | `["full_time"]` | Contract types to include |
| `monthsBack` | integer | `3` | Only include postings from the last N months (1–12) |
| `maxCompanies` | integer | `0` | Max companies to export (0 = no cap) |
| `contactRole` | string | `""` | Role to find: `ceo`, `founder`, `cto`, `cmo`, `vp-sales`, or `hr`. Leave empty to skip enrichment (PPE: $0.05/company when set) |
| `icebreakerLanguage` | string | `"en"` | Language for the Lemlist icebreaker: `en` (English) or `fr` (French) |
| `lemlistApiKey` | string | `""` | Your Lemlist API key (Settings → Integrations). Leave empty to skip Lemlist push |
| `lemlistCampaignId` | string | `""` | Target campaign ID (e.g. `cam_A1B2C3`). Found in the campaign URL |
| `lemlistFindEmail` | boolean | `false` | Ask Lemlist to find a verified email for each lead (consumes Lemlist credits) |
| `deduplicateAcrossRuns` | boolean | `false` | Skip companies already exported in a previous run — ideal for daily schedules. The seen list is stored in a persistent Apify Key-Value Store (`wttj-seen-slugs`). Note: when enabled, `maxCompanies` caps **new** companies only (full pool is fetched first) |
| `resetDeduplication` | boolean | `false` | Clear the seen companies cache and start fresh on the next run |

#### JSON example — SaaS companies hiring Sales (CDI, last 3 months)

```json
{
  "sectors": ["saas-cloud-services", "software-1"],
  "professionCategories": ["Sales & Customer Service"],
  "contractTypes": ["full_time"],
  "monthsBack": 3,
  "maxCompanies": 0
}
````

#### JSON example — FinTech companies hiring Tech, with CEO LinkedIn + Lemlist push (French)

```json
{
  "sectors": ["fintech-insurtech", "banking-1"],
  "professionCategories": ["Tech & Engineering"],
  "contractTypes": ["full_time"],
  "monthsBack": 6,
  "contactRole": "ceo",
  "minCertaintyScore": 75,
  "icebreakerLanguage": "fr",
  "lemlistApiKey": "YOUR_LEMLIST_API_KEY",
  "lemlistCampaignId": "cam_XXXXXXXXXX",
  "lemlistFindEmail": false
}
```

***

### How it works

1. **Search** — queries WTTJ with your sector, contract, and date filters
2. **Filter** — keeps only companies with at least one role matching your selected job types
3. **Deduplication** — one row per company, with all matching job titles consolidated
4. **Contact enrichment** *(optional)* — searches for a LinkedIn profile matching the requested role and uses AI to score confidence
5. **Lemlist push** *(optional)* — pushes each lead to your campaign with a pre-filled FR/EN icebreaker; deduplicates automatically
6. **Export** — one clean row per company, ready to download

***

### Output sample

```json
{
  "company_name": "PayFit",
  "wttj_slug": "payfit",
  "wttj_url": "https://www.welcometothejungle.com/en/companies/payfit",
  "jobs_count_matching": 2,
  "jobs_matching_titles": ["Business Developer / SDR - Paris", "Account Executive"],
  "nb_employees": 800,
  "size_label": "500–1,499 employees",
  "founding_year": 2015,
  "company_summary": "The HR and payroll software that lets you focus on what matters.",
  "city": "Paris",
  "country_code": "FR",
  "contact_name": "Firmin Zocchetto",
  "contact_linkedin_url": "https://fr.linkedin.com/in/firmin-zocchetto",
  "contact_title": "Co-founder & CEO @PayFit",
  "contact_certainty": 100,
  "lemlist_lead_id": "lea_jwzfLYMMYSyyCZZJ9",
  "scraped_at": "2026-06-02T13:45:00.000Z"
}
```

***

### Performance and cost

| Scenario | ~Companies | Cost estimate |
|----------|-----------|---------------|
| SaaS + Sales + CDI, last 3 months | ~100 | $0.30 |
| All Tech sectors, last 6 months, no cap | ~500 | $1.50 |
| 100 companies + CEO LinkedIn enrichment | 100 | $0.30 + $5.00 = **$5.30** |
| 100 companies + CEO enrichment + Lemlist push | 100 | $0.30 + $5.00 + $0.50 = **$5.80** |

Compute costs on Apify platform are additional (minimal — this Actor uses plain HTTP, no browser).

***

### Local development

#### Setup

```bash
cd wttj-hiring-signal-scraper
npm install
```

#### Run locally

```bash
npm start
```

Edit `storage/key_value_stores/default/INPUT.json` to adjust filters for local runs.

#### Run tests

```bash
npm test
```

49 unit tests covering filter building, company parsing, contact enrichment, and Lemlist push logic.

***

### Important / limitations

- **Daily run deduplication** — enable `deduplicateAcrossRuns` when scheduling the Actor daily. Each run only enriches and pushes companies not seen in previous runs, saving enrichment credits. Lemlist also deduplicates natively (409 on existing leads), so the Lemlist push is safe to run without deduplication too.
- Results depend on what companies have active listings on WTTJ — not all companies use the platform
- The profession category filter is applied client-side after Algolia pagination; very broad filters may fetch many pages before finding matches
- Contact enrichment uses public Google search results — accuracy depends on how prominent the contact is online. The certainty score helps you filter low-confidence results
- LinkedIn URLs may change over time — re-run enrichment periodically for up-to-date profiles

***

### Plug into your outreach stack

The dataset exports as CSV, JSON, or Excel in one click from the Apify Console.

**Option A — Native Lemlist push (zero export needed):**

1. Add your Lemlist API key + campaign ID in the input form
2. Run the Actor — each lead is pushed automatically with a pre-filled icebreaker
3. Choose FR or EN for the message language
4. Enable **Find email** to let Lemlist search for a verified email (uses Lemlist credits)

**Option B — Manual CSV import:**

1. Run the Actor with enrichment ON
2. Export as CSV from the Dataset tab
3. Import directly into [lemlist](https://get.lemlist.com/glt9nlkvruwf) as a new lead list

**Want to add professional emails without Lemlist credits?**
Run the output through **[FullEnrich](https://fullenrich.partnerlinks.io/u776ck47r5e1)** — paste the `contact_linkedin_url` and get a verified email in seconds.

Full sequence: WTTJ hiring signal → LinkedIn contact → email ([FullEnrich](https://fullenrich.partnerlinks.io/u776ck47r5e1)) → outreach ([lemlist](https://get.lemlist.com/glt9nlkvruwf)).

***

### More tools for B2B prospecting

These Actors pair naturally with the WTTJ Hiring Signal scraper:

| Actor | How it fits |
|-------|-------------|
| [French Companies · Search & SIREN Enrichment](https://apify.com/corent1robert/recherche-entreprises-scraper) | Enrich any company from the dataset with its SIREN, legal form, NAF code, and official address from the French register |
| [French Legal Announcements · BODACC Scraper](https://apify.com/corent1robert/bodacc-announcements-scraper) | Cross-reference hiring signals with legal events — fundraising, registrations, insolvency — for deeper qualification |
| [Facebook Ads Library Scraper](https://apify.com/corent1robert/facebook-ads-library-scraper) | Check whether a company is actively running Meta ads — another strong budget signal alongside the WTTJ hiring activity |
| [Facebook Page Scraper · Extract Email, Phone & Website](https://apify.com/corent1robert/facebook-page-contact-scraper) | Find the contact email and phone from a company's Facebook page when LinkedIn enrichment isn't enough |
| [Lemlist Usage Detector](https://apify.com/corent1robert/lemlist-tracking-domain-detector) | Check whether a prospect already uses lemlist — useful for targeting or for avoiding cannibalism in your sequence |
| [HubSpot Email Checker](https://apify.com/corent1robert/hubspot-email-registration-checker) | Verify whether a contact email has an active HubSpot login — qualifies inbound leads before sequencing |

***

### How much does it cost to scrape Welcome to the Jungle?

This Actor uses pay-per-event pricing — you only pay for what you extract.

| Scenario | Approx. cost |
|----------|-------------|
| 10 companies (first run / test) | ~$0.03 |
| 100 companies, no enrichment | ~$0.30 |
| 100 companies + CEO LinkedIn | ~$5.30 |
| 100 companies + CEO LinkedIn + Lemlist push | ~$5.80 |
| 500 companies, no enrichment | ~$1.50 |

The Actor uses plain HTTP (no browser) — compute costs are minimal. No residential proxy needed.

### Is it legal to scrape Welcome to the Jungle?

This Actor only accesses data that Welcome to the Jungle makes publicly available on its website — company names, office locations, headcount, and active job listings visible to any visitor without a login. No authentication is bypassed and no personal data is collected beyond what is displayed publicly on the platform. As with any data involving companies or individuals, ensure your use complies with GDPR and relevant regulations in your jurisdiction.

***

### Support

Questions or custom scraping needs? Contact <corentin@outreacher.fr>

# Actor input Schema

## `sectors` (type: `array`):

Filter by industry sector. Add as many as you need — results include companies from any of the selected sectors.

## `professionCategories` (type: `array`):

Filter by type of open role. Only companies with at least one matching job type are returned.

## `contractTypes` (type: `array`):

Filter by contract type. Select multiple to combine (e.g. full-time + apprenticeship).

## `monthsBack` (type: `integer`):

Only include job postings published in the last N months. Use 1 for very fresh leads, 6 for a broader sweep.

## `maxCompanies` (type: `integer`):

Maximum number of unique companies to return. Set to 0 for no cap — the run collects everything that matches.

## `contactRole` (type: `string`):

Choose a role to automatically find that person's LinkedIn profile for each company. Leave empty to skip.

## `deduplicateAcrossRuns` (type: `boolean`):

When enabled, companies exported in previous runs are skipped. The list of seen companies is stored in a persistent Apify Key-Value Store.

## `resetDeduplication` (type: `boolean`):

Clear the deduplication cache and start fresh. Use this to reprocess all companies on the next run.

## `icebreakerLanguage` (type: `string`):

Language of the pre-filled icebreaker message sent to Lemlist. Default: English.

## `lemlistApiKey` (type: `string`):

Your Lemlist API key. Found in Lemlist → Settings → Integrations. Leave empty to skip.

## `lemlistCampaignId` (type: `string`):

The ID of the campaign to push leads into (e.g. cam\_A1B2C3D4E5F6). Found in the campaign URL.

## `lemlistFindEmail` (type: `boolean`):

Ask Lemlist to find a verified email for each lead. Consumes Lemlist credits. Only works if a LinkedIn URL was found.

## Actor input object example

```json
{
  "sectors": [
    "saas-cloud-services"
  ],
  "professionCategories": [
    "Sales & Customer Service"
  ],
  "contractTypes": [
    "full_time"
  ],
  "monthsBack": 3,
  "maxCompanies": 10,
  "contactRole": "",
  "deduplicateAcrossRuns": false,
  "resetDeduplication": false,
  "icebreakerLanguage": "en",
  "lemlistFindEmail": false
}
```

# Actor output Schema

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

One row per unique company. Includes open role count, headcount, city, and optional contact LinkedIn.

## `runLog` (type: `string`):

Full execution log with phase progress and enrichment results.

# 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 = {
    "sectors": [
        "saas-cloud-services"
    ],
    "professionCategories": [
        "Sales & Customer Service"
    ],
    "contractTypes": [
        "full_time"
    ],
    "monthsBack": 3,
    "maxCompanies": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/wttj-hiring-signal-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 = {
    "sectors": ["saas-cloud-services"],
    "professionCategories": ["Sales & Customer Service"],
    "contractTypes": ["full_time"],
    "monthsBack": 3,
    "maxCompanies": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/wttj-hiring-signal-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 '{
  "sectors": [
    "saas-cloud-services"
  ],
  "professionCategories": [
    "Sales & Customer Service"
  ],
  "contractTypes": [
    "full_time"
  ],
  "monthsBack": 3,
  "maxCompanies": 10
}' |
apify call corent1robert/wttj-hiring-signal-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Welcome to the Jungle Scraper · Hiring Signals & Lemlist Push",
        "description": "Scrape Welcome to the Jungle job postings and turn them into outreach-ready B2B leads. Filter by sector, job type, and contract. Get company name, open roles, headcount, founding year, and optional CEO/CTO/VP Sales LinkedIn. Push directly to Lemlist with a pre-filled icebreaker. No login. No API key",
        "version": "1.0",
        "x-build-id": "haEUyPRMlYJwJdhCz"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/corent1robert~wttj-hiring-signal-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-corent1robert-wttj-hiring-signal-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/corent1robert~wttj-hiring-signal-scraper/runs": {
            "post": {
                "operationId": "runs-sync-corent1robert-wttj-hiring-signal-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/corent1robert~wttj-hiring-signal-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-corent1robert-wttj-hiring-signal-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": {
                    "sectors": {
                        "title": "Sectors",
                        "type": "array",
                        "description": "Filter by industry sector. Add as many as you need — results include companies from any of the selected sectors.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "saas-cloud-services",
                                "software-1",
                                "artificial-intelligence-machine-learning",
                                "big-data-1",
                                "cyber-security",
                                "mobile-apps",
                                "connected-objects",
                                "robotics",
                                "adtech-martech",
                                "advertising",
                                "digital",
                                "marketing-communications",
                                "event-management",
                                "banking-1",
                                "fintech-insurtech",
                                "finance-2",
                                "insurance-1",
                                "accounting",
                                "audit-1",
                                "change-management",
                                "digital-marketing-data-marketing",
                                "it-digital-1",
                                "organization-management",
                                "strategy-1",
                                "supply-chain",
                                "transaction-services",
                                "edtech-1",
                                "education-1",
                                "human-resources",
                                "recruitment-1",
                                "job-training-1",
                                "health-1",
                                "socialtech-greentech",
                                "home-care-services",
                                "environment-sustainable-development",
                                "e-commerce-1",
                                "mass-distribution",
                                "selective-distribution",
                                "energy",
                                "automotive",
                                "aeronautics-space",
                                "electronics-telecommunications",
                                "metallurgy",
                                "building-public-works",
                                "agri-food-animal-nutrition",
                                "commercial-real-estate",
                                "residential-real-estate",
                                "consumer-goods",
                                "foodtech-1",
                                "foodservice",
                                "cosmetics",
                                "lifestyle",
                                "luxury-1",
                                "hotel",
                                "tourism-1",
                                "film",
                                "media-1",
                                "music-1",
                                "publishing",
                                "sports",
                                "logistics",
                                "mobility-1",
                                "shipping-and-ground-transport",
                                "law",
                                "legal-department",
                                "nonprofit",
                                "public-administration",
                                "architecture-2",
                                "design-engineering-office",
                                "engineering",
                                "corporate-support"
                            ],
                            "enumTitles": [
                                "SaaS / Cloud Services [Tech]",
                                "Software [Tech]",
                                "AI / Machine Learning [Tech]",
                                "Big Data [Tech]",
                                "Cyber Security [Tech]",
                                "Mobile Apps [Tech]",
                                "Connected Objects / IoT [Tech]",
                                "Robotics [Tech]",
                                "AdTech / MarTech [Marketing]",
                                "Advertising [Marketing]",
                                "Digital [Marketing]",
                                "Marketing / Communications [Marketing]",
                                "Event Management [Marketing]",
                                "Banking [Finance]",
                                "FinTech / InsurTech [Finance]",
                                "Finance [Finance]",
                                "Insurance [Finance]",
                                "Accounting [Consulting]",
                                "Audit [Consulting]",
                                "Change Management [Consulting]",
                                "Digital Marketing / Data Marketing [Consulting]",
                                "IT / Digital [Consulting]",
                                "Organization / Management [Consulting]",
                                "Strategy [Consulting]",
                                "Supply Chain [Consulting]",
                                "Transaction Services [Consulting]",
                                "EdTech [Education]",
                                "Education [Education]",
                                "Human Resources [Education]",
                                "Recruitment [Education]",
                                "Job Training [Education]",
                                "Health [Health]",
                                "SocialTech / GreenTech [Health]",
                                "Home Care Services [Health]",
                                "Environment / Sustainable Dev [Health]",
                                "E-commerce [Distribution]",
                                "Mass Distribution [Distribution]",
                                "Selective Distribution [Distribution]",
                                "Energy [Industry]",
                                "Automotive [Industry]",
                                "Aeronautics / Space [Industry]",
                                "Electronics / Telecom [Industry]",
                                "Metallurgy [Industry]",
                                "Building / Public Works [Industry]",
                                "Agri-food / Animal Nutrition [Industry]",
                                "Commercial Real Estate [Real Estate]",
                                "Residential Real Estate [Real Estate]",
                                "Consumer Goods [Food & Beverage]",
                                "FoodTech [Food & Beverage]",
                                "Foodservice [Food & Beverage]",
                                "Cosmetics [Fashion]",
                                "Lifestyle [Fashion]",
                                "Luxury [Fashion]",
                                "Hotel [Tourism]",
                                "Tourism [Tourism]",
                                "Film [Media]",
                                "Media [Media]",
                                "Music [Media]",
                                "Publishing [Media]",
                                "Sports [Media]",
                                "Logistics [Transport]",
                                "Mobility [Transport]",
                                "Shipping / Ground Transport [Transport]",
                                "Law [Legal]",
                                "Legal Department [Legal]",
                                "Nonprofit [Public]",
                                "Public Administration [Public]",
                                "Architecture [Engineering]",
                                "Design & Engineering [Engineering]",
                                "Specialised Engineering [Engineering]",
                                "Corporate Support [Corporate]"
                            ]
                        }
                    },
                    "professionCategories": {
                        "title": "Job types",
                        "type": "array",
                        "description": "Filter by type of open role. Only companies with at least one matching job type are returned.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Sales & Customer Service",
                                "Tech & Engineering",
                                "Communication & Marketing & Advertising",
                                "Project / Product Management",
                                "Business & Finance",
                                "HR / People",
                                "Consulting & Strategy",
                                "Healthcare",
                                "Education",
                                "Legal",
                                "Research & Development",
                                "Transport & Logistics",
                                "Hospitality",
                                "Culture & Arts",
                                "Construction",
                                "Fashion",
                                "Agriculture & Agri-food",
                                "Craftsmanship and manual labor",
                                "Maintenance & Repair",
                                "Security & Defense"
                            ],
                            "enumTitles": [
                                "Sales & Customer Service",
                                "Tech & Engineering",
                                "Communication & Marketing & Advertising",
                                "Project / Product Management",
                                "Business & Finance",
                                "HR / People",
                                "Consulting & Strategy",
                                "Healthcare",
                                "Education",
                                "Legal",
                                "Research & Development",
                                "Transport & Logistics",
                                "Hospitality",
                                "Culture & Arts",
                                "Construction",
                                "Fashion",
                                "Agriculture & Agri-food",
                                "Craftsmanship and manual labor",
                                "Maintenance & Repair",
                                "Security & Defense"
                            ]
                        }
                    },
                    "contractTypes": {
                        "title": "Contract types",
                        "type": "array",
                        "description": "Filter by contract type. Select multiple to combine (e.g. full-time + apprenticeship).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "full_time",
                                "internship",
                                "apprenticeship",
                                "freelance",
                                "temporary",
                                "graduate_program",
                                "vie"
                            ],
                            "enumTitles": [
                                "Full-time (CDI)",
                                "Internship (Stage)",
                                "Apprenticeship (Alternance)",
                                "Freelance",
                                "Temporary (CDD)",
                                "Graduate Program",
                                "VIE"
                            ]
                        }
                    },
                    "monthsBack": {
                        "title": "Published within (months)",
                        "minimum": 1,
                        "maximum": 12,
                        "type": "integer",
                        "description": "Only include job postings published in the last N months. Use 1 for very fresh leads, 6 for a broader sweep.",
                        "default": 3
                    },
                    "maxCompanies": {
                        "title": "Max companies to export",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of unique companies to return. Set to 0 for no cap — the run collects everything that matches.",
                        "default": 0
                    },
                    "contactRole": {
                        "title": "LinkedIn contact to find",
                        "enum": [
                            "",
                            "ceo",
                            "founder",
                            "cto",
                            "cmo",
                            "vp-sales",
                            "hr"
                        ],
                        "type": "string",
                        "description": "Choose a role to automatically find that person's LinkedIn profile for each company. Leave empty to skip.",
                        "default": ""
                    },
                    "deduplicateAcrossRuns": {
                        "title": "Skip already-seen companies",
                        "type": "boolean",
                        "description": "When enabled, companies exported in previous runs are skipped. The list of seen companies is stored in a persistent Apify Key-Value Store.",
                        "default": false
                    },
                    "resetDeduplication": {
                        "title": "Reset seen companies list",
                        "type": "boolean",
                        "description": "Clear the deduplication cache and start fresh. Use this to reprocess all companies on the next run.",
                        "default": false
                    },
                    "icebreakerLanguage": {
                        "title": "Icebreaker language",
                        "enum": [
                            "en",
                            "fr"
                        ],
                        "type": "string",
                        "description": "Language of the pre-filled icebreaker message sent to Lemlist. Default: English.",
                        "default": "en"
                    },
                    "lemlistApiKey": {
                        "title": "Lemlist API key",
                        "type": "string",
                        "description": "Your Lemlist API key. Found in Lemlist → Settings → Integrations. Leave empty to skip."
                    },
                    "lemlistCampaignId": {
                        "title": "Lemlist campaign ID",
                        "type": "string",
                        "description": "The ID of the campaign to push leads into (e.g. cam_A1B2C3D4E5F6). Found in the campaign URL."
                    },
                    "lemlistFindEmail": {
                        "title": "Find email via Lemlist enrichment",
                        "type": "boolean",
                        "description": "Ask Lemlist to find a verified email for each lead. Consumes Lemlist credits. Only works if a LinkedIn URL was found.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
