# BBB Scraper - Business Leads, Ratings & Accreditation (`scrapesage/bbb-scraper`) Actor

Scrape Better Business Bureau businesses by category & city: name, BBB rating (A+ to F), accreditation, phone, full address, website, email, years in business, complaints, customer reviews & owner contacts. US & Canada B2B lead generation. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapesage/bbb-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Agents, Integrations
- **Features:** Limited permissions
- **Stats:** 51 total users, 7 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 business leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## BBB Scraper - Better Business Bureau Business Leads, Ratings & Accreditation

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by the International Association of Better Business Bureaus (BBB) or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "BBB" is referenced only to describe the publicly available website this Actor collects data from.

Extract **complete Better Business Bureau business data** at scale: the fields that make a US or Canadian B2B lead actionable. **Business name, BBB rating (A+ to F), accreditation, phone, full address, the business email BBB holds, website, social profiles, owner and principal contacts with titles, years in business, products and services, licences, service area, complaints and full customer reviews** with the business's replies. Every record carries a 0–100 **lead score**, and website enrichment can add more emails and socials from the business's own site.

Search by **category + city** (`Roofing Contractors` in `Dallas, TX`), a ZIP code, or a business name, or paste BBB search, category and profile URLs. Export JSON, CSV or Excel. No login and no API key.

### Why this BBB scraper?

BBB is one of the most trusted US business directories, and a goldmine for B2B prospecting: every profile is a real, vetted business with a rating, an accreditation signal, a phone number and an address. This actor reads BBB's full embedded business record (not just the visible card), so it ships **a complete BBB dataset**:

| Data | This actor |
| --- | --- |
| Business name, category, phone, full address | ✅ |
| **BBB rating (A+ to F) + numeric rating score** | ✅ |
| **Accreditation status + accredited-since date** | ✅ |
| **Business email held by BBB** | ✅ with details |
| **Website + social profiles** (Facebook, Instagram, LinkedIn, X, YouTube) | ✅ with details |
| **Owner / principal contacts (names + titles)** | ✅ with details |
| Years in business, start / incorporation dates, legal entity type | ✅ with details |
| Products & services, licences, hours, service area (cities, counties, ZIPs) | ✅ with details |
| Complaint counts (3-yr & 12-mo) + review count & average stars | ✅ with details |
| **Full customer reviews** (stars, date, text, business reply) | ✅ opt-in |
| Other branch locations of multi-location businesses | ✅ with details |
| **Goes past BBB's 225-results-per-search limit** | ✅ |
| Emails & socials from the business's own website | ✅ opt-in |
| **Lead score (0–100)** on every record | ✅ |
| Monitor mode: only new or changed businesses | ✅ |

### What you get

One record per business (`type: "business"`). Every run returns the listing fields; **Scrape full business details** (or reviews / website enrichment) adds the profile fields.

| Field | What it is |
|---|---|
| `businessName`, `category`, `categories` | Name, primary category and every BBB category the business is listed under |
| `bbbRating`, `ratingScore`, `accredited` | BBB letter grade (A+ to F, or `NR` when BBB has not graded the business), numeric score, accreditation |
| `phone`, `phones`, `address`, `city`, `state`, `zip`, `country`, `latitude`, `longitude` | Contact and location |
| `serviceArea` | Cities, counties and ZIP codes the business serves (when listed) |
| `profileUrl`, `reviewsUrl`, `complaintsUrl`, `requestQuoteUrl`, `logoUrl` | Links to the BBB profile, its reviews and complaints pages, the quote form and the logo |
| `bbbChapter`, `businessId`, `bbbId` | The local BBB office and BBB's identifiers |
| `leadScore` | 0–100 score from the contact and trust signals on the record |
| `email`, `emails`, `website`, `websites`, `socials` | *Details:* the email BBB holds for the business, websites and social profiles |
| `principalContacts` | *Details:* owners and managers with their titles |
| `yearsInBusiness`, `businessStarted`, `dateIncorporated`, `dateAccredited`, `bbbFileOpened`, `businessEntityType` | *Details:* history and legal form |
| `description`, `productsAndServices`, `licenses`, `hoursOfOperation`, `paymentMethods`, `numberOfEmployees`, `alsoKnownAs` | *Details:* what the business does and how it operates |
| `complaintCount`, `complaintsLast3Years`, `complaintsLast12Months`, `customerReviewCount`, `averageStarRating`, `reasonRating` | *Details:* reputation summary |
| `totalLocations`, `otherLocations`, `photoUrls`, `profileClaimed`, `fullAddress` | *Details:* branches, photos, whether the owner claimed the profile |
| `reviews` | *Reviews:* reviewer, star rating, date, full text and the business's reply |
| `contactFormUrl` | *Website enrichment:* the contact page on the business's site |

