# Welcome to the Jungle Jobs Scraper (`fetch_cat/welcome-to-the-jungle-jobs-api-scraper`) Actor

Export public Welcome to the Jungle jobs with company, location, contract, salary, remote details, descriptions, skills, and application URLs.

- **URL**: https://apify.com/fetch\_cat/welcome-to-the-jungle-jobs-api-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.71 / 1,000 job saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Welcome to the Jungle Jobs Scraper

Export public Welcome to the Jungle job listings for recruiting, job-market research, alerts, and data pipelines. Search by job title or paste public WTTJ jobs search URLs, then receive normalized job, company, location, salary, description, skill, and timestamp data.

### Example input

```json
{
  "queries": ["data engineer", "product manager"],
  "maxItems": 50,
  "includeDetails": true
}
```

### Example output

```json
{
  "id": "e1992980-687a-4213-9b26-94ecaf558e44",
  "slug": "data-engineer-data-architect-confirme-e",
  "title": "Data Engineer & Data Architect",
  "companyName": "JAKALA",
  "contractType": "full_time",
  "remote": "partial",
  "publishedAt": "2026-08-26T08:31:21Z",
  "detailStatus": "complete"
}
```

### Who is it for?

- **Recruiters and talent teams** building candidate-market and hiring-demand reports.
- **Job seekers** monitoring newly published roles across focused searches.
- **Analysts** comparing locations, remote policies, contracts, salaries, and skills.
- **Data teams** feeding normalized public job records into warehouses, alerts, and dashboards.

### Input settings

| Field | Type | Description |
|---|---|---|
| `queries` | string\[] | Job-title search terms. |
| `searchUrls` | URL\[] | Public Welcome to the Jungle `/jobs` search URLs containing a query. |
| `maxItems` | integer | Global maximum number of unique jobs. |
| `includeDetails` | boolean | Include descriptions, profile, tools and company details. |

At least one query or search URL is required.

### Output fields

| Group | Fields |
|---|---|
| Identity | `id`, `slug`, `title`, `url`, `status` |
| Application | `applyUrl`, `ats` |
| Company | `companyId`, `companySlug`, `companyName`, `companyLogoUrl`, `companyWebsite`, `companyEmployeeCount`, `companySectors`, `companyIndustry`, `companyDescription`, `companyCreationYear`, `companyRevenue`, `companyTurnover`, `companyAverageAge`, `companyParityWomen`, `companyParityMen` |
| Employment | `contractType`, `remote`, `locations`, `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `experienceLevel`, `educationLevel`, `language` |
| Dates | `publishedAt`, `updatedAt`, `startDate`, `contractDurationMin`, `contractDurationMax` |
| Content | `summary`, `description`, `candidateProfile`, `keyMissions`, `skills`, `tools`, `benefits`, `recruitmentProcess`, `category`, `subcategory` |
| Provenance | `scrapedAt`, `sourceQuery`, `sourcePage`, `detailStatus` |

Optional values are `null` or empty arrays when the public posting does not provide them. `detailStatus` indicates whether enrichment was complete, skipped, or unavailable while preserving the base listing.

### Input recipes

**Small recruiting export**

```json
{ "queries": ["frontend developer"], "maxItems": 10, "includeDetails": true }
```

**Fast listing monitor**

```json
{ "queries": ["pharmacist"], "maxItems": 100, "includeDetails": false }
```

### Pricing

The Actor charges per unique job record saved. Review the live [Pricing tab](https://apify.com/fetch_cat/welcome-to-the-jungle-jobs-api-scraper/pricing) for your account tier's current rate. Duplicate or failed records are not charged.

### Limits and tips

- Results reflect public listings available when the run starts.
- Live ranking can shift between pages; stable IDs are deduplicated automatically.
- Some salary, company, and application fields are optional on the source posting.
- Use focused search terms and a modest `maxItems` for faster first runs.
- This Actor does not access saved jobs, member data, applications, or login-only content.

### API usage

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~welcome-to-the-jungle-jobs-api-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["data engineer"],"maxItems":10}'
```

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/welcome-to-the-jungle-jobs-api-scraper').call({
  queries: ['data engineer'], maxItems: 10, includeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/welcome-to-the-jungle-jobs-api-scraper').call(
    run_input={'queries': ['data engineer'], 'maxItems': 10, 'includeDetails': True}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### MCP and agents

Connect through `https://mcp.apify.com?tools=fetch_cat/welcome-to-the-jungle-jobs-api-scraper` to let compatible agents run structured job searches.

```bash
claude mcp add apify --transport http \
  "https://mcp.apify.com?tools=fetch_cat/welcome-to-the-jungle-jobs-api-scraper"
```

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/welcome-to-the-jungle-jobs-api-scraper"
    }
  }
}
```

Example prompts:

- “Find 25 public data engineer jobs and summarize remote policies.”
- “Export product manager jobs with company, location, salary, and application URLs.”
- “Compare the skills requested in frontend developer and backend developer listings.”

### FAQ

#### Can I use a Welcome to the Jungle search URL?

Yes. Paste a public jobs URL into `searchUrls`; its query is normalized into the same output contract.

#### Why are some fields null?

Public postings vary. The Actor preserves truthful missing values rather than inferring company or salary facts.

#### Are duplicate jobs charged twice?

No. Jobs are deduplicated by stable public references during each run.

### Related Actors

- [LinkedIn Jobs Scraper](https://apify.com/fetch_cat/linkedin-jobs-scraper)
- [Google Jobs Scraper](https://apify.com/fetch_cat/google-jobs-scraper)
- [Indeed Jobs Scraper](https://apify.com/fetch_cat/indeed-jobs-scraper)
- [Lever Jobs Scraper](https://apify.com/fetch_cat/lever-jobs-scraper)
- [Remote.com Jobs Scraper](https://apify.com/fetch_cat/remote-dot-com-jobs-scraper)

### Support

Open an issue from the Actor's **Issues** tab with a public search URL, expected result, and run ID. Do not include passwords, cookies, or private application data.

# Actor input Schema

## `searchUrls` (type: `array`):

Public WTTJ /jobs URLs containing a query.

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

Search terms such as data engineer or product manager.

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

Global maximum number of unique job records.

## `includeDetails` (type: `boolean`):

Fetch descriptions, skills, application and company fields.

## Actor input object example

```json
{
  "searchUrls": [
    {
      "url": "https://www.welcometothejungle.com/en/jobs?query=data%20engineer"
    }
  ],
  "queries": [
    "data engineer"
  ],
  "maxItems": 10,
  "includeDetails": true
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "searchUrls": [
        {
            "url": "https://www.welcometothejungle.com/en/jobs?query=data%20engineer"
        }
    ],
    "queries": [
        "data engineer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/welcome-to-the-jungle-jobs-api-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 = {
    "searchUrls": [{ "url": "https://www.welcometothejungle.com/en/jobs?query=data%20engineer" }],
    "queries": ["data engineer"],
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/welcome-to-the-jungle-jobs-api-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 '{
  "searchUrls": [
    {
      "url": "https://www.welcometothejungle.com/en/jobs?query=data%20engineer"
    }
  ],
  "queries": [
    "data engineer"
  ]
}' |
apify call fetch_cat/welcome-to-the-jungle-jobs-api-scraper --silent --output-dataset

```

## MCP server setup

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