# BBB Business Details Scraper (`piotrv1001/bbb-business-details-scraper`) Actor

The BBB Business Details Scraper turns Better Business Bureau profile URLs into full company records — principals and contacts, phone, email, websites, BBB rating, accreditation, licenses, years in business, plus complaints and customer reviews — ideal for lead qualification and vendor vetting.

- **URL**: https://apify.com/piotrv1001/bbb-business-details-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🚀 BBB Business Details Scraper

Turn any Better Business Bureau profile URL into a complete business record. The **BBB Business Details Scraper** returns what the search results do not: principals and management with names and titles, email and every phone number, websites and social links, the BBB rating with its reasons, accreditation dates, licenses with the issuing agency, years in business, entity type, and complaint and review totals — plus, on request, the full complaint history and customer reviews. Built for B2B lead qualification, KYB and vendor vetting, reputation monitoring and risk scoring.

Pairs with the [BBB Advanced Scraper](https://apify.com/piotrv1001/bbb-advanced-scraper): search by keyword and location there, then feed the profile URLs here.

### ✨ Features

- 🧑‍💼 **Decision makers**: Principals and management contacts with full names and titles, straight from the profile.
- 📞 **Every contact channel**: Primary phone, additional phones, fax, de-obfuscated email, websites and social profiles.
- ⭐ **Trust signals**: BBB rating and the reasons behind it, accreditation status and date, alerts, claimed status, out-of-business flag.
- 📜 **Licenses and history**: License numbers with the issuing agency, file-opened, business-start and incorporation dates, years in business, entity type.
- ⚠️ **Complaint history** (optional): Every complaint with type, status, date, full text and the business's responses, paginated to the cap you set.
- 💬 **Customer reviews** (optional): Star rating, reviewer, date, text and the business's reply.
- 🇺🇸🇨🇦 **US and Canada**: Any bbb.org profile URL works, including `/details`, `/complaints` and `/customer-reviews` variants.
- 💸 **Pay per record**: One price per business profile, a small price per complaint or review — nothing charged for profiles that no longer exist.

### 🛠️ How It Works

1. **Paste profile URLs** – Add BBB business profile URLs (or the `url` column from the BBB Advanced Scraper's results).
2. **Choose the depth** – Turn on **Include complaints** and/or **Include customer reviews** if you need them, and set per-business caps.
3. **Run the scraper** – Get one JSON record per business, ready for your CRM, spreadsheet or enrichment pipeline.

### 💰 Pricing

| Event            |  Price | What you get                                                                       |
| ---------------- | -----: | ---------------------------------------------------------------------------------- |
| Business profile | $0.015 | The full record shown below (everything except `complaints` and `reviews`)         |
| Complaint        | $0.005 | One complaint with responses, only when **Include complaints** is on               |
| Customer review  | $0.005 | One review with the business's reply, only when **Include customer reviews** is on |

A run over 100 profiles with no complaints or reviews costs $1.50. Profiles that return "not found" are free.

### 📥 Input

| Field                      | Type    | Description                                                                                  |
| -------------------------- | ------- | -------------------------------------------------------------------------------------------- |
| `startUrls`                | array   | BBB business profile URLs. Sub-pages and `addressId` variants are normalised to the profile. |
| `includeComplaints`        | boolean | Collect the complaint history. Default `false`.                                              |
| `includeReviews`           | boolean | Collect customer reviews. Default `false`.                                                   |
| `maxItems`                 | integer | Maximum businesses per run. Default `50`.                                                    |
| `maxComplaintsPerBusiness` | integer | Cap per business when complaints are on. Default `100`.                                      |
| `maxReviewsPerBusiness`    | integer | Cap per business when reviews are on. Default `100`.                                         |
| `proxyConfiguration`       | object  | Keep the default (US residential).                                                           |

### 📊 Sample Output Data

One record per business. Example (complaints and reviews trimmed to one item each):

```json
{
    "bbbId": "0875",
    "businessId": "9237",
    "url": "https://www.bbb.org/us/tx/plano/profile/security-system-monitors/smith-thompson-home-security-0875-9237",
    "name": "Smith Thompson Home Security",
    "alternateNames": [
        "Thompson Home Services, LLC",
        "Smith Thompson Home Security and Alarm Houston",
        "Smith Thompson Home Security and Alarm Austin",
        "Smith Thompson Home Security and Alarm San Antonio"
    ],
    "category": "Security System Monitors",
    "categories": [
        "Security System Monitors",
        "Heating and Air Conditioning",
        "Pest Control Services",
        "Air Conditioning Contractors",
        "Security Systems",
        "Security Systems Consultants",
        "Home Automation",
        "Smart Home Security"
    ],
    "description": null,
    "address": {
        "line1": "6652 Pinecrest Dr STE 500",
        "line2": null,
        "city": "Plano",
        "state": "TX",
        "zip": "75024-2943",
        "country": "US",
        "formatted": "6652 Pinecrest Dr STE 500, Plano, TX 75024-2943"
    },
    "latitude": 33.06602,
    "longitude": -96.80907,
    "isHeadquarters": false,
    "locationsCount": 4,
    "phone": "(972) 526-8500",
    "additionalPhones": ["(972) 661-8585", "(800) 728-6906", "(972) 393-2000"],
    "fax": ["(972) 526-8510"],
    "email": null,
    "additionalEmails": [],
    "website": "https://smiththompson.com/",
    "websites": [],
    "socialLinks": [
        {
            "type": "facebook",
            "url": "https://www.facebook.com/smiththompsonmonitoring/timeline/"
        },
        {
            "type": "instagram",
            "url": "https://www.instagram.com/smiththompsonsecurity/"
        }
    ],
    "contacts": [
        {
            "name": "Mr. Mark S. Thompson",
            "title": "President",
            "isPrincipal": true,
            "isManagement": true
        },
        {
            "name": "Ms. Lynda Thompson",
            "title": "Vice President",
            "isPrincipal": true,
            "isManagement": true
        }
    ],
    "rating": "A+",
    "ratingReasons": [],
    "isAccredited": true,
    "accreditedSince": "1987-01-01",
    "accreditationRevoked": null,
    "bbbFileOpened": "1985-10-01",
    "businessStarted": "1977-01-01",
    "incorporated": "2012-03-16",
    "yearsInBusiness": 49,
    "numEmployees": null,
    "entityType": "Limited Liability Company (LLC)",
    "paymentMethods": [],
    "licenses": [],
    "complaintsTotal": 11,
    "complaintsClosedLast3Years": 11,
    "complaintsClosedLast12Months": 3,
    "reviewsTotal": 10,
    "averageReviewRating": 3,
    "alerts": [],
    "additionalInformation": [
        {
            "title": "Referral Assistance",
            "text": "Texas Department of Agriculture\n2405 Texas Avenue South\nCollege Station TX 77840\nPhone Number: (979) 680-5213\nbrenda.carlson@tx.usda.gov"
        }
    ],
    "isOutOfBusiness": false,
    "isClaimed": true,
    "localBbb": "BBB serving North Central Texas",
    "status": "ok",
    "scrapedAt": "2026-09-13T17:17:30.734Z",
    "complaints": [
        {
            "id": "0875_9237_24907723",
            "date": "2026-06-03",
            "type": "Product Issues",
            "status": "Answered",
            "text": "I am filing this complaint because Smith Thompson Home Security has repeatedly failed to provide documentation related to a false alarm inci …",
            "responses": [
                {
                    "date": "2026-06-05",
                    "by": "business",
                    "text": "We were able to forward all the dates and times of this event to the customer, and certainly apologi …"
                }
            ]
        }
    ],
    "reviews": [
        {
            "id": "0875_9237_4657977",
            "date": "2026-01-30",
            "rating": 1,
            "reviewer": "Michael G",
            "text": "I would not recommend them. I always paid for the yearly service up front.  At first things were fine.  Then at one point my phone wasnt alw …",
            "businessResponse": null,
            "businessResponseDate": null,
            "customerRebuttal": null
        }
    ]
}
```

Profiles that no longer exist come back as `{ "url": "...", "status": "not_found" }` and are not charged.

### 🔗 Use cases

- **Lead qualification**: Enrich a prospect list with principals, direct phones, email, rating and complaint counts before outreach.
- **KYB / vendor vetting**: Accreditation date, licenses, years in business, entity type and alerts in one call per company.
- **Reputation monitoring**: Re-run on your own or your competitors' profiles and diff complaints and reviews over time.
- **Risk scoring**: Complaints closed in the last 12 months and 3 years, average review stars and rating reasons as model features.

Know who you are dealing with — run the **BBB Business Details Scraper** today! 🚀

# Actor input Schema

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

Business profile pages on bbb.org, e.g. https://www.bbb.org/us/tx/plano/profile/security-system-monitors/smith-thompson-home-security-0875-9237. The /details, /complaints and /customer-reviews variants of a profile URL work too. Tip: feed the profile URLs from the BBB Advanced Scraper's results.

## `includeComplaints` (type: `boolean`):

Also collect the business's complaint history (type, status, date, text, business responses). Charged per complaint.

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

Also collect customer reviews (stars, text, date, reviewer, business response). Charged per review.

## `maxItems` (type: `integer`):

Stop after this many businesses from the list.

## `maxComplaintsPerBusiness` (type: `integer`):

Cap on complaints collected per business when 'Include complaints' is on.

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

Cap on reviews collected per business when 'Include customer reviews' is on.

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

BBB profile pages require US residential proxies. Keep the default.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.bbb.org/us/tx/plano/profile/security-system-monitors/smith-thompson-home-security-0875-9237"
    },
    {
      "url": "https://www.bbb.org/us/tx/houston/profile/fire-water-damage-restoration/servpro-of-bellaire-0915-90071263"
    },
    {
      "url": "https://www.bbb.org/us/il/hoffman-estates/profile/department-stores/transformco-0654-90031173"
    }
  ],
  "includeComplaints": false,
  "includeReviews": false,
  "maxItems": 50,
  "maxComplaintsPerBusiness": 100,
  "maxReviewsPerBusiness": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `businesses` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.bbb.org/us/tx/plano/profile/security-system-monitors/smith-thompson-home-security-0875-9237"
        },
        {
            "url": "https://www.bbb.org/us/tx/houston/profile/fire-water-damage-restoration/servpro-of-bellaire-0915-90071263"
        },
        {
            "url": "https://www.bbb.org/us/il/hoffman-estates/profile/department-stores/transformco-0654-90031173"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/bbb-business-details-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 = {
    "startUrls": [
        { "url": "https://www.bbb.org/us/tx/plano/profile/security-system-monitors/smith-thompson-home-security-0875-9237" },
        { "url": "https://www.bbb.org/us/tx/houston/profile/fire-water-damage-restoration/servpro-of-bellaire-0915-90071263" },
        { "url": "https://www.bbb.org/us/il/hoffman-estates/profile/department-stores/transformco-0654-90031173" },
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/bbb-business-details-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 '{
  "startUrls": [
    {
      "url": "https://www.bbb.org/us/tx/plano/profile/security-system-monitors/smith-thompson-home-security-0875-9237"
    },
    {
      "url": "https://www.bbb.org/us/tx/houston/profile/fire-water-damage-restoration/servpro-of-bellaire-0915-90071263"
    },
    {
      "url": "https://www.bbb.org/us/il/hoffman-estates/profile/department-stores/transformco-0654-90031173"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call piotrv1001/bbb-business-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/bbb-business-details-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/4V7ghfOGVfh9Gkdlq/builds/fB68qyC3cdMZUtc5s/openapi.json
