Bazoš Czech Classifieds Scraper
Pricing
Pay per event
Bazoš Czech Classifieds Scraper
Search Czech Bazoš classifieds and export detailed public listings for inventory research and repeatable price-change monitoring.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Search public Czech Bazoš classifieds and export complete, stable listing records for inventory research and price-change monitoring. The Actor follows every search result to its public detail page, so each dataset row contains the listing ID, URL, title, description, price, location, date, category, and full-size image links.
Use it for one-time market research or schedule the same input repeatedly and compare records by listingId. It only reads anonymous public pages on bazos.cz; it does not reveal phone numbers, message sellers, post ads, or use account workflows.
What does this Bazoš scraper do?
- Builds a Czech Bazoš search from a keyword and optional category, location, radius, or price filters.
- Paginates the server-rendered result pages up to
maxItems. - Follows each unique public listing URL.
- Extracts complete listing details and full-size image URLs.
- Saves typed JSON records to the run's default dataset.
You can also supply public Bazoš search, category, or individual /inzerat/ URLs. This makes the Actor useful both for discovery and for refreshing a known set of listing IDs.
Who is it for?
- Marketplace analysts comparing supply and asking prices across Czech categories.
- Dealers and resellers tracking public competing inventory.
- Researchers building reproducible snapshots of public classifieds.
- Data teams feeding Bazoš listing records into spreadsheets, warehouses, or dashboards.
- Automation builders monitoring whether known listings are still available or have changed price.
The Actor is intentionally narrow: Czech bazos.cz public listings only. It does not claim coverage of Bazoš Slovakia, Poland, or Austria.
Why use this Actor?
- Stable identity: every row includes the numeric Bazoš
listingIdfor joins and change detection. - Detail-page data: descriptions and full-size image links come from each public listing, not only search snippets.
- Useful filters: keyword, Bazoš category, location/radius, and CZK price range.
- Two input routes: discover listings with search or refresh exact public URLs.
- Source-friendly execution: bounded concurrency, result limits, and transient-only retries.
- Integration ready: typed records in the default Apify dataset.
What Bazoš data can I extract?
| Field | Type | Meaning |
|---|---|---|
listingId | string | Stable numeric Bazoš listing ID |
url | string | Canonical public listing URL |
title | string | Public listing title |
description | string | Full public listing description |
price | number or null | Numeric price when shown |
priceText | string or null | Price exactly as displayed |
currency | CZK or null | Currency for a Czech-koruna price |
location | string or null | Public locality |
postalCode | string or null | Public Czech postal code |
postedDate | string or null | Displayed date in day.month.year format |
category | string | Category subdomain such as auto or mobil |
images | string[] | Full-size public listing image URLs |
scrapedAt | string | ISO 8601 extraction timestamp |
No phone reveal endpoint is called. Seller account actions and private data are outside the Actor's scope.
How to get started
- Open the Actor in Apify Console.
- Enter a
searchQuery, such asiphoneorskoda. - Optionally choose a category and add location or price filters.
- Set
maxItemsto the maximum detailed listings you need. - Click Start.
- Open the Dataset tab to preview, download, or integrate the records.
- To monitor changes, schedule the same input and compare rows by
listingId.
The prefilled input searches the current mobile-phone category and is suitable for a first run.
Input parameters
| Input | Type | Default | Description |
|---|---|---|---|
searchQuery | string | iphone prefill | Keyword used by Bazoš search |
category | string | all | One supported Czech category or all categories |
location | string | empty | Czech place or postal code accepted by Bazoš |
radiusKm | integer | 0 | Radius around the supplied location, up to 100 km |
minPrice | integer | empty | Minimum price in CZK |
maxPrice | integer | empty | Maximum price in CZK |
startUrls | URL array | empty | Public Czech Bazoš search/category/listing URLs |
maxItems | integer | 20 | Maximum detailed records, from 1 to 1,000 |
maxConcurrency | integer | 5 | Parallel detail requests, from 1 to 10 |
Provide either searchQuery or at least one startUrls entry. When both are supplied, results from both routes are deduplicated by URL before the limit is applied.
Example search input
{"searchQuery": "skoda","category": "auto","minPrice": 50000,"maxPrice": 500000,"maxItems": 50}
Example explicit URL input
{"startUrls": [{ "url": "https://mobil.bazos.cz/inzerat/221875490/iphone-17-pro-max-256gb-novy-se-s-plnou-zarukou-zarukou.php" }],"maxItems": 1}
Only https://bazos.cz and https://*.bazos.cz URLs are accepted.
Output example
A current detail-page record has this shape:
{"listingId": "221875490","url": "https://mobil.bazos.cz/inzerat/221875490/iphone-17-pro-max-256gb-novy-se-s-plnou-zarukou-zarukou.php","title": "iPhone 17 Pro MAX 256GB - Nový s plnou zárukou zárukou","description": "Dobrý den, nabízím k prodeji iPhone 17 Pro MAX 256GB...","price": 31800,"priceText": "31 800 Kč","currency": "CZK","location": "Praha 10","postalCode": "100 00","postedDate": "31.7. 2026","category": "mobil","images": ["https://www.bazos.cz/img/1/490/221875490.jpg?t=1785249322"],"scrapedAt": "2026-07-31T04:40:00.000Z"}
Listings change and disappear, so values above are illustrative of real output shape rather than a promise that this ad remains available.
How much does it cost to extract Bazoš listings?
This Actor uses pay-per-event pricing: one small start charge per run plus an item charge only for each valid listing saved. The per-item price decreases through Apify's usage tiers. Failed, duplicate, or rejected records are not item-charged.
The start fee is $0.005. At the BRONZE tier, each saved listing is $0.002668; higher plans receive progressively lower item prices. Example BRONZE totals are about $0.0077 for 1 listing, $0.0317 for 10, and $0.2718 for 100. The active tier price is always shown in Apify Console before a run.
Batching more records into one run reduces the relative effect of the one-time start charge. Runtime and platform usage are covered by the pay-per-event price.
Monitor inventory and price changes
Apify schedules can run the same input hourly, daily, or weekly. For each snapshot:
- Use
listingIdas the durable listing key. - Compare
price,priceText,title, anddescriptionwith the previous snapshot. - Treat an absent ID as a possible removal, expiration, or changed query match.
- Keep
scrapedAtto identify when each value was observed. - Send changed rows to a webhook, database, or spreadsheet integration.
The Actor emits snapshots; it does not maintain a cross-run history table or send alerts by itself.
Export to spreadsheets and data pipelines
From the Dataset tab, download JSON, CSV, Excel, XML, or RSS. You can also:
- connect Apify to Google Sheets through an integration;
- trigger a webhook when a run finishes;
- fetch dataset items from the Apify API;
- load records into BigQuery, Snowflake, PostgreSQL, or your own warehouse;
- use Make or Zapier to route new snapshots.
Keep listingId values as strings in spreadsheets so they are not reformatted.
Run with the Apify API
Set APIFY_TOKEN in your shell and start a synchronous run:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~bazos-czech-classifieds-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQuery":"iphone","category":"mobil","maxItems":10}'
For larger jobs, use the asynchronous /runs endpoint and retrieve the dataset after the run succeeds.
JavaScript integration
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/bazos-czech-classifieds-scraper').call({searchQuery: 'skoda',category: 'auto',maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map(({ listingId, price }) => ({ listingId, price })));
Python integration
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/bazos-czech-classifieds-scraper').call(run_input={'searchQuery': 'iphone','category': 'mobil','maxItems': 20,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint([(item['listingId'], item['price']) for item in items])
Use through Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/bazos-czech-classifieds-scraper"
Desktop and editor clients can use:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/bazos-czech-classifieds-scraper"}}}
Example prompts:
- “Search Czech Bazoš mobile listings for iPhone and return 20 prices with listing IDs.”
The same MCP URL works in Claude Desktop, Cursor, and VS Code when added as an HTTP MCP server using the JSON configuration above.
- “Extract this public Bazoš listing URL and summarize its price, location, and images.”
- “Run the Škoda inventory input and give me a CSV-ready table keyed by listing ID.”
Legality and responsible use
- Only anonymous public Czech Bazoš pages are supported.
- Listings can be edited, removed, promoted, or expire between runs.
- Search ranking is controlled by Bazoš and may include promoted results.
- The Actor does not bypass CAPTCHA, login, phone reveal, or access controls.
maxItemslimits accepted detail records, not raw HTTP requests.- Public markup can change; a recognized-shape check fails the run rather than silently returning misleading empty data.
- Keep concurrency conservative and follow Bazoš terms, robots guidance, privacy law, and your intended use's legal requirements.
- Do not republish personal data or use results for harassment, spam, or discriminatory decisions.
Troubleshooting
Why did the run return no records?
The current query and filters may have no public matches. Try a broader keyword, choose all, remove price/location filters, or open the generated search directly on Bazoš. A legitimate zero-result search completes without fabricated rows.
Why did an explicit listing URL fail?
The ad may have expired, been removed, or no longer expose the expected public detail shape. Confirm that it opens anonymously and that the URL uses the Czech .cz domain and /inzerat/<id>/ path.
Why are records in a different order?
Detail requests run concurrently for efficiency, so dataset order is not guaranteed. Sort by listingId, postedDate, price, or scrapedAt in your downstream system.
Does the Actor reveal seller phone numbers?
No. Phone reveal and private/account workflows are deliberately excluded.
Frequently asked questions
Can I scrape Bazoš Auto?
Yes. Set category to auto and add a keyword such as skoda. The output schema is the same across categories.
Can I monitor a fixed set of listings?
Yes. Put their public detail URLs in startUrls, schedule the Task, and compare returned rows by listingId. Removed listings fail explicitly rather than being represented as current inventory.
Does it support Bazoš Slovakia or Poland?
No. This Actor is scoped to Czech bazos.cz. URLs from other Bazoš country domains are rejected.
Can I search without a category?
Yes. Keep category as all to use the Czech all-category search surface.
Is the dataset suitable for price comparison?
Yes. price is numeric when Bazoš displays a CZK amount, while priceText preserves the source representation. Some ads legitimately have no numeric price.
Related scrapers
There is currently no other automation-lab scraper dedicated to Czech Bazoš classifieds. Browse automation-lab on Apify for other public-data tools; third-party competitors are intentionally not presented as related products.
Support
If a reproducible input stops working, open an issue from the Actor's Apify page and include the run URL and non-sensitive input. Do not paste API tokens or private data. Source pages change, and a concrete failed URL helps us distinguish an expired listing from a parser regression.