# Firmy.cz Scraper — Czech Business Leads with Email & IČO (`hipersoft/firmy-cz-scraper`) Actor

Scrape Czech companies from Firmy.cz: name, phone, email, website, IČO, address, GPS, rating, reviews, opening hours, social links and description. Search any trade or keyword in any Czech city. Great for B2B lead generation. Export CSV/JSON.

- **URL**: https://apify.com/hipersoft/firmy-cz-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.001 / company

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

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

## How to integrate an Actor?

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

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

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

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

# README

## Firmy.cz Scraper: Czech Business Leads with Phone, Email & IČO

**Firmy.cz Scraper** extracts company data from **Firmy.cz**, the largest Czech business directory (by Seznam.cz) with hundreds of thousands of companies, tradespeople, shops and services. Every company includes the **name, phone number, email, website, IČO (Czech company ID), full address, postal code, GPS coordinates, star rating, number of reviews, opening hours, description, social media links and photo**. Search any **trade or keyword** (instalatér, autoservis, restaurace, účetní, zubař…) in any **Czech city or region**, or paste Firmy.cz category links, and export **B2B leads** to **CSV, Excel or JSON**.

### What does Firmy.cz Scraper do?

- 🇨🇿 **Search any business type** in Czech or English, across the whole Czech Republic.
- 📍 **Filter by location**: Praha, Brno, Ostrava, Plzeň, Liberec, Olomouc or any region.
- 📞 **Contacts**: phone number, email address and website for each company.
- 🏢 **IČO**: the Czech company identification number, ready for matching with ARES and other registries.
- 🗺️ **Address and GPS**: street, city district, postal code, latitude and longitude.
- ⭐ **Rating and reviews**: star rating (0–5) and number of reviews.
- 🕒 **Opening hours**, **description**, **social links** (Facebook, Instagram, LinkedIn…) and **photo**.
- 🗂️ **Category links**: paste any Firmy.cz category page to collect a whole industry.
- 🎯 **Filters**: minimum rating and phone-number-only.

### What data can you scrape from Firmy.cz?

| Field | Description |
|---|---|
| Company ID, name, link | Firmy.cz company and profile page |
| Phone | Main phone number |
| Email | Contact email (with details) |
| Website | Company website |
| IČO | Czech company ID (with details) |
| Address | Street, city/district, postal code, country |
| Coordinates | Latitude, longitude |
| Rating | Stars (0–5) and review count |
| Opening hours | Weekly opening hours (with details) |
| Description | Company description |
| Social links | Facebook, Instagram, LinkedIn, YouTube… |
| Photo | Main image link |

### Use cases for Czech business data

- **B2B lead generation**: build lists of Czech companies with phone, email and website for sales outreach.
- **Local SEO and marketing agencies**: find businesses with weak ratings or no website to pitch services.
- **Market research**: count and map businesses by trade and region.
- **CRM enrichment**: match companies by IČO with your own data.
- **Franchise and retail expansion**: map competitors and suppliers around a location.
- **Directories and comparison sites**: seed listings of tradespeople and services.

### How to scrape Firmy.cz

1. Click **Try for free** to open Firmy.cz Scraper in Apify Console.
2. Enter **search terms** and an optional **location**, or paste **Firmy.cz links**.
3. Keep **Include email, IČO and opening hours** on for full lead data.
4. Set **Max companies** and click **Start**.
5. Download the companies as **CSV, Excel or JSON**.

### Input

#### Example input

```json
{
  "searchTerms": ["instalatér", "elektrikář"],
  "location": "Brno",
  "includeDetails": true,
  "minRating": 4,
  "withPhoneOnly": true,
  "maxItems": 500
}
```

| Field | Description |
|---|---|
| **Search terms** | Business types or keywords, one search each. |
| **Location** | City or region added to every search. |
| **Firmy.cz links** | Search or category links. Override search terms. |
| **Include email, IČO and opening hours** | Adds details from each company page. |
| **Minimum rating** | 0–5 stars. |
| **Only companies with a phone number** | Skip companies without a phone. |
| **Max companies** | Stop after this many (0 = no limit). |

### Output

#### Company example

