# InfoJobs $1💰 Spain Jobs · Salaries · Company Data · Search (`memo23/infojobs-scraper`) Actor

Scrape every job on InfoJobs.net (Spain) — title, company + rating, salary band, location, contract, experience, required skills & languages, benefits and application counts. Any search/listing or direct offer URL; auto-paginates 70,000+ vacancies. JSON, CSV or Excel out

- **URL**: https://apify.com/memo23/infojobs-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, AI, Agents
- **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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## InfoJobs Scraper — Spain Jobs, Salaries, Skills & Company Data

**Turn InfoJobs.net into structured Spanish job-market data.** Scrape every vacancy from any InfoJobs listing, search, or category URL — job title, company + company rating, salary band, location, contract type, experience level, required skills & languages, social benefits, application counts, publish date, and the full description — straight out of the page. JSON, CSV, or Excel out, billed per result.

![How InfoJobs Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-infojobs.png)

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by InfoJobs, Adevinta, or any of their subsidiaries. All trademarks are the property of their respective owners.

### Why use this scraper

Building salary benchmarks for the Spanish market? Tracking which companies are hiring, in which provinces, for which skills? Feeding an ATS or a job aggregator? InfoJobs is Spain's #1 job board (70,000+ live vacancies) and this actor extracts the **complete structured record** for each one — not just what's visible on the card.

