# Imenik.eu Croatia Business Directory Scraper (`crawlerbros/imenik-hr-scraper`) Actor

Scrape Imenik.eu, Croatia's business directory. Search by keyword, browse by city or category, list newest or most popular businesses, or fetch business detail pages directly. Get name, category, address, phone, email, website, rating, opening hours and more - no login required.

- **URL**: https://apify.com/crawlerbros/imenik-hr-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Imenik.eu Croatia Business Directory Scraper

Scrape **Imenik.eu**, Croatia's business directory. Search any keyword, browse businesses by city or category, list the newest or most popular businesses, or fetch specific business detail pages directly by URL. Get business name, category, city, full address, phone, email, website, description, rating, review count, opening hours, VAT ID (OIB) and founding date. No login, no cookies, no API key required.

### What this actor does

- **Six modes:** `search`, `byCity`, `byCategory`, `latest`, `popular`, `byUrl`
- **88 curated Croatian cities** and **54 curated business categories**, each with a free-text slug override for the thousands of additional cities/categories on the site
- **Filters:** minimum rating, city, category, keyword, "has website" toggle, "has email" toggle, "has phone" toggle
- **Real per-business data** — every record is enriched from the business's own detail page (not just the summary shown on a listing page)
- **Empty fields are omitted** — a field only appears on a record when Imenik.eu actually has that data

### Output per business

- `businessName` — registered/trading name
- `category` — the business's category as shown on Imenik.eu (a trade/service like "Vodoinstalater", or a registered legal form like "Društvo s ograničenom odgovornošću")
- `categorySlug` — the category's URL slug
- `city` — city/town from the business's registered address
- `citySlug` — the city's URL slug
- `region` — Croatian county ("županija"), when listed
- `country` — always `HR` when present
- `street` — street address
- `fullAddress` — combined street + city
- `phone` — contact phone number
- `email` — contact email address
- `website` — the business's own external website, when listed
- `description` — free-text business description, when the listing includes one
- `rating` — average rating (0–5), when the business has reviews
- `reviewCount` — number of reviews behind the rating
- `openingHours[]` — per-day opening hours (`day`, `hours`), when published
- `vatId` — Croatian VAT/tax number (OIB), when listed
- `foundingDate` — company founding/registration date, when listed
- `businessId` — Imenik.eu's stable per-business URL slug
- `sourceUrl` — canonical Imenik.eu business page URL
- `recordType` — always `business`
- `scrapedAt` — UTC timestamp of when the record was scraped

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` / `byCity` / `byCategory` / `latest` / `popular` / `byUrl` |
| `searchQuery` | string | `marketing` | Free-text keyword (mode=search) |
| `city` | string (select) | `zagreb` | One of 88 curated cities — selects which city to browse (mode=byCity) |
| `citySlug` | string | – | Free-text city slug override for `city` (mode=byCity) |
| `category` | string (select) | `vodoinstalater` | One of 54 curated categories — selects which category to browse (mode=byCategory) |
| `categorySlug` | string | – | Free-text category slug override for `category` (mode=byCategory) |
| `urls` | array | – | Business detail-page URLs to fetch directly (mode=byUrl) |
| `cityFilter` | string | – | Post-fetch filter: keep only businesses in this city (all modes) |
| `categoryFilter` | string | – | Post-fetch filter: keep only businesses in this category (all modes) |
| `keyword` | string | – | Keep only businesses whose name/description/category contain this text |
| `minRating` | number | – | Drop businesses rated below this value (0–5) |
| `websiteOnly` | boolean | `false` | Only emit businesses that list a website |
| `emailOnly` | boolean | `false` | Only emit businesses that list an email address |
| `phoneOnly` | boolean | `false` | Only emit businesses that list a phone number |
| `maxItems` | integer | `30` | Hard cap on emitted records (1–500) |
| `proxyConfiguration` | object | – | Optional; Imenik.eu is public and normally needs no proxy |

#### Example: search by keyword

```json
{
  "mode": "search",
  "searchQuery": "vodoinstalater",
  "maxItems": 50
}
````

#### Example: browse a city, filtered by category and rating

```json
{
  "mode": "byCity",
  "city": "split",
  "categoryFilter": "restoran",
  "minRating": 4,
  "maxItems": 50
}
```

