# Catho Jobs Scraper | Brazil Job Listings, Salaries & Companies (`plum_spear/aztec-catho`) Actor

Scrape Catho - Brazil's premier employment portal - by job title, keyword, city, and state. Extract salaries, benefits, contract types, work schedules, requirements, and company data as clean structured JSON.

- **URL**: https://apify.com/plum\_spear/aztec-catho.md
- **Developed by:** [Roberto Kerber](https://apify.com/plum_spear) (community)
- **Categories:** Jobs, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.15 / 1,000 results

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/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

## Catho Jobs Scraper - Brazil Job Listings, Salaries & Companies

> Built and maintained by **Az Digital Consulting LU**.

**Scrape Catho at scale.** This scraper turns [Catho](https://www.catho.com.br/) - one of Brazil's largest and most established employment and careers portals - into a clean, structured job data feed. Search by job title, keyword, city, or state, and extract flat JSON for every opening: **job title, hiring company, salary amount (BRL integer), salary text, city, state UF, contract type (CLT/PJ), work schedule, benefits list, categories, publication date, and complete job description**.

No heavy browser required and no proxy hassles. This Actor leverages fast HTTP parsing and Catho's official JSON offer detail API, making runs lightweight, stable, and cost-effective. Run it on-demand for salary benchmarking, or **schedule it daily via Apify Scheduler** to monitor new vacancies in real-time.

***

### What does Catho Jobs Scraper do?

Instead of manually browsing hundreds of job posts, you provide a search query - e.g. `desenvolvedor python`, `analista financeiro`, `vendedor`, `enfermeiro` - optionally filter by city or state (e.g. `sao-paulo`, `SP`), and receive every opening as structured data.

- **Salaries as numbers**: When disclosed, salary is parsed as a clean integer (`6426`, not `"R$ 6.426,00"`), enabling instant sorting, mathematical averages, and salary range benchmarking.
- **Enriched details**: Full job descriptions, requirements, full list of employee benefits (meal vouchers, healthcare, dental, etc.), and contract modalities.
- **Zero configuration needed**: Works out of the box with defaults.

***

### Use Cases

- **Recruitment & Talent Sourcing**: Track who is hiring in your sector and source active openings across Brazilian states.
- **Salary Benchmarking & Market Intelligence**: Analyze compensation trends, market rates for specific tech stacks, and regional pay disparities.
- **Competitor Hiring Intelligence**: Monitor which departments your competitors are expanding.
- **Job Boards & Aggregators**: Automatically sync Brazilian job feeds to your own platform or newsletter.
- **Lead Generation for B2B Services**: Target companies actively hiring in specific operational roles.

***

### How to use Catho Jobs Scraper

1. Click **Try for free**.
2. Enter a **Job title or keyword** (e.g. `python`, `vendedor`, `gerente de projetos`).
3. *(Optional)* Specify a **City** (e.g. `sao-paulo`, `curitiba`) or **State UF** (e.g. `SP`, `RJ`, `MG`).
4. Choose **Max jobs** (e.g. `40`, `100`).
5. Click **Start** and export your dataset as JSON, CSV, Excel, or connect it directly to an API/webhook.

***

### Input Parameters

| Field | Type | Description | Default |
|---|---|---|---|
| `query` | String | Job title, skill, or keyword (e.g. `desenvolvedor python`) | `"python"` |
| `city` | String | City name or slug (e.g. `sao-paulo`, `rio-de-janeiro`) | `""` (all) |
| `state` | String | 2-letter Brazilian state UF (e.g. `SP`, `RJ`, `MG`) | `""` (all) |
| `maxJobs` | Integer | Maximum number of job listings to retrieve | `40` |
| `includeDetails` | Boolean | Query offer details for full descriptions, benefits & salary | `true` |

```json
{
  "query": "desenvolvedor python",
  "city": "sao-paulo",
  "state": "SP",
  "maxJobs": 50,
  "includeDetails": true
}
```

***

### Output Example

Each result in the dataset represents a job listing with normalized attributes:

```json
{
  "jobId": "38220856",
  "title": "Especialista em Energia",
  "company": "LÍDER BPO",
  "salary": 6426,
  "salaryText": "A partir de R$ 6.000,00",
  "city": "São Paulo",
  "state": "SP",
  "contractType": "CLT (Efetivo)",
  "schedule": "De segunda a sexta-feira, das 9h às 18h.",
  "benefits": [
    "Assistência médica / Medicina em grupo",
    "Assistência odontológica",
    "Tíquete refeição",
    "Tíquete alimentação",
    "Celular fornecido pela empresa"
  ],
  "categories": [
    "Administração",
    "Informática"
  ],
  "publishedAt": "2026-09-01T16:07:55",
  "isSponsored": true,
  "url": "https://www.catho.com.br/vagas/especialista-em-energia/38220856",
  "description": "Estamos em busca de um(a) Especialista em Energia para atuar na gestão de projetos..."
}
```

***

### Automated & Recurring Workflows (Apify Scheduler)

To build a continuous recruitment pipeline or automated market feed, set up an **Apify Schedule**:

1. In the Actor console, click **Schedules** > **Add new schedule**.
2. Set frequency (e.g., `0 8 * * 1-5` for every business day at 8:00 AM).
3. Connect the output to your webhook, Google Sheets, Slack alert, or Make / n8n workflow.

#### Integration with Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("plum_spear/aztec-catho").call(
    run_input={"query": "engenheiro de dados", "state": "SP", "maxJobs": 100}
)

dataset_items = client.dataset(run["defaultDatasetId"]).list_items().items
for job in dataset_items:
    print(f"{job['title']} at {job['company']}: R$ {job['salary']} ({job['city']})")
```

***

### Pricing & Fairness

This Actor operates on transparent **Pay-Per-Event (PPE)** pricing:

- **$0.15 per 1,000 scraped jobs**
- Small start fee per execution.
- Testing is covered by Apify's monthly free platform credits.

# Actor input Schema

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

Job title, skill, or role to search for (e.g., 'desenvolvedor python', 'vendedor', 'analista financeiro').

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

Filter by city name (e.g., 'sao-paulo', 'rio-de-janeiro', 'curitiba'). Leave empty for nationwide.

## `state` (type: `string`):

Brazilian 2-letter state code (e.g., 'SP', 'RJ', 'MG', 'RS'). Leave empty for all states.

## `maxJobs` (type: `integer`):

Maximum number of job listings to collect.

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

Fetch complete descriptions, requirements, benefits, contract types, and exact salary numbers.

## Actor input object example

```json
{
  "query": "python",
  "city": "",
  "state": "",
  "maxJobs": 40,
  "includeDetails": true
}
```

# Actor output Schema

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

// Run the Actor and wait for it to finish
const run = await client.actor("plum_spear/aztec-catho").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("plum_spear/aztec-catho").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 '{}' |
apify call plum_spear/aztec-catho --silent --output-dataset

```

## MCP server setup

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

```

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/3K4aCYzEh1bFbG6Jr/builds/la9IHr3AMRaj8vOMr/openapi.json
