# Computrabajo Scraper - Jobs, Salaries & Company Reviews (`abotapi/computrabajo-jobs-scraper`) Actor

Scrape Computrabajo jobs across 17 Latin American country portals by keyword or URL. Extract salaries, requirements, skills and apply links. Collect company profiles, employee ratings, reviews and comments. Supports job, company and evaluation URLs with incremental tracking.

- **URL**: https://apify.com/abotapi/computrabajo-jobs-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 job, company or review records

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?

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

## Computrabajo Scraper - Jobs, Salaries & Reviews

Scrape Computrabajo, Latin America's largest job board, in one run: keyword search across 17 country portals (Mexico, Colombia, Peru, Argentina, Chile, Ecuador and more) or paste any results, offer, company or evaluations link. Job records carry the full posting - structured salary, requirements, skill tags, employer details and the direct apply link - and company records carry employee evaluations with ratings and comments.

### Why This Scraper?

- **All Latin America in one run.** One input searches every selected country portal - Mexico, Colombia, Peru, Argentina, Chile, Ecuador, Bolivia, Uruguay, Paraguay, Costa Rica, Panama, Dominican Republic, Guatemala, El Salvador, Honduras, Nicaragua and Venezuela.
- **Every field on the results card, structured.** Title, company with its rating, location, salary line, work mode, urgent and featured badges, the direct apply link and the canonical offer URL.
- **Full posting detail on demand.** Each offer's own page adds the complete description, requirements (education, experience, age), skill tags, industry, employment type, structured salary (currency, amount, period) and offer validity dates.
- **Company evaluations other scrapers skip.** Employee evaluations per company: overall rating, per-review star scores, sub-scores (work environment, salary and benefits, career opportunities), review text, plus the best and could-improve notes.
- **Search or paste.** Type keywords or drop in ready-made results, city-filtered, company or evaluations links; every link shape is routed by what it is.
- **Monitoring built in.** Incremental mode classifies every record NEW / UPDATED / UNCHANGED / EXPIRED between scheduled runs, with resume support, so recurring crawls only surface what changed.

### Use Cases

- **Recruiting agencies:** monitor new postings per role and country as they appear and reach candidates before the crowd.
- **Salary benchmarking teams:** compare structured salaries for the same role across the region's portals in one pass.
- **Market researchers:** track hiring demand and skill requirements over time with incremental runs.
- **ATS/CRM integrators:** pipe structured job and company records straight into your stack, with company evaluations attached.

### Data You Get

> Sample shape: values are illustrative placeholders, not from a live record.

| Field | Example |
|---|---|
| `jobId` | `00000000000000000000000000000000` |
| `title` | `Sales Representative` |
| `url` | `https://mx.computrabajo.com/ofertas-de-trabajo/...` |
| `company` | `Sample Company SA` |
| `companyUrl` | `https://mx.computrabajo.com/empresas/...` |
| `companyRating` | `4.4` |
| `location` | `Guadalajara, Jalisco` |
| `country` / `countryCode` | `México` / `MX` |
| `workMode` | `Presencial y remoto` |
| `salaryText` | `$ 20,000.00 (Mensual)` |
| `salaryValue` / `salaryUnit` | `20000` / `MONTH` |
| `employmentType` | `FULL_TIME` |
| `contractType` / `workingHours` | `Contrato por tiempo indeterminado` / `Tiempo Completo` |
| `datePosted` | `2026-01-01` |
| `description` / `descriptionHtml` | Full offer text and original description markup |
| `industry` | `Venta al consumidor` |
| `education` / `experience` | `Educación mínima: Bachillerato` / `1 año de experiencia` |
| `skills` | `Negociación, Ventas telefónicas` |
| `knowledge` / `languages` / `drivingLicenses` | Required knowledge, published language list and licence categories |
| `travelAvailability` / `relocationAvailability` / `acceptsDisability` | `true` or `false`, only when explicitly stated |
| `updatedText` | `29 de octubre (actualizada)` |
| `companyDescription` / `keywords` | Employer overview and the offer's published keyword list |
| `isUrgent` / `isFeatured` | `true` / `false` |
| `applyUrl` | `https://candidato.mx.computrabajo.com/candidate/apply/...` |

When the offer explicitly publishes contacts, `extractedEmails`, `extractedPhones`, `extractedUrls` and `socialProfiles` carry them. Masked values and site-footer contacts are excluded.

