
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape job offers from InfoJobs.net, Spain's largest job board: title, company and rating, province and city, salary range, contract, workday, remote or on-site, experience, studies, skills, languages, applicants, publish date and full description. Search by keyword, province and filters, or paste InfoJobs URLs. No login needed.
Get job offers from InfoJobs.net, Spain's largest job board, as clean structured data: title, company and rating, province and city, salary range, contract, workday, remote or on-site, experience, studies, skills, languages, benefits, applicant count, publish date and the full description. Search by keyword and province with InfoJobs' own filters, or paste any InfoJobs search or offer link. No login, no cookies, and you pay only for the offers you save.
/ofertas-trabajo/madrid and single offer pages all work; filters in the URL are kept.camarero, administrativo, python), or paste InfoJobs URLs.| Field | What it does |
|---|---|
searchKeywords | Job titles or skills; each keyword is its own search. Empty with no URLs = newest offers in all of Spain. |
startUrls | InfoJobs search URLs, SEO listing pages (/ofertas-trabajo/...) or offer pages (.../of-i<code>). |
maxResults | Maximum offers to save in total (0 = no limit, up to 100,000). |
provinces, cities | Province names or ids (accents and case don't matter) and city names. |
categories, contractTypes, workdays, workplaceTypes, education | InfoJobs filter values (pick from the lists). |
minExperience, minSalary, salaryPeriod, postedWithin | Minimum experience, minimum gross salary and period, recency. |
sortBy | Relevance or newest first. |
includeDetails | Full offer details (default on). Off = quicker list with search-card fields only. |
includeDescriptionHtml | Also keep the original description HTML. |
maxResultsPerSearch | Per keyword or URL cap. |
{
"searchKeywords": ["administrativo", "contable"],
"provinces": ["Madrid", "Barcelona"],
"contractTypes": ["1"],
"minSalary": 24000,
"salaryPeriod": "year",
"postedWithin": "7d",
"maxResults": 200
}
One row per job offer. Main fields:
| Field | Description |
|---|---|
id, title, jobUrl | Offer code, job title and offer page |
company, companyRating, companyReviewCount, companyUrl, companyLogo | Employer and its InfoJobs rating |
location, city, province, postalCode, country | Where the job is |
workplaceType, teleworking, isRemote | onsite, hybrid or remote |
contractType, workday, level, category, subcategory, industry | Job classification |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryGross, salaryText | Parsed salary |
minExperience, minStudies, requiredSkills, requiredLanguages, minimumRequirements, desiredRequirements | Requirements |
socialBenefits, numberOfVacancies, applications | Benefits, vacancies and applicants so far |
postedAt, isNew, isPromoted, isExternal, applyType | Status of the offer |
descriptionText, descriptionHtml | Full description |
Example (trimmed, values illustrative):
{
"id": "15dd4aea17489c9822b23b7163af6c",
"title": "Full Stack Developer React / Python",
"company": "Example Consulting S.L.",
"companyRating": 4.33,
"companyReviewCount": 93,
"location": "Alcobendas, Madrid",
"city": "Alcobendas",
"province": "Madrid",
"postalCode": "28100",
"workplaceType": "hybrid",
"category": "Informática y telecomunicaciones",
"subcategory": "Programación",
"contractType": "Indefinido",
"workday": "Completa",
"level": "Empleado/a",
"salaryMin": 33000,
"salaryMax": 54000,
"salaryCurrency": "EUR",
"salaryPeriod": "year",
"salaryGross": true,
"salaryText": "33.000€ - 54.000€ Bruto/año",
"minExperience": "Al menos 3 años",
"minStudies": "Ciclo Formativo Grado Medio",
"requiredSkills": ["Python", "React", "FastAPI", "GCP", "SQL"],
"requiredLanguages": [{"language": "Inglés", "level": "Avanzado"}],
"applications": 58,
"postedAt": "2026-10-13T08:46:23Z",
"isExternal": false,
"jobUrl": "https://www.infojobs.net/alcobendas/full-stack-developer-react-python/of-i15dd4aea17489c9822b23b7163af6c",
"descriptionText": "Buscamos un/a Full Stack Developer con experiencia en React y Python..."
}
You pay $0.70 per 1,000 offers saved ($0.0007 per offer), plus the small platform usage of the run (compute and proxy traffic). There is no start fee.
Example: 1,000 offers with full details ≈ $0.70 in results plus about $0.01 of usage (measured: 1,000 offers took under a minute and about 7 MB of datacenter proxy traffic).
Is it legal to scrape InfoJobs? The actor reads only public job offers that anyone can see without an account. Make sure your use of the data follows the GDPR and InfoJobs' terms, especially if you store or contact people.
Do I need an InfoJobs account or my own proxy? No. Datacenter proxies are used by default; if InfoJobs refuses them, the run switches to Spanish residential proxies by itself.
How many results can I get? As many as InfoJobs lists for your search: the whole site has tens of thousands of live offers and deep pagination works. When a search has fewer offers than your limit, the run stops cleanly and says so.
Why is a field empty? Employers fill different fields. Many offers say "Salario no disponible", so salaryMin and salaryMax stay empty and salaryText keeps the original wording. With includeDetails off, only the search-card fields are filled.
Can I schedule it or use the API? Yes. Schedule daily runs with "Published within: last 24 hours" for a new-offers feed, and read results through the API or integrations.
Can I scrape a company's page? Paste a search for the company name as a keyword. Company sub-sites (<company>.ofertas-trabajo.infojobs.net) aren't read directly yet.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
searchKeywordsarrayOptionalSearch keywords
Job titles or skills to search for, like camarero, administrativo or python. Each keyword is a separate search. Leave empty (and add no URLs) to get the newest offers in all of Spain.
startUrlsarrayOptionalInfoJobs URLs
Optional infojobs.net links: search pages copied from your browser (https://www.infojobs.net/jobsearch/search-results/list.xhtml?keyword=...), SEO pages such as https://www.infojobs.net/ofertas-trabajo/madrid or /ofertas-trabajo/informatica-telecomunicaciones/barcelona, and single offer pages (.../of-i). Filters in the URL are kept.
maxResultsintegerOptionaldefault 20Max results
Maximum number of job offers to save across all searches. Use 0 for no limit (up to 100,000).
All filters are optional and are applied by InfoJobs itself. Within one filter any value matches; different filters combine with AND. They apply to keywords and to URLs that don't set the same filter.
provincesarrayOptionalProvinces
Spanish provinces by name (Madrid, Barcelona, Valencia, Vizcaya, A Coruña...) or InfoJobs province id. Accents and case don't matter.
citiesarrayOptionalCities
City names as InfoJobs writes them, for example Madrid, Bilbao, Alcobendas or Palma de Mallorca.
categoriesarrayOptionalCategories
Job categories (sectors).
contractTypesarrayOptionalContract types
Type of contract.
workdaysarrayOptionalWorkday
Full-time, part-time or intensive schedules.
workplaceTypesarrayOptionalOn-site, hybrid or remote
Where the work happens.
educationarrayOptionalMinimum studies
Required education level.
minExperienceenumOptionalMinimum experience
Offers that ask for at least this much experience (up to 10 years).
minSalaryintegerOptionalMinimum salary (EUR, gross)
Only offers whose published salary reaches this amount, in euros gross for the period below. Offers without a published salary are left out when this is set.
salaryPeriodenumOptionaldefault "year"Salary period
Period of the minimum salary.
postedWithinenumOptionaldefault "any"Published within
Only offers published or updated recently.
sortByenumOptionaldefault "relevance"Sort by
Relevance is InfoJobs' default for keyword searches; searches without a keyword are always sorted by date.
includeDetailsbooleanOptionaldefault trueInclude full offer details
Open every offer for salary, experience, studies, skills, languages, benefits, applicant count, category, company rating and the full description. Turn off for a faster list with only the search-card fields.
includeDescriptionHtmlbooleanOptionaldefault falseInclude description HTML
Also save the original description HTML next to the plain-text description.
maxResultsPerSearchintegerOptionaldefault 0Max results per search
Cap per keyword or URL, so one broad search doesn't use up the whole limit. 0 means no per-search cap.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are the default and work for InfoJobs' public job data. If InfoJobs blocks them, the run switches to Spanish residential proxies by itself.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | null | InfoJobs offer code |
| title | string | null | Job title |
| company | string | null | Company name |
| companyId | string | null | InfoJobs company profile code |
| companyLogo | string | null | Company logo URL |
| companyUrl | string | null | Company page on InfoJobs |
| companyRating | number | null | Average company rating (1-5) |
| companyReviewCount | number | null | Number of company reviews |
| location | string | null | City and province |
| city | string | null | City |
| province | string | null | Province |
| provinceId | number | null | InfoJobs province id |
| postalCode | string | null | Postal code of the job |
| country | string | null | Country |
| workplaceType | string | null | onsite, hybrid or remote |
| teleworking | string | null | Work mode as written on InfoJobs |
| isRemote | boolean | null | True for fully remote jobs |
| category | string | null | Category |
| subcategory | string | null | Subcategory |
| contractType | string | null | Contract type |
| workday | string | null | Workday (full-time, part-time...) |
| level | string | null | Position level |
| department | string | null | Department |
| industry | string | null | Company industry |
| numberOfVacancies | number | null | Number of vacancies |
| contractDuration | string | null | Contract duration |
| workingHours | string | null | Working hours |
| salaryMin | number | null | Minimum salary |
| salaryMax | number | null | Maximum salary |
| salaryCurrency | string | null | Salary currency |
| salaryPeriod | string | null | year, month, hour or day |
| salaryGross | boolean | null | True for gross salary, false for net |
| salaryText | string | null | Salary as shown on InfoJobs |
| minExperience | string | null | Minimum experience |
| minStudies | string | null | Minimum studies |
| studiesDetail | string | null | Studies detail |
| requiredSkills | array | null | Required skills |
| requiredLanguages | array | null | Required languages with level |
| minimumRequirements | string | null | Minimum requirements text |
| desiredRequirements | string | null | Desired requirements text |
| socialBenefits | array | null | Social benefits |
| applications | number | null | Number of applicants so far |
| normalizedJobTitle | string | null | InfoJobs normalized job title |
| referenceCode | string | null | Employer reference code |
| postedAt | string | null | Publication or last update time (UTC) |
| isNew | boolean | null | Marked as new |
| isPromoted | boolean | null | Promoted listing |
| isExecutive | boolean | null | Executive offer |
| isExternal | boolean | null | Apply on the employer's site |
| applyType | string | null | internal or external |
| jobUrl | string | null | Offer page |
| applyUrl | string | null | Where to apply |
| descriptionText | string | null | Full description as plain text |
| descriptionHtml | string | null | Full description HTML (optional) |
| detailsIncluded | boolean | null | True when the full offer details were loaded |
| source | string | null | Keyword or URL that found the offer |
| scrapedAt | string | null | Scrape time (UTC) |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Job offer | One saved InfoJobs job offer. | $0.0007 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/infojobs-scraper').call({
"searchKeywords": [
"python"
],
"startUrls": [],
"maxResults": 20,
"provinces": [],
"cities": [],
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/infojobs-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/infojobs-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
InfoJobs offers with details and formatted descriptions.
Recent offers with monthly salary info.
Quick list of InfoJobs offers for a keyword.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.