- Fixed: runs were returning zero reviews. On 2026-09-03 Cloudflare retired
the TLS fingerprint of the Firefox build this actor had impersonated since
0.1.0, and started answering it with a managed challenge from every IP class —
a datacenter IP, Apify's egress and residential proxy exits alike. Measured
the same day from an IP that refused the old fingerprint on 100% of requests,
the current Firefox builds (133/135/144) cleared the identical request 18 out
of 18 times, direct and with no proxy. The actor now impersonates a current
build and keeps two more in reserve.
- The capterra.co.uk ladder rotates the fingerprint before the exit IP (that
is the axis this origin actually scores), walks four residential countries
instead of one, re-walks itself after a full miss instead of giving up on the
first sweep, and remembers the rung that cleared so later pages of the same
product go straight back to it. Every rung is still logged.
- No pricing change: the working path is still the free, proxy-free one.
- New primary source: capterra.co.uk. capterra.com started answering every Apify proxy class with a Cloudflare managed challenge on 2026-08-20, which made runs succeed with zero reviews. The .co.uk edition serves the same review pool (same product IDs, 24,181 Slack reviews vs 24,166) as plain HTML and is read first, direct, with no proxy at all. Because Apify's shared egress IP can be challenged on the second consecutive hit, the .co.uk path carries its own ladder: direct, then datacenter proxy (a fresh IP, no extra cost), then residential. The .com path is kept only as the last resort.
- Rows from the .co.uk edition add
reviewerCountry, reviewDateTime (to the second, from the page's structured data) and sourceEdition; alternativesConsidered, switchedFrom, reasonsForChoosing, reasonsForSwitching and the vendor response are null on those rows because the .co.uk cards do not render them.
- Newest-first ordering on every run (
sort=most_recent), 5 reviews on page 1 then 25 a page, the product's last page respected so a filter can never silently re-serve page 1.
- The status message now says when a product fell back to capterra.com or when a run ended with zero reviews, and why.
First release.
- One row per review from any Capterra product page: the full pros, cons and
overall text, the overall star rating and the four sub-ratings (ease of use,
customer support, functionality, value for money), the likelihood-to-recommend
score, and the reviewer's job title, industry, company size and how long they
used the product, plus the alternatives they considered and the product they
switched from.
- Each product also gets a free summary row with its rating breakdown and total
review count, so you can see the shape of the distribution without paying for
every review behind it.
- Reads the reviews out of the page's own embedded data rather than chasing
generated CSS class names, so a Capterra layout change does not silently empty
your dataset.
- Requests rotate their exit IP on every retry, which is what actually gets a
page through Capterra's bot check. A product that stays blocked is logged and
skipped rather than shipping half-parsed rows, and you are only charged for
reviews actually delivered.
- Bad input (an unrecognisable product reference, an empty list) is reported in
the run status and exits successfully. It never fails the run.
Known limit: Capterra itself only paginates 2,500 reviews deep per product, and
its sort control is not addressable from the URL, so reviews come back in
Capterra's default order.