# Changelog of Google Maps Scraper: Rating Trends, Leads, Reviews (`nokia2k/google-maps-scraper-rating-trends`) Actor

- **URL**: https://apify.com/nokia2k/google-maps-scraper-rating-trends/changelog.md
- **Full Actor documentation**: https://apify.com/nokia2k/google-maps-scraper-rating-trends.md

## Changelog

Every change that a user of Google Maps Scraper can notice is listed here, newest first.

### October 2026: no more runs fighting each other, and a cap on residential proxy traffic

- New box **Runs at once in your account** (`maxRunsAtOnce`): with a number, a run first waits while that many earlier runs of this Actor are still working in your account, and starts when one of them ends. Google turns requests away by how many arrive at the same time, so runs started together by you, a schedule, an AI agent or a second chat window slow each other down and push traffic to the paid residential proxy. Nothing is searched or charged while a run waits; the status message says it is waiting, and the `COVERAGE` record has `waitedForSlotSeconds` and `runsAheadAtStart`. Empty (the default) starts at once, as before. The runs find each other through a small key-value store in your own Apify account, `google-maps-scraper-slots` (each run writes its start time and a heartbeat every 30 seconds, and removes its record when it ends); it works with the Actor's limited permissions.
- New box **Residential proxy allowance (MB)** (`maxResidentialMegabytes`): after that many megabytes the run stops using the residential proxy and goes on with the standard addresses only, more slowly and with longer waits between tries, instead of dropping places. The `COVERAGE` record has `residentialCapReached`. Empty (the default) means no limit, as before.
- The brake that sends fewer requests at a time while Google turns most of them away now also works once the residential proxy is closed.
- The final status message ends with a one-line bill: the share of requests Google turned away, the residential proxy megabytes, and how long the run waited for a free slot.

### October 2026: a second look at places you already have

- New box **Places to skip** (`skipPlaceIdsFromDatasets`): runs whose places are not asked for again, so a run that stopped at its spending limit is continued by the next one without reading the same places twice.
- New box **Place IDs from earlier runs** (`placeIdsFromDatasets`): the dataset ID or the run ID of an earlier run of this Actor (a link to either works too). Every place in those tables is asked for again by its place ID, without searching the map: with **Recent reputation** on, a run over a whole country's places costs a few hundredths of the search that found them. Places in several tables are asked for once; up to 60,000 in one run. The `COVERAGE` record notes how many IDs were read from how many tables.

### October 2026: fewer paid proxy megabytes on large runs

- When Google turns the standard addresses away most of the time (many runs at once, or a whole country), the run now sends fewer requests at a time until they are served again, instead of sending almost every request through the residential proxy. The same places are found; a large run can take longer.
- No second copy of a slow request is sent while the standard addresses are mostly turned away, and a second copy never uses the residential proxy.
- Fixed: a run that asks for many thousands of places by ID (or searches a whole country in one run) spent most of its time waking up its own waiting requests instead of sending them, and then read every place's page before any place's reviews, until it ran out of memory. Places by ID are now read in a window of a few dozen at a time: 25,000 places by ID went from 41 places and 4 GB in a minute to the normal pace.
- The `COVERAGE` record shows the residential proxy traffic in `residentialMegabytes` and the lowest number of requests at a time the run went down to in `brakeLowestConcurrency`.

### October 2026: emails and social profiles from the website

- Also read from the website: phone numbers and WhatsApp numbers it links (`websitePhones`, `whatsapps`) and the page with its contact form (`contactFormUrl`).

- `emailDetails` gives each address its type (`own`, `free` or `other`), the page it was found on and whether its domain can receive mail. Addresses whose domain cannot receive mail are left out.

- Template addresses (`votre@email.fr`, `jean.dupont@gmail.com`, `contatto@esempio.it` and the like) and support addresses of website builders, shop software and booking widgets (Squarespace, PrestaShop, Webador and similar) are left out.

- A page that lists more than three addresses of other domains (a supplier list, a franchise directory) is treated as a list of other businesses: only the website's own addresses are kept from it. Privacy and legal desks of the website's own domain come last in `emails`.

- No-reply addresses, and privacy, webmaster or developer addresses that are not on the website's own domain, are left out. Phone and WhatsApp numbers written without a country code get the code of the place's country.

- Booking pages (Planity, Zenchef, Kalendes, Salonkee, Uala and similar) count as `platform` links, not as the business's own website.

- Large pages with unclosed tags no longer slow a run down.

- When the pages a website links show no email address, two usual contact or legal pages of the place's country are tried (for example `/contatti` and `/note-legali` in Italy, `/mentions-legales` in France, `/impressum` in Germany).

- A website link to a page that no longer exists falls back to the home page; a name that does not answer is tried with or without its `www`.

- A website is read once per run, also when several places link it; its extra pages are read at the same time. A website that refuses or does not answer in 10 seconds is not asked again.

- New switch **Emails and social profiles from the website** (`scrapeContacts`): each place's own website is read (its home page and, when that shows no address of the site's own, up to two of its contact, about or legal pages) for email addresses and links to Facebook, Instagram, LinkedIn, X, YouTube, TikTok and Pinterest profiles. New fields `emails`, `facebooks`, `instagrams`, `linkedIns`, `twitters`, `youtubes`, `tiktoks`, `pinterests` and `contactsStatus`. The *Leads* table shows emails, Facebook and Instagram.

