{"version":"v1","documentUpdatedAt":"2026-10-21T00:34:05.016Z","dataUpdatedAt":"2026-10-20T22:35:49.317230+00:00","source":{"system":"CleanWhale operations database (the CRM that runs the cleanings)","access":"Read-only collector job outside the web tier; the web process never queries the CRM.","isSurveyOrPanel":false,"isGoogleOrTrustpilot":false,"note":"These are operational records, not review-site data: a row exists because an order was completed in the CRM, and a rating exists because the customer who booked it submitted one. Google Business Profile numbers, when present, are kept in a separate block and are never averaged into these."},"population":{"unit":"completed cleaning order","inclusion":"order status = completed, scheduled date inside the window, service type in the cleaning set","orderTypes":["default","dry","leather","renovation","windows","office","kitchen","constructor"],"excluded":"Non-cleaning services (handyman, moving, pest control and similar) are out of scope entirely.","otherBrandsIncluded":[{"city":"Galaxy Warszawa","brand":"Galaxy Cleaning (galaxy-cleaning.pl)","note":"Operated by the same owner on the same platform. Listed as its own city row, never merged into the CleanWhale city of the same name, but included in country and global totals."}],"window":{"type":"rolling_30d","definition":"From local midnight 30 days before today through the end of today, in each city own timezone (31 local days including today). Recomputed every run; not a calendar month.","perCity":true}},"metrics":{"completedCleanings":"Count of completed cleaning orders in the window. The denominator for coverage.","ratedCleanings":"Completed cleanings that carry a customer rating of 1-5.","unratedCompleted":"completedCleanings - ratedCleanings. Counted as neither good nor bad anywhere on the page.","ratingCoverage":"ratedCleanings / completedCleanings. Typically about a third — most customers never rate.","avgRating":"Mean of the individual 1-5 ratings among ratedCleanings. Country and global figures are weighted by rating count, never an average of city averages.","okRated":"Ratings of 3 or higher.","problemRated":"Ratings of 1 to 2.","okShare":"okRated / ratedCleanings. Computed among rated cleanings only.","problemShare":"problemRated / ratedCleanings. Computed among rated cleanings only.","balance":"okRated - problemRated. A raw difference, not a score."},"publicationRules":{"individualRatingDelayHours":24,"individualRatingDelayReason":"A single attributable rating becomes public 24h after it was given, so operations can reach the customer first. Aggregates and the hourly rhythm chart are not delayed.","negativeRatingsPublished":true,"negativeRatingsNote":"1* and 2* ratings appear in the stream with their stars, city, service type and timestamp. Only their free text is withheld: comment text is published for 4* and above only, because unmoderated negative text cannot be reliably stripped of names, addresses and case detail.","commentFilter":"Published comments are machine-filtered: e-mail, URL and phone-shaped substrings and emoji removed, shorter than 8 characters dropped, longer than 240 truncated.","noSelection":"Nothing is hand-picked. The stream is every rating in the window, newest first; there is no editorial step between the CRM and this feed.","personalData":"No customer name, address, e-mail, phone, order id or cleaner name is published anywhere in this dataset. Cleaner photos on the operational board appear only for staff who set the consent flag."},"limits":["Coverage is partial: roughly two thirds of completed cleanings are never rated, and unrated work is silently excluded from every average.","Self-reported in the sense that CleanWhale operates the database these numbers come from. The verifiable part is the structure: denominators, the negative tail and the timestamps are all published, so the numbers can be checked for internal consistency over time.","The window is rolling, so a figure quoted today will not reproduce tomorrow. Always cite it together with dataUpdatedAt.","A market missing from the snapshot means the collector did not report it this run; it is absent rather than published as zero.","The CRM has no cleaning-start signal, so no \"in progress\" duration is derived anywhere; completion is taken from the completion record."],"current":{"completedCleanings":13487,"ratedCleanings":3871,"ratingCoverage":0.287,"avgRating":4.747,"problemRated":175,"problemShare":0.0452,"countries":8,"cities":24},"notPartOfTheseFigures":{"demand":{"what":"Visitor declarations: people marking cities where they want CleanWhale to operate (\"crowdbuilding\").","url":"https://cleanwhale.pl/live/api/demand","verified":false,"countedBy":"one mark per browser per city; a browser is a cookie, not a verified person","excludedFrom":"every figure in this document — completed cleanings, ratings, coverage, averages","note":"A mark is a statement of interest, never a cleaning, a customer or a promise to open."}},"endpoints":[{"name":"Market aggregates","url":"https://cleanwhale.pl/live/api/snapshot","description":"Latest per-city and per-country aggregate: completed cleanings, rated cleanings, average rating, ok/problem split, rating coverage. Rolling 30-day window."},{"name":"Rating stream","url":"https://cleanwhale.pl/live/api/reviews","description":"Individual customer ratings (1-5) with city, service type and timestamp. Cursor-paginated over the full retained history; 1* and 2* ratings are included."},{"name":"Rating rhythm","url":"https://cleanwhale.pl/live/api/pulse","description":"Rating count and average bucketed by hour or day for a chosen range (1d, 1w, 1m, 6m, ytd)."},{"name":"Methodology","url":"https://cleanwhale.pl/live/api/methodology.json","description":"Machine-readable definition of every metric, the publication rules and the known limits."},{"name":"Freshness","url":"https://cleanwhale.pl/live/api/status","description":"Age of the published snapshot and of the operational board, with explicit staleness thresholds."}],"license":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/","attribution":"CleanWhale Live"}}