# Profession.hu Hungary Jobs Scraper (`automation-lab/profession-hu-hungary-jobs`) Actor

Extract public Profession.hu Hungary vacancy cards by location/category listing URL; export stable job IDs, employer, title, location, posting context and canonical URL.

- **URL**: https://apify.com/automation-lab/profession-hu-hungary-jobs.md
- **Developed by:** [Automation Lab](https://apify.com/automation-lab) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.96 / 1,000 item extracteds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Profession.hu Hungary Jobs Scraper

Export public **profession.hu vacancies** from location and category listing pages into a repeatable dataset of stable job IDs, job titles, employers, displayed locations, posting context, and canonical vacancy URLs. Start with Budapest or paste a current Profession.hu listing URL for another supported location/category combination. Use the dataset for recruitment research, not as a claim that every available vacancy has been indexed.

### Who is it for?

- Recruiters collecting current Budapest hiring leads across employers.
- Labor-market researchers sampling a specific Profession.hu category and location.
- Talent operations teams refreshing a bounded hiring feed and comparing stable job IDs across runs.

### Why use this scraper?

Profession.hu job cards contain both display text and stable vacancy IDs. This Actor exports the displayed listing data in one consistent dataset, follows available listing-page navigation, drops duplicates across supplied URLs, and stops at the specified result limit. It does not invent undisclosed compensation or infer a calendar year for relative posting labels.

### Getting started

1. Use the prefilled Budapest listing URL or navigate on Profession.hu to the category/location listing you need and paste its `/allasok/` URL.
2. Set `maxItems` to the number of vacancies you need (1–1000). The default is 20.
3. Run the Actor and inspect the default dataset's **Vacancies** view.
4. Export CSV/JSON or schedule the same input in Apify to compare datasets over time.

### Input parameters

| Field | Meaning |
| --- | --- |
| `startUrls` | Optional list of public HTTPS `www.profession.hu/allasok/` listing URLs. Each URL retains its original location and category scope. Blank uses the Budapest listing. Maximum 20 URLs. |
| `maxItems` | Maximum unique jobs across all pages and URLs, default 20, maximum 1000. |

Example for the public Budapest IT category:

```json
{"startUrls":[{"url":"https://www.profession.hu/allasok/it-programozas-fejlesztes/budapest/1,10,23"}],"maxItems":5}
```

Only source listing URLs are supported, not arbitrary websites, individual job detail URLs, free-text keyword inputs or private account pages. To change filters, use the corresponding listing URL generated by Profession.hu. Filters are never silently applied to a different URL.

### Which vacancy fields are returned?

| Field | Description |
| --- | --- |
| `jobId` | Stable numeric Profession.hu vacancy ID as a string. |
| `title` | Job title on the listing card. |
| `employer` | Employer attribution displayed in the card metadata. |
| `location` | Displayed work location text. |
| `category` | Displayed category metadata, if present. |
| `postedText` | Displayed Hungarian posting text, if present; not an inferred ISO date. |
| `salaryText` | Salary text only when a listing card exposes one; otherwise null. |
| `url` | Canonical Profession.hu job URL, without the sponsored suffix. |
| `listingUrl` | Listing page where this job was found. |
| `scrapedAt` | Timestamp when the run read the job. |

Example from the Budapest public listing (values change as vacancies expire):

```json
{"jobId":"2998760","title":"Elektronikai műszerész","employer":"NIVELCO zRt.","location":"Budapest IV.kerület","category":"Szakmunka","postedText":"feladva: Szeptember 11.","salaryText":null,"url":"https://www.profession.hu/allas/elektronikai-muszeresz-nivelco-zrt-budapest-2998760","listingUrl":"https://www.profession.hu/allasok/budapest/1,0,23","scrapedAt":"2026-09-29T06:10:34.090Z"}
```

The default dataset is the primary output; the **Vacancies** view provides a ready-to-export table.

### How much does it cost to export Profession.hu vacancies?

Pay-per-event billing has a one-time `start` event per run and an `item` event for each emitted vacancy. The start event is $0.005 and the BRONZE item price is $0.0016 per vacancy. For five items, the one-time start fee plus five item events applies; for twenty items, the same start fee plus twenty item events applies. Your spend tier selects the per-item rate. Check the live pricing panel for your plan and current tier before running; platform usage is separate from event pricing. A rejected, duplicate, or unavailable vacancy is not charged as an item.

### Pagination and limits

The Actor follows the site's next-page link from each supplied listing URL and stops on `maxItems`, missing navigation or a repeated page. If two source URLs contain the same job ID, only the first matching card is exported. Explicitly supplied listing URLs retain their own location and category scopes; the Actor never merges filter combinations across URLs. A sponsored card contributes the underlying canonical vacancy URL, not a second copy of the same job.

### Refreshing a hiring feed

Schedule the same input as an Apify Task, export each run's dataset, and join by `jobId` to identify newly appearing and absent cards. `scrapedAt` is the collection timestamp, not the original publication date. The Actor itself does not persist history, email alerts, or change reports. If a listing is promoted across pages, deduplication retains only the first appearance in that run.

### Integrations

Use the Apify dataset API, webhooks, and integrations to send normalized rows to Google Sheets, Make, Zapier, a data warehouse, or an internal ATS review queue. Do not treat exported records as permission to contact candidates or employers in ways that violate their policies. For repeatable workflows, save one Task per listing scope and configure a schedule in Apify.

### API usage

Replace `YOUR_TOKEN` with your own Apify token. The `run-sync-get-dataset-items` endpoint returns the default dataset rows:

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~profession-hu-hungary-jobs/run-sync-get-dataset-items?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' -d '{"maxItems":5}'
```

JavaScript:

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/profession-hu-hungary-jobs').call({ maxItems: 5 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python:

```python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/profession-hu-hungary-jobs').call(run_input={'maxItems': 5})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### MCP use

Add this Actor to Claude Code as an Apify MCP tool:

```bash
claude mcp add --transport http apify \
  'https://mcp.apify.com?tools=automation-lab/profession-hu-hungary-jobs'
```

For Claude Desktop, Cursor, or VS Code, use the MCP server JSON configuration `{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/profession-hu-hungary-jobs"}}}` in that client's MCP settings. Example prompts: “Export five Budapest IT development vacancies and return their employers and job IDs” and “Refresh 30 Budapest vacancy records with source URLs for comparison.” Provide your own Apify authorization through the MCP client as required.

### Scope and limits

This reads public server-rendered search-result cards, not full individual vacancy descriptions or application forms. Source listings can change order and disappear. A URL with no matching public jobs may return an empty dataset. Sites may change markup, rate-limit access, or display security challenges; the Actor fails on unrecognized pages rather than treating them as empty results. Transient server/network failures receive two bounded retries. No account, cookies, proxy, or residential fallback is used.

### Legality and responsible use

Collect only publicly displayed listing information at reasonable volume. Follow Profession.hu terms and applicable law, particularly for downstream recruitment processing and retention. Avoid overloading the source; this tool neither bypasses login nor collects candidate personal data. This independently produced tool is not affiliated with or endorsed by Profession.hu. No AI provider receives input or output; no paid external API is used. Output stays in your run's default Apify dataset subject to your account's storage retention/deletion settings, with no additional cross-run cache. For assistance use the Apify Store issue form on this Actor.

### FAQ and troubleshooting

**Why is `salaryText` null?** Most public cards do not display a salary; the Actor does not estimate one.

**Why did a run fail with “unrecognized listing page”?** The upstream markup may have changed or an access challenge was served. Check the listing URL in a browser and retry later; do not interpret an access challenge as no vacancies.

**Why did I get fewer items than `maxItems`?** The selected source scope may have fewer available cards or the available pagination ended. Supply additional current listing URLs if you need another category or city.

### Related tools

For a different regional hiring source, see [Karriere.at Austria Job Listings Scraper](https://apify.com/automation-lab/karriere-at-austria-job-listings-scraper) and [Jobup.ch Swiss Job Listings Scraper](https://apify.com/automation-lab/jobup-ch-swiss-job-listings-scraper). Those Actors do not replace this Hungary-specific source.

# Changelog

This Actor's version history is a separate document: https://apify.com/automation-lab/profession-hu-hungary-jobs/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Optional public https://www.profession.hu/allasok/ pages; location and category filters in each source URL are preserved. Leave blank for Budapest.

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

Maximum unique jobs exported across all listing URLs. Pagination stops at this limit.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.profession.hu/allasok/budapest/1,0,23"
    }
  ],
  "maxItems": 20
}
```

# Actor output Schema

## `overview` (type: `string`):

Public Profession.hu vacancy rows in the default dataset overview view.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.profession.hu/allasok/budapest/1,0,23"
        }
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/profession-hu-hungary-jobs").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 = {
    "startUrls": [{ "url": "https://www.profession.hu/allasok/budapest/1,0,23" }],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/profession-hu-hungary-jobs").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 '{
  "startUrls": [
    {
      "url": "https://www.profession.hu/allasok/budapest/1,0,23"
    }
  ],
  "maxItems": 20
}' |
apify call automation-lab/profession-hu-hungary-jobs --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/profession-hu-hungary-jobs"
        }
    }
}
```

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/tyLs04FQc6y6gTbqc/builds/JF92VlrKvUezCf4yJ/openapi.json
