elempleo.com is one of Colombia's largest job boards: 20,876 live offers on 30 September 2026, 13,072 of them in Bogotá. It needs no account to read, and its search is reasonably well behaved. Three things shape any scraper of it — a hard result cap, employers who hide their names, and a salary notation that has to be parsed — and a fourth shapes whether to run one at all.
The 10,000-result cap
elempleo's search returns at most 10,000 results per query. Asking for result 10,001 does not produce an empty page; the site answers with a server error. A crawler that pages until it sees an empty result will therefore see an error instead and has to decide what it means. The elempleo.com Jobs Scraper never asks past the cap.
When a request is for more than 10,000 offers and the search matches more, the Actor splits it by job area, spreads the quota fairly across the areas and removes duplicates, because one offer can belong to several areas. That makes the whole national inventory reachable in one run. The cap was observed rather than declared, so it is stated as behaviour and could change.
Every filter was tested against the site's own counter — Medellín returned 1,431 offers and the counter said 1,431 on 23 September 2026. Two parameters the site accepts and silently ignores, minimum experience and sort order, are not offered, because they would return the whole country while looking like they worked.
Parsing salary bands
elempleo publishes salaries as bands in millions of pesos with a decimal comma: “$2,5 a $3 millones”. The Actor turns that into 2500000 and 3000000 in COP, and the parse was checked against the salary in each job page's structured data — 216 of 216 matched on 30 September 2026, with the page adding one peso to the lower bound.
| Field | Filled | Why not 100% |
|---|---|---|
salary_min | 75.9% | “Salario confidencial” on 23.2% |
salary_max | 76.6% | Null for the open band “Más de $21 millones” |
salary_text | 100% | Always present, as displayed |
The distinction between a confidential salary and a missing one is kept: salary_is_confidential is true where the employer chose not to publish. Treating both as missing would bias any average toward the employers willing to disclose.
Confidential employers
31.5% of 1,000 offers were published as confidential. The site shows a placeholder employer name and a default logo on those. The Actor returns company_name: null, company_logo_url: null and is_confidential: true, and keeps the placeholder in company_display_name. Passing the default logo off as the company's would quietly attribute a third of the offers to a company that does not exist.
When to read the full job page
Search results cut descriptions at about 2,000 characters, sometimes mid-word: 159 of 1,000 offers, flagged by description_is_truncated. The full job page, read with scrapeDetails, returned 0 of 300 truncated and adds 32 fields: expiry date, education, experience, vacancies and position level on every page; education level on 90.0%; work schedule on 75.0%; company description on 34.7%. It also exposes recruitment contacts employers write into offers — phones on 4.3% and emails on 4.0% of 300 pages; search results hide emails.
Those contacts were published by employers for applicants: only registered company accounts can publish on elempleo, and 494 of 494 measured offers came from one. Nothing about candidates is collected, and account, CV and application paths are blocked in the code.
{
"searchQuery": "desarrollador",
"workModality": "remote",
"maxItems": 200,
"scrapeDetails": true
}robots.txt, terms and Ley 1581
elempleo.com/robots.txt has 62 disallow rules for all crawlers, none of which match the search or offer paths the Actor uses; it does disallow /busqueda?, which the Actor does not use. It blocks several named job aggregators completely, LinkedIn's crawler among them. Its closing comments go further than its rules: they state that using any tool to extract the content by automated means is prohibited without ELEMPLEO's prior written permission, and list text and data mining, building software or AI models, providing cached datasets to others, and any commercial purpose as prohibited uses. The terms bar unauthorised commercial use of the site.
A robots.txt comment is not a machine-readable rule, but it is a plain statement of the site's position, and it is reported here as such — why robots.txt is read as a specification. LinkedIn is the other source in this cluster whose published position is a refusal — LinkedIn's rules. Where the contacts in an offer belong to a person, Colombia's Ley Estatutaria 1581 de 2012 on personal data protection is the instrument that applies.
What it costs
An offer is $0.0007, so 1,000 offers are $0.70 and the whole national inventory about $14.60. The full job page adds $0.00004 per offer, charged only when the page was read. An empty input returns the 50 newest offers for about $0.035. How elempleo fits beside the other four boards is in the cluster overview, and why every rate above carries its sample is in measured fill rates, not promises.
