# Changelog of Gelbe Seiten Scraper | German Yellow Pages Scraper (`dominic-quaiser/gelbe-seiten-german-yellow-pages-scraper`) Actor

- **URL**: https://apify.com/dominic-quaiser/gelbe-seiten-german-yellow-pages-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/dominic-quaiser/gelbe-seiten-german-yellow-pages-scraper.md

## Changelog

### \[1.2.2] – 2026-05-18

#### Changed

- Internal refactoring to simplify the codebase and improve maintainability. No changes to functionality or output.

### \[1.2.1] – 2026-04-28

#### Changed

- Dataset schema views restructured: replaced the two generic views (Overview, Full Details) with four dedicated views — Overview (all fields), Fast Search, Basic Search, and Deep Search — each showing only the fields available for that mode.

### \[1.2.0] – 2026-03-21

#### Added

- Total results logging: The scraper now fetches the Gelbe Seiten search page before scraping to determine the total number of available results and logs it (e.g., "Found 32148 total results"). If fewer results exist than the configured limit, the target is automatically adjusted downward.
- Output schema (`.actor/output_schema.json`) defining the actor's output entry point for the default dataset
- Dataset schema (`.actor/dataset_schema.json`) describing all output fields across the three search modes with two table views (Overview and Full Details)

#### Changed

- Version locked the requirements.

#### Removed

- Pay-per-event pricing model — switched to rental pricing, which is managed by the Apify platform
- Removed `PricingManager` module and `.actor/pay_per_event.json` configuration

### \[1.1.7] – 2025-10-14

#### Added

- Pay-Per-Event Pricing: Implemented pay-per-event pricing model with discount tier support (FREE, BRONZE, SILVER, GOLD). Users are now charged based on the number of results extracted, with pricing varying by extraction mode.
- PricingManager module to handle automatic discount tier detection and event charging

#### Changed

- Updated actor configuration to use `pricingModel: "perEvent"` with `.actor/pay_per_event.json` configuration

### \[1.1.6] – 2025-10-09

#### Changed

- Added 30,000 hard limit to `max_businesses` parameter to prevent website pagination loops, automatically capping unlimited (0) or excessive values at this threshold.

### \[1.1.5] – 2025-09-12

#### Added

- Start from a specific index: when setting a `start_index` the actor will skip the index and start scraping from that index.

### \[1.1.4] – 2025-08-28

#### Added

- Migration Support: Implemented state persistence system to handle Apify infrastructure migrations seamlessly. The actor now automatically saves progress and resumes from the exact position where migration occurred, preventing data loss and duplicate processing.

### \[1.1.3] – 2025-08-19

#### Changed

- Applied rate limiting to `fast_search`. Previously, unlimited speed caused overly rapid requests, leading to false extractions when processing large numbers of companies.

#### Fixed

- Updated the CSS selector for contact link extraction to adapt to recent website HTML changes.

### \[1.1.2] – 2025-07-16

#### Fixed

- Fixed logic to properly respect end\_index parameter when max\_businesses is set to 0 (unlimited) by calculating the effective maximum before setting max\_businesses to infinity.

#### Removed

- Billing limits for pay-per-result billing.

### \[1.1.1] – 2025-07-16

#### Fixed

- Billing Limits: Fixed misconfigured `ACTOR_MAX_PAID_DATASET_ITEMS` handling by switching from manual environment variable parsing to Apify SDK's Actor.config.`max_paid_dataset_items` property for proper pay-per-result billing enforcement.

### \[1.1.0] – 2025-07-10

#### Added

- Sorting Options: New `sorting` parameter allows users to sort search results by relevance (default) or rating to prioritize highly-rated businesses.
- Location Radius Control: New `perimeter` parameter enables setting a custom search radius (0-50 km) around specified locations for precise geographic targeting.

#### Changed

- Updated input schema to include `sorting` and `perimeter` configuration options.
- API payload now includes `sortierung` and `umkreis` parameters for enhanced search control.
- Improved logging to display sorting method and perimeter settings in search configuration.

### \[1.0.0] – 2025-06-06

#### Note

- Stable Release: The actor is now considered stable and production-ready.

#### Changed

- Major code refactor for the entire actor to improve reliability, and maintainability.

***

### \[0.4.0] – 2025-05-01

#### Added

- Extraction of fax number.

#### Changed

- Enhanced logging for clearer, more detailed output.
- Revised output key names for consistency.

### \[0.3.0] - 2025-04-24

#### Updated:

- The rate limiter now introduces randomized delays between requests to better mimic human behavior.

#### Added:

- Extended data extraction in search modes:
  - `basic_search`: Now includes `social_media`.
  - `deep_search`: Now includes `services`, `weitere_unternehmensinformationen`, `ausbildung`, `zahlungsmittel`, and `social_media`.

#### Removed:

- `useApifyProxy` has been removed from the input schema, as proxy settings are now configured via `proxyConfiguration`.

### \[0.2.0] - 2025-04-23

#### Added:

- Introduced `basic_search` mode for lightweight extraction via profile visits.
- Added `index`, `start_index`, and `end_index` parameters to support run resumption and range-limited scraping.
- Unlimited Mode: Set `max_businesses` to `0` to scrape all available listings.
- Extraction of the number of reviews (`bewertungen`) alongside the average rating (`bewertung`).
- FAQ sections are now extracted from business profiles.
- Switched from Playwright-based scraping to an AJAX API approach using `fetch_next_page_api`.

### \[0.1.1] - 2025-04-21

#### Fixed:

- Resolved various parsing and encoding issues.

### \[0.1.0] - 2025-04-21

#### Added:

- Initial release of the Gelbe Seiten (German Yellow Pages) Scraper.
