# InfoJobs Scraper (`minyo/infojobs-scraper`) Actor

A powerful, customizable, fast and efficient InfoJobs scraper designed to extract job data with precision. Perfect for analysis, career planning, market insights, or whatever use you want to give to the data it provides.

- **URL**: https://apify.com/minyo/infojobs-scraper.md
- **Developed by:** [minyo](https://apify.com/minyo) (community)
- **Categories:** Lead generation, Jobs, Integrations
- **Features:** Full permissions
- **Stats:** 31 total users, 0 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

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

## InfoJobs Scraper

### ⭐ What does InfoJobs Scraper do?

InfoJobs Scraper is a **highly customizable and efficient tool** to extract job postings data from [InfoJobs.net](https://www.infojobs.net/). Designed for flexibility and speed, it allows you to tailor your scraping process to suit specific needs. You can extract detailed information such as:

- 📝 **Job title**

- 📝 **Description**

- 📍 **City**

- 🏢 **Company name**

- ⏰ **Workday type**

- 📜 **Contract type**

- 🔍 **Job type**

- 💰 **Minimum and maximum salary**

- 📅 **Publish date**

- 🔗 **Job posting URL**

### 🔥 Why choose our InfoJobs Scraper?

Compared to other scrapers, InfoJobs Scraper stands out due to:

1. **🎛️ Fully personalized search**: Provides the full range of filters provided by InfoJobs, including multi-selection across various parameters, granting you complete control and precision over your job search.

2. **✨ Easy to use**: Inputs are designed for simplicity, with most fields using select options, enabling quick and straightforward configuration.

3. **⚡ Superior efficiency**: The fastest and with cheapest computational costs available, making it the most efficient and cost-effective choice.

4. **📊 Structured outputs**: Get data in a clean and consistent format ready for analysis.

### 💡 Use cases for InfoJobs data

The data extracted with InfoJobs Scraper can be applied to:

- 📊 **Job market analysis**: Identify in-demand skills, salary trends, and hiring hotspots.

- 📈 **Competitive intelligence**: Track hiring patterns of competing companies.

- 📚 **Research**: Analyze employment trends and labor market dynamics.

- 🧭 **Career planning**: Spot opportunities for reskilling and upskilling.

- 🎨 **Data visualization**: Create compelling graphs and maps to showcase job data insights.

### 🚀 How to Use the InfoJobs Scraper

This scraper supports **two main ways** to scrape job offers from InfoJobs:

1. 💻 **Through the Apify UI**
2. 🤖 **Via API**

At its core, the scraper uses the following parameters:

- **Keyword** (the job title or role you are searching for).

- **Filter parameters** (such as `province`, `city`, `teleworking`, etc.).

If the **keyword** is left empty (`""`), the scraper will return **all** offers that match your chosen filters.\
Each **filter parameter** is an **array of IDs**. Filter parameters allow multiple selection.

### 📥 Input schema example

```json
{
  "keyword": "Developer",
  "province": ["33", "9"],
  "city": ["Madrid", "Getafe", "Barcelona"],
  "teleworking": ["1", "2"],
  "category": ["150"],
  "workday": ["1"],
  "contractType": ["8", "5"],
  "sinceDate": ["_15_DAYS"],
  "experienceMin": "_0_YEARS",
  "experienceMax": "_10_YEARS",
  "educationIds": ["10"]
}
```

If any filter parameter is set to, `["all"]` means “include all options for that filter,” (which is the same as not including it on the input json) while `"teleworking": ["1", "2"]` means “include only those specific IDs.” (In this example, `1` = *Presencial*, and `2` = *Solo teletrabajo*.)

> **Ok but, how do I know which filters are available and which ID's they have?... Don't worry, gotcha :)**\
> For a complete list of available filters and their IDs, visit our **[JSON Reference Table (and the JSON itself)](https://jsongrid.com?data=9ec6ce6a-6abc-498e-979b-667a13386f3c)**.

***

#### 1. 💻 **UI Usage**

When you **run the scraper from the Apify web interface**, you don’t need to worry about the numeric IDs. Instead, you will see:

1. A **“Keyword”** text area where you can type the job title (or leave it empty to get all results).

2. **Select boxes** for each filter (province, city, teleworking, etc.). You can choose multiple options from each dropdown.\
   **By default**, all filters are set to `"all"`, meaning **no specific restriction** on those parameters.

3. The **UI** **automatically converts** your **chosen options** (titles) into the **correct IDs** and **discards** those with **no restriction**.

**Example flow in the UI**:

1. **Enter** `Full Stack Developer` in the **Keyword** field.
2. For **Teleworking**, choose “Presencial” and “Solo teletrabajo.”
3. (Optional) Set **Province**, **City**, or any other filters as needed—or leave them as “All.”
4. Click **Start** to launch the scraper.

This approach is straightforward: **the interface builds the JSON** for you.

***

#### 2. 🤖 **API Usage**

If you prefer to call the scraper **programmatically**, you'll have to buid the input object by yourself.

##### *Constraints* you need to know:

1. **Keyword**, **experienceMin** and **experienceMax** params are **single valued**

   - ✅ *Correct:*

   ```json
   {
   "keyword": "Frontend Engineer",
   "province": ["33", "9"],
   "experienceMin": "_0_YEARS",
   "experienceMax": "_10_YEARS",
   "teleworking": ["3", "2"],
   }
   ```

   - ❌ *Incorrect:*

   ```json
    {
    "keyword": ["Frontend Engineer", "Barber"],
    "province": ["33", "9"],
    "experienceMin": ["_0_YEARS", "_1_YEARS"],
    "experienceMax": ["_5_YEARS", "_7_YEARS"],
    "teleworking": ["3", "2"],
    }
   ```
2. Params format: **Array of strings for multi valued, and simple strings for single valued**

   - ✅ *Correct:*

   ```json
   {
     "keyword": "Frontend Engineer",
     "province": ["33", "9"],
     "teleworking": ["3", "2"],
   }
   ```

   - ❌ *Incorrect:*

   ```json
   {
     "keyword": ["Frontend Engineer"],
     "province": [33, 9],
     "teleworking": [3, 2],
   }
   ```
3. **Add only needed params:**

   - ✅ *Correct:*

   ```json
   {
     "keyword": "Frontend Engineer",
     "province": ["33", "9"],
     "sinceDate": ["_7_DAYS"],
     "teleworking": ["3", "2"],
   }
   ```

   ```json
   {
     "keyword": "Frontend Engineer",
     "teleworking": ["3", "2"],
   }
   ```

   - ❌ *Incorrect:*

   ```json
   {
     "keyword": "Frontend Engineer",
     "province": ["all"],
     "sinceDate": ["all"],
     "teleworking": [3, 2],
   }
   ```

##### 🔍 Where can I find available filters and their corresponding ID's?

> Check our **[JSON Reference Table (and the JSON itself)](https://jsongrid.com?data=9ec6ce6a-6abc-498e-979b-667a13386f3c)** to find all available filters options and their IDs for **province**, **city**, **category**, etc.

***

#### 📈 Conclusion

- **UI Method**: Easiest for quick scraping. Just select the filter titles and let the UI handle the ID mapping.
- **API Method**: Perfect for programmatic or automated workflows. You must supply the filter IDs yourself in the JSON input and respect the constraints.

No matter which method you choose, the **output** will be the list of InfoJobs offers that match your specified keyword(s) and filters. If you have any questions, check our FAQ or reach out for support!

##### 📈 Give it a try!

1. ✅ Click on **Try for free**.
2. ✅ Fill in the input parameters to customize your search.
3. ✅ Click **Save & Start**.
4. ✅ Download and analyze your data from the **Output** tab when the run is complete.

### 📤 Example output schema

The scraper will generate structured JSON data similar to this:

```json
{
  "id": "e4687ccf8745739ac6c60eea4a8f1e",
  "title": "Full Stack Developer",
  "description": "We are looking for a Full Stack Developer to join our team.",
  "city": "Madrid",
  "companyName": "Tech Solutions",
  "workday": "Completa",
  "contractType": "Indefinido",
  "jobType": "Presencial",
  "minSalary": 30000,
  "maxSalary": 40000,
  "publishDate": "2025-01-20T12:20:24Z",
  "url": "https://www.infojobs.net/madrid/full-stack-developer/of-ie4687ccf8745739ac6c60eea4a8f1e"
}
```

### 💰 Pricing

The **InfoJobs Scraper** is available for **$30 per month** plus computational costs.

- **💸 Fixed monthly fee**: $30
- **⚡ Computational costs**: Minimal, thanks to the scraper’s high efficiency

This means you get **unlimited access** for a fixed price, while keeping additional costs **low** due to optimized performance. Run as many scrapes as you need while maintaining cost-effectiveness.

Run a test scrape to estimate the resources required and scale accordingly.

### 🎯 Additional features

- **🔗 Integrations**: Connect with cloud services like Google Sheets, Slack, Make or Zapier for seamless workflows.

- **📩 Webhooks**: Receive notifications when a run completes successfully.

- **📡 API Access**: Manage your scraping process programmatically using the Apify API.

### ⚖️ Is scraping InfoJobs legal?

InfoJobs Scraper only extracts publicly available data and adheres to ethical scraping practices. Ensure you comply with local data protection laws and avoid scraping personal data without a legitimate purpose. Consult legal professionals if in doubt.

### 💬 Feedback and support

We’re constantly improving InfoJobs Scraper. If you encounter a bug or have suggestions, please create an issue in the **Issues** tab of the Apify Console. Your feedback is invaluable!

# Actor input Schema

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

Keywords related to the job offers that you're looking for. Should answer to the following question: 'Which job am I looking for?

## `province` (type: `array`):

Select the province where you want to find job offers from.

## `teleworking` (type: `array`):

Select the type of teleworking option (remote, hybrid, or on-site) that best suits your preferences.

## `category` (type: `array`):

Choose the category that best fits the type of job you are looking for.

## `education` (type: `array`):

Select the minimum education level required for the job offers you are looking for.

## `workday` (type: `array`):

Choose the type of workday you prefer, such as full-time or part-time.

## `contractType` (type: `array`):

Select the type of contract offered, such as permanent, temporary, or freelance.

## `city` (type: `array`):

Select the city where you want to find job offers from.

## `sinceDate` (type: `array`):

Filter job offers published since a specific date.

## `experienceMin` (type: `string`):

Required experience lowest value

## `experienceMax` (type: `string`):

Requested experience highest value

## Actor input object example

```json
{
  "keyword": "Full Stack Developer",
  "province": [
    "all"
  ],
  "teleworking": [
    "all"
  ],
  "category": [
    "all"
  ],
  "education": [
    "all"
  ],
  "workday": [
    "all"
  ],
  "contractType": [
    "all"
  ],
  "city": [
    "all"
  ],
  "sinceDate": [
    "all"
  ],
  "experienceMin": "_0_YEARS",
  "experienceMax": "_10_YEARS"
}
```

# 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 = {
    "keyword": "Full Stack Developer"
};

// Run the Actor and wait for it to finish
const run = await client.actor("minyo/infojobs-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 = { "keyword": "Full Stack Developer" }

# Run the Actor and wait for it to finish
run = client.actor("minyo/infojobs-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 '{
  "keyword": "Full Stack Developer"
}' |
apify call minyo/infojobs-scraper --silent --output-dataset

```

## MCP server setup

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