Company records include name, offer count, overall rating, review count and evaluations. Nested reviews include rating, title, employment status, city, date, sub-ratings, text and best/improve notes.

### How to Use

1. **Pick a mode.** Keyword search walks results pages on every selected country portal; Paste links routes each link by its shape.
2. **Enter keywords or links.** Keywords run on every selected portal. Links can be results pages, individual offers, company pages or evaluations pages.
3. **Set the output limits.** Offer details and company reviews are on by default; tighten Max items or Max reviews per company to bound the run.
4. **Run and export.** Records land in the dataset with per-run change types when incremental mode is on.

The Results tab shows the main job fields; Jobs and Job details expose the full set. Offer pages are read for their visible descriptions and employment terms even when structured posting data is absent. Optional fields appear only when published: an update label stays in `updatedText` and is never treated as a posting or expiry date. Relative update labels are excluded from incremental change detection.

**Keyword search across six portals:**

```json
{
  "mode": "search",
  "searchQueries": ["ventas", "contador"],
  "countries": ["mx", "co", "pe", "ar", "cl", "ec"],
  "maxItems": 20
}
```

**Paste links of every shape:**

```json
{
  "mode": "urls",
  "urls": [
    "https://mx.computrabajo.com/trabajo-de-ventas",
    "https://co.computrabajo.com/empresas/evaluaciones-en-sample-company-0000000000000000"
  ],
  "fetchDetails": true,
  "fetchReviews": true
}
```

**Monitoring run (incremental):**

```json
{
  "mode": "search",
  "searchQueries": ["auxiliar administrativo"],
  "countries": ["mx"],
  "maxItems": 50,
  "incrementalMode": true,
  "emitUnchanged": false,
  "emitExpired": true,
  "stateKey": "daily-monitor"
}
```

**Company evaluations only:**

```json
{
  "mode": "urls",
  "urls": ["https://pe.computrabajo.com/empresas/evaluaciones-en-sample-company-0000000000000000"],
  "fetchDetails": false,
  "maxReviews": 40
}
```

