Firmy.cz Business Directory Scraper
Pricing
from $0.03 / 1,000 item extracteds
Firmy.cz Business Directory Scraper
🇨🇿 Extract Czech business leads from Firmy.cz listings with phones, websites, addresses, ratings, opening hints, and coordinates.
Pricing
from $0.03 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
1
Bookmarked
12
Total users
5
Monthly active users
23 days ago
Last modified
Categories
Share
Extract Czech company leads from Firmy.cz public search, category listings, and exact business profiles.
Firmy.cz Business Directory Scraper helps sales, recruiting, agency, and local-market teams turn Firmy.cz result pages into structured datasets with business names, profile URLs, categories, addresses, phones, websites, ratings, reviews, opening hints, coordinates, and descriptions.
What does Firmy.cz Business Directory Scraper do?
This actor searches public Firmy.cz listings and saves one dataset row per business.
It supports keyword searches such as restaurace Praha, autoservis Brno, or účetní Ostrava.
It also supports direct Firmy.cz search, category, or /detail/ profile URLs. A profile URL returns only that business, never nearby recommendations. Search and profile inputs share one global limit and deduplicate by Firmy business ID.
The actor follows pagination until it reaches your maxItems limit.
It reads server-rendered listing data, so no browser is needed for the default workflow.
Who is it for?
- 🧭 Local lead generation teams building Czech prospect lists.
- 📞 Sales ops teams enriching CRM accounts with phones and websites.
- 🏢 Agencies researching restaurants, clinics, trades, and local services.
- 👥 Recruiters mapping employers in specific Czech cities or categories.
- 📊 Market researchers tracking local business density and ratings.
Why use it?
Firmy.cz contains local business profiles that are useful for outreach and market mapping.
Manual copy-paste is slow and inconsistent.
This scraper produces normalized rows that can be exported to CSV, Excel, Google Sheets, BI tools, or CRMs.
What data can you extract?
| Field | Description |
|---|---|
name | Business name |
profileUrl | Firmy.cz detail URL |
businessId | Numeric Firmy.cz ID parsed from the profile URL |
categories | Listing tags such as Restaurace or Autoservisy |
address | Human-readable address |
phone | Public phone number when listed |
website | External website from the listing metadata |
ratingValue | Rating converted to a 0-5 scale |
reviewCount | Number of reviews |
openingStatus | Open/closed text shown on the listing |
latitude, longitude | Coordinates from embedded metadata |
description | Business description/snippet |
emails | Public business mailto contacts with includeDetails |
ico | Optional Czech IČO as an eight-digit string (not the Firmy business ID) |
openingHours | Optional source schedule string from profile metadata |
socialLinks | Optional public social profile URLs |
sourceQuery | Original query across pagination (q or potrebuji) |
sourceUrl, pageNumber | Actual page that yielded this row |
How much does it cost to scrape Firmy.cz business leads?
The actor uses pay-per-event pricing.
There is a $0.005 start fee for each run.
Each saved business listing is charged as an item event with tiered per-item pricing:
| Plan tier | Price per saved listing |
|---|---|
| FREE | $0.000065997 |
| BRONZE | $0.000057389 |
| SILVER | $0.000044763 |
| GOLD | $0.000034433 |
| PLATINUM | $0.000022956 |
| DIAMOND | $0.000016069 |
Example cost before platform plan discounts: 100 saved listings on BRONZE cost about $0.0107 total ($0.005 start + 100 × $0.000057389). 1,000 saved listings on BRONZE cost about $0.0624 total.
For best cost control, start with a small maxItems value and increase it after checking the first dataset.
How to use it
- Open the actor on Apify.
- Add one or more search queries, for example
restaurace Praha. - Optionally add Firmy.cz category/search URLs or exact business profile URLs.
- Set
maxItems. - Keep
includeDetailsdisabled for the fastest default run. - Run the actor.
- Download the dataset as CSV, JSON, Excel, or connect it to your workflow.
Input
searchQueries
Firmy.cz keyword searches.
Examples:
restaurace Prahaautoservis Brnozubní ordinace Ostravaúčetní Plzeň
startUrls
Firmy.cz URLs for search, category pages, or exact business profiles. Use { "url": "..." } entries with the input schema. Queries run first, then URLs; pagination follows queued inputs. Use a profile-only input for CRM refresh:
{"searchQueries": [],"startUrls": [{"url": "https://www.firmy.cz/detail/13957569-amiata-la-cucina-toscana-praha-vinohrady.html"}],"maxItems": 1,"includeDetails": true}
Clear the form's prefilled search query when you want only supplied profiles.
maxItems
Maximum unique businesses to save across all inputs and pages, from 1 to 5,000. The Console form defaults to 20; raw API input that omits maxItems uses 50. Start with a small batch before scaling. The request budget or available public results can stop collection before this cap.
includeDetails
When enabled, the actor reads business-scoped mailto contacts, IČO, source opening schedules and social links from each profile where available. Script/asset strings and recommended-business contacts are excluded; missing fields are omitted, not invented. Direct profile inputs reuse the fetched page with no second request. With details off, a profile still returns its core identity/address/phone/website.
Search/category enrichment adds at most one profile request per selected business, excluding bounded retries, with two requests at a time and deterministic output order. If enrichment fails, the original listing is still saved without detail extras. Use it when these extra fields are important. Transient listing or profile request errors (timeouts, HTTP 408/425/429/5xx) are retried up to three attempts within the run's request budget; permanent 403/404 errors are not retried. A failed listing page does not stop other input URLs; if every page fails before any business is saved, the run fails rather than reporting an empty result. Provide at least one nonblank query or URL.
Output example
{"name": "Amiata - La Cucina Toscana","profileUrl": "https://www.firmy.cz/detail/13957569-amiata-la-cucina-toscana-praha-vinohrady.html","businessId": "13957569","sourceQuery": "restaurace Praha","categories": ["Restaurace"],"address": "Londýnská 608/52, Praha, Vinohrady","phone": "+420 222514141","website": "https://www.amiata.cz/cs/","ratingValue": 5,"reviewCount": 18,"latitude": 50.07521438598633,"longitude": 14.433701515197754}
Tips for better results
- Use Czech keywords for best coverage.
- Combine service and city names.
- Use category URLs when you need a narrow vertical.
- Keep
includeDetailsoff for broad lead collection. - Increase
maxItemsgradually.
Integrations
Use this actor with:
- Google Sheets for lead review.
- HubSpot or Pipedrive for sales prospecting.
- Clay or Make for enrichment workflows.
- BI dashboards for local-market analysis.
- Webhooks for scheduled lead exports.
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/firmy-cz-business-directory-scraper').call({searchQueries: ['restaurace Praha'],maxItems: 50});console.log(run.defaultDatasetId);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/firmy-cz-business-directory-scraper').call({'searchQueries': ['autoservis Brno'],'maxItems': 50,})print(run['defaultDatasetId'])
cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~firmy-cz-business-directory-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchQueries":["restaurace Praha"],"maxItems":50}'
MCP usage
Use the Apify MCP server with Claude Desktop, Claude Code, Cursor, or VS Code:
https://mcp.apify.com/?tools=automation-lab/firmy-cz-business-directory-scraper
Claude Code CLI setup:
$claude mcp add --transport http apify-firmy-cz https://mcp.apify.com/?tools=automation-lab/firmy-cz-business-directory-scraper
Claude Desktop JSON config:
{"mcpServers": {"apify-firmy-cz": {"url": "https://mcp.apify.com/?tools=automation-lab/firmy-cz-business-directory-scraper"}}}
Cursor setup: open Settings → MCP and add the server URL above as a remote HTTP server.
VS Code setup: in the MCP Servers view, add a remote HTTP server using the same URL.
Example prompts:
- "Scrape 100 restaurant leads from Firmy.cz in Prague."
- "Find autoservis businesses in Brno and export names, phones, and websites."
- "Create a Czech local lead list from this Firmy.cz category URL."
Scheduling
Schedule the actor weekly or monthly to refresh local lead lists.
Use small scheduled batches for city/category monitoring.
For CRM syncs, trigger downstream automations from the dataset-ready webhook.
Data handling and dependencies
The actor fetches public Firmy.cz pages; query terms and requested URLs are sent to that website. No AI model or paid third-party enrichment API is used. Output (including public contact details) is stored in the run dataset under your Apify account's storage/retention settings; remove runs or datasets in Apify Console when no longer needed. The actor keeps no cross-run cache. It is independent of, and not endorsed by, Firmy.cz.
Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed, and diagnostic reports are retained for 30 days.
Data quality notes
Firmy.cz profiles vary by business.
Some listings have phone numbers and websites.
Some listings only provide address and description.
Ratings are converted from Firmy.cz percent values to a 0-5 scale for convenience.
FAQ
Is this a Firmy.cz scraper for Czech company leads?
Yes. It supports public Firmy.cz search/category listings and exact business profile refreshes.
Does it require a Firmy.cz account?
No. The default workflow uses public pages only.
Troubleshooting
Why did I get fewer results than maxItems?
The query or category may have fewer public listings, or Firmy.cz may stop pagination earlier than expected.
Try a broader query or a different city/category.
Why are emails missing?
Firmy.cz listing pages do not always expose emails.
Enable includeDetails to read business contact links from profile pages, but many businesses still publish only phone and website. Check the dataset's Enriched contacts view for emails, IČO, hours and social links. Absence is not a request to guess or infer an email.
Why is the website URL different from the button URL?
Tracking parameters are stripped where possible so users get cleaner website links.
Legality and responsible use
This actor extracts publicly available Firmy.cz business listing data.
Use the data in accordance with applicable laws, privacy rules, Firmy.cz terms, and outreach regulations.
For EU outreach, make sure your processing has a lawful basis and respect opt-out requests.
Related Automation Lab scrapers
- Google Maps Lead Finder
- ARES Czech Registry Scraper
- Das Telefonbuch Business Scraper
- GoYellow Scraper
Limitations
The actor focuses on public search/category listings and exact profiles. IČO, hours, emails and social links are optional source values; no ARES lookup or external enrichment is performed. Opening schedules are source text, not a normalized timezone calendar. A profile response without matching primary identity is unusable and never replaced with recommendations.
It does not log in.
It does not bypass private contact forms.
It does not guarantee email extraction.
Changelog
0.1
See the Actor changelog for releases. The current feature bundle supports exact profiles, business-scoped contact enrichment and pagination provenance.
Support
If a query stops working, save the input and run ID.
Include the Firmy.cz URL or keyword, expected result count, and sample missing business when reporting an issue.