# 🧑‍💼 Job Scraper Chile (`crawler_cl/job-scraper-chile`) Actor

12 portales + 73 careers directos de empresas TOP en una sola ejecución.
Scrapea ofertas de LinkedIn, GetOnBoard, Talent.com, Computrabajo, Laborum, Trabajando.com, Glassdoor, Chumi, EmpleosTech, Empleos Públicos y Torre.ai. Y en  73 empresas TOP chilenas

- **URL**: https://apify.com/crawler\_cl/job-scraper-chile.md
- **Developed by:** [Crawler CL](https://apify.com/crawler_cl) (community)
- **Categories:** Jobs, Automation, Agents
- **Stats:** 4 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 ejecución del job scraper chiles

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## 🧑‍💼 Job Scraper Chile

Actor de Apify que busca ofertas de trabajo en Chile. Disponible en **2 modos**:

- **`portals`** (default): 12 portales públicos en paralelo — LinkedIn, Indeed, Talent.com, GetOnBoard, Computrabajo, Laborum, Trabajando.com, Glassdoor, Chumi, EmpleosTech, Empleos Públicos y Torre.ai.
- **`companies`**: scrapea las páginas de **careers propios de 75 empresas TOP** de Chile (modo directo a la empresa, sin pasar por agregadores).

### ✨ Características

- 🔍 Búsqueda unificada por keyword
- 🌎 Modo portals: 12 fuentes (HTML scraping + APIs)
- 🏢 Modo companies: 73 empresas TOP con sus careers pages
- 🛡️ Soporte de proxy de Apify integrado
- 🚦 Rate-limiting respetuoso (1-4 segundos según el portal)
- 🔄 Deduplicación automática de resultados
- 📊 Estadísticas guardadas en `STATS`
- 🇪🇸 Optimizado para Chile / LATAM

### 📥 Input

| Campo | Tipo | Requerido | Default | Descripción |
|-------|------|-----------|---------|-------------|
| `mode` | string | ❌ | `portals` | `portals` o `companies` |
| `keyword` | string | ✅ | — | Palabra clave a buscar (ej: `"desarrollador python"`) |
| `country` | string | ❌ | `Chile` | País donde buscar (modo portals) |
| `city` | string | ❌ | `Santiago` | Ciudad donde buscar (modo portals) |
| `max_results` | integer | ❌ | `100` | Máximo de resultados (1-500). En `portals`: por fuente. En `companies`: total. |
| `sources` | array | ❌ | las 12 | Fuentes a usar (solo modo portals) |
| `companies` | array | ❌ | `[]` | Empresas específicas (solo modo companies). Vacío = las 75. Ej: `["Globant", "BCI"]` |
| `proxy_config` | object | ❌ | `{useApifyProxy: true}` | Configuración de proxy |

#### Ejemplo modo portals

```json
{
  "mode": "portals",
  "keyword": "data engineer",
  "country": "Chile",
  "city": "Santiago",
  "max_results": 100,
  "sources": ["linkedin", "indeed", "talent", "getonboard", "computrabajo", "laborum", "trabajando", "glassdoor", "chumi", "empleostech", "empleospublicos", "torre"],
  "proxy_config": { "useApifyProxy": true }
}
```

#### Ejemplo modo companies (las 75 empresas)

```json
{
  "mode": "companies",
  "keyword": "desarrollador",
  "max_results": 500,
  "proxy_config": { "useApifyProxy": true }
}
```

#### Ejemplo modo companies (subset)

```json
{
  "mode": "companies",
  "keyword": "product manager",
  "max_results": 100,
  "companies": ["Globant", "BCI", "Mercado Libre", "Falabella Tecnologia", "Cornershop/Uber"]
}
```

### 📤 Output

Cada resultado en el dataset tiene este schema:

```json
{
  "id": "string",
  "title": "string",
  "company_name": "string",
  "location": "string",
  "description": "string",
  "salary_min": "number|null",
  "salary_max": "number|null",
  "salary_currency": "CLP|USD|null",
  "posted_date": "YYYY-MM-DD|null",
  "source": "linkedin|indeed|talent|getonboard|computrabajo|laborum|trabajando|glassdoor|chumi|empleostech|empleospublicos|torre|companies",
  "url": "string",
  "job_type": "string|null",
  "is_remote": "boolean"
}
```

En modo `companies`, `source` será siempre `"companies"` y `company_name` el nombre de la empresa del catálogo.

### 🚀 Uso

#### Local

```bash
npm install
node src/main.js --test   # modo test (sin requests reales)
```

#### Apify Cloud

```bash
apify login
apify push
```

### 🛠️ Modo portals (12 fuentes)

| Fuente | Método | Rate limit | Notas |
|--------|--------|------------|-------|
| **LinkedIn** | API guest `/jobs-guest/jobs/api/seeMoreJobPostings/search` | 1 req / 2s | No requiere auth, descripción via `/jobPosting/{id}` |
| **Indeed** | CheerioCrawler sobre `cl.indeed.com` | 1 req / 3s | HTML scraping, paginación por `start=` |
| **Talent.com** | CheerioCrawler sobre `cl.talent.com` | 1 req / 2s | HTML scraping |
| **GetOnBoard** | API JSON `https://www.getonbrd.com/api/v0/search/jobs` | 1 req / 1s | API pública, sin auth |
| **Computrabajo** | CheerioCrawler sobre `cl.computrabajo.com` | 1 req / 3s | HTML scraping |
| **Laborum** | CheerioCrawler sobre `www.laborum.cl` | 1 req / 3s | HTML scraping |
| **Trabajando.com** | CheerioCrawler sobre `www.trabajando.cl` | 1 req / 3s | HTML scraping |
| **Glassdoor** | CheerioCrawler sobre `www.glassdoor.com` | 1 req / 4s | HTML scraping, requiere proxy |
| **Chumi** | CheerioCrawler sobre `chumi-it.com` | 1 req / 2s | HTML scraping, nicho IT |
| **EmpleosTech** | CheerioCrawler sobre `empleostech.com` | 1 req / 2s | HTML scraping, nicho tech |
| **Empleos Públicos** | CheerioCrawler sobre `www.empleospublicos.cl` | 1 req / 3s | HTML scraping, sector público Chile |
| **Torre.ai** | API JSON POST `/opportunities/_search/` | 1 req / 2s | API pública |

### 🛠️ Modo companies (73 empresas)

El modo `companies` itera por la lista de 73 empresas TOP y extrae, de su página de careers, los puestos que contengan al menos uno de los tokens del keyword. Procesa en batches de **5 empresas en paralelo** con **1 req / 3s** por empresa.

Incluye empresas de:

- Consultoras y servicios IT: Globant, NTT DATA, Accenture, Kibernum, Imagmaker, Modyo, Nisum, Endava, Sophos, TCS, Leniolabs, BairesDev, etc.
- Fintech/Startup: Fintual, Xepelin, Tenpo, Fintoc, Toku, Global66, Buk, Khipu, Cumplo, Betterfly, NotCo, Houm, Poliglota, etc.
- Bancos: Banco de Chile, BCI, Santander, BancoEstado, Itaú, Scotiabank, Falabella, BICE, Security, Coopeuch, Tanner
- Retail/Consumo: Falabella, Cencosud, Ripley, Walmart, SMU, Sodimac, LATAM, JetSMART, CCU, Embotelladora Andina, Agrosuper
- Telecom/Energía/Minería: Entel, Movistar, WOM, Enel, Copec, Codelco, CMPC
- Delivery/Mobility: Cornershop/Uber, PedidosYa
- Salud: Clínica Alemana, Banmédica, SURA, Examedi
- Otros: BC Tecnología, Continuum, Kunan, Magnet, Mediastream, Defontana, Mercado Libre, ComparaOnline, Relbase, The Live Green Co, Reversso

### 📦 Dependencias

- `apify` ^3.2.0 — SDK de Apify
- `crawlee` ^3.10.0 — Web scraping framework
- `cheerio` ^1.0.0 — HTML parser

### 📄 Licencia

MIT

# Actor input Schema

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

Modo de scraping: 'portals' (default) usa 12 portales públicos; 'companies' scrapea las páginas de careers propias de 73 empresas TOP de Chile.

## `keyword` (type: `string`):

Palabra clave a buscar (ej: 'desarrollador python', 'data engineer')

## `country` (type: `string`):

País donde buscar las ofertas (modo portals)

## `city` (type: `string`):

Ciudad donde buscar (modo portals)

## `max_results` (type: `integer`):

Número máximo de resultados a obtener (por fuente en modo portals; total en modo companies)

## `sources` (type: `array`):

Fuentes de donde obtener las ofertas de trabajo. Ignorado en modo 'companies'.

## `companies` (type: `array`):

Lista opcional de nombres de empresas a scrapear (modo companies). Si está vacía, usa las 73 empresas TOP. Ej: \['Globant', 'BCI', 'Mercado Libre']

## `proxy_config` (type: `object`):

Configuración de proxy de Apify (recomendado para evitar bloqueos)

## Actor input object example

```json
{
  "mode": "portals",
  "country": "Chile",
  "city": "Santiago",
  "max_results": 100,
  "sources": [
    "linkedin",
    "indeed",
    "talent",
    "getonboard",
    "computrabajo",
    "laborum",
    "trabajando",
    "glassdoor",
    "chumi",
    "empleostech",
    "empleospublicos",
    "torre"
  ],
  "companies": [],
  "proxy_config": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("crawler_cl/job-scraper-chile").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("crawler_cl/job-scraper-chile").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 '{}' |
apify call crawler_cl/job-scraper-chile --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/CGpZB2qrzcVlTQMlT/builds/b8fMqXeiSZvLKqmEv/openapi.json
