# Changelog of Google Maps Review Classifier — complaints, no login · $0.5/1k (`leoworks/google-maps-review-classifier`) Actor

- **URL**: https://apify.com/leoworks/google-maps-review-classifier/changelog.md
- **Full Actor documentation**: https://apify.com/leoworks/google-maps-review-classifier.md

## Changelog

### 0.2.x (2026-10-18) — family line

- The Store description now starts with "Google Maps reviews toolkit by LeoWorks —" and the README's first line links the new free Google Maps Review Health Check. No functional or price change.

### 0.2 (2026-10-18) — output file schema

- Key-value store schema added (SUMMARY, REPORT, REPORT_PLACES.csv, REPLY_QUEUE.csv), so the Console and the API describe the output files. No functional or price change.

### 0.2 (2026-10-18 title and first section)

- Title now ends "complaints, no login · $0.5/1k". The README opens with who it is for (six lines), a performance table (held-out accuracy, speed, cost) and a short compliance and privacy section. No functional or price change.

### 0.2 (2026-10-15 form default)

- The form now opens with two Google Maps place URLs in **Places** (Joe's Pizza Broadway and Katz's Delicatessen, 20 newest reviews each, about $0.05 all-in) instead of two pasted sample texts, so a first run shows the collect-and-classify flow. **Review texts** is empty by default and is still accepted. README input example and "Is it free to try?" updated. No functional or price change.

### 0.2 (2026-10-15 all-in price)

- The all-in price when the Actor collects the reviews for you (about $1.10 per 1,000 reviews: this Actor $0.50 + compass' scraper about $0.60, billed to you) is now stated in the README first paragraph, the pricing section, the Places field help and the Store description — the Store price card shows only this Actor's part. No functional or price change.

### 0.2 (2026-10-15 places wording)

- The **Places** and **Location** field help now say it in order: a Google Maps URL or place ID is preferred and then Location can stay empty; a brand or business name needs Location; a name is matched by taking the first Google Maps result inside that location (one place), so chains should name the branch or use the URL. No functional or price change.

### 0.2 (2026-10-15 location)

- **Places** now prefers a Google Maps URL or place ID (exact branch). A business name needs the new **Location** (city, country) input, passed to the scraper as its location; without it the run stops before collecting anything — measured 2026-10-15: "Seoul Starbucks" with no location returned a Starbucks in New York, because the lookup runs from a US data center. The run log lists the places actually found with their addresses, and each output row carries `placeAddress`. README: URL first, a "wrong place" FAQ. No price change.

### 0.2 (2026-10-15 input labels)

- Input labels say it on the form itself: **Reviews dataset (instead of Places)** and **Review texts (samples — ignored when Places is filled)**, because the Console re-fills the form with the last input you ran. No functional or price change.

### 0.2 (2026-10-15 places + sample texts)

- Filling **Places** no longer fails because of the two pre-filled sample **Review texts**: places wins and the samples are ignored (a log line says so). **Places** together with **Reviews dataset** still stops with a clear message. README: how to start the form clean. No price change.

### 0.2 (2026-10-15 places guide)

- Guide for the Places input: which URL forms work (address-bar place URL with `data=!`, `cid`, `place_id`, place ID, business name + city), in the field help and in the README; the "no place found" message now says how to get a usable URL. No functional or price change.

### 0.2 (2026-10-15 places)

- New input **Places** (up to 20: business name + city, a place's Google Maps URL or a place ID): the Actor collects the newest reviews with compass' Google Maps Scraper (`compass/crawler-google-places`, a separate Actor billed to your Apify account — about $0.006 per place + $0.0005 per review) and classifies them in the same run. Reviewer names and profiles are never collected. The estimated cost is logged before collecting; a maximum cost per run lowers the reviews per place or stops before collecting. Errors say what happened and what was charged. Existing inputs (dataset, texts) and this Actor's price ($0.0005 per classified review) are unchanged; `SUMMARY` gets a `collection` block.

### 0.2 (2026-10-11)

- **What customers praise** — 8 praise themes (staff, speed, quality, cleanliness, value, booking & communication, premises, honesty), each with a probability. Check set: 95% correct.
- **Serious-issue alert** — health and safety, discrimination or harassment, theft, fraud accusations and legal threats, whatever the star rating. Check set: 10 of 10 found, 1 false alarm in 93.
- **Readable rows** — flat columns `placeName`, `category`, `publishedAt`, `complaintTypes`, `praiseTypes`, `alert`, `sentiment`, `needsReply`, `unanswered`, `reviewUrl`, `language` next to the full `labels` object (unchanged). Three table views: Classified reviews, Needs a reply, Labels with probabilities.
- **Reply queue** — `REPLY_QUEUE.csv`: unanswered reviews that need a reply, lowest stars first, then newest.
- **Summary by place as CSV** — `REPORT_PLACES.csv`, one row per place. The REPORT record adds star distribution, owner reply rate, praise mix, alert count and examples, a monthly trend and last 90 days vs before.
- **Filters** (skipped reviews are not charged): only reviews newer than a date or period, only reviews with at most N stars, at most N reviews per place.
- **Field mapping**: star rating, review date, owner reply and place name fields can be set by hand when auto-detection misses them.
- Price unchanged.

### 0.1

- First version: Google Maps review classification — complaint types (staff, wait, quality, cleanliness, price, booking, facilities, trust), sentiment, owner-reply flag and unanswered complaints (from the dataset's owner-reply field), custom labels, per-place summary (REPORT).
- 2026-10-10: datasets written moments before the run are now read in full (the item count could lag and stop reading after the first 1,000 items).
