# Changelog of GoodFirms B2B Companies & Software Scraper (`haketa/goodfirms-scraper`) Actor

- **URL**: https://apify.com/haketa/goodfirms-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/haketa/goodfirms-scraper.md

## Changelog

### 1.1.0 — 2026-11-01

- **Verification run:** scraped **384 unique B2B agencies** (0% duplicates on `slug`) across 10 service categories in ~7 min on datacenter proxy — Cloudflare passed with no residential escalation needed. Core-field coverage: `name`/`profileUrl`/`websiteUrl`/`logoUrl`/`tagline`/`employeesRange`/`hourlyRateRange` **100%**, `rating` 99.5%, `headquarters` 99%, `contact.phone` 99.5%, `contact.email` 88%, `foundedYear` 98%, `topServices`/`services` 99.7%, `topReview` 99.5%, `linkedin` 92%.
- **Fixed `reviewCount` (was ~8% → now ~99%):** GoodFirms' JSON-LD `AggregateRating` publishes the count under the key `reviewCount`, but the parser only read the legacy `ratingCount`. Now reads `reviewCount` first, with `ratingCount` and the listing-card seed as fallbacks.
- **Fixed service-share breakdown (`services[].percent`):** GoodFirms migrated the profile to a new "cp2" layout; the sub-service percentage chart now lives in `.cp2-focus-item`. Added that selector (old SVG `[data-id]` layout kept as fallback), so `services` again carries real `{ name, percent }` pairs (e.g. `Web Development – 20%`, `SEO – 7%`) instead of collapsing to names only.
- **Fixed client-focus split (`focusBreakdown`):** re-mapped to the new `.cp2-clientfocus-row` markup (Small / Medium / Large Business with % share); legacy selector kept as fallback.
- **Richer `description`:** now extracts the full on-page "About" summary from `.cp2-about-text` (hundreds-to-thousands of characters) instead of the short truncated JSON-LD stub; JSON-LD description kept as a fallback.
- **README refreshed** to the current output: corrected the Output example + field-reference table, updated the measured fill-rate table and country mix from this 384-record run, and tightened pagination/scale notes.
- No input/output field names changed — fully backward compatible.