### Use cases

- **B2B lead generation**: build targeted lists of real, vetted businesses by category and city with phone, email, website and owner name. Prioritise with `leadScore`, filter to **BBB-accredited** or **A+ rated** prospects, then push into your CRM.
- **Sales prospecting**: agencies and SaaS, insurance and financial teams that sell to local businesses can find every `HVAC`, `Roofing`, `Plumbing`, `Auto Repair`, `Law Firm` or `Dentist` in a metro and reach the owner directly.
- **Reputation & competitor intelligence**: track BBB ratings, accreditation, complaint volume and customer reviews across a market.
- **Vendor & supplier vetting**: pull accreditation, years in business, complaints, licences and legal form to qualify vendors at scale.
- **Data enrichment**: paste a list of BBB profile URLs to enrich them with full contact and trust data.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up): the free plan is enough to try this actor.
2. Open the **BBB Scraper**, enter one or more **search terms** (categories or keywords) and **locations** (or paste BBB URLs), and click **Start**.
3. Turn on **Scrape full business details** for emails, owners, websites and the rest of the profile; add **customer reviews** or **website enrichment** if you need them.
4. Watch results stream into the dataset table, then **export** as JSON, CSV, Excel, XML or RSS, or pull them through the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "searchTerms": ["Roofing Contractors", "Plumbers"],
    "locations": ["Dallas, TX", "Austin, TX"],
    "maxResults": 100,
    "accreditedOnly": false,
    "minRating": "any",
    "includeDetails": true,
    "includeReviews": false,
    "enrichContacts": false,
    "monitorMode": false
}
```

- **searchTerms**: categories or keywords (`Plumbers`, `HVAC`, `Lawyers`) or a specific business name. Combined with every location.
- **locations**: `City, ST` strings (`Austin, TX`), ZIP or postal codes, or a state or province. Combined with every search term.
- **startUrls**: BBB **search** pages (`/search?find_text=…&find_loc=…`), **category** pages (`/us/tx/austin/category/plumber`) or **profile** pages (`/us/.../profile/...`). Profile URLs always return the full profile. Lists can also be imported from a file or a Google Sheet (**urlsFromFile**).
- **maxResults** *(default 100)*: total businesses across all searches. `0` = no limit.
- **maxResultsPerSearch**: optional cap per term + location combination.
- **accreditedOnly**: keep only BBB-accredited businesses.
- **minRating**: keep only businesses at or above a BBB letter grade (`A+`, `A`, `B+`, …).
- **includeDetails** *(default false)*: open each profile for email, website, socials, owners, history, licences, hours, service area and the rest of the profile.
- **includeReviews** *(default false)*: add customer reviews, up to **maxReviewsPerBusiness** each (turns on details).
- **enrichContacts** *(default false)*: also visit each business's own website for more emails, socials and its contact page (turns on details).
- **monitorMode** + **monitorKey**: output only businesses that are new or changed since the last run with the same key.

### Output

A detailed record looks like this (values are illustrative):

```json
{
    "type": "business",
    "businessId": "90228991",
    "bbbId": "0875",
    "bbbChapter": "BBB serving North Central Texas",
    "businessName": "Lone Star Roofing & Construction",
    "category": "Roofing Contractors",
    "categories": ["Roofing Contractors", "Gutters", "Commercial Roofing"],
    "bbbRating": "A+",
    "ratingScore": 99.5,
    "accredited": true,
    "phone": "(214) 555-0188",
    "address": "1200 Commerce St Ste 300",
    "city": "Dallas",
    "state": "TX",
    "zip": "75202",
    "country": "US",
    "serviceArea": "Collin County, TX; Dallas County, TX; Plano, TX; Frisco, TX",
    "profileUrl": "https://www.bbb.org/us/tx/dallas/profile/roofing-contractors/lone-star-roofing-0875-90228991",
    "email": "office@lonestarroofing.example",
    "website": "https://lonestarroofing.example",
    "socials": { "facebook": "https://www.facebook.com/lonestarroofing", "instagram": "https://www.instagram.com/lonestarroofing" },
    "principalContacts": [{ "name": "Jordan Avery", "title": "Owner" }],
    "productsAndServices": "Roof replacement, storm damage repair, gutters, commercial roofing",
    "businessEntityType": "Limited Liability Company (LLC)",
    "yearsInBusiness": 17,
    "businessStarted": "2009-04-01",
    "dateAccredited": "2014-03-25",
    "licenses": [{ "number": "RC-12345", "agency": "Roofing Contractors Association of Texas", "agencyPhone": "800-555-0100", "expiration": "2027-01-31" }],
    "complaintsLast3Years": 1,
    "customerReviewCount": 38,
    "averageStarRating": 4.7,
    "reviews": [{ "author": "Taylor M", "rating": 5, "date": "2026-08-14", "text": "Replaced our roof in two days and cleaned up perfectly.", "businessResponse": "Thank you, Taylor!" }],
    "profileFetched": true,
    "leadScore": 94,
    "searchTerm": "Roofing Contractors",
    "searchLocation": "Dallas, TX",
    "scrapedAt": "2026-10-07T12:00:00.000Z"
}
```

### Good to know

- **BBB lists at most 225 businesses per search order**, and its default order puts accredited businesses first. When you ask for more, the actor also reads BBB's other orders (distance, rating, A–Z and Z–A) and removes duplicates, so one search term + location can reach several hundred businesses, accredited and not. For a whole metro, add several cities or ZIP codes.
- **Emails**: the email comes from the business's BBB profile, when the business gave BBB one. Businesses that did not return `email: null`; turn on website enrichment to also look on their own site.
- **Ratings**: businesses BBB has not graded show `bbbRating: "NR"` (Not Rated, as on BBB) and `ratingScore: null`; they are left out when you set a minimum rating.
- **Reviews**: BBB shows reviews newest first, ten per page. Only reviews with text or a star rating are returned, and you are charged only for those.
- **Coordinates** come from BBB. For some businesses BBB stores only an approximate, city-level point.
- **Profiles that cannot be opened**: on the rare occasion BBB refuses a business's profile page after every retry, the business is still saved from the search result with `profileFetched: false` and charged as a basic listing only. In monitor mode it is not saved, so the next run retries it.
- **Monitor mode** delivers each business once per monitor key: later runs return only businesses that are new or whose rating, accreditation or phone changed.

### How much does it cost to scrape BBB?

This Actor uses Apify's **pay-per-event** pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:

- **Business lead** - Each BBB business from search: name, BBB rating, accreditation, phone, address, category, geo & profile URL
- **Full business profile** - Per business enriched with website, owner/principal contacts, years in business, complaints, reviews count, licenses, hours & service area
- **Customer review** - Each BBB customer review extracted (author, rating, date, text)
- **Website contact enrichment** - Per business whose website was crawled for emails & social profiles

The current price of each event is shown on the **Pricing** tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)**: start runs, fetch datasets and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)**: official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)**: run it daily or weekly to keep a city + category lead list fresh. Combine with **monitor mode** to drip only new businesses into your pipeline.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)**: trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/bbb-scraper').call({
    searchTerms: ['HVAC'],
    locations: ['Phoenix, AZ'],
    maxResults: 100,
    includeDetails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} BBB business leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps, no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)**: multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)**: push new business leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)**: get notified when a monitored search finds new businesses.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)**: auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)**: pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)**: trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)**: ask your assistant to "find A+ accredited roofing contractors in Dallas with an email and an owner contact" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready**: AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)**: an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp), with no account and no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)**: agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **local-business lead-gen stack**:

- **[Google Maps Scraper](https://apify.com/scrapesage/google-maps-scraper)** - places, business leads, emails & contacts.
- **[Thumbtack Scraper](https://apify.com/scrapesage/thumbtack-scraper)** - home-service pro leads, reviews & hire data.
- **[Expertise.com Scraper](https://apify.com/scrapesage/expertise-scraper)** - vetted local-business leads across US verticals.
- **[BuildZoom Scraper](https://apify.com/scrapesage/buildzoom-scraper)** - contractor directory leads.
- **[Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper)** - emails, phones & socials from any domain list.
- **[LinkedIn Company Scraper](https://apify.com/scrapesage/linkedin-company-scraper)** - firmographics & B2B company leads.
- **[TaxBuzz Scraper](https://apify.com/scrapesage/taxbuzz-scraper)** - tax & accounting professional leads.
- **[Care.com Scraper](https://apify.com/scrapesage/care-com-scraper)** - caregiver & care-business leads.

### Tips

- **Best leads first**: set `accreditedOnly: true` and/or `minRating: "A"` to focus on vetted, high-trust businesses. Accredited profiles also carry the richest data (email, website, owner, years in business, dates).
- **Go deep on a market**: split by sub-category (e.g. `Residential Roofing`, `Commercial Roofing`) and by city or ZIP code to cover a whole metro.
- **Emails**: turn on `includeDetails` for the email BBB holds; add `enrichContacts` to also look on the business's own website.
- **Cost control**: details, reviews and website enrichment are all opt-in; list-only runs are fast and cheap.
- **Recurring leads**: pair **monitor mode** with **Schedules** to receive only newly listed or changed businesses each day.

### FAQ

**How do I scrape BBB businesses for a specific city?** Put the category in `searchTerms` (`Plumbers`) and the city in `locations` (`Austin, TX`). Each term is combined with each location.

**Can I get more than 225 businesses for one search?** Yes. BBB itself stops at 225 results per search order, so the actor reads BBB's other orders as well and removes duplicates. For full coverage of a large metro, also split it into several cities or ZIP codes.

**Does it work without the BBB API?** Yes. No API key or login needed: the actor reads BBB's public pages.

**Where do the emails come from?** With `includeDetails` on, the email is the one the business gave BBB, taken from its BBB profile. With `enrichContacts` on, the actor also visits the business's own public website and adds the contact emails published there.

**Can I export to Google Sheets, CSV or Excel?** Yes: one click in the dataset view, or automatically via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor new businesses automatically?** Turn on `monitorMode`, set a `monitorKey` and create a [Schedule](https://docs.apify.com/platform/schedules). Each run outputs only new or changed businesses.

**A field is null: why?** BBB holds richer data for accredited and established businesses than for unrated listings. Fields like owners, years in business, hours and service area are filled when BBB has them, and are `null` only when the data isn't on BBB.

**Is scraping BBB legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and BBB's terms.

### Data & lawful use

This Actor reads business and professional listings that the professionals themselves published to be found: names, roles, firms, ratings and the contact details shown on the public listing. Because those details belong to identifiable people, treat the output as personal data. If you are in the EU or UK you are the data controller for what you do with it: have a lawful basis (usually legitimate interest for B2B prospecting or market research), keep any outreach relevant to the professional's line of work, honour opt-outs and deletion requests, and do not use the output for spam.

Under [Apify's Standard Actor Contract](https://docs.apify.com/legal/standard-actor-contract), which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.

### Disclaimer

**This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by the International Association of Better Business Bureaus (BBB) or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.**

"BBB" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official BBB product, is not authorised or certified by the International Association of Better Business Bureaus (BBB), and does not distribute BBB software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome: this actor is actively maintained.

# Actor input Schema

## `searchTerms` (type: `array`):

What to search for on BBB - a category or keyword such as <code>Plumbers</code>, <code>Roofing Contractors</code>, <code>Auto Repair</code>, <code>HVAC</code>, <code>Lawyers</code>, or a specific business name. Each term is combined with every location below.

## `locations` (type: `array`):

Where to search - a <code>City, ST</code> string (<code>Austin, TX</code>, <code>Chicago, IL</code>), a ZIP/postal code, or a US state / Canadian province. Each location is combined with every search term. Leave empty to search nationwide for a named business.

## `startUrls` (type: `array`):

Direct BBB URLs to scrape in addition to searches: search pages (<code>https://www.bbb.org/search?find_text=...\&find_loc=...</code>), category pages (<code>https://www.bbb.org/us/tx/austin/category/plumber</code>), near-me pages, or business profile pages (<code>https://www.bbb.org/us/.../profile/...</code>). Profile URLs always return the full profile.

## `maxResults` (type: `integer`):

Maximum number of businesses to scrape across all searches. Use <code>0</code> for no limit. BBB lists up to 225 businesses per search order; when you ask for more, the actor also reads BBB's other orders (distance, rating, A–Z, Z–A), so one search term + location can reach several hundred businesses.

## `maxResultsPerSearch` (type: `integer`):

Optional cap per individual search term + location combination. <code>0</code> = no per-search cap (still bounded by Max businesses).

## `accreditedOnly` (type: `boolean`):

Keep only businesses that are BBB Accredited (paying members that meet BBB standards). Uses BBB's own accredited filter, so a search returns accredited businesses only.

## `minRating` (type: `string`):

Keep only businesses at or above this BBB letter rating. Businesses BBB has not graded are left out when a minimum is set.

## `includeDetails` (type: `boolean`):

Open each business profile for the complete record: the email BBB holds for the business, website, social profiles, owner / principal contacts with titles, years in business, business start / incorporation / accreditation dates, legal entity type, products & services, licences, hours, service area (cities, counties, ZIP codes), other locations, complaint and review counts, photos and the full "About" overview. Adds one request per business.

## `includeReviews` (type: `boolean`):

Add the business's BBB customer reviews, newest first: reviewer, star rating, date, full text and the business's reply. Turns on full details (the reviews page carries the full profile too).

## `maxReviewsPerBusiness` (type: `integer`):

How many customer reviews to keep per business when "Include customer reviews" is on (BBB pages them 10 at a time). Only reviews with text or a star rating are returned and billed.

## `enrichContacts` (type: `boolean`):

For businesses that list a website, also visit it (home + contact/about, up to 3 pages) and add the contact emails, phone numbers, contact-form URL and social profiles (LinkedIn, Instagram, Facebook, X, YouTube, TikTok) it publishes. Template and placeholder addresses are filtered out. Turns on full details.

## `monitorMode` (type: `boolean`):

Remember businesses delivered on previous runs (in a named key-value store) and output only businesses that are new or changed (rating, accreditation or phone) since last time. Perfect for scheduled lead pipelines - pair with Apify Schedules to drip only fresh leads into your CRM.

## `monitorKey` (type: `string`):

Names the persistent monitor store so you can keep separate watch-lists (e.g. <code>austin-plumbers</code>). Reuse the same key across scheduled runs to keep deduplicating against history.

## `maxConcurrency` (type: `integer`):

How many business profiles to fetch in parallel. The default is tuned for speed and reliability.

## `proxyConfiguration` (type: `object`):

Leave this at the default: the actor routes every request itself (search pages over Apify datacenter proxies, business profiles over residential IPs in the country set here, US by default) and switches routes automatically when BBB pushes back. Add your own proxy URLs only if you must use your own proxies.

## `urlsFromFile` (type: `string`):

Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically.

## Actor input object example

```json
{
  "searchTerms": [
    "Plumbers"
  ],
  "locations": [
    "Austin, TX"
  ],
  "maxResults": 100,
  "maxResultsPerSearch": 0,
  "accreditedOnly": false,
  "minRating": "any",
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerBusiness": 8,
  "enrichContacts": false,
  "monitorMode": false,
  "monitorKey": "default",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "urlsFromFile": ""
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped BBB business records as JSON items in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "Plumbers"
    ],
    "locations": [
        "Austin, TX"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    },
    "urlsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/bbb-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["Plumbers"],
    "locations": ["Austin, TX"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
    "urlsFromFile": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/bbb-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "Plumbers"
  ],
  "locations": [
    "Austin, TX"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "urlsFromFile": ""
}' |
apify call scrapesage/bbb-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesage/bbb-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/d3TJ8xD7yXsYERtta/builds/G0FO35e2g9gsLKHos/openapi.json
