# Computrabajo Job Scraper: LATAM Jobs & Salaries (`reventadata/computrabajo-scraper`) Actor

Scrape Computrabajo job offers in 19 Latin American countries by job title, place or listing URL: title, employer, location, salary as a number, work mode and posting age. Optional full description, requirements and skills. Job ads only, no CVs.

- **URL**: https://apify.com/reventadata/computrabajo-scraper.md
- **Developed by:** [reventadata](https://apify.com/reventadata) (community)
- **Categories:** Jobs, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

> **Unofficial.** This Actor is not affiliated with, authorised by, endorsed by, or in any way officially
> connected to Computrabajo. "Computrabajo" is a trademark of its respective owner and is used here only to
> describe what this tool reads. It reads the same public job-offer pages a browser does.

Search Computrabajo, the Latin American job board, in 19 country sites by job title, place or listing URL and get
one clean row per offer: title, employer, location, salary as a number, work mode, age of the posting and, if you
ask for it, the full description, requirements and skills.

### What does it do?

For each search it walks the result pages of the country site and saves one row per job offer. With **Fetch full
offer pages** switched on it also opens each offer and adds the description, requirements, skill tags, keywords and
the employer's blurb. Only job ads are read: offer titles, employer names, locations and salaries the site shows to
anyone. No CVs, no candidate data, no login.

### Why use it?

- **19 countries, one Actor.** Argentina, Bolivia, Chile, Colombia, Costa Rica, Cuba, Dominican Republic, Ecuador,
  Guatemala, Honduras, Mexico, Nicaragua, Panama, Peru, Puerto Rico, Paraguay, El Salvador, Uruguay and Venezuela.
  Pick one in `country`, or paste listing URLs from several.
- **Salary as a number.** `salaryAmount` parses `$ 1.750.905,00 (Mensual)` and `5,000.00 Q (Mensual)` alike, with the
  raw symbol, the period and a commission flag. The line as printed stays in `salaryText`.
- **Age as a number.** `postedDaysAgo` and `postedDate` come from the card's own wording (`Hace 3 horas`, `Ayer`,
  `22 de septiembre`); the original text is kept in `postedText`.
- **Filters that run before you pay.** Posted within N days, remote or hybrid only, only offers with a salary, words
  the title, company or location must or must not contain. Rows they drop are not saved and not charged.
- **Flags the site adds.** Urgent, featured, verified employer and the employer rating.
- **Cheap.** No proxy is needed, so there is no proxy cost in the price.

### How to use it

1. Choose the `country` and put one or more job titles in `searchQueries` (for example `vendedor`, `auxiliar contable`),
   optionally with `locations` (`bogota-dc`, `medellin`, `antioquia`). Or paste listing pages into `startUrls`.
2. Set `maxItems` and, if you want, filters.
3. Run the Actor and download the dataset as JSON, CSV or Excel.

#### Input

| Field | Type | Description |
|---|---|---|
| `country` | string | Country site, `co` Colombia by default; one of `ar bo cl co cr cu do ec gt hn mx ni pa pe pr py sv uy ve`. |
| `searchQueries` | array | Job titles or keywords, one search per term. Accents and capitals are ignored. |
| `locations` | array | Places as the site names them in its addresses (`bogota-dc`, `medellin`, `antioquia`). Each location is combined with each query; with no query, every offer in the place is listed. |
| `startUrls` | array | Listing pages such as `https://mx.computrabajo.com/trabajo-de-vendedor` or `https://co.computrabajo.com/empleos-en-medellin`. Other URLs are refused; the query string is ignored. |
| `maxItems` | integer | Total rows to save across all searches, counted after the filters. Default 100. |
| `maxPagesPerSearch` | integer | Result pages per search, 1 to 499 (20 offers a page). In our tests the site served nothing after page 499 (measured 2026-10-21), so one search yields at most 9,980 offers; split a bigger harvest by location. |
| `includeDetails` | boolean | Open every offer page for the description, requirements, skills, keywords and employer blurb. One extra request per offer. Default off. |
| `postedWithinDays` | integer | Keep offers posted at most N days ago (0 = today). |
| `workMode` | string | `any`, `remote` (marked Remoto) or `remote-or-hybrid` (also marked Presencial y remoto). |
| `onlyWithSalary` | boolean | Drop offers whose card prints no salary amount. |
| `includeKeywords`, `excludeKeywords` | array | Words the title, company or location must / must not contain, ignoring case and accents. |

