# Welcome to the Jungle Company Directory, All 12,423 (`gubidonius/wttj-companies`) Actor

Every company on Welcome to the Jungle: sector, size, offices, tech stack, open advert count and the company's own website. The site's public endpoint returns the same 100 companies whatever page you ask for. The index holds 17,189 records, which are 12,423 real companies, each returned once.

- **URL**: https://apify.com/gubidonius/wttj-companies.md
- **Developed by:** [Gregory Bolshakov](https://apify.com/gubidonius) (community)
- **Categories:** Lead generation, Business, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

# README

## Welcome to the Jungle Company Directory, All 12,423

Reads every company profile on Welcome to the Jungle: sector, size band, headcount, offices,
certifications, tech stack, open advert count and the company's own website. No key and no
login.

### The problem this solves

The site has a public endpoint that lists organizations. It answers with 100 companies and it
ignores the page number. Ask for page 2, page 1000, offset 100 or per\_page 200 and you get the
same 100 companies back, every time, with no total and no next link. Nothing in the response
says you have reached the end, because you never left the start.

This Actor never pages that endpoint. It goes through the search index, which reports a real
total, and cuts a search bigger than 1,000 into cells small enough to page. Every level of the
cut adds one extra cell holding whatever matched none of the values, and the size of that cell
is measured with its own query rather than worked out by subtraction. Sectors are multi
valued, so the sector counts add up to 26,457 across 17,189 records, and subtracting them
gives a negative number and quietly drops the cell. That cell holds 5,214 companies with no
sector at all.

### One company is indexed several times

Swan appears four times in the search index, once for its own page and once each for wttj\_fr,
francefintech and hub-bpifrance. Four different record ids, one company, the same 350 people
and the same 18 adverts. The index holds 17,189 records and 12,423 real companies, measured
9 September 2026.

This Actor matches on the company reference, which stays the same when a company renames
itself. Eight references in the directory carry two slugs each for that reason, including
meero to diffusely and hivebrite to kit-united.

### What one row is

One company. A company reached by two cells of the same search, or indexed on four
storefronts, is written once and charged once.

`sectors` is a list because a company is filed under several at once. There are 100 sectors,
measured 9 September 2026, and every value you pass is checked against the live list, so a
misspelling comes back with the real spelling instead of an empty answer.

### The company website is not in the search record

The search record has a field called `website`. It holds `{"reference": "wttj_fr"}`, which
says which of the site's own storefronts the profile belongs to. It is not the company's
website. That comes from the profile endpoint, one request per company, and it is why
`fullProfile` is on by default.

A company in the search index with no published profile page gets no answer from that
endpoint. Those rows carry `profileDetailRead: false`, so a missing website is told apart from
a company that has none.

### What a run admits

Every row carries `directoryTotalReported`, the count the site's own search gave for your
filter, in companies. `RUN_SUMMARY` in the key-value store holds every cell with what it
reported, what it returned and why it stopped, plus `complete`, `limitedBy` and
`duplicatesSuppressed`.

### Billing

Two events: a start fee charged only once companies are returned, and a per-company fee
charged after each company is written. A run that matches nothing costs nothing.

# Actor input Schema

## `query` (type: `string`):

Words to look for in company names and descriptions. This is a search and not a filter: it is typo tolerant and ranks by relevance, so it returns more companies than the matching sector filter would. Leave empty to walk the whole directory.

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

Sectors as the site writes them in English, for example Software, SaaS, Fintech, Biotechnology, Consulting. There are 100 of them, measured 9 September 2026, and every value is checked against the live list before the search runs, so a misspelling is reported with the real spelling rather than silently returning nothing. A company is filed under several sectors at once.

## `sizes` (type: `array`):

The five bands the site uses, written out in full and exactly as it writes them: "< 15 employees", "Between 15 and 50 employees", "Between 50 and 250 employees", "Between 250 and 2,000 employees", "> 2,000 employees". 2,106 records carry no band at all and are excluded when you set this.

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

Two-letter ISO codes of countries the company has an office in, for example FR, ES, DE, GB, US. A company with offices in three countries matches all three.

## `labels` (type: `array`):

Certifications the company declares on its profile, for example b-corp, qualiopi, certification-iso-9001, great-place-to-work. 53 exist and only 2,942 companies carry any.

## `languages` (type: `array`):

Languages the company profile is published in: fr, en, es, cs, sk. Only 8,231 of the 17,189 companies declare one, so setting this excludes the rest.

## `hiringOnly` (type: `boolean`):

Keep only companies whose profile carries at least one open advert. Measured on 7 September 2026: 4,306 of 17,189 companies do.

## `spontaneousApplicationsOnly` (type: `boolean`):

Keep only companies that invite applications with no advert attached. 8,826 of 17,189 do.

## `minEmployees` (type: `integer`):

Lowest reported headcount to keep. This is the company's own declared number, which is separate from the size band and is missing on some profiles. Those profiles are excluded when you set this.

## `maxEmployees` (type: `integer`):

Highest reported headcount to keep.

## `fullProfile` (type: `boolean`):

Adds the company's own website, its headquarters, and its published gender-equality index, none of which are on the search record. Costs one extra request per company and no extra money.

## `language` (type: `string`):

Sector names, size bands and descriptions are held in five languages at once. This picks which to publish. A company that has no text in your language falls back to English and then to whatever it does have, rather than coming back empty.

## `maxResults` (type: `integer`):

Upper bound on companies for the WHOLE run, across every filter and every cell of the search. You are never charged for more than this.

## Actor input object example

```json
{
  "query": "",
  "sectors": [
    "FinTech / InsurTech"
  ],
  "sizes": [],
  "countries": [],
  "labels": [],
  "languages": [],
  "hiringOnly": false,
  "spontaneousApplicationsOnly": false,
  "fullProfile": true,
  "language": "en",
  "maxResults": 50
}
```

# Actor output Schema

## `results` (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 = {
    "query": "",
    "sectors": [
        "FinTech / InsurTech"
    ],
    "sizes": [],
    "countries": [],
    "labels": [],
    "languages": [],
    "language": "en",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("gubidonius/wttj-companies").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 = {
    "query": "",
    "sectors": ["FinTech / InsurTech"],
    "sizes": [],
    "countries": [],
    "labels": [],
    "languages": [],
    "language": "en",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("gubidonius/wttj-companies").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 '{
  "query": "",
  "sectors": [
    "FinTech / InsurTech"
  ],
  "sizes": [],
  "countries": [],
  "labels": [],
  "languages": [],
  "language": "en",
  "maxResults": 50
}' |
apify call gubidonius/wttj-companies --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gubidonius/wttj-companies"
        }
    }
}
```

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/jfWIEPkot78BLjjhj/builds/5w45DGdax0nC1HjPo/openapi.json
