- query
- The search term or URL this row came from, echoed onto every row. Present always - group by it when a file covers several searches.
- profile_id
- BBB's own identifier for the business, as an underscore-joined string. The stable key to match on across runs.
- url
- The business's BBB profile page. Present on every row - and the place to go for its reviews.
- name
- The business name as BBB lists it. Present on every row.
- type_of_entity
- The legal form BBB records - corporation, sole proprietor and so on, including Unknown where it is not established.
- contact_information
- A named contact with their role, such as Mr Jeff Graves (Owner/Manager). This is a person - see the legal note below.
- num_employees
- Headcount as a number. One of the rarest fields here: most profiles do not publish it, so expect the key to be missing far more often than not.
- primary_category
- The headline trade. On every row we read that carried both, this was identical to
category. - all_categories
- Every category the business lists, as one comma-joined string rather than an array. Usually several, and much wider than the headline one.
- category
- The headline trade again - the same value as
primary_category on every row we have seen. Present on every row, which primary_category is not. - years_in_business
- How long they have traded, as a number.
- business_start
- The founding year, as a string rather than a number - 1992. Worth noting if you are doing arithmetic across both this and
years_in_business. - website
- The business's own site, where published.
- email
- A contact address, clean and usable. Only some profiles publish one.
- additional_emails
- The same kind of address, but obfuscated by BBB - sentinel markers around a form using
__at__ and __dot__. Every row that has this field is like that; decode it before use, or prefer email. - phone
- The main number, formatted as BBB displays it. Present on every row.
- fax_numbers
- A fax number where one is listed, formatted the same way.
- additional_phone
- A secondary number where one is listed.
- displayed_address
- The full address as one line, the way the profile shows it.
- address
- Just the street part. Present as a key on every row, though sometimes empty - one of the few that behaves that way rather than being omitted.
- city
- The city. Present on every row.
- state
- The state or region code. Present on every row.
- postalcode
- The postcode, sometimes in the longer ZIP+4 form. Present on every row.
- country
- The country. Every row we have read said USA, but every search we ran was a US one, so treat that as a property of our runs rather than a limit of the service.
- service_area
- Where they will travel to, as an array of strings - typically counties, then the state, then the country.
- accredited
- Whether the business is BBB accredited, as the string Yes or No rather than a boolean. Present on every row.
- rating
- BBB's letter grade as a string - A+, A, A- and so on. This is BBB's own assessment, not a customer score. Do not confuse it with the star rating on our reviews page, which is a number.
- average_rating
- The customer star average, as a number from 1 to 5. This is the one that comes from reviewers. Absent on businesses with no reviews.
- reviews_total
- How many customer reviews the profile has, as a number. On every row we read it appeared together with
average_rating - never one without the other. - images
- The profile image as a single object with height, width, url and altText - not an array, and altText was null on every row we have seen.