#### Run it from your code

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("abotapi/computrabajo-jobs-scraper").call(run_input={
    "mode": "search",
    "searchQueries": ["ventas"],
    "countries": ["mx", "co"],
    "maxItems": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('abotapi/computrabajo-jobs-scraper').call({
    mode: 'search',
    searchQueries: ['ventas'],
    countries: ['mx', 'co'],
    maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Tips

- **Fewer keywords, more portals.** Each keyword x portal pair walks its own results pages; three keywords on six portals is eighteen walks.
- **Reviews ride the same run.** With company reviews on, companies seen during the walk get their evaluations read automatically, bounded per run.
- **Scheduled runs.** Turn on incremental mode and reuse the same keywords, links and toggles; unchanged offers are suppressed and only new or changed records are returned.

### Send results into your apps (MCP connectors)

Add connector IDs to `mcpConnectors` and the run exports collected records automatically - Notion, Google Sheets, Airtable and more through Apify MCP. Set `notionParentPageUrl` when exporting to Notion and `maxNotifyListings` to bound each export.

### Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `search` | Keyword search or paste links. |
| `searchQueries` | array | `["ventas"]` | Keywords to search; each runs on every selected country portal. |
| `countries` | multi-select | mx, co, pe, ar, cl, ec | Country portals to search in one run. |
| `urls` | array | (4 example links) | Results, offer, company or evaluations links; each shape is routed by what it is. |
| `fetchDetails` | checkbox | `true` | Read each offer's own page for description, requirements, skills, structured salary and employer details. |
| `fetchReviews` | checkbox | `true` | Read each collected company's employee evaluations and emit the company record with them. |
| `maxReviews` | number | `20` | Upper bound on evaluations collected per company (10 per page at source); `0` skips review collection. |
| `maxItems` | number | `20` | Hard cap on records (jobs + companies) for the whole run. |
| `maxPages` | number | `0` | Does NOT cap the run on its own: `0` walks every results page and defers to Max items; a positive value bounds pages per search or pasted results link. |
| `resumeFromRunId` | string | (empty) | A previous run's ID whose records are treated as already collected and skipped. |
| `incrementalMode` | checkbox | `false` | Classify records NEW / UPDATED / UNCHANGED / EXPIRED against the saved baseline; unchanged records are suppressed. |
| `stateKey` | string | (empty) | Optional name for the incremental baseline; leave empty to derive it from the run's scope. |
| `emitUnchanged` | checkbox | `false` | Also push records whose tracked fields did not change. |
| `emitExpired` | checkbox | `false` | After a complete scan, push baseline records this run did not see (changeType EXPIRED). |
| `ignoreFieldsForChanges` | array | (empty) | Extra record fields excluded from change detection beyond the built-in volatile set. |
| `proxyConfiguration` | proxy | residential | The portals are geo-served; a residential exit in one Latin American country serves every portal. |
| `mcpConnectors` | array | (empty) | Connector IDs to export records to after the run. |
| `notionParentPageUrl` | string | (empty) | Parent page URL when exporting to Notion. |
| `maxNotifyListings` | number | `50` | Upper bound on records handed to each connector. |

### Output Example

> Sample shape: values are illustrative placeholders, not from a live record.

**One job record with detail enrichment:**

```json
{
  "recordId": "job:00000000000000000000000000000000",
  "kind": "job",
  "jobId": "00000000000000000000000000000000",
  "title": "Sales Representative",
  "url": "https://mx.computrabajo.com/ofertas-de-trabajo/oferta-de-trabajo-de-sales-representative-en-guadalajara-00000000000000000000000000000000",
  "company": "Sample Company SA",
  "companyUrl": "https://mx.computrabajo.com/empresas/ofertas-de-trabajo-de-sample-company-sa-0000000000000000",
  "companyRating": 4.4,
  "location": "Guadalajara, Jalisco",
  "city": "Guadalajara",
  "region": "Jalisco",
  "country": "México",
  "countryCode": "MX",
  "workMode": "Presencial y remoto",
  "salaryText": "$ 20,000.00 (Mensual)",
  "salaryCurrency": "MXN",
  "salaryValue": 20000,
  "salaryUnit": "MONTH",
  "employmentType": "FULL_TIME",
  "contractType": "Contrato por tiempo indeterminado",
  "workingHours": "Tiempo Completo",
  "datePosted": "2026-01-01",
  "validThrough": "2026-03-01",
  "postedText": "Hace 5 horas",
  "description": "Full offer description text with responsibilities and requirements.",
  "industry": "Venta al consumidor",
  "education": "Educación mínima: Bachillerato",
  "experience": "1 año de experiencia",
  "skills": ["Negociación", "Ventas telefónicas"],
  "knowledge": ["Negociación", "Ventas telefónicas"],
  "languages": ["Español"],
  "drivingLicenses": ["A"],
  "travelAvailability": true,
  "relocationAvailability": false,
  "acceptsDisability": true,
  "updatedText": "1 de enero (actualizada)",
  "companyDescription": "Sample company providing business services.",
  "keywords": ["ventas", "sales"],
  "isUrgent": false,
  "isFeatured": true,
  "applyUrl": "https://candidato.mx.computrabajo.com/candidate/apply/?oi=00000000000000000000000000000000",
  "detailFetched": true,
  "sourceUrl": "https://mx.computrabajo.com/trabajo-de-ventas",
  "sourceMode": "search"
}
```

### Plan Requirement

This Actor charges per event under Apify's pay-per-event pricing: one charge when the run starts, one per record returned, one per offer whose own page was read, and one per company whose evaluations were collected. Check the Pricing tab on the Actor page for the exact per-event prices for your plan tier. Proxy usage follows the connection you select for the run.

### FAQ

#### What does a run cost?

The run start, each returned record, each offer page read and each company with evaluations each carry their own event charge; see the Pricing tab for exact prices on your tier. A bare run with the default 20 records, details and reviews on typically reads a few dozen pages.

#### Is it legal to scrape Computrabajo?

The Actor reads only publicly accessible pages and adds standard rate limiting. Use the data in line with your own compliance review and the site's terms.

#### How do scheduled monitoring runs work?

Turn on incremental mode and schedule the run with the same keywords, links and toggles. The first run classifies everything NEW; later runs suppress unchanged offers, flag changed ones as UPDATED, and (with Expired records on) mark taken-down offers EXPIRED after a complete scan.

#### Why did a run return fewer records than expected?

Max items is a whole-run cap shared by every walk in the run, and the offers feed rotates between reads. Raise Max items, or narrow the countries or keywords, to reach deeper pages.

#### Why does a run fail with a connection message?

The portals refuse some connections outright. The Actor rotates exits and falls back to a backup connection; if every connection was refused the run fails loudly with guidance rather than returning an empty dataset.

#### Can I use this with AI agents?

Yes - the Actor works through the Apify MCP server: call it with a keyword, a country list and links, then read the dataset. The `mcpConnectors` input also pushes records straight into your tools after each run.

#### A company shows no reviews even though fetchReviews is on?

Many companies have no published employee evaluations; those ship as company records without them, and no review charge is recorded for them.

### 🔗 More scrapers you might like

Pair this actor with these related scrapers from the same team:

<table>
<tr><td>🧩 <a href="https://apify.com/abotapi/naukri-com-scraper"><b>Naukri.com Scraper</b></a><br>Scrape Naukri.com jobs by keyword or URL. Extract job title, company, skills, experience...</td><td>🧩 <a href="https://apify.com/abotapi/falabella-marketplace-scraper"><b>Falabella Scraper</b></a><br>Scrape Falabella, Latin America's leading retail marketplace: products with local prices...</td></tr>
<tr><td>💼 <a href="https://apify.com/abotapi/careerbuilder-scraper"><b>CareerBuilder Scraper</b></a><br>Scrape CareerBuilder.com job listings by search or URL. Returns title, company profile...</td><td>💼 <a href="https://apify.com/abotapi/hiring-cafe-scraper"><b>Hiring.Cafe Scraper</b></a><br>Scrape Hiring.Cafe jobs from $1/1K results. Search with advanced filters or URLs and...</td></tr>
<tr><td>💼 <a href="https://apify.com/abotapi/edjoin-scraper"><b>EdJoin.org Scraper</b></a><br>Scrape EdJoin.org K-12 and higher-ed jobs by keyword, location, filters or URL. Extract...</td><td>💼 <a href="https://apify.com/abotapi/hh-ru-jobs-scraper"><b>HH.ru Scraper</b></a><br>Scrape HH.ru (HeadHunter) job listings by filters or URLs. Extract 50+ fields including...</td></tr>
</table>

👉 [Browse all abotapi scrapers](https://apify.com/abotapi)

### 💬 Support

- 🐞 **Found a bug or a missing field?** Open a ticket on the [Issues tab](https://apify.com/abotapi/computrabajo-jobs-scraper/issues/open). We usually reply within hours.
- 🛠️ **Need another site, extra fields or a private build?** Email <contact@abotapi.com>.
- ⭐ **Enjoying it?** A quick review on the actor page helps other users find it.

# Actor input Schema

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

Keyword search walks the results pages of every selected country portal. Paste links routes each link by its shape: results pages walk forward, an offer link is always read in full, a company link emits the company, an evaluations link emits the company with its reviews.

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

Keywords to search, for example ventas, contador, auxiliar administrativo. Each keyword runs on every selected country portal.

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

Country portals to search. Every selected portal runs each keyword in the same run.

## `urls` (type: `array`):

Results, offer, company or evaluations links. Results pages walk forward (pagination), offer links are always read in full, company links emit the company profile, evaluations links emit the company plus its reviews.

## `fetchDetails` (type: `boolean`):

Read each offer's own page for the full description, requirements (education, experience, age), skill tags, structured salary, employer id and logo. Turning this off returns the faster results-page card shape.

## `fetchReviews` (type: `boolean`):

Read each collected company's employee evaluations (ratings, comments, sub-scores) and emit the company record with its reviews. Applies to both modes; a company with no published evaluations ships without them.

## `maxReviews` (type: `integer`):

Upper bound on employee evaluations collected per company (evaluations serve 10 per page). 0 skips review collection entirely.

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

Hard cap on records (jobs + companies) for the whole run. The walk stops once it is reached.

## `maxPages` (type: `integer`):

Does NOT cap the run on its own: 0 or empty walks every results page and defers to Max items. A positive value bounds how many results pages each search or pasted results link walks.

## `proxyConfiguration` (type: `object`):

The portals are geo-served: a residential exit in one Latin American country serves every portal reliably. Residential access requires a paid plan; on plans without it the run falls back to a backup connection and tells you in the log.

## `resumeFromRunId` (type: `string`):

A previous run's ID whose records are treated as already collected: they are seeded as seen and skipped this run.

## `incrementalMode` (type: `boolean`):

Compare each record against the saved baseline and classify NEW / UPDATED / UNCHANGED / EXPIRED. Unchanged records are suppressed unless Emit unchanged is on. The 'posted N hours ago' recency text, rotating apply-link parameters and review counters are excluded from change detection; the keywords, countries, links and toggles you run with are part of the scope, so changing them starts a fresh baseline.

## `stateKey` (type: `string`):

Optional name for the incremental baseline. Leave empty to derive it from the run's scope (keywords, countries, links, toggles); set the same key on every scheduled run to share one baseline.

## `emitUnchanged` (type: `boolean`):

Also push records whose tracked fields did not change (changeType UNCHANGED) instead of suppressing them.

## `emitExpired` (type: `boolean`):

After a complete scan, push records from the baseline that this run did not see (changeType EXPIRED, for example offers taken down). Never fires on a capped, resumed or partially failed walk.

## `ignoreFieldsForChanges` (type: `array`):

Extra record fields excluded from change detection beyond the built-in volatile set (postedText, applyUrl, reviews, counters).

## `mcpConnectors` (type: `array`):

Connector IDs to export the collected records to after the run (Apify MCP). Leave empty to skip the export.

## `notionParentPageUrl` (type: `string`):

Parent page URL when one of the connectors is Notion.

## `maxNotifyListings` (type: `integer`):

Upper bound on records handed to each connector.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "ventas"
  ],
  "countries": [
    "mx",
    "co",
    "pe",
    "ar",
    "cl",
    "ec"
  ],
  "urls": [
    "https://mx.computrabajo.com/trabajo-de-ventas",
    "https://mx.computrabajo.com/ofertas-de-trabajo/oferta-de-trabajo-de-gerenta-de-ventas-productos-educativos-en-jiutepec-63B83300B81B160061373E686DCF3405",
    "https://mx.computrabajo.com/empresas/ofertas-de-trabajo-de-izzi-2C8C25FF54A80ADE",
    "https://mx.computrabajo.com/empresas/evaluaciones-en-izzi-2C8C25FF54A80ADE"
  ],
  "fetchDetails": true,
  "fetchReviews": true,
  "maxReviews": 20,
  "maxItems": 20,
  "maxPages": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "MX"
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "maxNotifyListings": 50
}
```

# Actor output Schema

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

All records (jobs and companies together; filter by the kind column).

## `jobs` (type: `string`):

One row per job offer.

## `companies` (type: `string`):

Company profiles with offer counts and review summaries.

## `reviews` (type: `string`):

Employee evaluations unwound one row per review.

## `changes` (type: `string`):

Change classification per record when incremental mode is on.

## `detail` (type: `string`):

Full offer descriptions, contract, schedule, salary and requirements.

# 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": [
        "ventas"
    ],
    "urls": [
        "https://mx.computrabajo.com/trabajo-de-ventas",
        "https://mx.computrabajo.com/ofertas-de-trabajo/oferta-de-trabajo-de-gerenta-de-ventas-productos-educativos-en-jiutepec-63B83300B81B160061373E686DCF3405",
        "https://mx.computrabajo.com/empresas/ofertas-de-trabajo-de-izzi-2C8C25FF54A80ADE",
        "https://mx.computrabajo.com/empresas/evaluaciones-en-izzi-2C8C25FF54A80ADE"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "MX"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/computrabajo-jobs-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": ["ventas"],
    "urls": [
        "https://mx.computrabajo.com/trabajo-de-ventas",
        "https://mx.computrabajo.com/ofertas-de-trabajo/oferta-de-trabajo-de-gerenta-de-ventas-productos-educativos-en-jiutepec-63B83300B81B160061373E686DCF3405",
        "https://mx.computrabajo.com/empresas/ofertas-de-trabajo-de-izzi-2C8C25FF54A80ADE",
        "https://mx.computrabajo.com/empresas/evaluaciones-en-izzi-2C8C25FF54A80ADE",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "MX",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/computrabajo-jobs-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": [
    "ventas"
  ],
  "urls": [
    "https://mx.computrabajo.com/trabajo-de-ventas",
    "https://mx.computrabajo.com/ofertas-de-trabajo/oferta-de-trabajo-de-gerenta-de-ventas-productos-educativos-en-jiutepec-63B83300B81B160061373E686DCF3405",
    "https://mx.computrabajo.com/empresas/ofertas-de-trabajo-de-izzi-2C8C25FF54A80ADE",
    "https://mx.computrabajo.com/empresas/evaluaciones-en-izzi-2C8C25FF54A80ADE"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "MX"
  }
}' |
apify call abotapi/computrabajo-jobs-scraper --silent --output-dataset

```

## MCP server setup

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