---
title: "Get a Better Business Bureau business's complaint history"
method: GET
path: "/bbb/business/complaints"
tags: ["BBB"]
---

# Get a Better Business Bureau business's complaint history

`GET /bbb/business/complaints`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/bbb/business/complaints`
- Auth: API key in header `x-api-key`

Returns a business's BBB complaint history: total complaint count, complaints closed or filed in the last 12 months, and one page of per-complaint detail (date, type, status, narrative text, and any business response / customer answer thread). Complaints are listed newest first, 10 per page; use page with the returned page, total_pages and has_more to walk the full list. A business with no filed complaints returns total_complaints 0 and an empty complaints list -- this is a normal result, not an error.

## Query parameters

- `url` string, required
- `page` integer

## Headers

- `x-api-key` string, required

## Response `200`

OK

- BbbComplaintsResponseDoc
  - `code` integer
  - `data` BbbComplaintsResponse
    - `business_name` string
    - `closed_last_12_months` integer: ClosedLast12Months and FiledLast12Months are the two wordings BBB uses for the second summary line ("N complaints closed|filed in the last 12 months."). A page shows one of them; the other field is omitted.
    - `complaints` BbbComplaint[]
      - `business_responses` BbbComplaintMessage[]
        - `date` string
        - `text` string
      - `customer_answers` BbbComplaintMessage[]
        - `date` string
        - `text` string
      - `date` string
      - `id` string
      - `status` string: Status is one of BBB's fixed complaint-status values: Resolved, Unresolved, Answered, Unanswered, Unpursuable. Passed through as rendered rather than validated, since it is an upstream-controlled response value, not a request parameter.
      - `text` string
      - `type` string
    - `complaints_list_incomplete` boolean: ComplaintsListIncomplete is true when TotalComplaints is non-zero but BBB's itemized complaint list came back empty anyway. Confirmed live on at least one high-volume multi-location business (770 total complaints, page rendered "There are no matching results. Improve your results by removing some applied search filters." with no filters actually applied by this client) -- an upstream filter/ pagination quirk, not a parser failure. It is also set for any first page that counts complaints but lists none, whatever BBB renders in place of the list. TotalComplaints/ClosedLast12Months remain authoritative; Complaints will be empty even though real records exist upstream. A page past the end of the list is not incomplete.
    - `filed_last_12_months` integer
    - `has_more` boolean
    - `hidden_complaints` integer
    - `notice` string
    - `page` integer: Page is the page of the complaint list this response holds. TotalPages is the last page BBB's own pager links to; it is omitted when BBB renders no list (no complaints, or a page past the end). BBB lists fewer complaints than TotalComplaints counts, so TotalPages can be smaller than TotalComplaints/10. HasMore is true while Page is before TotalPages.
    - `period_text` string
    - `profile_under_review` boolean: ProfileUnderReview is true when BBB is updating the profile and has taken the complaint summary and list off the page for the duration. Notice is BBB's own sentence saying so. TotalComplaints and ClosedLast12Months then come from the counts BBB still embeds in the page and stay zero when it embeds none; Complaints is empty and ComplaintsListIncomplete is true. Seen live 2026-10-12; the state is BBB's, so asking again returns the same answer until the review ends.
    - `published_complaints` integer: PublishedComplaints is how many complaints BBB publishes details for, the ones the pages list. HiddenComplaints is how many it counts in TotalComplaints without publishing them. Both come from the page's embedded state and are left out when it does not carry them.
    - `source_url` string
    - `submit_complaint_url` string
    - `total_complaints` integer
    - `total_pages` integer
  - `msg` string

## Other responses

- `400`: Bad Request
- `404`: Not Found
- `500`: Internal Server Error
- `503`: Service Unavailable

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/afac9b012a27?raw)
