Access and scope
Set CRAWLORA_API_KEY to your Crawlora key. Prefer the listed Crawlora MCP tools
when connected; otherwise use the bundled scripts/crawlora.sh, which sends
x-api-key to https://api.crawlora.net/api/v1. Read
reference/endpoints.md for exact methods and parameters.
Check application code as well as HTTP status; payloads are inside data.
Stop on authentication errors, back off on 429, and retry a transient upstream
failure once. Bound calls/pages by the requested scope and credit budget. Retain
source IDs, URLs, source dates, and observation/crawl times separately.
Compare reported complaint themes or response patterns for selected businesses. Establish business/location scope, reporting/date window, and comparable complaint categories. Keep complainant allegations, business responses, customer replies, and BBB's presented status as distinct attributed evidence.
Resolve the entity and retrieve complaint evidence
- Use BBB dataset facets/search or live search to identify exact business profiles. Match business ID, name/alternate names, location, website, and HQ relationships. A multi-location HQ profile can aggregate branches; do not assign its count to each location or combine it with branch counts as independent complaints.
- Stored BBB profiles do not embed full complaints. Use the returned profile URL or verified HQ URL with live business/complaints/more-info routes, not a guessed complaint-page slug. Preserve crawl time versus live collection time.
total_complaintshas its own reporting window, typically the presented three-year window;closed_last_12_monthsis a different measure. Retain the returnedperiod_textrather than inventing a common time span across firms. There is no date filter/pagination parameter on the complaints route: filter returned itemized dates locally and mark bounded coverage.complaints_list_incomplete=truemeans real aggregate totals can accompany unavailable itemized detail. Do not substitute an empty list for zero complaints or fabricate theme/status counts. A genuinetotal_complaints=0can be normal, but it only describes that source/window, not all customers' experience.- Preserve complaint ID, date/type/status, narrative and response-thread roles.
BBB statuses include
Resolved,Unresolved,Answered,Unanswered,Unpursuable; an answer is not automatically a resolution or admission. Keep BBB'sREMOVEDredactions intact rather than reconstructing identities.
scripts/crawlora.sh /datasets/bbb-businesses/facets facet=category
scripts/crawlora.sh /bbb/search query="plumbing" location="Austin, TX" page=1
# Use a verified returned profile URL, for example:
# scripts/crawlora.sh /bbb/business/complaints url="$BBB_PROFILE_URL"
# scripts/crawlora.sh /bbb/business/more-info url="$BBB_PROFILE_URL"
Report patterns with defensible denominators
Deduplicate by complaint ID; multiple response rounds are one complaint with several observations. Code themes with uncertain/multi-label states and cite short attributed excerpts. Show itemized sample size, aggregate totals, missing lists, and date filters separately. A sample resolution/response proportion uses that sample's comparable statuses, not the total number of customers or a mismatched aggregate window. Response intervals need actual role/date pairs; a rounded date is not an exact elapsed-hour measurement.
Return identity/coverage, complaint and response evidence tables, theme/status
counts, source reasons-for-rating where relevant, and unresolved questions.
The main profile's reasons list can be shallow boilerplate; more-info supplies
the fuller per-factor list. Reviews, accreditation, and letter grades are separate
measures. Counts without comparable customer/transaction volume cannot rank a
business's complaint rate or prove fraud, quality, liability, or consumer outcomes.
Do not file complaints, contact businesses, publish accusations, or initiate a
legal action from a research request.