# 💼 eJobs Romania Scraper | Jobs & Salaries (`antique_sundew/ejobs-scraper`) Actor

Scrape eJobs.ro job listings, salaries, hiring company profiles, locations, and requirements. Fast HTTP scraper for Romanian job market analytics and HR leads.

- **URL**: https://apify.com/antique\_sundew/ejobs-scraper.md
- **Developed by:** [Alexandru Afanasiuc](https://apify.com/antique_sundew) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 job scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## eJobs.ro Scraper — Romania Jobs, Salaries, Companies & Cities

Extract structured job listings from **eJobs.ro, Romania's largest job board**, in seconds. Search by keyword and city, and get clean JSON/CSV with titles, companies, disclosed salaries, locations, posting dates and direct application links — no browser, no login, no proxies to configure.

### Why use this scraper

- **Verified keyword filter** — a query eJobs does not recognise returns **zero rows**, never the unfiltered national feed. You are never billed for jobs you did not ask for.
- **Salary parsing built in** — `salaryMin`, `salaryMax` and `salaryCurrency` are extracted from the posting text; `null` when the employer did not disclose them, never guessed.
- **City filtering that works** — pass city names (`Bucuresti`, `Cluj-Napoca`, `Iasi`...) or eJobs numeric city IDs; unknown cities return zero rows instead of everything.
- **Pure HTTP** — fast and cheap to run; a typical 100-job search finishes in under a minute.
- **Company details included** — company name, verified-employer flag, company page URL and logo.
- **Diacritics fixed** — Romanian text comes out as `inginerie` and `București`, not mojibake.

### What data you get

Every row in the dataset has this exact shape:

```json
{
  "id": 1712345,
  "title": "Java Software Engineer",
  "url": "https://www.ejobs.ro/user/locuri-de-munca/java-software-engineer/1712345",
  "company": {
    "id": 45678,
    "name": "Example Tech SRL",
    "verified": true,
    "url": "https://www.ejobs.ro/companii/example-tech",
    "logoUrl": "https://www.ejobs.ro/uploads/logo.png"
  },
  "salaryText": "8000 - 12000 RON net",
  "salaryMin": 8000,
  "salaryMax": 12000,
  "salaryCurrency": "RON",
  "locations": ["Bucuresti", "Cluj-Napoca"],
  "positions": 2,
  "postedAt": "2026-08-01",
  "expiresAt": "2026-08-31",
  "industries": ["IT Software"],
  "careerLevels": ["Mid-Level (2-5 ani)"],
  "scrapedAt": "2026-08-11T10:00:00.000Z"
}
```

Fields the posting does not include are `null` — this Actor never invents data.

### How to run it

1. Set your `keywords` (e.g. `["developer"]`, `["contabil"]`, `["inginer"]`).
2. Optionally add `cities` and `onlyWithSalary`.
3. Click **Start**. Results land in the dataset, exportable as JSON, CSV or Excel, or readable via the [Apify API](https://docs.apify.com/api/v2).

Works out of the box: the default input (`keywords: ["developer"]`, `maxItems: 100`) runs successfully with no changes.

### Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `keywords` | array | `["developer"]` | Search terms. Empty array = all recent jobs. |
| `cities` | array | — | City names, e.g. `["Bucuresti", "Timisoara"]`. |
| `cityIds` | array | — | eJobs numeric city IDs, if you prefer them. |
| `maxItems` | integer | `100` | Cap on returned jobs. |
| `onlyWithSalary` | boolean | `false` | Keep only postings with a disclosed salary. |

### Pricing

**$3.00 per 1,000 jobs** (pay per event, no subscription). Examples:

- 100 jobs → **$0.30**
- 500 jobs → **$1.50**
- Zero results (unrecognised keyword or city) → **$0.00** — you are never charged for an empty run.

### Use cases

- **Job alerts** — run daily with your keywords and get new postings into Slack, email or Google Sheets.
- **Salary research** — filter `onlyWithSalary` and compare `salaryMin`/`salaryMax` across cities or industries.
- **Recruitment intelligence** — track which companies are hiring, how many positions they open and how long postings stay up.
- **Lead generation** — companies actively hiring are companies actively growing.
- **AI agents** — call this Actor as a tool through the [Apify MCP server](https://mcp.apify.com/?actors=antique_sundew/ejobs-scraper); the input schema is exposed automatically.

### Limitations

- Only data that eJobs.ro publishes publicly is returned; there is no login and no access to candidate data.
- Salary is parsed from the public posting text; when the employer hides it, the salary fields are `null`.
- Very broad searches are capped by `maxItems` (raise it if you need more).

### FAQ

**How do I scrape eJobs.ro without coding?**
Run this Actor from the Apify Console — set keywords, press Start, export CSV. No code needed.

**Does it return salaries?**
Yes, whenever the posting discloses one: raw text plus parsed min/max/currency. Set `onlyWithSalary: true` to keep only those rows.

**Can I filter by city?**
Yes — `cities` takes plain names and matches them to eJobs city IDs automatically.

**What happens if my keyword matches nothing?**
You get zero rows and pay nothing. The filter is verified: unrecognised queries never fall back to the full feed.

**Can I schedule it?**
Yes — use Apify Schedules to run it hourly/daily and connect the dataset to Google Sheets, Make, Zapier or a webhook.

### Related Actors

- [BestJobs.eu Scraper](https://apify.com/antique_sundew/bestjobs-scraper) — Romania & EU listings with applicant counts
- [StepStone NL/AT/BE/UK Scraper](https://apify.com/antique_sundew/stepstone-nl-scraper) — four markets from one input
- [Pracuj.pl Scraper](https://apify.com/antique_sundew/pracuj-scraper) — Poland's largest job board
- [InfoJobs.net Scraper](https://apify.com/antique_sundew/infojobs-scraper) — Spain's leading job board

***

If this Actor saved you time, a short review on its Store page helps other people find it. If something looks wrong, open an issue on the **Issues** tab — issues get answered.

# Actor input Schema

## `keywords` (type: `array`):

Keywords to search for (e.g. \['developer', 'marketing', 'inginer']). Leave empty to scrape all recent jobs.

## `cities` (type: `array`):

Filter by city names (e.g. \['Bucuresti', 'Cluj-Napoca', 'Timisoara', 'Iasi', 'Brasov']).

## `cityIds` (type: `array`):

Filter by eJobs numeric city IDs (e.g. \[1, 14, 34]). Optional if using city names above.

## `maxItems` (type: `integer`):

Maximum number of job listings to return.

## `onlyWithSalary` (type: `boolean`):

Filter results to only include jobs with disclosed salary ranges.

## Actor input object example

```json
{
  "keywords": [
    "developer"
  ],
  "maxItems": 100,
  "onlyWithSalary": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("antique_sundew/ejobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("antique_sundew/ejobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call antique_sundew/ejobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,antique_sundew/ejobs-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1K9kCMhfsK7j66y3c/builds/zDumUoXQRoO6LVgxW/openapi.json
