# Changelog of Gelbe Seiten Scraper 🇩🇪 $1/1k (German B2B leads + contacts) (`tagadanar/gelbeseiten-scraper`) Actor

- **URL**: https://apify.com/tagadanar/gelbeseiten-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/tagadanar/gelbeseiten-scraper.md

## Changelog

### 2026-10-01 (later)

- **Much faster, and no more empty runs from a slow connection.** Every request
  used to go through a proxy exit, and a slow exit was retried through the same
  exit. Requests now go directly first and use a fresh proxy exit only when the
  direct request is refused or does not answer. Measured on the same input the
  same day: 5 businesses in 6-8 seconds instead of 106-185, and 60 businesses
  with contact details in 51 seconds.
- A business page that does not answer in time is reported as that. It is no
  longer reported as the run reaching its time limit.

### 2026-10-01

- **Fixed: a search with no entries is no longer reported as "Gelbeseiten
  refused".** Gelbeseiten answers a search that has no entries with an error
  code rather than a normal page, and the run used to read that as a block and
  tell you to retry. It now reads the page's own "0 Treffer" count and its
  "keine passenden Einträge" notice and says plainly that the search has no
  entries on Gelbeseiten. An error page without that statement is still
  reported as a refusal.
- When several searches come back empty and only some of them carry
  Gelbeseiten's own zero, the run no longer calls the whole run an empty search;
  it names the searches it could not confirm.
- **Fixed: a search no longer stops at its first 50 businesses.** Asking for
  more than 50 from one search returned 50, however many Gelbeseiten lists
  (902 for "zahnarzt / münchen"): the actor could not read the answer the site
  gives to its "Mehr Anzeigen" (show more) control, took it for an empty page
  and stopped without saying so. It now reads those pages, so a search goes on
  to your "Max businesses" cap or to the end of Gelbeseiten's own list,
  whichever comes first. Further results arrive 10 per page, so a deep search
  takes more requests and a little longer than before.
- **The closing status now says, per search, why fewer businesses than you
  asked for were delivered:** every business Gelbeseiten lists for that search
  was delivered; the site returned no further results although its own count
  says more exist; it refused or never answered the next page; the run's time
  limit or maximum charge was reached. "All N businesses" is said only when
  the search was read to the end of Gelbeseiten's own stated total; a search
  that simply stops answering is reported as that, never as finished.
- A business Gelbeseiten lists twice in the same search is delivered (and
  billed) once, so a finished search can deliver slightly fewer rows than the
  site's headline count; the status says so when it happens.
- A search whose results all fit on the first page is no longer asked for a
  second page that does not exist.
- A run stopped by its maximum charge now names the searches it never got to.

### 2026-09-19

- The run's closing status now always says what was delivered, what was asked
  for and, when a run returns little or nothing, why: Gelbeseiten refusing the
  pages, a limit stopping the run early, or Gelbeseiten's own match count
  confirming a search really has no entries.
- "No businesses found" is now said only when Gelbeseiten's own count says so.
  A page that came back but could not be read is reported as a possible change
  on the source's side, not as an empty search.

### 2026-09-08

- **A run can no longer spend more time than it has.** The retry ladder booked
  its worst case up front, under loops with no ceiling, so a slow or wobbling
  source could push the run past the platform timeout. A run killed that way
  loses its own closing message entirely.
- Every request now plans against the time actually left, and a backoff that
  would outlive the run is not slept.
- A run that hits its time limit now delivers everything it did read and says
  so plainly, naming the searches it never reached — rather than reporting an
  empty result, which is a claim it has not earned.

### 2026-09-02

- The run now ends with a status message in the Console (the "Done" line was log-only, so a run could not explain itself in the Store).

### 2026-08-29

- **Fixed: the example input shown on the actor's page no longer fails.** Running
  the actor with its prefilled `searches` (`[{"was": "steuerberater", "wo":
  "berlin"}]`) - or any list of `{was, wo}` objects, including the README
  examples - ended with "searches must be a non-empty list" and zero results.
  Object entries were being discarded before they were read. They are now kept
  and parsed, so object and string entries both work as documented.

### 2026-07-13

- README: pricing table now discloses the $0.001 actor-start fee (previously said "no minimum", which was stale after the 07-12 floor raise).

### 2026-07-12

- Invalid input no longer fails the run. The run now finishes cleanly with a clear explanation in its status message, so a typo or an empty list is easy to spot and fix.
- List inputs now accept datasets piped straight from another scraper: entries
  that are objects are read through their usual key names (url/link,
  query/keyword/title, name/company and similar) instead of being rejected.

### 2026-07-11

- Billing: on paid runs every row is billed before it is written, and a run
  now stops visibly if billing fails instead of continuing unbilled.

### 2026-07-09

- Input is now tolerant of common shapes that previously failed the run: a bare
  string / bare object / delimited string for "searches" is coerced into a list
  instead of erroring. Empty input still errors.

### 2026-07-07

- Initial public release on Apify Store.
- Search gelbeseiten.de by business term (Was) and German location (Wo), single or many.
- Clean records per business: name, full address (street, PLZ, city), phone, email, website, category, Gelbeseiten page and id, plus hasPhone/hasEmail flags.
- Pulls phone and email from each business's own Gelbeseiten page; results-only mode (`fetchContactDetails: false`) skips that for a faster, cheaper run without email.
- Follows the site's own "Mehr Anzeigen" pagination to go beyond the first ~50 results, stopping when results run out. No fabricated endpoints.
- Germany residential proxy by default (the site serves German content and rate-limits by IP). Pay per result, platform usage billed to your run, no subscription.
