{
  "openapi": "3.0.1",
  "info": {
    "title": "BBB Scraper (Reviews, Complaints and Grades, No Login)",
    "description": "Scrape BBB reviews, customer complaints and business profiles: stars, review text, business replies, complaint type and status, BBB grade, accreditation and years in business. Rank any business against its local rivals and get only new reviews on schedules. No login. From $0.50 per 1,000 rows.",
    "version": "0.1",
    "x-build-id": "FPUugCyVfspXS63wz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/locaihost~bbb-reviews/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-locaihost-bbb-reviews",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/locaihost~bbb-reviews/runs": {
      "post": {
        "operationId": "runs-sync-locaihost-bbb-reviews",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/locaihost~bbb-reviews/run-sync": {
      "post": {
        "operationId": "run-sync-locaihost-bbb-reviews",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "businesses": {
            "title": "BBB business links",
            "type": "array",
            "description": "Links to businesses on BBB, like https://www.bbb.org/us/wa/seattle/profile/ecommerce/amazoncom-1296-7039385. A link to the business's reviews or complaints page works too. To find a business by name, use Search below.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search",
            "type": "array",
            "description": "Search BBB the way its search box does: a business name (Comcast) or a trade (plumber, roofing contractor). Each result is a business row with its BBB grade, accreditation, category, phone and address.",
            "items": {
              "type": "string"
            }
          },
          "searchLocation": {
            "title": "Search near",
            "type": "string",
            "description": "City and state, or a ZIP or postal code, like Austin, TX or 10001. Leave empty to search the whole country. To search several places, use More search locations."
          },
          "searchLocations": {
            "title": "More search locations",
            "type": "array",
            "description": "More cities or ZIP codes: every search runs in each of them (up to 100), with its own Max businesses per search. BBB shows at most 225 results per search, so several ZIP codes cover a big area better than one city. A business found in two places is charged once.",
            "items": {
              "type": "string"
            }
          },
          "searchCountry": {
            "title": "Search country",
            "enum": [
              "USA",
              "CAN"
            ],
            "type": "string",
            "description": "BBB covers the United States and Canada.",
            "default": "USA"
          },
          "maxBusinessesPerSearch": {
            "title": "Max businesses per search",
            "minimum": 0,
            "maximum": 225,
            "type": "integer",
            "description": "BBB shows up to 225 results per search (15 pages of 15). 0 means all of them. The same business listed twice is returned once.",
            "default": 30
          },
          "accreditedOnly": {
            "title": "Accredited businesses only",
            "type": "boolean",
            "description": "Searches return only BBB-accredited businesses. The others are skipped and cost nothing. Business links are always read.",
            "default": false
          },
          "detailsForFoundBusinesses": {
            "title": "Full details for businesses found",
            "type": "boolean",
            "description": "Open each business a search finds: its row then has review stars and counts, complaint counts, years in business and website, and its reviews and complaints are read with the limits below. Slower: one more page per business, plus the review and complaint pages.",
            "default": false
          },
          "maxReviewsPerBusiness": {
            "title": "Max reviews per business",
            "minimum": 0,
            "type": "integer",
            "description": "Customer reviews, newest first, 10 per page. 0 for none. Every review page is public, so a large number like 100000 gets them all (up to 2,000 pages).",
            "default": 100
          },
          "maxComplaintsPerBusiness": {
            "title": "Max complaints per business",
            "minimum": 0,
            "type": "integer",
            "description": "Complaints with the business's responses, newest first. 0 for none.",
            "default": 20
          },
          "includeBusinessInfo": {
            "title": "Business row for each business link ($)",
            "type": "boolean",
            "description": "Add one business row per business link: BBB grade, accreditation and since when, review stars and count, complaint counts, category, phone, address, website, years in business. Charged like any other row.",
            "default": true
          },
          "includeSummary": {
            "title": "Add a reputation summary per business ($)",
            "type": "boolean",
            "description": "Add one summary row per business, worked out from the reviews and complaints this run reads: complaints per month and the 90-day trend, the share the business answered and resolved, median days to its first reply, top complaint types, complaint types by month and the ones rising, star mix and review reply rate, plus BBB grade and accreditation. Charged as one business row. The numbers cover only what the run reads, so raise the review and complaint limits for a longer period.",
            "default": false
          },
          "benchmarkCompetitors": {
            "title": "Benchmark against local competitors ($)",
            "type": "boolean",
            "description": "Add one benchmark row per business: its overall rank among local competitors (like \"3 of 11\"), its rank and percentile for BBB grade, review stars, complaints closed in the last 12 months, share of complaints answered and resolved, and days to first reply, plus plain-English highlights and the competitor list. Works with business links and with searches. The competitors are found with BBB search and each is read once, so a benchmark reads about 12 pages. The competitors' own rows are not returned unless you turn on Also return the competitors' business rows.",
            "default": false
          },
          "competitorsToCompare": {
            "title": "Competitors to compare",
            "minimum": 3,
            "maximum": 25,
            "type": "integer",
            "description": "How many local competitors each business is compared with, from 3 to 25. Same BBB category and same city; if the city has fewer than 3, other businesses in the state are used and the row says so. More competitors read more pages.",
            "default": 10
          },
          "includeCompetitorRows": {
            "title": "Also return the competitors' business rows",
            "type": "boolean",
            "description": "Also return a business row for each competitor compared, charged as business rows. Off by default: the benchmark row already lists them with their grade, stars, complaints and reply days.",
            "default": false
          },
          "licenseExpiringWithinDays": {
            "title": "Licences expiring within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Return only businesses that have a licence expiring within this many days (1 to 365), or that expired in the last 30 days (flagged). Works with business links and with searches such as \"plumber\" near \"Austin, TX\". Businesses without a matching licence are not returned or charged. This returns business rows only, so reviews, complaints and summaries are skipped. Leave empty to turn off."
          },
          "stars": {
            "title": "Star ratings",
            "type": "array",
            "description": "Only reviews with these ratings. Leave empty for all. Does not apply to complaints.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "dateFrom": {
            "title": "Published on or after",
            "type": "string",
            "description": "Only reviews and complaints from this date on, like 2026-09-01, or a period back from today like 30 days. Both lists are newest first, so the run stops at this date."
          },
          "withRepliesOnly": {
            "title": "Only with a business response",
            "type": "boolean",
            "description": "Only reviews the business replied to, and complaints it responded to.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new since the last run",
            "type": "boolean",
            "description": "Return only reviews and complaints that earlier runs with the same businesses, searches and filters did not, and business rows only when the grade or counts changed. For daily or weekly schedules. A run with nothing new charges nothing.",
            "default": false
          },
          "maxResults": {
            "title": "Max rows in total",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many charged rows (reviews, complaints and businesses) across the whole run. 0 means no limit.",
            "default": 0
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}