Firmy.cz Business Directory Scraper avatar

Firmy.cz Business Directory Scraper

Pricing

from $0.03 / 1,000 item extracteds

Go to Apify Store
Firmy.cz Business Directory Scraper

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

Automation Lab

Maintained by Community

Actor 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?

FieldDescription
nameBusiness name
profileUrlFirmy.cz detail URL
businessIdNumeric Firmy.cz ID parsed from the profile URL
categoriesListing tags such as Restaurace or Autoservisy
addressHuman-readable address
phonePublic phone number when listed
websiteExternal website from the listing metadata
ratingValueRating converted to a 0-5 scale
reviewCountNumber of reviews
openingStatusOpen/closed text shown on the listing
latitude, longitudeCoordinates from embedded metadata
descriptionBusiness description/snippet
emailsPublic business mailto contacts with includeDetails
icoOptional Czech IČO as an eight-digit string (not the Firmy business ID)
openingHoursOptional source schedule string from profile metadata
socialLinksOptional public social profile URLs
sourceQueryOriginal query across pagination (q or potrebuji)
sourceUrl, pageNumberActual 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 tierPrice 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

  1. Open the actor on Apify.
  2. Add one or more search queries, for example restaurace Praha.
  3. Optionally add Firmy.cz category/search URLs or exact business profile URLs.
  4. Set maxItems.
  5. Keep includeDetails disabled for the fastest default run.
  6. Run the actor.
  7. Download the dataset as CSV, JSON, Excel, or connect it to your workflow.

Input

searchQueries

Firmy.cz keyword searches.

Examples:

  • restaurace Praha
  • autoservis Brno
  • zubní 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 includeDetails off for broad lead collection.
  • Increase maxItems gradually.

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 ApifyClient
client = 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.

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.