#### Sample input

```json
{
    "country": "mx",
    "searchQueries": ["chofer"],
    "locations": ["monterrey"],
    "maxItems": 40,
    "includeDetails": true
}
```

#### Output

One row per offer:

| Field | Type | Description |
|---|---|---|
| `id`, `url`, `country` | string | Offer id (32 hex characters), offer page URL and the country site code. |
| `title` | string | Offer title. |
| `company`, `companyUrl` | string / null | Employer name and its Computrabajo page. `companyUrl` is null when the card has no employer link: confidential employers (then `company` is the site's placeholder text, e.g. `Importante empresa del sector`) and some named employers without a profile page. |
| `companyRating`, `companyVerified` | number / null, boolean | Employer rating (0 to 5) and the verified-employer mark. |
| `location` | string | Place as the card prints it. |
| `workMode` | string / null | `remote` (card says Remoto), `onsite-or-remote` (Presencial y remoto) or null. |
| `salaryText` | string / null | Salary line as printed. |
| `salaryAmount`, `salaryCurrencySymbol`, `salaryPeriod`, `hasCommission` | number, string, string, boolean | Amount as a number, the raw symbol (`$`, `US$`, `Q`; no ISO code is claimed because `$` is shared), the period in brackets and the `+ Comisiones` flag. Null when no amount is printed. |
| `isUrgent`, `isFeatured` | boolean | Marks `Se precisa Urgente` and `Empleo destacado` (a paid promotion). |
| `postedText`, `postedDaysAgo`, `postedDate` | string, integer, string | The card's age wording, whole days (0 for minutes and hours) and an approximate date (UTC). The last two are null if the wording is not recognised. |
| `searchQuery`, `searchPlace`, `page` | string, string, integer | The query and location that found the row (null for a pasted URL) and its result page. |
| `scrapedAt` | string | ISO 8601 UTC timestamp. |

With **Fetch full offer pages** each row also has: `detailFetched` (false when the offer page was unreachable, then the
fields below are empty), `description`, `requirements`, `skills`, `detailTags` (the page's tag line in page order:
salary, contract, working day and, if shown, work mode), `keywords`, `updatedText` and `companyDescription`.

#### Sample output

Listing row, from a real run on 2026-10-21 (`scrapedAt` set to a fixed time):

```json
{
    "id": "147D6273882830E961373E686DCF3405",
    "url": "https://co.computrabajo.com/ofertas-de-trabajo/oferta-de-trabajo-de-ejecutivo-comercial-con-experiencia-en-empresas-de-telecomunicaciones-o-tecnologia-en-cali-147D6273882830E961373E686DCF3405",
    "country": "co",
    "title": "Ejecutivo comercial con experiencia en empresas de telecomunicaciones o tecnología",
    "company": "Saitemp S.A",
    "companyUrl": "https://co.computrabajo.com/saitempsa",
    "companyRating": 4.5,
    "companyVerified": true,
    "location": "Cali, Valle del Cauca",
    "workMode": null,
    "isUrgent": false,
    "isFeatured": false,
    "postedText": "Hace 31 minutos",
    "postedDaysAgo": 0,
    "postedDate": "2026-10-21",
    "salaryText": "$ 1.750.905,00 (Mensual)",
    "salaryAmount": 1750905,
    "salaryCurrencySymbol": "$",
    "salaryPeriod": "Mensual",
    "hasCommission": false,
    "searchQuery": "vendedor",
    "searchPlace": null,
    "page": 2,
    "scrapedAt": "2026-10-21T23:00:00+00:00"
}
```

A row from a run of the sample input above (same day; `description` and `companyDescription` shortened here):

```json
{
    "id": "6C430ED3106DD2DA61373E686DCF3405",
    "url": "https://mx.computrabajo.com/ofertas-de-trabajo/oferta-de-trabajo-de-chofer-de-reparto-canal-detalle-monterrey-en-monterrey-6C430ED3106DD2DA61373E686DCF3405",
    "country": "mx",
    "title": "Chofer de Reparto",
    "company": "Grupo La Florida México",
    "companyUrl": "https://mx.computrabajo.com/grupolaflorida",
    "companyRating": 4.4,
    "companyVerified": true,
    "location": "Monterrey, Nuevo León",
    "workMode": null,
    "isUrgent": false,
    "isFeatured": true,
    "postedText": "Hace 7 horas",
    "postedDaysAgo": 0,
    "postedDate": "2026-10-21",
    "salaryText": "$ 10,000.00 (Mensual)",
    "salaryAmount": 10000,
    "salaryCurrencySymbol": "$",
    "salaryPeriod": "Mensual",
    "hasCommission": false,
    "searchQuery": "chofer",
    "searchPlace": "monterrey",
    "page": 1,
    "description": "SOLICITAMOS\nCHOFER DE REPARTO\nREQUISITOS:\n* Secundaria\n* Experiencia mínima de un año manejando unidad de 3.5 toneladas\n* Disponibilidad de horario\n* Licencia d…",
    "requirements": [
        "Educación mínima: Educación secundaria",
        "2 años de experiencia",
        "Edad: entre 24 y 55 años",
        "Conocimientos: Carga y descarga de mercancías, Control de inventarios, Reparto de mercancias, Conducción de camión, Seguridad en el transporte",
        "Licencias de conducir: B ,C"
    ],
    "skills": [
        "Carga y descarga de mercancías",
        "Control de inventarios",
        "Reparto de mercancias",
        "Conducción de camión",
        "Seguridad en el transporte"
    ],
    "detailTags": [
        "$ 10,000.00 (Mensual)",
        "Contrato por tiempo indeterminado",
        "Tiempo Completo"
    ],
    "keywords": [
        "conductor",
        "driver",
        "choferes",
        "chofer",
        "delivery",
        "mty"
    ],
    "updatedText": "Hace 7 horas (actualizada)",
    "companyDescription": "Grupo La Florida México empresa dedicada a la producción y distribución de materia prima para panificación con más de 70…",
    "detailFetched": true,
    "scrapedAt": "2026-10-21T22:54:30.239339+00:00"
}
```

### How much does it cost to scrape Computrabajo?

Pay-per-event: **$0.001 per result** saved to the dataset (**$1.00 per 1,000 results**), plus **$0.00005**
charged once when the run starts. No subscription. Rows your filters drop are not saved, so they are not charged.

### Privacy & Compliance

This Actor reads only publicly accessible job-offer pages and returns the public data they show: offer text, employer
names and ratings, places and salaries. It sends no login and never opens the CV or candidate sections. It uses only
the listing address shapes the site's robots.txt allows (keyword and place pages with `?p=` paging); the site's own
filter and sort parameters are disallowed there, so the filters above run on the rows after they are fetched.
Computrabajo's terms of use contain a general clause against automated copying; you are responsible for using the
data in line with them and with the data-protection law that applies to you.

### Good to know

- **Search matching is the site's.** A search for `vendedor` is Computrabajo's own page for that word and matches loosely.
  Use `includeKeywords` to tighten it.
- **Order is the site's.** Offers come in the site's relevance order with featured offers mixed in. The site's sort and
  date parameters are disallowed by its robots.txt, so the Actor does not use them; use `postedWithinDays` instead.
- **One search returns at most 9,980 offers** (499 pages of 20): in our tests the site served nothing after page 499 (2026-10-21). Split a bigger
  harvest by `locations`.
- **A search term that itself contains the word `en`** (`auxiliar en enfermeria`) is not combined with a place by the
  site: it reads the place as free text. Leave `locations` empty for such terms, or filter with `includeKeywords`.
- **Repeats are removed.** The same offer can appear on two result pages while new offers are posted; 3 to 16 repeats
  per 1,000 rows were dropped in four test runs, and a repeat is never saved twice.
- A run that saves zero rows fails instead of finishing empty, so a mistyped place or an over-strict filter is visible.

### How fast is it?

Measured 2026-10-21: 1,000 rows over 51 result pages of the Colombian `vendedor` search in about 1 minute. With
**Fetch full offer pages** the Actor opens three offer pages at a time: 40 offers plus 2 result pages took about 4 seconds.

### FAQ

**Is a proxy required?** No. Plain requests with browser headers reached 25 of 25 distinct result pages in a platform
probe (2026-10-21).

**Does it collect CVs, phone numbers or e-mail addresses?** It never requests candidate or CV pages, so no candidate
data is in the output. A phone number or e-mail an employer prints in its own ad text is part of `description` and is
returned as the site shows it.

**Why is `company` "Importante empresa del sector"?** The employer chose to stay confidential; the site prints that
placeholder (or its local equivalent) and `companyUrl` is then null.

**Why is `postedDate` only approximate?** The site gives only relative wording (`Hace 3 horas`) or a day and month.

**Does it cover Spain, Brazil or Portugal?** No. Those addresses redirect to Computrabajo's gateway page, which has
no listings.

### More scrapers

| Actor | What it scrapes |
|---|---|
| [Gupy Jobs Brazil Scraper](https://apify.com/reventadata/gupy-jobs-scraper) | Careers and openings on Gupy, Brazil |
| [CNPJ Brasil Scraper](https://apify.com/reventadata/cnpj-brasil-scraper) | Brazilian company registry data and leads |
| [Google Maps Places & Reviews Scraper](https://apify.com/reventadata/google-maps-scraper) | Business listings and reviews on Google Maps |

# Actor input Schema

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

Which Computrabajo country site to search (its cc.computrabajo.com address). Applies to Search queries and Locations; a pasted Start URL uses its own country.

## `searchQueries` (type: `array`):

Job titles or keywords, one search per term (for example vendedor, auxiliar contable, ingeniero de sistemas). Accents and capitals are ignored. A term that itself contains the word "en" (auxiliar en enfermeria) is not combined with a place by the site: leave Locations empty for such terms.

## `locations` (type: `array`):

Cities or regions as the site names them in its addresses, for example bogota-dc, medellin, antioquia, ciudad-de-mexico, lima. Each location is combined with each search query; with no search query, every offer in the location is listed. An unknown place returns no offers.

## `startUrls` (type: `array`):

Optional Computrabajo listing pages to walk instead of or in addition to the searches above, for example https://mx.computrabajo.com/trabajo-de-vendedor or https://co.computrabajo.com/empleos-en-medellin. Only listing addresses of the supported countries are accepted; any query string is ignored.

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

Total number of offers to save across all searches, counted after the filters. Each result page holds 20 offers.

## `maxPagesPerSearch` (type: `integer`):

Result pages to walk per search (20 offers each). In our tests the site served nothing after page 499 (2026-10-21), so one search can return at most 9,980 offers; split a bigger harvest by location. The Actor stops earlier at the last page the site has.

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

Open every offer page to add the full description, requirements, skill tags, keywords, the company blurb and the offer's tag line (salary, contract, working day). One extra request per offer, so the run is slower. Off: each row carries the listing fields only.

## `postedWithinDays` (type: `integer`):

Keep offers posted at most this many days ago (0 = today). The age comes from the listing's own wording (Hace 3 horas, Ayer, 22 de septiembre); offers whose wording is not recognised are dropped when this is set.

## `workMode` (type: `string`):

Any: every offer. Remote: offers marked Remoto. Remote or hybrid: also offers marked Presencial y remoto. Offers with no mode marking are on-site and are dropped by both remote choices.

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

Drop offers whose card prints no salary amount.

## `includeKeywords` (type: `array`):

Words the title, company or location must all contain, ignoring case and accents.

## `excludeKeywords` (type: `array`):

Offers whose title, company or location contains any of these words are dropped, ignoring case and accents.

## Actor input object example

```json
{
  "country": "co",
  "searchQueries": [
    "vendedor"
  ],
  "maxItems": 10,
  "maxPagesPerSearch": 1,
  "includeDetails": false,
  "workMode": "any",
  "onlyWithSalary": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Computrabajo job offers, one row per offer.

# 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 = {
    "searchQueries": [
        "vendedor"
    ],
    "maxItems": 10,
    "maxPagesPerSearch": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("reventadata/computrabajo-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 = {
    "searchQueries": ["vendedor"],
    "maxItems": 10,
    "maxPagesPerSearch": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("reventadata/computrabajo-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 '{
  "searchQueries": [
    "vendedor"
  ],
  "maxItems": 10,
  "maxPagesPerSearch": 1
}' |
apify call reventadata/computrabajo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,reventadata/computrabajo-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/gHc7uW8bmaFLZU8Kq/builds/AbKUaCnGKlroUXIlz/openapi.json
