eJobs.ro Scraper avatar

eJobs.ro Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
eJobs.ro Scraper

eJobs.ro Scraper

Scrape eJobs.ro, Romania's largest job board. Search by keyword, browse by city/county, browse by industry/department, or pull every open listing for a specific company. Get title, company, location, contract type, career level, industry, department, salary and posting dates.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Scrape eJobs.ro — Romania's largest online job board. Search by keyword, browse jobs by city or county, browse by industry / job department, pull every open listing for a specific company, or look up specific jobs directly by URL — with filters for contract type, career level, and education level. Get company details, salary (when published), industry/department, posting and expiration dates, and the direct link to every listing. HTTP-only, no login, no proxy required.

What this actor does

  • Five modes: search (free-text keyword), byLocation (city or county), byCategory (industry or department), byCompany (every open listing for one employer), byUrl (look up one or more specific jobs directly by their eJobs.ro URL)
  • Combinable filters & sort: search/byLocation/byCategory can each be refined with contract type, career level, education level, city, county, industry, department, and salary-disclosed-only — all at once — plus a choice of relevance (default) or newest-first sort order
  • Full Romania coverage: all 41 counties + Bucharest, 41 major cities, remote jobs, and jobs abroad
  • Optional enrichment: fetchFullDescription adds the full job description, candidate requirements, education/language requirements, and last-updated date for each job (one extra request per job); byCompany runs always include the employer's profile description, cover photo, Facebook page, and HQ address at no extra cost; outputLanguage (ro/en) switches the display text of the four finite-value facet fields
  • Empty fields are omitted — a field only appears on a record when eJobs.ro actually published a value for it (e.g. salary only shows up when the employer disclosed one)

