Scrape Brazilian business listings from buscja.com: name, address, phone, website, categories, services, opening hours, payment methods and coordinates. Search by keyword and city. Incremental runs return only new or changed businesses.
All notable changes to this Actor are documented here.
[Unreleased] — 2026-10-12
Review fixes. No input or output field was removed.
Fixed
A maximum charge per run set by the buyer is now honoured exactly: the platform's own usage cost no longer counts the per-result charges twice, so a run no longer stops early before reaching the limit.
A run where every search failed (misspelled city, keyword under 3 characters, 404, blocked) now FAILS with the underlying reason instead of ending SUCCEEDED with 0 items. A keyword with no location (and no buscja.com URL) is treated as non-actionable input.
Incremental runs that end early (no tasks / no results) release the state lock and atomic claim, so the next scheduled run is no longer reported as lock-busy for 30 minutes.
Failed business-page fetches are retried once, logged as a warning with the count, and in incremental mode a known listing keeps its previous change state instead of flipping to a false UPDATED.
skipReposts now works: contentHash is a sha256 of the normalised name, street, city, state and phone digits.
descriptionFormat is applied (all / text / html / markdown).
Pasted business-page URLs now return categorySlug (from the URL), website and hasContactForm (when the page carries them) and no longer fetch the page twice.
searchQuery shows the query of the task that produced the record, not the first task's.
Hyphenated place names ("Embu-Guaçu") resolve; only comma, pipe, slash and a spaced " - " split a location (the old every-hyphen split remains as fallback).
startUrls given as { "url": "..." } objects are accepted.
Network errors (reset, DNS) are retried like retryable HTTP statuses; result-page concurrency lowered from 20 to 5.
The diagnostics input snapshot redacts the WhatsApp recipient and phone-number id; webhook URL and headers are secret inputs.
Added
Output fields descriptionText, descriptionHtml, descriptionMarkdown; the dataset "all" view lists them together with isRepost, repostOfId and repostDetectedAt.