ActorStack.dev

How to scrape elempleo.com job offers in Colombia

elempleo.com caps every search at 10,000 results, hides some employers and publishes salaries as bands with a decimal comma. How each of those is handled, and what the site's robots.txt and terms say.

By Oswaldo Carabano7 min read

Short answer

elempleo.com, a Colombian job board with 20,876 live offers on 30 September 2026, can be read without an account, but three behaviours shape any scraper. Each search stops at 10,000 results and returns a server error past that, so large pulls must be split by job area; 31.5% of 1,000 offers hide the employer's name; and salaries are bands such as "$2,5 a $3 millones" that need parsing. The elempleo.com Jobs Scraper parses those bands into COP on 75.9% of offers, matched against the page's structured data on 216 of 216. elempleo's robots.txt allows the paths read, but its comments state that automated extraction without written permission is prohibited.

Key points

  • elempleo.com search returns at most 10,000 results per query and answers a request for result 10,001 with a server error.
  • 31.5% of 1,000 elempleo.com offers measured on 30 September 2026 were published as confidential, without the employer's name.
  • elempleo.com salary bands parsed into COP matched the job page's structured data on 216 of 216 offers checked.
  • elempleo.com search results truncate long descriptions at about 2,000 characters on 159 of 1,000 offers; the job page has the full text.
  • elempleo.com's robots.txt, fetched on 10 October 2026, allows the search and offer paths but states that automated extraction needs prior written permission.
On this page6 sections

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.

FieldFilledWhy not 100%
salary_min75.9%“Salario confidencial” on 23.2%
salary_max76.6%Null for the open band “Más de $21 millones”
salary_text100%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.

input.json
{
  "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.

Frequently asked questions

Can I get every job offer in Colombia from elempleo?
Yes, by splitting past the 10,000-result cap. The elempleo.com Jobs Scraper divides a larger search by job area, spreads the quota across areas and removes offers that appear in more than one, so 20,876 offers can be read in one run.
Why do some keywords get rejected?
elempleo's firewall blocks searches that look like web addresses or code and then refuses requests for minutes. The Actor accepts only letters, numbers, spaces and a few punctuation marks, which still covers searches like `C#`.
Who publishes the contact details in an offer?
Employers. Only registered company accounts can publish offers on elempleo, and 494 of 494 offers measured on 23 September 2026 came from a company account. Phones appeared on 4.3% and emails on 4.0% of 300 full job pages.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Site declarationchecked 10 Oct 2026
    elempleo.com/robots.txtelempleo.com
  2. Operator claimchecked 10 Oct 2026
    elempleo.com — Términos y condicioneselempleo.com
  3. Law or regulatorchecked 10 Oct 2026
    Ley Estatutaria 1581 de 2012 — protección de datos personalesCongreso de Colombia (via Régimen Legal de Bogotá)
  4. Operator claimchecked 10 Oct 2026
    elempleo.com Jobs Scraper — Actor README and input schemaActorStack / Apify Store
A laptop screen showing a plain text-mode terminal with a command prompt.
Tech jobsGuide

Tech job postings dataset

Get on Board, Torre, LinkedIn, Hacker News and elempleo.com publish job postings in five different shapes. What each source gives you, what it leaves out, and what each one says about being read by a machine.

8 min
A laptop screen showing a plain text-mode terminal with a command prompt.
Tech jobsGuide

Get on Board API

Get on Board documents a public API that needs no key. What it returns, how it pages, and why its salary is a monthly USD conversion rather than the number the company posted.

7 min
A laptop screen showing a plain text-mode terminal with a command prompt.
Tech jobsGuide

HN Who is Hiring data

The monthly Who is Hiring thread is free text with a convention. How it becomes rows, how often each field can be parsed, and what is withheld because some posts are people.

7 min