# Zlaté stránky Scraper: Slovak Company Leads, IČO & Email (`steadyscrape/zlate-stranky-scraper`) Actor

Scrape Zlaté stránky (zlatestranky.sk), the Slovakia business directory: Slovak companies and leads by keyword and town with name, address, phone, email, website and rating; optional company data from each page (IČO, every phone, opening hours, reviews). Export to JSON, CSV or Excel, or via API.

- **URL**: https://apify.com/steadyscrape/zlate-stranky-scraper.md
- **Developed by:** [Steady Scrape](https://apify.com/steadyscrape) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 companies

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/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

## Zlaté stránky Scraper: Slovak company leads with IČO, phone and email

**Zlaté stránky Scraper** extracts Slovak businesses from [Zlaté stránky](https://www.zlatestranky.sk) (zlatestranky.sk), the Slovakia business directory, by keyword or category (*rubrika*) and town: company name, category, address split into street, town and postal code (PSČ), coordinates, phone (also in +421 format), email, website and rating. Turn on company pages and every row also gets the company's **registration number (IČO)**, every phone (mobile, landline, fax) and email, all websites and the Facebook page, **contact persons with their position**, opening hours per day, description, special offer, keywords, services, products, payment methods, logo and **every written review with its stars and date**. No login, no browser. Export to JSON, CSV or Excel, or use the Zlaté stránky data via API.

### What the Zlaté stránky Scraper does

- Searches Zlaté stránky the way its own search box does: a keyword (`autoservis`, `kaderníctvo`, `advokát`, `stavebná firma`) in a town (`Bratislava`, `Košice`, `Banská Bystrica`), or across Slovakia when no place is given.
- Walks every results page (20 companies a page) up to your maximum, never past the count the site gives.
- Reads links you paste: category lists (`/firmy/<town>/q_<category>/1/`), searches (`/hladanie/<keyword>/1/`) and company pages (`/firmy/<town>/H1256108/<name>/`).
- Optionally reads each company's own page for the IČO, contacts, hours and reviews (`company-with-details`).
- Delivers each company once per run, even when several searches find it.

### Use cases

- **B2B lead generation in Slovakia**: car services in Bratislava, hairdressers in Košice, law offices in Nitra, with phone, email and website.
- **CRM enrichment**: join your list on the IČO and add the address, every phone and email, and the named contact persons.
- **Local market research**: count the companies the site lists for a category in each town, compare ratings and reviews.
- **Review monitoring**: every written review of a company with stars and date.

### Input

| field | what it is |
|---|---|
| `searchTerms` | Keywords or categories, in Slovak, one per line (up to 50). Diacritics are optional. |
| `locations` | Cities, towns or villages (up to 200). Empty = all of Slovakia. Every keyword is searched in every place. |
| `startUrls` | Zlaté stránky links: category lists, searches or company pages (up to 5,000). |
| `maxResultsPerSearch` | Companies per keyword and place (1–20,000, default 100). |
| `includeDetails` | Read each company page (charged `company-with-details` instead of `company`). |

```json
{
    "searchTerms": ["autoservis", "kaderníctvo"],
    "locations": ["Bratislava", "Košice"],
    "maxResultsPerSearch": 200,
    "includeDetails": true
}
```

### Output example

One row per company (`rowType: "company"`), plus one free row per search (`rowType: "search"`) that says how many companies the site lists and how many were delivered, and a free row for any link that gave no company (`rowType: "link"`).

```json
{
    "rowType": "company",
    "id": "H1256108",
    "url": "https://www.zlatestranky.sk/firmy/Bratislava/H1256108/FANCAR+s.r.o./",
    "name": "FANCAR s.r.o.",
    "category": "Automobily - servisy",
    "categories": ["Automobily - servisy"],
    "address": "Trnavská cesta 981, 82104 Bratislava II",
    "street": "Trnavská cesta 981",
    "city": "Bratislava",
    "postalCode": "82104",
    "country": "SK",
    "latitude": 48.165268,
    "longitude": 17.152458,
    "phone": "+421243641212",
    "phoneInternational": "+421243641212",
    "email": "predaj@fancar.sk",
    "website": "https://fancar.sk",
    "rating": 4.9,
    "ratingCount": 34,
    "searchTerm": "autoservis",
    "location": "Bratislava",
    "position": 1,
    "details": {
        "ico": "31389066",
        "phones": [
            { "number": "+421243641212", "international": "+421243641212", "type": "phone", "label": null },
            { "number": "+421905755886", "international": "+421905755886", "type": "mobile", "label": "Mobil" }
        ],
        "emails": ["predaj@fancar.sk", "servis@fancar.sk"],
        "websites": ["https://fancar.sk"],
        "facebookUrl": "https://www.facebook.com/fancarba/",
        "contactPersons": [],
        "openingHours": [],
        "reviewCount": 30,
        "reviews": [{ "author": "Renáta V.", "rating": 5, "date": "2021-06-11", "text": "Personál firmy ochotne poradil s výberom auta a vysvetlil všetko potrebné. Ďakujem!" }]
    }
}
```

### Fields

| field | from | meaning |
|---|---|---|
| `name`, `category`, `categories`, `url`, `id` | results card | company name, its categories on Zlaté stránky, its page and id |
| `address`, `street`, `city`, `postalCode`, `country` | results card | the address as written, and split; postal codes (PSČ) as five digits |
| `latitude`, `longitude` | results card | where the site's map places it |
| `phone`, `phoneInternational` | results card | the main phone, and in +421 format |
| `email`, `website` | results card | when the company gave them to the site |
| `rating`, `ratingCount` | results card | stars and number of ratings; `null` / 0 when unrated |
| `searchTerm`, `location`, `position`, `searchUrl` | the search | which search found it, and where in the list |
| `details.ico` | company page | the registration number (IČO) |
| `details.phones`, `emails`, `websites`, `facebookUrl`, `contactPersons` | company page | every number with its type (phone, mobile, fax) and label, every email and website, named contacts with position, phones and email |
| `details.openingHours`, `description`, `specialOffer`, `categories`, `keywords`, `services`, `products`, `paymentMethods`, `logoUrl` | company page | everything else the profile shows |
| `details.reviewCount`, `reviews` | company page | written reviews with author, stars (1–5), date and text |

### Pricing

Pay per result, no subscription:

- **US$0.001 per company** from the results (`company`).
- **US$0.002 per company with its page** (`company-with-details`), instead of the above.

Search rows, companies not found, invalid links and searches the site finds nothing for are free. The run stops at your spending limit before reading anything it cannot charge.

### Limits and good to know

- **Slovakia only.** zlatestranky.cz (the Czech directory) is run by another company on another platform and is not covered.
- **The search is the site's own**: a keyword brings its closest category (`autoservis` reads as "Automobily - servisy", `pneuservis` as "Automobily - služby"); the search row says which category the site matched. For one exact category, paste its link (`/firmy/<town>/q_<category>/1/`).
- The counts are the site's own: `autoservis` in Bratislava counts 400 companies, across Slovakia 2,646.
- **Some results pages come in one of two orders** (the same page asked twice can list a few different companies). On a whole-list walk the Actor asks such pages again until it has seen every company the site counts, up to four more rounds; when it still falls short, the search row says how many were found.
- Ratings count stars given with or without a text; `details.reviewCount` counts the written reviews, which are all delivered.
- Contact persons' phones are as the page writes them (`0905616853`); the main phones are also given in +421 form.
- A keyword and place too long for the site's addresses (about 480 plain letters together, or 80 with diacritics such as š or ž, which take more room) are a free `invalid` search row: the site answers an error for longer addresses.

### Is it legal to scrape Zlaté stránky?

The Actor reads only public pages that any visitor sees without an account, at a visitor's pace, and follows zlatestranky.sk's robots.txt (it never requests the paths it closes). The site's terms of use (Podmienky používania) hold no clause on automated access or reuse. The data is business contact information that companies publish to be found. If you process personal data (for example contact persons' names, or sole traders listed under their own name), the GDPR applies to you: have a lawful basis, such as legitimate interest for B2B outreach, and respect objections. This Actor is not affiliated with WeNet SK, Mediatel or FCR Media.

# Actor input Schema

## `searchTerms` (type: `array`):

What to search, one per line, in Slovak as you would type it on zlatestranky.sk: a trade or category (<code>autoservis</code>, <code>kaderníctvo</code>, <code>advokát</code>, <code>stavebná firma</code>), a product or a company name. Diacritics are optional (<code>kadernictvo</code> and <code>kaderníctvo</code> give the same list). Each keyword is searched in every place. Up to 50.

## `locations` (type: `array`):

Where to search, one per line: a city, town or village (<code>Bratislava</code>, <code>Košice</code>, <code>Banská Bystrica</code>, <code>Žilina</code>). Diacritics are optional (<code>Kosice</code> works). Leave empty to search all of Slovakia. Up to 200.

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

Links copied from zlatestranky.sk, one per line: a category list (<code>https://www.zlatestranky.sk/firmy/Bratislava/q_autoservis/1/</code>) or a search (<code>https://www.zlatestranky.sk/hladanie/kaderníctvo/1/</code>) is walked like a search from its first page; a company page (<code>https://www.zlatestranky.sk/firmy/Bratislava/H1256108/FANCAR+s.r.o./</code>) is read on its own and charged as a company with details. Up to 5,000.

## `maxResultsPerSearch` (type: `integer`):

Stop each keyword in each place (and each results link) after this many companies. Bratislava lists 400 car services; the site shows 20 per page. The run's spending limit is respected too.

## `includeDetails` (type: `boolean`):

Also read every company's own Zlaté stránky page: registration number (IČO), every phone (mobile, landline, fax) and email, all websites and the Facebook page, contact persons with their position, opening hours per day, description, special offer, categories, keywords, services, products, payment methods, logo and every written review with stars and date. Charged as <code>company-with-details</code> instead of <code>company</code>.

## Actor input object example

```json
{
  "searchTerms": [
    "autoservis"
  ],
  "locations": [
    "Bratislava"
  ],
  "maxResultsPerSearch": 10,
  "includeDetails": true
}
```

# Actor output Schema

## `rows` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "searchTerms": [
        "autoservis"
    ],
    "locations": [
        "Bratislava"
    ],
    "maxResultsPerSearch": 10,
    "includeDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("steadyscrape/zlate-stranky-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 = {
    "searchTerms": ["autoservis"],
    "locations": ["Bratislava"],
    "maxResultsPerSearch": 10,
    "includeDetails": True,
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "autoservis"
  ],
  "locations": [
    "Bratislava"
  ],
  "maxResultsPerSearch": 10,
  "includeDetails": true
}' |
apify call steadyscrape/zlate-stranky-scraper --silent --output-dataset

```

## MCP server setup

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

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

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5To7AwAF3LpvkHBxG/builds/ohzIVSU8lOws9Vpru/openapi.json
