# Helloworld.Rs Scraper (`unfenced-group/helloworld-rs-scraper`) Actor

Extract IT job listings from HelloWorld.rs, Serbia's largest IT job board. Supports keyword, location, tech tag, seniority, and work type filters. Returns full descriptions, structured salary data, and tech tags.

- **URL**: https://apify.com/unfenced-group/helloworld-rs-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Jobs
- **Stats:** 3 total users, 1 monthly users, 25.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 1,000 results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Helloworld.rs Scraper

![Helloworld.rs Scraper](https://i.imgur.com/xix4LoO.png)

Scrape structured job listings from [Helloworld.rs](https://www.helloworld.rs) — Serbia. 3,000+ active listings. No API key required.

---

### Why this scraper?

#### 💻 Serbia's #1 IT job board
Helloworld.rs is the leading platform for tech and IT jobs in Serbia, with a strong community of developers and tech companies.

#### 📄 Full job descriptions
Enable `fetchDetails` to retrieve complete job descriptions in all three formats.

#### 💰 RSD salary data
Salary data in Serbian Dinar where published.

#### 🔄 Repost detection
Cross-run deduplication with a 90-day TTL. Use `skipReposts: true` for new-only feeds.

#### 🔗 Direct URL scraping
Supply specific Helloworld.rs search or category URLs via `startUrls`.

#### ⚙️ No API key required
Runs without any third-party credentials.

---

### Input parameters

| Parameter | Type | Description | Default |
|---|---|---|---|
| `keywords` | string | Job title, keyword, or skill to search for. | — |
| `location` | string | City or region to filter by. Leave empty to search all locations. | — |
| `tag` | string | Search or filter by tag. | — |
| `category` | string | Job category filter. Leave empty for all categories. | — |
| `workType` | string | Work type filter (full-time, part-time, etc.). | — |
| `daysOld` | string | Only return listings published within the last N days. | — |
| `seniority` | string | seniority. | — |
| `maxItems` | integer | Maximum number of results to return. | `0` |
| `startUrls` | array | List of specific URLs to scrape. Bypasses the search input. | — |
| `proxyConfiguration` | string | proxyConfiguration. | — |

---

### Output schema

Each result contains the following fields.

| Field | Type | Description |
|---|---|---|
| `id` | string | Unique job listing ID from the source platform. |
| `url` | string | Direct URL to the job listing. |
| `title` | string | Job title as published. |
| `company` | string | Employer / company name. |
| `location` | string | Full location string as published. |
| `city` | string | City of the work location. |
| `country` | string | Country code (ISO 3166-1 alpha-2). |
| `contractType` | string | Contract type (permanent, contract, temporary, etc.). |
| `workSchedule` | string | Work schedule (full-time, part-time, etc.). |
| `salaryMin` | number | Minimum salary (null if not published by employer). |
| `salaryMax` | number | Maximum salary (null if not published by employer). |
| `salaryCurrency` | string | ISO 4217 currency code (null if no salary published). |
| `salaryPeriod` | string | Salary period: YEAR / MONTH / WEEK / DAY / HOUR. |
| `publishDate` | string | Publication date (YYYY-MM-DD). |
| `publishDateISO` | string | Publication date in ISO 8601 format. |
| `source` | string | Source domain name. |
| `scrapedAt` | string | ISO 8601 timestamp of when this item was scraped. |
| `contentHash` | string | MD5 hash of key fields for change detection (16 chars). |
| `summary` | string | Human-readable one-line summary of the listing. |
| `changeStatus` | string | Change status: NEW / MODIFIED / UNCHANGED. |
| `isRepost` | boolean | True if this listing was seen in a previous run (90-day window). |
| `originalPublishDate` | string | Original publish date if this is a repost (null otherwise). |
| `originalUrl` | string | Original URL if this is a repost (null otherwise). |

**Example output record:**

```json
{
  "id": "123456",
  "url": "https://www.helloworld.rs/jobs/senior-developer/123456",
  "title": "Software Developer",
  "company": "Nordeus",
  "location": "Beograd",
  "city": "Beograd",
  "country": "RS",
  "contractType": "Permanent",
  "workSchedule": "Full-time",
  "salaryMin": 45000,
  "salaryMax": 60750,
  "salaryCurrency": "RSD",
  "salaryPeriod": "YEAR",
  "publishDate": "2026-04-15",
  "publishDateISO": "2026-04-15",
  "source": "helloworld.rs",
  "scrapedAt": "2026-04-24T09:00:00.000Z",
  "contentHash": "a3f1b2c4d5e67890",
  "summary": "Software Developer · Nordeus · Beograd",
  "changeStatus": "NEW",
  "isRepost": false,
  "originalPublishDate": null,
  "originalUrl": null
}
````

***

### Examples

#### 1 — Search for Software Developer roles in Beograd

```json
{
  "searchQuery": "developer",
  "location": "Beograd",
  "maxResults": 100
}
```

#### 2 — Filter by job category

```json
{
  "category": "IT",
  "maxResults": 200
}
```

#### 3 — Scrape a specific search page directly via startUrls

```json
{
  "startUrls": [
    {
      "url": "https://www.helloworld.rs/jobs?q=developer"
    }
  ],
  "maxResults": 50
}
```

#### 4 — Daily feed — new listings only, past 24 hours, no reposts

```json
{
  "searchQuery": "",
  "daysOld": 1,
  "maxResults": 1000
}
```

***

### 💰 Pricing

**$1.50 per 1,000 results** — you only pay for successfully retrieved listings.
Failed retries and filtered reposts are never charged.

| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.50 |
| 10,000 | ~$15.00 |
| 100,000 | ~$150.00 |

> Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Use the **Max results** cap in the input to control your spend exactly.

***

### Performance

| Run size | Approx. time |
|---|---|
| 100 listings | ~2 min |
| 1,000 listings | ~15 min |
| 10,000 listings | ~2.5 hours |

***

### Known limitations

- **Salary:** Not all employers publish salary information — `salaryMin` and `salaryMax` may be `null`.
- **fetchDetails:** Setting `fetchDetails: false` returns list-page fields only; description fields will be `null`.

***

### Technical details

- **Source:** helloworld.rs — Serbia's job market
- **Memory:** 256 MB
- **Repost storage:** KeyValueStore `helloworld-rs-job-dedup`, 90-day TTL
- **Retry:** Automatic retry on network errors, exponential backoff, 3 attempts per request

***

### Additional services

Need a custom actor, additional filters, scheduled runs, or integration support?
Send an email to <info@unfencedgroup.nl> — we build on request.

***

*Part of the [Unfenced Group](https://apify.com/unfenced-group) European job board scraper portfolio — 50+ job markets covered.*
*Built by [unfenced-group](https://apify.com/unfenced-group) · Issues? Open a ticket or send a message.*

# Actor input Schema

## `keywords` (type: `string`):

Search or filter by keywords.

## `location` (type: `string`):

Search or filter by location.

## `tag` (type: `string`):

Search or filter by tag.

## `category` (type: `string`):

Search or filter by category.

## `workType` (type: `string`):

Search or filter by workType.

## `daysOld` (type: `string`):

Search or filter by daysOld.

## `seniority` (type: `string`):

seniority.

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

Maximum number of results (0 = no limit).

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

Filter by startUrls.

## `proxyConfiguration` (type: `string`):

proxyConfiguration.

## Actor input object example

```json
{
  "keywords": "",
  "location": "",
  "tag": "",
  "category": "",
  "workType": "",
  "daysOld": "",
  "seniority": "",
  "maxItems": 0,
  "startUrls": [],
  "proxyConfiguration": ""
}
```

# Actor output Schema

# 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("unfenced-group/helloworld-rs-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("unfenced-group/helloworld-rs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 unfenced-group/helloworld-rs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=unfenced-group/helloworld-rs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Helloworld.Rs Scraper",
        "description": "Extract IT job listings from HelloWorld.rs, Serbia's largest IT job board. Supports keyword, location, tech tag, seniority, and work type filters. Returns full descriptions, structured salary data, and tech tags.",
        "version": "0.0",
        "x-build-id": "G1tpyJbx7rsUxZrbK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/unfenced-group~helloworld-rs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-unfenced-group-helloworld-rs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/unfenced-group~helloworld-rs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-unfenced-group-helloworld-rs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/unfenced-group~helloworld-rs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-unfenced-group-helloworld-rs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "string",
                        "description": "Search or filter by keywords.",
                        "default": ""
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Search or filter by location.",
                        "default": ""
                    },
                    "tag": {
                        "title": "Tag",
                        "type": "string",
                        "description": "Search or filter by tag.",
                        "default": ""
                    },
                    "category": {
                        "title": "Category",
                        "type": "string",
                        "description": "Search or filter by category.",
                        "default": ""
                    },
                    "workType": {
                        "title": "Work Type",
                        "type": "string",
                        "description": "Search or filter by workType.",
                        "default": ""
                    },
                    "daysOld": {
                        "title": "Days Old",
                        "type": "string",
                        "description": "Search or filter by daysOld.",
                        "default": ""
                    },
                    "seniority": {
                        "title": "Seniority",
                        "type": "string",
                        "description": "seniority.",
                        "default": ""
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of results (0 = no limit).",
                        "default": 0
                    },
                    "startUrls": {
                        "title": "Start Urls",
                        "type": "array",
                        "description": "Filter by startUrls.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "string",
                        "description": "proxyConfiguration.",
                        "default": ""
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
