# Bumeran Jobs Scraper (`solidcode/bumeran-com-ar-scraper`) Actor

\[💰 $0.95 / 1K] Extract job listings from Bumeran Argentina. Search by keyword and province, filter by area, seniority, contract type, work mode, and date posted, then collect titles, companies, descriptions, and screening questions — or paste Bumeran search URLs directly.

- **URL**: https://apify.com/solidcode/bumeran-com-ar-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 5 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.95 / 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.
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?

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

## Bumeran Jobs Scraper

Pull job listings from Bumeran Argentina at scale — titles, hiring companies, locations, work mode, seniority, contract type, published pay when the employer states it, full descriptions, and screening questions across the country's largest job marketplace. Built for recruiters, sourcers, labor-market analysts, and lead-generation teams who need structured Argentine job-market data without copy-pasting listings page by page.

### Why This Scraper?

- **All 23 Argentine provinces** — the country's largest job marketplace, searchable by free-text keyword and by any province from Buenos Aires (which covers Capital Federal and CABA) and Córdoba down to Tierra del Fuego, in one run.
- **Batch keyword search, up to 50 terms per run** — pass a list like `["desarrollador", "contador", "atención al cliente"]` and each term runs its own search, with every result tagged by the keyword that found it.
- **All 26 job areas Bumeran files ads under** — Technology & Telecom, Administration/Accounting/Finance, Sales & Business, Health & Pharmacy, Nursing, Insurance, Customs & Foreign Trade, Engineering, Trades, and Shipping/Maritime/Ports among them — narrow to a single área without crafting URLs.
- **Screening questions captured per listing** — the exact application questions a candidate must answer, pulled straight from each job page when full descriptions are enabled.
- **Published pay parsed, not guessed** — when an employer states pay you get a clean range with frequency and gross/net, like `$1.000.000 - $1.300.000 por Mes (Bruto)`, instead of a number buried in description text.
- **Every targeting option the board offers, none missing** — all 9 seniority levels (No experience, Trainee, Junior, Semi-Senior, Senior, Team Lead, Management and more), 8 contract types (Full-time through By the hour, Night shift and Weekends), 3 work modes, and 9 date-posted windows from Today to Last 30 days.
- **Salary-expectation flag on every row** — roughly 1 in 4 Argentine ads makes applicants name their own number before applying; every row says which, and you can keep only those in one click.
- **Paste a Bumeran URL and go** — drop in a search-results URL or an individual job-posting URL and the actor scrapes it as-is, respecting every filter already baked into that link.
- **Automatic deduplication** — one clean row per unique job by listing ID, even when the same ad appears across multiple pages or multiple keyword searches.

### Use Cases

**Recruitment & Talent Sourcing**

- Build daily feeds of new openings in a target área and seniority level
- Capture screening questions to pre-qualify candidates before outreach
- Monitor competitor hiring by company name across provinces
- Pull Remote and Hybrid roles country-wide to widen your candidate pool

**Labor-Market Research**

- Track posting volume by área and province over time
- Measure how quickly roles appear and disappear using date-posted windows
- Compare on-site vs. remote vs. hybrid demand across Argentine industries
- Analyze contract-type mix (full-time vs. internship vs. temporary) by sector

**Salary Benchmarking**

- Collect the pay ranges employers do publish, with frequency and gross/net attached, and no placeholder amounts or repeated-digit mashes to clean out first
- Benchmark compensation by seniority level and área
- Compare published ranges across Buenos Aires, Córdoba, and other provinces
- Separate employers who publish a number from those who ask candidates for one

**Lead Generation & Sales Intelligence**

- Identify companies actively hiring as a buying signal for staffing and HR-tech sales
- Build target lists of employers by industry and province
- Tell confidential postings apart from named employers to prioritize outreach
- Feed hiring signals into your CRM for timely outreach

### Getting Started

#### Simple keyword search

The fastest way to start — one keyword across all of Argentina:

```json
{
    "keywords": ["desarrollador"],
    "maxResultsPerQuery": 50
}
```

#### Filtered search

A common combination — remote technology roles in Córdoba, posted recently:

```json
{
    "keywords": ["desarrollador", "data engineer"],
    "location": "Córdoba",
    "area": "tecnologia-sistemas-y-telecomunicaciones",
    "workMode": "remoto",
    "datePosted": "publicacion-menor-a-7-dias",
    "maxResultsPerQuery": 100
}
```

#### Salary benchmarking run

Senior full-time finance roles with extra details on, so every ad that does publish a pay range comes back parsed:

```json
{
    "keywords": ["contador", "analista financiero"],
    "seniority": "senior-semi-senior",
    "contractType": "full-time",
    "sortBy": "recientes",
    "includeDescription": true,
    "maxResultsPerQuery": 200
}
```

#### Using Bumeran URLs

Paste a search-results page or an individual job posting — the actor handles both:

```json
{
    "startUrls": [
        "https://www.bumeran.com.ar/empleos-busqueda-desarrollador.html",
        "https://www.bumeran.com.ar/empleos-area-tecnologia-sistemas-y-telecomunicaciones.html"
    ],
    "includeDescription": true,
    "maxResultsPerQuery": 100
}
```

### Input Reference

#### What to Find

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keywords` | string\[] | `["desarrollador"]` | Job titles, roles, or keywords to search for. Each keyword runs its own search. Leave empty for the broadest result set. Up to 50 keywords per run. |
| `location` | string | `""` | One of Argentina's 23 provinces (e.g. "Buenos Aires", "Córdoba", "Santa Fe"). Buenos Aires covers Capital Federal and CABA. Leave empty to search all of Argentina. |
| `startUrls` | string\[] | `[]` | Paste full Bumeran search-result or individual job URLs to collect them directly. Any filters baked into the URL are respected. Up to 50 URLs per run. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `area` | select | `Any area` | Limit results to one job área. All 26 areas, including Technology & Telecom, Administration/Accounting/Finance, Sales & Business, Health & Pharmacy, Nursing, Insurance, Customs & Foreign Trade, Engineering, Design, and Shipping/Maritime/Ports. |
| `seniority` | select | `Any level` | Limit to one of 9 seniority levels: No experience required, Trainee/Intern, Junior, Semi-Senior, Senior, the combined Senior/Semi-Senior band, Team Lead/Supervisor, Management/Director, or Other. |
| `contractType` | select | `Any contract type` | Limit to one of 8 contract types: Full-time, Part-time, By the hour, Per contract, Temporary, Internship, Night shift, or Weekends. |
| `workMode` | select | `Any work mode` | Limit to one work mode: On-site, Remote, or Hybrid. |
| `datePosted` | select | `Any time` | Only return jobs published within a window: Today, or the last 2, 3, 4, 5, 6, 7, 15, or 30 days. |
| `salaryExpectationRequestedOnly` | boolean | `false` | Keep only ads that require the applicant to state their expected pay. This is not a published-salary filter. |
| `sortBy` | select | `Most relevant` | Order results by Most relevant or Newest first. |

#### Output Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResultsPerQuery` | integer | `100` | Maximum listings to collect per keyword or per start URL. Set to 0 to collect all available results. |
| `onlyUniqueJobs` | boolean | `true` | Return each job once even when it appears across several pages or searches. Turn off to keep every copy. |
| `includeDescription` | boolean | `true` | Open every job's page to add screening questions, published pay, área/subárea, seniority, province, and the formatted description. Turn off for faster runs that still return titles, companies, locations, work mode, contract type, dates, links, and plain-text descriptions. |

### Output

Each job is a single flat row. Here's a representative result with extra details enabled:

```json
{
    "id": "1116543210",
    "title": "Desarrollador Full Stack Senior",
    "company": "Tech Solutions SA",
    "companyLogoUrl": "https://media.bumeran.com.ar/logos/techsolutions.png",
    "location": "Capital Federal, Buenos Aires, Argentina",
    "province": "Buenos Aires",
    "area": "Tecnología, Sistemas y Telecomunicaciones",
    "subarea": "Programación",
    "salary": "$1.700.000 - $2.200.000 por Mes (Bruto)",
    "salaryExpectationRequested": false,
    "workMode": "Remoto",
    "seniority": "Senior / Semi-Senior",
    "contractType": "Full-time",
    "publishedDate": "08-06-2026",
    "daysAgo": 3,
    "descriptionText": "Buscamos un desarrollador full stack con experiencia en React y Node.js para sumarse a un equipo distribuido...",
    "descriptionHtml": "<p>Buscamos un desarrollador full stack con experiencia en <strong>React</strong> y Node.js...</p>",
    "questions": ["¿Cuántos años de experiencia tenés con React?", "¿Tenés disponibilidad full-time?"],
    "confidential": false,
    "jobUrl": "https://www.bumeran.com.ar/empleos/desarrollador-full-stack-senior-1116543210.html",
    "searchKeyword": "desarrollador",
    "scrapedAt": "2026-06-11T14:30:00Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Unique Bumeran listing identifier |
| `title` | string | Job title |
| `jobUrl` | string | Direct link to the Bumeran job posting |
| `searchKeyword` | string | The keyword that surfaced this listing |
| `scrapedAt` | string | ISO 8601 timestamp of when the listing was collected |

#### Company & Location

| Field | Type | Description |
|-------|------|-------------|
| `company` | string | Hiring company name |
| `companyLogoUrl` | string | Company logo image URL |
| `location` | string | Where the role is based, as city, province and country — e.g. "Capital Federal, Buenos Aires, Argentina". The country suffix is added when extra details are enabled |
| `province` | string | Province the role is based in. Needs extra details enabled |
| `confidential` | boolean | Whether the employer is posting confidentially |

#### Job Details

| Field | Type | Description |
|-------|------|-------------|
| `area` | string | Job área (industry category). Needs extra details enabled |
| `subarea` | string | More specific sub-area within the área. Needs extra details enabled |
| `seniority` | string | Seniority level of the role. Needs extra details enabled |
| `contractType` | string | Contract type, always in the same wording as the Contract Type filter (Full-time, Part-time, Internship, By the hour, etc.) |
| `workMode` | string | Work mode (On-site, Remote, Hybrid) |
| `salary` | string | Pay range with frequency and gross/net, for the ads whose employer publishes a real one. Placeholder figures some employers type to get past Bumeran's two mandatory pay boxes, whether a token amount or a repeated-digit mash like 2.222.222 - 22.222.222, are reported as no published pay rather than as an offer. A fixed wage entered as a one-peso "range" shows as the single figure the employer meant. Either way the column is safe to average. Needs extra details enabled |
| `salaryExpectationRequested` | boolean | Whether the ad makes the applicant state their own expected pay |
| `publishedDate` | string | Date the listing was posted |
| `daysAgo` | number | Days since the listing was published |

#### Description & Questions

| Field | Type | Description |
|-------|------|-------------|
| `descriptionText` | string | Full job description as clean plain text. Filled on every run, with or without extra details |
| `descriptionHtml` | string | Full job description with its original formatting. Needs extra details enabled |
| `questions` | string\[] | Screening questions the applicant must answer. Needs extra details enabled |

### Tips for Best Results

- **Start small** — set `maxResultsPerQuery` to 25-50 on your first run to confirm the data fits your needs, then scale up.
- **Toggle extra details for speed vs. depth** — every run returns the full description text, so turn `includeDescription` off when titles, companies, locations, work mode, contract type, dates and descriptions already cover you. Keep it on when you need screening questions, published pay, área/subárea, seniority, or province, since each of those comes from the job's own page.
- **Published pay is the exception — slice for it, don't sort for it** — most Argentine employers leave pay off the ad, so `salary` fills on roughly 1 in 10 rows once extra details are on. The rate is driven by which slice you ask for, not by the sort order: a Córdoba province run filled it on 27% of rows while a country-wide remote run filled 2%. Run province- or área-specific searches when compensation is the goal, then filter the finished dataset on `salary`.
- **Batch keywords instead of separate runs** — pass several related terms in `keywords` at once; each is tagged in `searchKeyword`, so you can split results by term afterward without losing context.
- **Type a province, not a city, in the location field** — Bumeran groups every listing by province, so "Córdoba" or "Santa Fe" works while "Rosario" does not; jobs in the City of Buenos Aires come back under "Buenos Aires". Leave it empty to sweep all of Argentina.
- **Reuse a dialed-in Bumeran link** — once you've tuned filters on the website, paste that search URL into `startUrls` and the actor honors the exact filters in the link.
- **Keep `onlyUniqueJobs` on for clean datasets** — overlapping keywords and pages will surface the same ad more than once; dedup by listing ID gives you one row per real job.

### Pricing

**From $0.95 per 1,000 results** — among the most affordable ways to collect structured Argentine job-market data at scale. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.11 | $0.105 | $0.10 | $0.095 |
| 1,000 | $1.10 | $1.05 | $1.00 | $0.95 |
| 10,000 | $11.00 | $10.50 | $10.00 | $9.50 |
| 100,000 | $110.00 | $105.00 | $100.00 | $95.00 |

A "result" is any job row in the output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate recruitment research, labor-market analysis, and business intelligence. Users are responsible for complying with applicable laws and Bumeran's Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and handle any personal data in line with applicable privacy regulations.

# Actor input Schema

## `keywords` (type: `array`):

Job titles, roles, or keywords to search for, such as 'desarrollador', 'contador', or 'atención al cliente'. Each keyword runs its own search. Leave empty to collect the broadest result set for the chosen location and filters. Up to 50 keywords per run.

## `location` (type: `string`):

One of Argentina's 23 provinces, such as 'Buenos Aires', 'Córdoba', 'Santa Fe' or 'Mendoza'. Bumeran groups jobs by province, so the City of Buenos Aires (Capital Federal / CABA) is part of Buenos Aires, and city names like Rosario are covered by their province. Leave empty to search all of Argentina.

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

Paste full Bumeran search-result or individual job URLs (e.g. https://www.bumeran.com.ar/empleos-busqueda-desarrollador.html) to scrape them directly. Useful when you already have a search dialed in on the website — any filters baked into the URL are respected. Up to 50 URLs per run.

## `area` (type: `string`):

Limit results to one job area (área). Leave on 'Any area' to include all areas.

## `seniority` (type: `string`):

Limit results to one seniority level. Bumeran files ads under nine levels, including a legacy combined 'Senior / Semi-Senior' band that is separate from the standalone Semi-Senior and Senior levels. Leave on 'Any level' to include all.

## `contractType` (type: `string`):

Limit results to one contract or work type. Leave on 'Any' to include all types.

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

Limit results to one work mode (modalidad). Leave on 'Any' to include all modes.

## `datePosted` (type: `string`):

Only return jobs published within this time window. Leave on 'Any time' to include all listings.

## `salaryExpectationRequestedOnly` (type: `boolean`):

Keep only listings that require the applicant to state their expected pay. This is Bumeran's own "salario pretendido" flag — it does NOT mean the employer published a salary. Employer pay lands in the salary field, which only a minority of Bumeran ads fill in.

## `sortBy` (type: `string`):

Order in which jobs are returned.

## `maxResultsPerQuery` (type: `integer`):

Maximum number of job listings to collect per search keyword (or per start URL). Set to 0 to collect all available results across pagination, up to a safety ceiling of about 10,000 listings per keyword. Results are fetched in pages: the actor stops once your cap is reached but always keeps the whole final page, so a small cap can return up to a full page more than you asked for. Listings repeated across pages are deduplicated, so the final count can also run slightly below your cap.

## `onlyUniqueJobs` (type: `boolean`):

When on, each job is returned once even if Bumeran lists it across several pages or searches. Deduplicates by the listing's job ID. Turn off to keep every copy.

## `includeDescription` (type: `boolean`):

Opens every job's own page to add the screening questions applicants must answer, the pay range when the employer publishes one, the área and subárea, the seniority level, the province, and the description with its original formatting. Leave on for the most complete data. Turn off for faster, lighter runs that still give you the job title, company, location, work mode, contract type, posting date, job link and the full description as plain text.

## Actor input object example

```json
{
  "keywords": [
    "desarrollador"
  ],
  "startUrls": [],
  "area": "",
  "seniority": "",
  "contractType": "",
  "workMode": "",
  "datePosted": "",
  "salaryExpectationRequestedOnly": false,
  "sortBy": "relevantes",
  "maxResultsPerQuery": 100,
  "onlyUniqueJobs": true,
  "includeDescription": true
}
```

# Actor output Schema

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

Table of scraped job listings with key fields like title, company, location, work mode, and posting date.

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

Complete job data including full descriptions, screening questions, area/subarea, contract type, and metadata.

# 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 = {
    "keywords": [
        "desarrollador"
    ],
    "location": "",
    "startUrls": [],
    "area": "",
    "seniority": "",
    "contractType": "",
    "workMode": "",
    "datePosted": "",
    "salaryExpectationRequestedOnly": false,
    "sortBy": "relevantes",
    "maxResultsPerQuery": 100,
    "onlyUniqueJobs": true,
    "includeDescription": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/bumeran-com-ar-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 = {
    "keywords": ["desarrollador"],
    "location": "",
    "startUrls": [],
    "area": "",
    "seniority": "",
    "contractType": "",
    "workMode": "",
    "datePosted": "",
    "salaryExpectationRequestedOnly": False,
    "sortBy": "relevantes",
    "maxResultsPerQuery": 100,
    "onlyUniqueJobs": True,
    "includeDescription": True,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/bumeran-com-ar-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 '{
  "keywords": [
    "desarrollador"
  ],
  "location": "",
  "startUrls": [],
  "area": "",
  "seniority": "",
  "contractType": "",
  "workMode": "",
  "datePosted": "",
  "salaryExpectationRequestedOnly": false,
  "sortBy": "relevantes",
  "maxResultsPerQuery": 100,
  "onlyUniqueJobs": true,
  "includeDescription": true
}' |
apify call solidcode/bumeran-com-ar-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,solidcode/bumeran-com-ar-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/nFy5LcAzxfbrwn2n6/builds/Anzx49ZNR096QWJGh/openapi.json