#### Example: browse a category nationwide

```json
{
  "mode": "byCategory",
  "category": "frizer",
  "websiteOnly": true,
  "maxItems": 50
}
```

#### Example: newest businesses with a website and email

```json
{
  "mode": "latest",
  "websiteOnly": true,
  "emailOnly": true,
  "maxItems": 50
}
```

#### Example: fetch specific businesses by URL

```json
{
  "mode": "byUrl",
  "urls": [
    "https://imenik.eu/tvrtka/brumac-usluge"
  ]
}
```

### Use cases

- **Lead generation** — build a list of Croatian businesses in a given city, category, or trade
- **Market research** — measure business density and category mix across Croatian cities
- **Sales prospecting** — filter by "has website" / "has email" to find outreach-ready leads
- **Local SEO agencies** — benchmark businesses' online presence (website, rating, reviews) by city or category
- **Company data enrichment** — attach VAT IDs (OIB), founding dates, and addresses to an existing lead list via `byUrl`

### FAQ

**What is the data source?**
This actor reads publicly available business listing pages published on [imenik.eu](https://imenik.eu). It is an independent, third-party tool and is not affiliated with, endorsed by, or connected to Imenik.eu.

**Do I need an API key, login, or proxy?**
No. Imenik.eu's business listing and detail pages are publicly accessible. Proxy configuration is optional and normally unnecessary.

**Why do some businesses have fewer fields than others?**
Imenik.eu businesses are typically self-registered or imported from public company registries, so field completeness varies — not every business lists a website, email, opening hours, or rating. Only fields that Imenik.eu actually publishes for that business are included in the record.

**Why does `category` sometimes look like a legal entity type (e.g. "Društvo s ograničenom odgovornošću")?**
Imenik.eu's category taxonomy covers both real trades/services (e.g. "Vodoinstalater" = plumber, "Frizer" = hairdresser) and registered Croatian legal-entity forms (e.g. LLC, joint-stock company). Both are genuine per-business categories the site assigns, so both appear as-is.

**What's the difference between `city`/`category` and `cityFilter`/`categoryFilter`?**
`city` and `category` pick *which* Imenik.eu page to browse when using mode=byCity or mode=byCategory. `cityFilter` and `categoryFilter` are independent post-fetch filters that narrow results from *any* mode (including combining a category filter on top of a city browse, or vice versa).

**How many cities and categories does Imenik.eu have?**
Imenik.eu lists businesses across roughly 3,200 Croatian city/town slugs and about 540 category slugs. This actor curates the ~90 most useful cities and ~55 most useful categories as dropdown options, with free-text `citySlug`/`categorySlug` override fields for anything else — find the exact slug from a business's own city/category badge on imenik.eu, or from imenik.eu/statistika.

**How fresh is the data?**
Every run fetches live pages from imenik.eu at request time — there is no cached or stale data.

**Is `mode=search` the same as browsing a city or category?**
No. `mode=search` runs a free-text keyword search across all business names/categories on Imenik.eu (via imenik.eu's own search), independent of any specific city or category page.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

## `searchQuery` (type: `string`):

Free-text keyword — business name, trade, city, or service (e.g. "marketing", "vodoinstalater", "zagreb").

## `city` (type: `string`):

88 curated Croatian cities/towns confirmed live on imenik.eu. Only used to select which city's businesses to browse for mode=byCity -- it carries a schema default so the daily-test prefill always works, so it is intentionally NOT applied as a post-fetch filter on other modes (that would silently narrow every search/byCategory/latest/popular run to just this city even when never touched). To filter any mode (including byCity/byCategory) by city, use `cityFilter` below instead. Use `citySlug` below to target any of imenik.eu's ~3200 city/town slugs not listed here.

## `citySlug` (type: `string`):

Free-text override for `city` above — any imenik.eu city/town URL slug, e.g. `nin`, `vrsar`, `funtana` (find the exact slug by browsing imenik.eu/statistika or imenik.eu/grad/{slug}). Takes precedence over the `city` dropdown when non-empty.

## `cityFilter` (type: `string`):

Optional post-fetch filter: only keep businesses located in this city/town (matches the business's own address, case- and diacritics-insensitive). Independent of `city`/`citySlug` above — leave blank for no city restriction. Works with every mode, including mode=byCity/byCategory for a further narrowed result.

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

54 curated imenik.eu categories — a mix of real trades/services (e.g. `vodoinstalater` = plumber, `frizer` = hairdresser) and registered legal-entity forms (e.g. `drustvo-s-ogranicenom-odgovornoscu` = LLC), both genuine per-company categories on the site. Only used to select which category to browse for mode=byCategory -- it carries a schema default so the daily-test prefill always works, so it is intentionally NOT applied as a post-fetch filter on other modes (that would silently narrow every search/byCity/latest/popular run to just this category even when never touched). To filter any mode (including byCity/byCategory) by category, use `categoryFilter` below instead. Use `categorySlug` below to target any of imenik.eu's ~540 category slugs not listed here.

## `categorySlug` (type: `string`):

Free-text override for `category` above — any imenik.eu category URL slug (see the ~540 options at imenik.eu/sitemap.php?t=categories or a company's own category badge). Takes precedence over the `category` dropdown when non-empty.

## `categoryFilter` (type: `string`):

Optional post-fetch filter: only keep businesses whose category matches this text (case- and diacritics-insensitive substring match). Independent of `category`/`categorySlug` above — leave blank for no category restriction. Works with every mode, including mode=byCity/byCategory for a further narrowed result.

## `urls` (type: `array`):

Full imenik.eu detail-page URLs, e.g. `https://imenik.eu/tvrtka/brumac-usluge`.

## `keyword` (type: `string`):

Only keep results whose business name, description, or category contain this text (case- and diacritics-insensitive).

## `minRating` (type: `number`):

Drop businesses with a review rating below this value.

## `websiteOnly` (type: `boolean`):

Only emit businesses that have a website URL listed on imenik.eu.

## `emailOnly` (type: `boolean`):

Only emit businesses that have an email address listed on imenik.eu.

## `phoneOnly` (type: `boolean`):

Only emit businesses that have a phone number listed on imenik.eu.

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

Hard cap on emitted records.

## `proxyConfiguration` (type: `object`):

Optional proxy settings. Leave empty to use no proxy — imenik.eu is publicly accessible without one. The actor automatically escalates to the free AUTO datacenter proxy group if it hits a 403/429.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "marketing",
  "city": "zagreb",
  "category": "vodoinstalater",
  "urls": [],
  "websiteOnly": false,
  "emailOnly": false,
  "phoneOnly": false,
  "maxItems": 30
}
```

# Actor output Schema

## `businesses` (type: `string`):

Dataset containing all scraped Imenik.eu businesses.

# 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 = {
    "mode": "search",
    "searchQuery": "marketing",
    "city": "zagreb",
    "category": "vodoinstalater",
    "urls": [],
    "websiteOnly": false,
    "emailOnly": false,
    "phoneOnly": false,
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/imenik-hr-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 = {
    "mode": "search",
    "searchQuery": "marketing",
    "city": "zagreb",
    "category": "vodoinstalater",
    "urls": [],
    "websiteOnly": False,
    "emailOnly": False,
    "phoneOnly": False,
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/imenik-hr-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 '{
  "mode": "search",
  "searchQuery": "marketing",
  "city": "zagreb",
  "category": "vodoinstalater",
  "urls": [],
  "websiteOnly": false,
  "emailOnly": false,
  "phoneOnly": false,
  "maxItems": 30
}' |
apify call crawlerbros/imenik-hr-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Imenik.eu Croatia Business Directory Scraper",
        "description": "Scrape Imenik.eu, Croatia's business directory. Search by keyword, browse by city or category, list newest or most popular businesses, or fetch business detail pages directly. Get name, category, address, phone, email, website, rating, opening hours and more - no login required.",
        "version": "1.0",
        "x-build-id": "A0NYJQBzCAVei1k97"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~imenik-hr-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-imenik-hr-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/crawlerbros~imenik-hr-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-imenik-hr-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/crawlerbros~imenik-hr-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-imenik-hr-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "byCity",
                            "byCategory",
                            "latest",
                            "popular",
                            "byUrl"
                        ],
                        "type": "string",
                        "description": "What to fetch.",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "Search query (mode=search)",
                        "type": "string",
                        "description": "Free-text keyword — business name, trade, city, or service (e.g. \"marketing\", \"vodoinstalater\", \"zagreb\").",
                        "default": "marketing"
                    },
                    "city": {
                        "title": "City (mode=byCity only)",
                        "enum": [
                            "zagreb",
                            "split",
                            "rijeka",
                            "osijek",
                            "zadar",
                            "velika-gorica",
                            "slavonski-brod",
                            "pula",
                            "karlovac",
                            "sisak",
                            "varazdin",
                            "sibenik",
                            "dubrovnik",
                            "bjelovar",
                            "vinkovci",
                            "vukovar",
                            "koprivnica",
                            "dakovo",
                            "pozega",
                            "virovitica",
                            "cakovec",
                            "zapresic",
                            "samobor",
                            "solin",
                            "rovinj",
                            "porec",
                            "umag",
                            "metkovic",
                            "ploce",
                            "makarska",
                            "imotski",
                            "sinj",
                            "knin",
                            "gospic",
                            "otocac",
                            "delnice",
                            "krk",
                            "cres",
                            "trogir",
                            "kastela",
                            "opatija",
                            "crikvenica",
                            "novi-vinodolski",
                            "ivanic-grad",
                            "dugo-selo",
                            "slatina",
                            "durdevac",
                            "kutina",
                            "nova-gradiska",
                            "vrbovec",
                            "labin",
                            "buje",
                            "vodnjan",
                            "vis",
                            "hvar",
                            "korcula",
                            "supetar",
                            "novska",
                            "krizevci",
                            "ludbreg",
                            "kastav",
                            "viskovo",
                            "matulji",
                            "donja-stubica",
                            "krapina",
                            "ozalj",
                            "ogulin",
                            "senj",
                            "benkovac",
                            "biograd-na-moru",
                            "drnis",
                            "vrgorac",
                            "ston",
                            "cavtat",
                            "pag",
                            "novalja",
                            "cabar",
                            "vrbovsko",
                            "cazma",
                            "garesnica",
                            "daruvar",
                            "grubisno-polje",
                            "ilok",
                            "zupanja",
                            "otok",
                            "pakrac",
                            "lipik",
                            "donji-miholjac"
                        ],
                        "type": "string",
                        "description": "88 curated Croatian cities/towns confirmed live on imenik.eu. Only used to select which city's businesses to browse for mode=byCity -- it carries a schema default so the daily-test prefill always works, so it is intentionally NOT applied as a post-fetch filter on other modes (that would silently narrow every search/byCategory/latest/popular run to just this city even when never touched). To filter any mode (including byCity/byCategory) by city, use `cityFilter` below instead. Use `citySlug` below to target any of imenik.eu's ~3200 city/town slugs not listed here.",
                        "default": "zagreb"
                    },
                    "citySlug": {
                        "title": "Custom city slug override",
                        "type": "string",
                        "description": "Free-text override for `city` above — any imenik.eu city/town URL slug, e.g. `nin`, `vrsar`, `funtana` (find the exact slug by browsing imenik.eu/statistika or imenik.eu/grad/{slug}). Takes precedence over the `city` dropdown when non-empty."
                    },
                    "cityFilter": {
                        "title": "City filter (all modes)",
                        "type": "string",
                        "description": "Optional post-fetch filter: only keep businesses located in this city/town (matches the business's own address, case- and diacritics-insensitive). Independent of `city`/`citySlug` above — leave blank for no city restriction. Works with every mode, including mode=byCity/byCategory for a further narrowed result."
                    },
                    "category": {
                        "title": "Category (mode=byCategory only)",
                        "enum": [
                            "vodoinstalater",
                            "frizer",
                            "restoran",
                            "servis",
                            "gradevinarstvo",
                            "arhitektura",
                            "graficki-dizajn",
                            "dizajn-interijera",
                            "uredenje-interijera",
                            "racunalno-programiranje",
                            "web-hosting",
                            "ai-alati",
                            "3d-vizualizacije",
                            "fotografske-djelatnosti",
                            "audiovizualne-djelatnosti",
                            "knjigovodstveni-poslovi",
                            "racunovodstveni-poslovi",
                            "poslovno-posrednistvo",
                            "poslovanje-nekretninama",
                            "iznajmljivanje-nekretnina",
                            "taksi-prijevoz",
                            "autotaksi-prijevoz",
                            "kurirske-usluge",
                            "skladistenje-robe",
                            "medunarodno-otpremnistvo",
                            "ostali-kopneni-prijevoz",
                            "bravar-hitne-intervencije",
                            "djelatnosti-ciscenja",
                            "odrzavanje-cistoce",
                            "osnovno-ciscenje-zgrada",
                            "djelatnosti-masaze",
                            "pruzanje-usluga-masaze",
                            "veterinarske-djelatnosti",
                            "pruzanje-usluga-smjestaja",
                            "geodetska-djelatnost",
                            "izdavacka-djelatnost",
                            "pogrebnicka-djelatnost",
                            "poljoprivredna-djelatnost",
                            "proizvodnja-hrane-i-pica",
                            "proizvodnja-odjece",
                            "proizvodnja-tekstila",
                            "proizvodnja-metala",
                            "trgovina-na-malo-cvijecem",
                            "kupnja-i-prodaja-robe",
                            "ugradnja-stolarije",
                            "sportska-poduka",
                            "sigurnost",
                            "ustanova",
                            "zadruga",
                            "dionicko-drustvo",
                            "javno-trgovacko-drustvo",
                            "komanditno-drustvo",
                            "drustvo-s-ogranicenom-odgovornoscu",
                            "jednostavno-drustvo-s-ogranicenom-odgovornoscu"
                        ],
                        "type": "string",
                        "description": "54 curated imenik.eu categories — a mix of real trades/services (e.g. `vodoinstalater` = plumber, `frizer` = hairdresser) and registered legal-entity forms (e.g. `drustvo-s-ogranicenom-odgovornoscu` = LLC), both genuine per-company categories on the site. Only used to select which category to browse for mode=byCategory -- it carries a schema default so the daily-test prefill always works, so it is intentionally NOT applied as a post-fetch filter on other modes (that would silently narrow every search/byCity/latest/popular run to just this category even when never touched). To filter any mode (including byCity/byCategory) by category, use `categoryFilter` below instead. Use `categorySlug` below to target any of imenik.eu's ~540 category slugs not listed here.",
                        "default": "vodoinstalater"
                    },
                    "categorySlug": {
                        "title": "Custom category slug override",
                        "type": "string",
                        "description": "Free-text override for `category` above — any imenik.eu category URL slug (see the ~540 options at imenik.eu/sitemap.php?t=categories or a company's own category badge). Takes precedence over the `category` dropdown when non-empty."
                    },
                    "categoryFilter": {
                        "title": "Category filter (all modes)",
                        "type": "string",
                        "description": "Optional post-fetch filter: only keep businesses whose category matches this text (case- and diacritics-insensitive substring match). Independent of `category`/`categorySlug` above — leave blank for no category restriction. Works with every mode, including mode=byCity/byCategory for a further narrowed result."
                    },
                    "urls": {
                        "title": "Business detail URLs (mode=byUrl)",
                        "type": "array",
                        "description": "Full imenik.eu detail-page URLs, e.g. `https://imenik.eu/tvrtka/brumac-usluge`.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "keyword": {
                        "title": "Keyword filter",
                        "type": "string",
                        "description": "Only keep results whose business name, description, or category contain this text (case- and diacritics-insensitive)."
                    },
                    "minRating": {
                        "title": "Minimum rating (0-5)",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Drop businesses with a review rating below this value."
                    },
                    "websiteOnly": {
                        "title": "Only businesses with a website",
                        "type": "boolean",
                        "description": "Only emit businesses that have a website URL listed on imenik.eu.",
                        "default": false
                    },
                    "emailOnly": {
                        "title": "Only businesses with an email",
                        "type": "boolean",
                        "description": "Only emit businesses that have an email address listed on imenik.eu.",
                        "default": false
                    },
                    "phoneOnly": {
                        "title": "Only businesses with a phone number",
                        "type": "boolean",
                        "description": "Only emit businesses that have a phone number listed on imenik.eu.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Hard cap on emitted records.",
                        "default": 30
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional proxy settings. Leave empty to use no proxy — imenik.eu is publicly accessible without one. The actor automatically escalates to the free AUTO datacenter proxy group if it hits a 403/429."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