Output per job

  • jobId, title
  • companyName, companyId, companyUrl, companyLogoUrl, companyVerified
  • location — human-readable city/county text as shown on eJobs.ro (joins multiple cities with a comma, or Toate orașele for nationwide listings)
  • cities[] — the individual city names behind location (omitted for nationwide listings)
  • positions — number of open positions for this listing
  • salary — as published by the employer (omitted when not disclosed)
  • contractTypes[] — e.g. Full time, Part time, Internship / Voluntariat
  • careerLevels[] — e.g. Entry-Level (< 2 ani), Senior-Level (> 5 ani)
  • industries[] — e.g. IT / Telecom, Comerț / Retail (as tagged by the employer)
  • departments[] — job function/department, e.g. Financiar / Contabilitate, Vânzări
  • hasVideotrue when the listing includes a video ad
  • postedDate, expirationDate — ISO 8601 UTC timestamps
  • externalApplyUrl — when the employer routes applications off-platform, the external application link (omitted for the majority of listings that use eJobs.ro's own apply flow)
  • url — the job posting's page on eJobs.ro
  • recordType: "job", scrapedAt

Only when fetchFullDescription: true (one extra request per job):

  • jobDescription — the employer's full responsibilities/duties text, HTML stripped
  • idealCandidate — the employer's full requirements/candidate-profile text, HTML stripped
  • companyDescription — the "about the employer" text, when the employer wrote one, HTML stripped (also populated for free in mode=byCompany — see below)
  • educationLevels[] — required education level(s) as published on the listing's own page, e.g. Absolvent, Studii superioare
  • languages[] — required language(s), e.g. engleză, franceză
  • counties[] — the județ/county the listing's cities belong to, e.g. Timiș
  • lastUpdatedDate — ISO 8601 UTC timestamp of the listing's last edit/republish

Only in mode=byCompany (from the employer's public company profile, no extra request):

  • companyDescription — the employer's "about us" text, HTML stripped
  • companyCoverUrl — the company profile's cover photo
  • companyFacebookUrl — the company's Facebook page, when linked on their profile
  • companyAddress, companyCity — the employer's primary HQ address/city as published
  • companyLatitude, companyLongitude — HQ coordinates, when eJobs.ro has them geocoded

Input

FieldTypeDefaultDescription
modestringsearchsearch / byLocation / byCategory / byCompany / byUrl
searchQuerystringmanagerFree-text keyword (mode=search, required; optional refine in byLocation/byCategory; unused in byCompany/byUrl)
locationstringMajor city, remote, or strainatate (abroad) (mode=byLocation, required unless county set)
countystringRomanian county / județ (mode=byLocation, required unless location set)
industrystringEmployer industry (mode=byCategory, required unless department set)
departmentstringJob function / department (mode=byCategory, required unless industry set)
contractTypestringfull-time / part-time / internship / project-based
careerLevelstringRequired seniority level
educationLevelstringRequired education level
salaryDisclosedOnlybooleanfalseOnly return listings where the employer published a salary
sortBystringrelevancerelevance or newest
companyIdintegereJobs.ro's numeric company id (mode=byCompany, required) — copy from a prior run's companyId/companyUrl output field
companySlugstringCosmetic slug from companyUrl (mode=byCompany, optional — eJobs.ro resolves the company from companyId alone)
jobUrlsarray of strings[]One or more direct eJobs.ro job-detail URLs (mode=byUrl, required) — the same format this actor's own url output field returns
fetchFullDescriptionbooleanfalseAlso fetch each job's own detail page for jobDescription, idealCandidate, companyDescription, educationLevels, languages, counties, lastUpdatedDate (one extra request per job — slower, all modes)
outputLanguagestringroro or en — display-text language for the contractTypes/careerLevels/industries/departments facet fields only
maxItemsint40Hard cap on jobs returned (1–1000)
{
"mode": "search",
"searchQuery": "python developer",
"contractType": "full-time",
"maxItems": 50
}

Example: browse Cluj-Napoca IT jobs, newest first

{
"mode": "byLocation",
"location": "cluj-napoca",
"industry": "it---telecom",
"sortBy": "newest",
"maxItems": 100
}

Example: browse an entire county by industry, entry-level only

{
"mode": "byCategory",
"industry": "medicina---sanatate",
"county": "timis-judet",
"careerLevel": "entry-level",
"maxItems": 50
}

Example: remote sales jobs

{
"mode": "byLocation",
"location": "remote",
"department": "vanzari",
"maxItems": 40
}

Example: jobs with a published salary only

{
"mode": "search",
"searchQuery": "contabil",
"salaryDisclosedOnly": true,
"maxItems": 40
}

Example: every open listing at one company

{
"mode": "byCompany",
"companyId": 314533,
"companySlug": "profi-rom-food-srl",
"maxItems": 100
}

Example: look up specific jobs by URL

{
"mode": "byUrl",
"jobUrls": [
"https://www.ejobs.ro/user/locuri-de-munca/branch-manager-targu-mures/1974317",
"https://www.ejobs.ro/user/locuri-de-munca/contabil-senior/1978711"
]
}

Example: with full job description text

{
"mode": "search",
"searchQuery": "python developer",
"fetchFullDescription": true,
"maxItems": 20
}

Example: English facet labels

{
"mode": "byLocation",
"location": "bucuresti",
"outputLanguage": "en",
"maxItems": 40
}

Use cases

  • Job-market research — track hiring demand by city, county, or industry across Romania
  • Recruitment agencies — build a live feed of openings in a specific department or career level
  • Salary benchmarking — collect published salary ranges for a role or industry
  • Lead generation — find actively hiring companies in a target industry or region
  • Labor-market dashboards — feed posting volumes and contract-type mix into analytics

FAQ

What is the data source? This actor reads the public job-listing pages of eJobs.ro (ejobs.ro). It is an independent, third-party scraper — not affiliated with or endorsed by eJobs.ro.

Do I need to log in or provide cookies? No. All fields in the output are publicly visible on eJobs.ro's search-result pages without an account.

Why do some jobs have no salary field? eJobs.ro only publishes a salary range when the employer chooses to disclose one. When it's missing, the field is omitted from the record rather than sent as null or an empty string.

Why do some jobs have cities omitted but a location of "Toate orașele"? That's eJobs.ro's own label for listings open to candidates from any city in Romania (nationwide remote-eligible or multi-city roles) — there is no single city to report.

Can I combine city and industry filters? Yes — every filter field (location, county, industry, department, contractType, careerLevel, educationLevel, salaryDisclosedOnly) can be combined with the search, byLocation, and byCategory modes and with each other in a single run. byCompany returns a company's full open-job list as-is and ignores these filters (eJobs.ro's own company page has no filter controls).

How do I find a companyId for mode=byCompany? Every job record from search/byLocation/byCategory already includes companyId and companyUrl (ejobs.ro/company/<slug>/<id>) — run one of those modes first, then feed the companyId you want into a byCompany run.

How fresh is the data? Each run fetches eJobs.ro's live search-result pages at request time — there is no caching.

What happens if a jobUrls entry has expired or was removed? That URL is skipped — eJobs.ro redirects a gone/expired job's detail page rather than serving its data, so no record is produced for it. The run's status message reports how many of the given URLs actually resolved to an active listing vs how many didn't (expired/removed, or weren't a valid eJobs.ro job-detail URL to begin with). Nothing is fabricated for a missing job.