- 🎯 **Two starting points.** Paste an InfoJobs **listing/search URL** (`/ofertas-trabajo`, `/jobsearch/...`, category/brand/province pages) or a **direct offer URL** (`/{city}/{slug}/of-i{id}`) — both are classified automatically.
- 📊 **30+ fields per job**, including parsed salary (min/max/currency/period/gross), required skills, languages, social benefits, company rating, and application count.
- 📄 **Full pagination.** A single listing exposes ~22 jobs per page across thousands of pages (71k+ total). The actor walks them automatically up to your `maxItems`.
- ⚡ **No anti-bot, no DOM parsing.** Every field comes from InfoJobs' own embedded data (`__INITIAL_PROPS__`), so runs are fast and lean.
- 🏢 **Optional company enrichment** — sector, company size, description, province & country per employer (straight from InfoJobs' own company API), plus best-effort contact-email discovery for lead-gen.

### Overview

This scraper extracts job vacancies from **InfoJobs.net (Spain)**. You get a clean record per offer — identifiers, job details, company info + rating, location, compensation, requirements (experience/studies/skills/languages), benefits, and metadata (publish date, application count, internal/external apply). Designed for salary analysis, recruitment-market intelligence, job aggregation, and hiring-company lead generation.

### Supported inputs

| URL you paste | What the actor does |
|---|---|
| `https://www.infojobs.net/ofertas-trabajo` | **Listing** — all jobs, paginated |
| `https://www.infojobs.net/jobsearch/search-results/list.xhtml?...` | **Listing** (search results) |
| Category / brand / province pages (e.g. `/ofertas-trabajo/madrid`) | **Listing** for that facet |
| `https://www.infojobs.net/{city}/{slug}/of-i{id}` | **Offer detail** — routed straight to the parser |

> **Tip:** apply your filters on infojobs.net in the browser (province, category, contract, salary…), copy the URL from the address bar, and paste it into `startUrls`. The actor preserves your filter and paginates through all matches.

### Use cases

| Audience | What they get |
|---|---|
| **Compensation / HR analysts** | Salary benchmarks by role, province, contract, and experience across thousands of live vacancies |
| **Recruitment agencies** | Daily new-vacancy feeds sliced by sector or region (pair with monitoring mode) |
| **Job boards / aggregators** | A clean, normalized Spanish-jobs dataset to ingest |
| **B2B sales / lead-gen** | Companies actively hiring + optional contact-email enrichment |
| **Labour-market researchers** | Skills demand, remote-work share, and hiring trends in Spain |

### How it works

1. **Classify** each start URL as a listing or a direct offer.
2. **Read each listing's embedded results** (`__INITIAL_PROPS__.offers`, ~22 per page) and walk `?page=N` up to `maxItems` or the total page count.
3. **For each offer**, parse the embedded `__INITIAL_PROPS__.offer` into a clean record — no DOM scraping needed.
4. **Optionally enrich** each employer with its company profile (sector, size, description, province, country) and a contact email.

### Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | `["https://www.infojobs.net/ofertas-trabajo"]` | InfoJobs listing and/or offer URLs. Mix both freely. |
| `maxItems` | integer | `1000` | Hard cap on jobs collected (across all start URLs). Controls billing. |
| `maxConcurrency` | integer | `5` | Offer pages processed in parallel. Keep low (3–5) when enrichment is on. |
| `enrichOrganisation` | boolean | `false` | Add **sector, company size, description, province, country & logo** per employer (via InfoJobs' company API). |
| `enrichEmails` | boolean | `false` | Best-effort contact-email discovery per hiring company (billed per email found). |
| `monitoringMode` | boolean | `false` | Only return offers not seen on previous runs (per-user). Great for scheduled "new jobs" feeds. |
| `proxy` | object | direct | Proxy config. InfoJobs has no anti-bot, so a direct connection works; use a proxy only for very high volume. |

> **Memory:** for large runs with `enrichEmails`/`enrichOrganisation` enabled, run the actor at **2 GB+** (the default floor) — each enrichment adds an external fetch per job.

### Output sample

```json
{
  "type": "job",
  "jobId": "ed17287b0442089a71334cf1d2782f",
  "offerCode": "ed17287b0442089a71334cf1d2782f",
  "jobUrl": "https://www.infojobs.net/bilbao/tecnico-instalador-fotovoltaica/of-i...",
  "title": "Técnico/a Instalador/a Fotovoltaica y Aerotermia",
  "companyName": "OCTOPUS ENERGY ESPAÑA SOCIEDAD LIMITADA.",
  "companyProfileUrl": "https://www.infojobs.net/octopus-energy/em-i...",
  "companyId": "98...",
  "companyRating": 4.2,
  "companyRatingCount": 31,
  "city": "Bilbao",
  "province": { "id": 48, "label": "Vizcaya/Bizkaia", "slug": "vizcaya" },
  "remoteWork": "Presencial",
  "category": { "name": "Ingenieros y técnicos", "slug": "ingenieros-tecnicos" },
  "subCategory": { "name": "Electrónica", "slug": "electronica" },
  "contractType": "Indefinido",
  "workday": "Completa",
  "salary": { "min": 27000, "max": 28000, "currency": "EUR", "period": "year", "gross": true, "raw": "27.000€ - 28.000€ Bruto/año" },
  "minimumExperience": "Al menos 1 año",
  "minimumStudies": { "ongoingStudy": false, "level": "Formación Profesional Grado Medio" },
  "requiredSkills": [{ "name": "electricidad", "slug": "electricidad" }, { "name": "fotovoltaica", "slug": "fotovoltaica" }],
  "requiredLanguages": [],
  "socialBenefits": ["Flexibilidad horaria", "Teletrabajo"],
  "numberOfVacancies": 1,
  "applies": 12,
  "publishedAt": "2026-06-19T06:30:04.000Z",
  "isExternal": false,
  "applyType": "internal",
  "applyUrl": "https://www.infojobs.net/bilbao/tecnico-instalador-fotovoltaica/of-i...",
  "scrapedAt": "2026-06-19T11:00:00.000Z"
}
````

### Key output fields

| Group | Fields |
|---|---|
| **Identifiers** | `type`, `jobId`, `offerCode`, `referenceCode`, `jobUrl`, `scrapedAt` |
| **Job** | `title`, `description`, `minimumRequirements`, `desiredRequirements`, `category`, `subCategory`, `industryType`, `level`, `department` |
| **Company** | `companyName`, `companyProfileUrl`, `companyId`, `companyLogoUrl`, `companyRating`, `companyRatingCount` |
| **Company enrichment** *(opt-in)* | `companyIndustry` (sector), `companyWorkers` (size), `companyDescription`, `companyProvince`, `companyCountry` |
| **Location** | `city`, `province` (`{id,label,slug}`), `remoteWork` |
| **Compensation** | `salary` (`{min,max,currency,period,gross,raw}`) |
| **Requirements** | `minimumExperience`, `minimumStudies`, `requiredSkills[]`, `requiredLanguages[]`, `socialBenefits[]` |
| **Contract** | `contractType`, `workday`, `contractDuration`, `workingHours`, `numberOfVacancies` |
| **Metadata** | `publishedAt`, `applies` (applications received), `isExternal`, `isPromoted`, `applyType`, `applyUrl` |

### FAQ

**Which InfoJobs URLs are supported?**
Listing/search URLs (`/ofertas-trabajo`, `/jobsearch/...`, category/brand/province pages) and direct offer URLs (`/{city}/{slug}/of-i{id}`). Hosts outside `infojobs.net` are skipped.

**How many jobs can I get?**
As many as you want — InfoJobs exposes ~22 offers per page across thousands of pages (70,000+ live vacancies). The actor walks pages automatically up to `maxItems`.

**Is the salary always present?**
No — many InfoJobs offers hide the salary ("Salario no disponible"); in that case `salary` is `null`. When present it's parsed into min/max/currency/period and a `gross` flag.

**Is it just Spain?**
Yes — `infojobs.net` is the Spanish market (Adevinta). Job text and field values are in Spanish.

**Does it need a proxy?**
No. InfoJobs has no anti-bot, so the actor runs on a direct connection by default. Add a proxy only for very high-volume runs.

### Support

- For issues or feature requests, use the **Issues** tab of this actor on the Apify Console.
- Customization or questions:
  - Website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- Request customization or a whole-dataset export: <muhamed.didovic@gmail.com>
- API access (no Apify fee, usage fee only): <muhamed.didovic@gmail.com>

### Explore More Scrapers

Building a multi-country talent or salary dataset? Same author, same export format:

- **Naukri** (India jobs): [apify.com/memo23/naukri-scraper](https://apify.com/memo23/naukri-scraper)
- **StepStone** (Germany jobs): [apify.com/memo23/stepstone-search-cheerio-ppr](https://apify.com/memo23/stepstone-search-cheerio-ppr)
- **Glassdoor** (jobs + salaries): [apify.com/memo23/glassdoor-scraper-ppr](https://apify.com/memo23/glassdoor-scraper-ppr)
- Plus reviews, real-estate, and social scrapers at [memo23's Apify profile](https://apify.com/memo23).

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by InfoJobs, Adevinta, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available job-offer and company information on infojobs.net — no recruiter-only features, candidate data, or content behind a personal login. Users are responsible for ensuring their use complies with infojobs.net's Terms of Service, applicable data-protection law (GDPR, etc.), and any contractual obligations of their own organisation.

### SEO Keywords

infojobs scraper, scrape infojobs, infojobs api, infojobs.net scraper, spain jobs scraper, spanish job board scraper, infojobs data extraction, spain salary data scraper, infojobs job listings api, ofertas de trabajo scraper, spain recruitment data, spanish vacancies dataset, infojobs salary benchmark, spain hiring data, scrape spanish jobs, infojobs companies scraper, spain labour market data, adevinta jobs scraper, infojobs skills data, spain job aggregator feed

# Actor input Schema

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

Full infojobs.net URLs to crawl. Mix listing and offer URLs in the same array if useful.

## `enrichOrganisation` (type: `boolean`):

When enabled, each unique employer is looked up once via InfoJobs' company API to add `companyIndustry` (sector), `companyWorkers` (size), `companyDescription`, `companyProvince`, `companyCountry` and `companyLogoUrl`. The offer already carries the company name + rating, so disable this if you don't need the extra company fields and want to skip the extra calls.

## `enrichEmails` (type: `boolean`):

If enabled, tries to find a contact email for each hiring company by discovering its website (Clearbit) and reading its contact/about pages. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort, billed per contact email found; only charged when an email is returned, never for misses.

## `monitoringMode` (type: `boolean`):

When enabled, offers whose ID has already been delivered to you are silently skipped (no detail page is fetched and no charge applies for them). The first run after enabling monitoring returns every match — that builds your baseline. Every subsequent run returns only new postings. Combine with Apify's scheduler for a 'jobs posted since last run' feed.

## `resetMonitoringState` (type: `boolean`):

One-shot toggle: clear the saved 'jobs already seen' record at the start of this run. Use this when you change search URL, want to rebuild the baseline, or recover from a missed delivery. Has no effect when monitoring mode is off.

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

Hard cap on the number of jobs collected across all start URLs. Use this to limit billing.

## `maxConcurrency` (type: `integer`):

Maximum number of offer pages processed in parallel. Keep low (3–5) when enrichEmails/enrichOrganisation are on — each adds an extra external fetch per job. Raise it only with more memory.

## `minConcurrency` (type: `integer`):

Minimum number of offer pages processed in parallel.

## `maxRequestRetries` (type: `integer`):

Number of retries before a failed request is given up.

## `proxy` (type: `object`):

Apify proxy settings. InfoJobs has no anti-bot, so no proxy (a direct connection) usually works fine; enable a proxy only for very high-volume runs.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.infojobs.net/ofertas-trabajo"
  ],
  "enrichOrganisation": false,
  "enrichEmails": false,
  "monitoringMode": false,
  "resetMonitoringState": false,
  "maxItems": 1000,
  "maxConcurrency": 5,
  "minConcurrency": 1,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrls": [
        "https://www.infojobs.net/ofertas-trabajo"
    ],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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 = {
    "startUrls": ["https://www.infojobs.net/ofertas-trabajo"],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/infojobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.infojobs.net/ofertas-trabajo"
  ],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call memo23/infojobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/infojobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "InfoJobs $1💰 Spain Jobs · Salaries · Company Data · Search",
        "description": "Scrape every job on InfoJobs.net (Spain) — title, company + rating, salary band, location, contract, experience, required skills & languages, benefits and application counts. Any search/listing or direct offer URL; auto-paginates 70,000+ vacancies. JSON, CSV or Excel out",
        "version": "0.0",
        "x-build-id": "R7LoGCUKmsfJuoh9j"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~infojobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-infojobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~infojobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-infojobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~infojobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-infojobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "InfoJobs URLs",
                        "type": "array",
                        "description": "Full infojobs.net URLs to crawl. Mix listing and offer URLs in the same array if useful.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "enrichOrganisation": {
                        "title": "Fetch company profile (sector, size, description, location)",
                        "type": "boolean",
                        "description": "When enabled, each unique employer is looked up once via InfoJobs' company API to add `companyIndustry` (sector), `companyWorkers` (size), `companyDescription`, `companyProvince`, `companyCountry` and `companyLogoUrl`. The offer already carries the company name + rating, so disable this if you don't need the extra company fields and want to skip the extra calls.",
                        "default": false
                    },
                    "enrichEmails": {
                        "title": "Enrich with employer contact emails (experimental, billed per email)",
                        "type": "boolean",
                        "description": "If enabled, tries to find a contact email for each hiring company by discovering its website (Clearbit) and reading its contact/about pages. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort, billed per contact email found; only charged when an email is returned, never for misses.",
                        "default": false
                    },
                    "monitoringMode": {
                        "title": "Monitoring mode (only return jobs not seen on previous runs)",
                        "type": "boolean",
                        "description": "When enabled, offers whose ID has already been delivered to you are silently skipped (no detail page is fetched and no charge applies for them). The first run after enabling monitoring returns every match — that builds your baseline. Every subsequent run returns only new postings. Combine with Apify's scheduler for a 'jobs posted since last run' feed.",
                        "default": false
                    },
                    "resetMonitoringState": {
                        "title": "Reset monitoring state (one-shot)",
                        "type": "boolean",
                        "description": "One-shot toggle: clear the saved 'jobs already seen' record at the start of this run. Use this when you change search URL, want to rebuild the baseline, or recover from a missed delivery. Has no effect when monitoring mode is off.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum items to scrape",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on the number of jobs collected across all start URLs. Use this to limit billing.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of offer pages processed in parallel. Keep low (3–5) when enrichEmails/enrichOrganisation are on — each adds an extra external fetch per job. Raise it only with more memory.",
                        "default": 5
                    },
                    "minConcurrency": {
                        "title": "Min concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum number of offer pages processed in parallel.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of retries before a failed request is given up.",
                        "default": 5
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy settings. InfoJobs has no anti-bot, so no proxy (a direct connection) usually works fine; enable a proxy only for very high-volume runs.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
