# Welcome to the Jungle Scraper — Jobs & Companies, Cheap (`fabrikit/welcome-to-the-jungle-scraper`) Actor

Welcome to the Jungle scraper for jobs and company profiles: filter by keyword, country, contract, remote, salary and date. Gets full job text, salary, offices, company size and sectors. No login. From US$0.80 per 1,000 jobs or companies.

- **URL**: https://apify.com/fabrikit/welcome-to-the-jungle-scraper.md
- **Developed by:** [Fabrikit](https://apify.com/fabrikit) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 job 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

## Welcome to the Jungle Scraper — Jobs & Companies, Cheap

Scrape **jobs** and **company profiles** from Welcome to the Jungle (France, Europe and the US) without a browser and without a login. Filter by keyword, country, contract type, remote policy, salary, experience, sector, company size and publication date, and get structured JSON, CSV or Excel.

**Pricing: from US$0.80 per 1,000 jobs or companies.** No monthly fee.

### What you get

**Jobs** — title, company (name, size, employees, sectors, logo), contract type, remote policy, salary range with currency and period (when published), offices with country and coordinates, publication date, the **full job text** (mission, profile, benefits, skills, tools, recruitment steps) and the employer's application URL when there is one.

**Companies** — name, size band and headcount, sectors, all offices (city, region, country, headquarter flag), number of open jobs, labels (B Corp, Great Place to Work...), tech stack, languages, the company's own **website** and the profile URL.

### How it works

The Actor reads the same public search service the website itself uses. The search credentials are discovered when each run starts, so the Actor keeps working when the site rotates them. Result sets larger than the search service's 1,000-result window are split automatically (country, contract, remote policy, size...) and de-duplicated, so a country or the whole site can be crawled completely. The same job published on several partner job boards is returned once.

### Input examples

Newest data jobs in France (the default):

```json
{ "mode": "jobs", "queries": ["data analyst"], "countries": ["FR"], "maxItems": 50 }
```

Remote-friendly senior engineering jobs with a published salary, last 14 days:

```json
{
  "mode": "jobs",
  "queries": ["software engineer"],
  "countries": ["FR", "GB", "DE"],
  "remoteWork": ["fulltime", "partial"],
  "onlyWithSalary": true,
  "salaryMinYearly": 50000,
  "experienceMinYears": 5,
  "publishedWithinDays": 14,
  "maxItems": 500
}
```

Fintech companies that are hiring, with size and website:

```json
{
  "mode": "companies",
  "sectors": ["FinTech / InsurTech"],
  "countries": ["FR", "GB"],
  "companySizes": ["Between 50 and 250 employees", "Between 250 and 2,000 employees"],
  "onlyHiring": true,
  "maxCompanies": 300
}
```

Jobs and company profiles in one run, or specific companies by slug (`welcometothejungle.com/en/companies/<slug>`): use `"mode": "both"` or `"companySlugs": ["back-market"]`.

### Input fields

| Field | Description |
|---|---|
| `mode` | `jobs`, `companies` or `both` |
| `queries` | Keywords (job titles, skills, company names), one search each |
| `countries` | ISO codes of the office country: FR, GB, US, DE, ES, BE... |
| `contractTypes` | FULL_TIME, PART_TIME, INTERNSHIP, APPRENTICESHIP, TEMPORARY, FREELANCE, VIE... |
| `remoteWork` | `fulltime`, `partial`, `punctual`, `no` |
| `jobLanguages` | Language of the ad (fr, en, es, de...) |
| `publishedWithinDays` | Only recent jobs |
| `onlyWithSalary`, `salaryMinYearly` | Salary filters (yearly-normalised) |
| `experienceMinYears`, `experienceMaxYears` | Experience range |
| `sectors`, `companySizes`, `companySlugs` | Company filters |
| `onlyHiring` | Companies with at least one open job |
| `includeDescription` | Fetch the full job text (default on, no extra charge) |
| `includeCompanyWebsite` | Fetch each company's own website (default on, no extra charge) |
| `outputLanguage` | en, fr, es, cs, sk for sector names, sizes, descriptions and URLs |
| `maxItems`, `maxCompanies` | Exact limits |
| `proxyConfiguration` | Apify Proxy; switches to residential automatically if the site blocks datacenter IPs |

### Output example (job)

```json
{
  "type": "job",
  "id": "4327686",
  "url": "https://www.welcometothejungle.com/en/companies/safran/jobs/stage-data-analyst-moyens-generaux-f-h_tarnos",
  "title": "STAGE - Data analyst Moyens Généraux F/H",
  "companyName": "Safran",
  "companySize": "> 2,000 employees",
  "companySectors": ["Aeronautics / Space"],
  "contractType": "INTERNSHIP",
  "remote": "no",
  "salaryMin": null,
  "location": "Tarnos, France",
  "countryCode": "FR",
  "latitude": 43.9085,
  "longitude": -0.96344,
  "publishedAt": "2026-10-13T11:00:00.000+02:00",
  "description": "Et si votre stage était l'occasion de découvrir ...",
  "skills": ["Geographic Information System"]
}
```

### Pricing

| Event | Price |
|---|---|
| Job scraped (`job-result`) | US$0.80 per 1,000 |
| Company profile scraped (`company-result`) | US$0.80 per 1,000 |

Full job text and company websites are included at no extra charge. Platform compute is included in these prices. A typical run of 1,000 jobs with full text takes about two minutes.

### FAQ

**Does it need a login or cookies?** No. Only public data.

**Does it return recruiter names, e-mails or phone numbers?** No. Company data only. E-mail addresses, phone numbers and personal LinkedIn links found inside job texts are removed.

**Why do some jobs have no `description`?** A few listings come from partner career sites whose full text is not public; those keep the short profile text.

**Can I get every job in a country?** Yes: set `countries`, leave `queries` empty and raise `maxItems`. The Actor splits the crawl automatically.

**How do I monitor new jobs?** Schedule the Actor daily with `publishedWithinDays: 1`.

### Use cases

Job-market and salary analysis, talent-intelligence dashboards, lead lists of hiring companies (size, sector, website) for recruiters and sales teams, aggregator job boards, labour-market research on remote work and contract types.

### Legal

The Actor only collects publicly visible information and is not affiliated with Welcome to the Jungle. You are responsible for using the data in line with the site's terms and applicable law (including GDPR).

***

### En español

Scraper de **ofertas de trabajo y perfiles de empresas** de Welcome to the Jungle (Francia, Europa y EE. UU.) sin navegador ni login. Filtra por palabra clave, país, tipo de contrato, remoto, sueldo, experiencia, sector, tamaño de empresa y fecha. Devuelve el texto completo de la oferta, sueldo, oficinas, tamaño y sector de la empresa y su sitio web. Desde **US$0,80 por 1.000** ofertas o empresas. No entrega nombres de reclutadores, correos ni teléfonos.

# Actor input Schema

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

Jobs, company profiles, or both.

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

Job titles, skills or company names, one search per entry (for example: data analyst, product manager, fintech). Leave empty for everything.

## `countries` (type: `array`):

Two-letter ISO codes of the country where the job or company office is located, for example FR, GB, US, DE, ES, BE. Leave empty for all countries.

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

Only jobs with these contract types. Leave empty for all.

## `remoteWork` (type: `array`):

Only jobs with this remote policy. Leave empty for any.

## `jobLanguages` (type: `array`):

Language the job ad is written in, as 2-letter codes (fr, en, es, de, it...). Leave empty for all.

## `publishedWithinDays` (type: `integer`):

Only jobs published in the last N days. Leave empty for any date.

## `onlyWithSalary` (type: `boolean`):

Skip jobs without a published salary.

## `salaryMinYearly` (type: `integer`):

Only jobs whose minimum salary, converted to a year, is at least this amount (in the job's currency).

## `experienceMinYears` (type: `integer`):

Only jobs asking for at least this many years of experience.

## `experienceMaxYears` (type: `integer`):

Only jobs asking for at most this many years of experience (use 0 for entry-level / no experience).

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

Company sector names in English, for example Software, FinTech / InsurTech, E-commerce, Tech, Health. Matches both sectors and their parent group.

## `companySizes` (type: `array`):

Only companies of these sizes.

## `companySlugs` (type: `array`):

Specific companies by their Welcome to the Jungle slug (the last part of welcometothejungle.com/en/companies/<slug>), for example back-market, doctolib.

## `onlyHiring` (type: `boolean`):

Companies mode: skip companies that currently have no open job on the site.

## `includeDescription` (type: `boolean`):

Add the full job description, requirements, benefits, skills and recruitment steps (one extra request per job; not charged extra). Turn off for the fastest run with only the short profile text.

## `includeCompanyWebsite` (type: `boolean`):

Companies mode: add the company's own website address (one extra request per company; not charged extra).

## `outputLanguage` (type: `string`):

Language for sector names, company sizes, descriptions and URLs when the site offers translations.

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

Stop after this many jobs. The default run returns 50.

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

Stop after this many companies (companies mode).

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

Apify Proxy is used only for the website itself; the search service is contacted directly. If the site blocks datacenter IPs the Actor switches to a residential proxy automatically.

## Actor input object example

```json
{
  "mode": "jobs",
  "queries": [
    "data analyst"
  ],
  "countries": [
    "FR"
  ],
  "onlyWithSalary": false,
  "onlyHiring": false,
  "includeDescription": true,
  "includeCompanyWebsite": true,
  "outputLanguage": "en",
  "maxItems": 50,
  "maxCompanies": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All jobs and companies collected during the run

# 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 = {
    "queries": [
        "data analyst"
    ],
    "countries": [
        "FR"
    ],
    "maxItems": 50,
    "maxCompanies": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabrikit/welcome-to-the-jungle-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 = {
    "queries": ["data analyst"],
    "countries": ["FR"],
    "maxItems": 50,
    "maxCompanies": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("fabrikit/welcome-to-the-jungle-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 '{
  "queries": [
    "data analyst"
  ],
  "countries": [
    "FR"
  ],
  "maxItems": 50,
  "maxCompanies": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call fabrikit/welcome-to-the-jungle-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fabrikit/welcome-to-the-jungle-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/SqXHIjovpLmrLE75b/builds/m9sGHPEC6Kbrb0tUg/openapi.json
