eJobs.ro Scraper
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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/byCategorycan 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:
fetchFullDescriptionadds the full job description, candidate requirements, education/language requirements, and last-updated date for each job (one extra request per job);byCompanyruns 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.
salaryonly shows up when the employer disclosed one)
Output per job
jobId,titlecompanyName,companyId,companyUrl,companyLogoUrl,companyVerifiedlocation— human-readable city/county text as shown on eJobs.ro (joins multiple cities with a comma, orToate orașelefor nationwide listings)cities[]— the individual city names behindlocation(omitted for nationwide listings)positions— number of open positions for this listingsalary— as published by the employer (omitted when not disclosed)contractTypes[]— e.g.Full time,Part time,Internship / VoluntariatcareerLevels[]— 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ărihasVideo—truewhen the listing includes a video adpostedDate,expirationDate— ISO 8601 UTC timestampsexternalApplyUrl— 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.rorecordType: "job",scrapedAt
Only when fetchFullDescription: true (one extra request per job):
jobDescription— the employer's full responsibilities/duties text, HTML strippedidealCandidate— the employer's full requirements/candidate-profile text, HTML strippedcompanyDescription— 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 superioarelanguages[]— 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 strippedcompanyCoverUrl— the company profile's cover photocompanyFacebookUrl— the company's Facebook page, when linked on their profilecompanyAddress,companyCity— the employer's primary HQ address/city as publishedcompanyLatitude,companyLongitude— HQ coordinates, when eJobs.ro has them geocoded
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search / byLocation / byCategory / byCompany / byUrl |
searchQuery | string | manager | Free-text keyword (mode=search, required; optional refine in byLocation/byCategory; unused in byCompany/byUrl) |
location | string | – | Major city, remote, or strainatate (abroad) (mode=byLocation, required unless county set) |
county | string | – | Romanian county / județ (mode=byLocation, required unless location set) |
industry | string | – | Employer industry (mode=byCategory, required unless department set) |
department | string | – | Job function / department (mode=byCategory, required unless industry set) |
contractType | string | – | full-time / part-time / internship / project-based |
careerLevel | string | – | Required seniority level |
educationLevel | string | – | Required education level |
salaryDisclosedOnly | boolean | false | Only return listings where the employer published a salary |
sortBy | string | relevance | relevance or newest |
companyId | integer | – | eJobs.ro's numeric company id (mode=byCompany, required) — copy from a prior run's companyId/companyUrl output field |
companySlug | string | – | Cosmetic slug from companyUrl (mode=byCompany, optional — eJobs.ro resolves the company from companyId alone) |
jobUrls | array 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 |
fetchFullDescription | boolean | false | Also fetch each job's own detail page for jobDescription, idealCandidate, companyDescription, educationLevels, languages, counties, lastUpdatedDate (one extra request per job — slower, all modes) |
outputLanguage | string | ro | ro or en — display-text language for the contractTypes/careerLevels/industries/departments facet fields only |
maxItems | int | 40 | Hard cap on jobs returned (1–1000) |
Example: keyword search
{"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 (
salaryDisclosedOnlyhere) — 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
byCompanyresults. A company's page has its own pagination but no filter controls, sobyCompanyalways returns the company's complete open-job list unfiltered — usesearch/byLocation/byCategoryfor filtered results. - Company search / directory browsing. eJobs.ro has no public "browse all companies" page
—
byCompanyrequires acompanyIdobtained from a prior job record (see above). - "Similar jobs" recommendations and a job's
jobType/republishDatefields. These add no value here:similarJobsduplicates records this actor already returns for real, and every row this actor produces is by construction an active listing with a reallastUpdatedDate. - 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.