Does fetchFullDescription slow the run down? Yes — it adds one extra HTTP request per job (the job's own detail page), so a run with maxItems: 100 makes roughly twice as many requests as the same run with fetchFullDescription off. Leave it off for fast listing-only scrapes and turn it on only when you need the full description text.

Why do only byCompany runs get companyDescription/companyCoverUrl/companyAddress? Those fields live on eJobs.ro's company-profile page, not on individual job-listing pages. byCompany mode already fetches that page to list the company's jobs, so this actor attaches the same data to every job at no extra cost. search/byLocation/byCategory don't fetch a company page per job (that would mean one extra request per unique employer per run), so those modes omit these fields — run byCompany with the companyId from any job record if you need an employer's profile details.

Does outputLanguage: "en" translate the whole record? No — only contractTypes, careerLevels, industries, departments, and the "all cities" location label are translated (eJobs.ro maintains both languages for these facets). Job titles, descriptions, salary text, and city/county names stay exactly as the employer or eJobs.ro published them — this actor never machine-translates free text.

Which job-search filters does this actor cover? Every filter axis eJobs.ro exposes on its public pages without a login: keyword, city, county, industry, department, contract type, career level, education level, salary-disclosed, sort order, per-company job listings, direct job-URL lookup, and output language (ro/en).

Are there any filters or fields this actor intentionally leaves out? Yes, a few things that aren't part of eJobs.ro's public job-search surface:

  • Minimum/maximum salary range. eJobs.ro only exposes a binary "salary disclosed or not" checkbox (salaryDisclosedOnly here) — there's no numeric min/max range to filter by.
  • CV/candidate-profile facets (language level, skill level, education type such as "Facultate" / "Masterat" / "MBA") power eJobs.ro's candidate-profile builder, not job search — applying them to a job search redirects to the homepage, so they were left out rather than offered as a filter that silently returns unfiltered results.
  • Filtering byCompany results. A company's page has its own pagination but no filter controls, so byCompany always returns the company's complete open-job list unfiltered — use search/byLocation/byCategory for filtered results.
  • Company search / directory browsing. eJobs.ro has no public "browse all companies" page — byCompany requires a companyId obtained from a prior job record (see above).
  • "Similar jobs" recommendations and a job's jobType/republishDate fields. These add no value here: similarJobs duplicates records this actor already returns for real, and every row this actor produces is by construction an active listing with a real lastUpdatedDate.
  • Login-only features (saved searches, job alerts, applying, CV upload) — this actor only reads publicly visible listing data, no account is required or used.

Is there a limit on how many jobs I can scrape per run? maxItems accepts 1–1000. Set it based on how many results your searchQuery / filter combination realistically returns. Note that eJobs.ro's own search-result pagination is capped independently of the "N Joburi" total shown on the page header — broad queries (e.g. a single common word) typically stop serving new pages around 400–500 listings even when the header advertises 700+. When this happens the run's status message reports how many records were actually delivered vs requested, so it's never a silent, unexplained shortfall.