```json
{
  "companyId": "191430",
  "name": "INSTAVA",
  "url": "https://www.firmy.cz/detail/191430-instava-brno-kralovo-pole.html",
  "website": "https://instava.cz",
  "phone": "+420 545 210 509",
  "email": "instava@instava.cz",
  "ico": "63497379",
  "street": "Rostislavovo náměstí 51/34",
  "city": "Brno, Královo Pole",
  "postalCode": "61200",
  "country": "CZ",
  "latitude": 49.2223613889,
  "longitude": 16.597855,
  "rating": 4.9,
  "reviewCount": 4,
  "description": "Provádíme instalatérské, topenářské a plynařské práce i opravy pro rodinné domy, byty a organizace.",
  "openingHours": "Tu,We,Th,Fr,Mo 8:00–17:00",
  "socialLinks": [],
  "imageUrl": "https://d48-a.sdn.cz/d_48/c_img_H_D/skpBoQF.jpeg",
  "search": "instalatér Brno"
}
```

#### Output schema

| Field | Type | Description |
|---|---|---|
| `companyId`, `name`, `url` | string | Company and profile link. |
| `website`, `phone`, `email` | string | Contacts. |
| `ico` | string | Czech company ID. |
| `street`, `city`, `postalCode`, `country` | string | Address. |
| `latitude`, `longitude` | number | Coordinates. |
| `rating`, `reviewCount` | number | Stars (0–5) and reviews. |
| `description` | string | Company description. |
| `openingHours` | string | Opening hours. |
| `socialLinks` | array | Social media profiles. |
| `imageUrl` | string (URL) | Photo. |
| `search`, `scrapedAt` | string | Source info. |

### How much does it cost to scrape Firmy.cz?

Firmy.cz Scraper uses **pay-per-company** pricing: a small fixed price per company, with automatic discounts on higher Apify plans. See the **Pricing** tab for the exact price.

### More lead-generation data

- [Google Maps Scraper](https://apify.com/hipersoft/google-maps-scraper): businesses from Google Maps worldwide.
- [Website Contact Scraper](https://apify.com/hipersoft/website-contact-scraper): extra emails and social links from company websites.

### FAQ

**Does it include emails?**
Yes, with **Include email, IČO and opening hours** turned on, whenever the company lists an email on Firmy.cz.

**What is IČO?**
IČO is the Czech company identification number. You can use it to look companies up in the ARES business register.

**Can I scrape a whole category?**
Yes. Open the category on Firmy.cz, copy the link and paste it into **Firmy.cz links**.

**How many companies can I get?**
Everything that matches your searches. Set **Max companies** to 0 for no limit.

**What formats can I export?**
CSV, Excel, JSON, XML, HTML and RSS, or read the results through the Apify API.

**Can I integrate Firmy.cz Scraper with other apps?**
Firmy.cz Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JS/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

**Is it legal to scrape Firmy.cz?**
The scraper only collects publicly listed business information. You are responsible for using the data in line with Firmy.cz's terms, the GDPR and Czech rules on unsolicited commercial communication.

### Related Actors

- [Google Maps Scraper](https://apify.com/hipersoft/google-maps-scraper)
- [Website Contact Scraper](https://apify.com/hipersoft/website-contact-scraper)

### Notes

Original clean-room implementation. Returns only public data. Not affiliated with Firmy.cz or Seznam.cz.

# Actor input Schema

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

What to search for, in Czech or English: instalatér, autoservis, restaurace, účetní, zubař, stavební firma, e-shop… Each term is a separate search.

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

Optional city or region added to every search, e.g. Praha, Brno, Ostrava, Plzeň, Jihomoravský kraj.

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

Optional. Firmy.cz search or category links, e.g. https://www.firmy.cz/Remesla-a-sluzby/Uklidove-a-cistici-sluzby. When set, search terms are ignored.

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

Open each company page to add email, IČO (company ID), opening hours and social links. Recommended for lead generation.

## `minRating` (type: `integer`):

Only companies with at least this star rating.

## `withPhoneOnly` (type: `boolean`):

Skip companies without a phone number.

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

Stop after this many companies. 0 means no limit.

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

Not required for normal use.

## Actor input object example

```json
{
  "searchTerms": [
    "instalatér"
  ],
  "location": "Brno",
  "includeDetails": true,
  "minRating": 0,
  "withPhoneOnly": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# 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": [
        "instalatér"
    ],
    "location": "Brno",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/firmy-cz-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": ["instalatér"],
    "location": "Brno",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/firmy-cz-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": [
    "instalatér"
  ],
  "location": "Brno",
  "maxItems": 50
}' |
apify call hipersoft/firmy-cz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/firmy-cz-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/LxxThGl7KLDX7GDZG/builds/VurGLvUvTCWTWj48d/openapi.json
