BBB Scraper API
A BBB scraper API that searches the Better Business Bureau for a trade in a US location and returns each business with name, phone, full postal address and its BBB profile URL, deduplicated on the BBB’s own business id. Read from the structured block the BBB publishes for search engines — the only part of the page readable without a browser.
$0.002 per delivered business · $2 free every month · Failed runs never billed
$ curl $QD/bbb_businesses/run \
-H "Authorization: Bearer $QD_API_KEY" \
-d '{"query": "plumber", "location": "Chicago, IL", "max_results": 60}'
{ "status": "done", "count": 60,
"results": [
{
"id": "…",
"name": "…",
"phone": "…",
"street": "…" } ],
"cost": 0.12 }
# 60 businesss × $0.002 · nothing delivered, nothing charged
Try it
BBB businesses, running now
Change the input and run it against the live collector — nothing to install, no sign-up.
Run it from your own code, on your own inputs
Same collector, same rows — $2 of free API credit every month, no card.
What a BBB scraper API does
The BBB search page needs JavaScript to show its rows, but it server-renders a schema.org results block for search engines with each business as a LocalBusiness: postal address, phone and profile URL. This collector reads that block, which makes the site readable on a plain fetch at all. It accepts both shapes the block takes — an entry that is the business directly, and one that wraps it in a list item — rather than assuming one.
Two decisions are worth stating out loud. Identity: the same company appears in one result set both as its main profile and as a per-location entry, with different URLs and an identical BBB id embedded in both; deduplicating on the URL would keep both and charge you twice for one lead, so rows are keyed on the id. Honesty: the BBB letter grade and the accreditation badge — the reason most people look at BBB — are not in the structured block, only in the rendered markup, and they are not collected. A grade added from an unverified selector would be worse than an absent one: it is a number customers act on.
Limits, in plain numbers
Everything that bounds one run of this collector. No hidden throttles.
Max per run
200 businesss
Price
$0.002 / business
Per 1,000
$2.00
Failed runs
Free zero rows, zero charge
Free every month
$2 no card
Rate limit
60 req/min on the free tier
What one business looks like
Every delivered business carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.
| Field | Type | What it holds |
|---|---|---|
rank | integer | 1-based position across pages, after duplicates are removed. |
id | string · nullable | BBB business id. The same company can appear as both a main profile and a per-location entry — these share an id and are delivered once. |
name | string | Business name. |
phone | string · nullable | Phone number as published. |
street | string · nullable | Street address. |
city | string · nullable | City. |
state | string · nullable | State code. |
postal_code | string · nullable | ZIP code. |
country | string · nullable | Country code. |
url | string · nullable | BBB profile URL. |
Inputs
The whole request. Anything you leave out falls back to the default shown in the catalog.
| Input | Type | Required | What it does |
|---|---|---|---|
query | string | yes | What to search for, e.g. "plumber" or "roofing". |
location | string | yes | US city and state, e.g. "Chicago, IL". |
country | string | no | ISO 3166-1 alpha-2 code — proxy exit geo and Google locale (gl). Omit for the default pool. |
max_results | integer | no | How many businesses to deliver at most (1–200). You pay only for delivered businesses. |
Pricing
BBB Scraper API pricing
$0.002 per delivered business. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 1,000 businesss before you spend anything.
Pay as you go
- $2 free credit / month
- 60 requests / min
- List unit prices
Starter
- $15 free credit / month
- 300 requests / min
- 10% off unit prices
Growth
- $50 free credit / month
- 600 requests / min
- 20% off unit prices
Scale
- $250 free credit / month
- 1,200 requests / min
- 30% off unit prices
Same wallet, same key and same $2 monthly allowance as every other Data API. Prices are launch pricing read live from the billing config — GET /v1/scraper/collectors returns the price your key actually pays.
Integration
One POST, typed rows
Base URL https://api.quanticdata.io/v1, Bearer auth, the same key as every other Data API. Endpoint: POST /v1/.
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/bbb_businesses/run \
-H "Authorization: Bearer $QD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"plumber","location":"Chicago, IL","max_results":60}'
What people build with the BBB scraper API
Three shapes of work this endpoint was designed around.
Trade lead lists
Plumbers, roofers, movers in a metro with phone and postal address, one row per business rather than per location.
Directory cross-checks
Join BBB rows with Google Maps and business-directory rows by phone or address to find who is listed where.
Territory mapping
Street, city, state and ZIP as separate fields, so a trade’s footprint can be mapped without parsing addresses.
BBB Scraper API versus rolling your own
The differences that actually cost time when you build this in-house.
| DIY scraper | This collector | |
|---|---|---|
| Readability | A JavaScript page with empty rows on a plain fetch | The structured block the BBB ships for search engines |
| Duplicates | Main profile and each location as separate leads | One row per BBB business id |
| Grades | Scraped from selectors nobody verified | Not collected, and the page says so |
| Blocks | Your IPs | Residential exits, failed runs free |
What people search for
Live autocomplete demand around BBB businesses, pulled with our own Keyword ideas collector.
Sources and standards
The platform documentation and standards this collector is built against — check any claim on this page against the primary source:
Does it return the BBB rating or accreditation?
No. Those two are only in the rendered markup, not in the structured block this reads, and guessing them from selectors would put unverified grades in your data. The row carries what the BBB states for search engines: identity, address, phone and profile URL.
Why is the same company not listed twice?
Because it is the same company. The BBB lists a business once as its main profile and again per location, with the same id in both URLs; the collector keys on that id so a lead is delivered — and billed — once.
Which locations work?
US locations as the BBB search accepts them, typically “City, ST”. Pass the trade as query.
Is there a BBB API?
Not a public one for search. This reads the public results page and needs no account.
Is there a free BBB scraper API?
Every account gets $2 of credit every month with no card, which is about 1,000 delivered businesss on this endpoint at $0.002 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.
How much does one run cost?
Multiply the rows you actually receive by $0.002. A run capped at 200 businesss — the maximum for this collector — costs $0.4 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and GET /v1/scraper/collectors returns the price your key actually pays.
Run the BBB scraper API now
$2 of free credit every month, no card. Your key returns its own prices from GET /v1/scraper/collectors.