- No extra charge.

- The `COVERAGE` record counts websites read, websites that did not answer, pages read and places with emails under `contacts`.

### October 2026: first public version

- Search by term and area: city, district, county, region, postal code, a point with a radius, or your own polygon. Coordinates typed into Area are read as a point with 5 km around it. Several areas and several search terms in one run. Each place is delivered once.
- Whole-area search: where Google Maps stops at 120 results, the map is split into smaller views, again and again, until a closer look adds almost nothing new. Places outside the outline of the area are dropped.
- A search term without any area is searched once, wherever Google places it, and returns at most 120 places. The run log and the final status message say so.
- A postal or ZIP code delivers only places with that code, whether it is written in Area next to its town or country (`78701, Austin, Texas`) or in the Postal code box with Country. A code without a town or country, or one the map does not know in the country or state written next to it, stops the run with a message; no places are charged.
- A `COVERAGE` record with every run: the area used, map views searched and split, places found, places dropped, requests, megabytes and seconds. The final status message sums it up, and says when a run stopped at its spending limit or close to its time or memory limit, and when a setting was ignored or read differently, or a name in the input is not an input field of this Actor: the details are under `notes` in the record.
- Place data: name, categories, full and structured address, coordinates, phone as shown and in international format, website, website type, rating, number of ratings, star breakdown, opening hours, attributes, photo count, temporarily and permanently closed, IDs and the Google Maps link.
- Recent reputation: average rating and number of ratings for the last 3, 6 and 12 months, rating trend and the owner's reply rate. A trend is worked out only when the reviews of the full 12 months could be read and each half-year has at least 5 ratings.
- Reviews, up to 2,400 per place, with exact date, text, owner's reply, photos and ratings per aspect. Reviewer names are off by default.
- "Reviews newer than" takes a date, a date and time, or a number with minutes, hours, days, weeks, months or years. Any other value stops the run before anything is searched; no places are charged. It is made for the order newest: in another order a place can come with fewer reviews than it has since that date, and a note in the coverage record says so.
- Free filters: rating, number of ratings, website type, phone, unclaimed profiles, categories and name. Category and name words ignore accents and capitals. The rating trend filter is free too, but it needs recent reputation, which is charged.
- Places by Google Maps link or by place ID. Each place read by ID or by a place link carries the ID or link you sent (`inputPlaceId`, `inputStartUrl`); those that could not be read are listed under `placesNotRead` in the coverage record. An ID or link whose place the run had already delivered is listed under `placesAlreadyDelivered`, with the `placeId` of its row. The box Place IDs also takes an ID with `place_id:` in front, several IDs in one line and a link; a CID number or a feature ID is not a place ID and is skipped with a note. Places from a search link carry its search words in `searchString`. Short share links (`maps.app.goo.gl`) are not read: paste the long link from the address bar. A link that was skipped is counted in the final status message and listed under `notes` in the coverage record.
- The box Google Maps links also takes a text file with one link per line (in JSON `{"requestsFromUrl": "https://..."}`): at most 5 MB and 5,000 links, each link once. The address must open the file itself: a sharing page or a sign-in page is a web page, not the file, and counts as a file that could not be read. Such a file is reported in the final status message and listed under `notes` in the coverage record; when the run has nothing else to do, it stops and says so.
- The same search gives nearly the same list from run to run: results are asked for without the personal touches Google adds for each viewer.
- With a place limit, the top places of the search are delivered, in Google's order. A search link is cut at the place limit too; place IDs and place links are not. The final status message says when the limit stopped a search.
- Places reach the table every few seconds while the run works.
- The coverage record says in fixed words why a run stopped early (`stoppedEarly`: `spendingLimit`, `timeLimit`, `memoryLimit` or `aborted`; an empty list when the run finished its work), so a program does not have to read the status message.
- A run that is started again with Resurrect, or that Apify moves to another server, does not store or charge a place a second time. The final status message says how many places were in the table before and how many were added, and the coverage record has the number under `storedBefore`. So a run that stopped at its spending limit or close to its time or memory limit is continued with Resurrect, in the Actions menu of the run, with a higher limit under Options: only the missing places are added and charged, while a new run would charge every place again. The status message of the stopped run says so. A run whose table cannot be read at the start stops before anything is searched, and no places are charged: start it again a minute later.
- If the area cannot be found on the map, the run stops and no places are charged (only the start fee). With several areas, one that is not found is skipped, counted in the final status message and named under `errors` in the coverage record; the run stops only when none is found.
- Area names are looked up in OpenStreetMap, at most one a second, and 15 seconds apart in a run started by a schedule. The answers are remembered in a small key-value store in your own Apify account, `google-maps-scraper-areas`, and looked up again after 30 days, so that repeated and scheduled runs do not ask each time. You can delete that store at any time.
- With "All requests to Google through the proxy" on, a missing proxy or one that cannot be set up stops the run at the start, and no places are charged. With it off, the run goes on from the server's own address, and a note says so when a proxy could not be set up.
- A list that an AI assistant sends as one text, such as `["dentist","orthodontist"]`, is read as the list.
- Pricing: you pay per place delivered, per place with recent reputation and per review, plus a start fee per run that Apify charges when the run starts.
- Output schema, dataset field descriptions and five ready-made tables: places, leads, recent reputation, reviews (one per row) and all fields.
