crawlora-bbb 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6dea68bae3b0c2ff2c6004d52c8f19fd9acd390ba917f374c9e38637c9f8b70e
4
- data.tar.gz: a7a511cd31d4de07d22a34eeb8468d78d67da3fe0558e7f5f3283214561f03ef
3
+ metadata.gz: e3c094d9729c79a97342241d31ddc3abf46b2200b6b641c3d5d5d5d0bf031557
4
+ data.tar.gz: bed9fab51b7c22e94a8b1be8ee5e558affac6ec219f653e8b21aead4681d4d90
5
5
  SHA512:
6
- metadata.gz: 565cea8afccb79e10684368a24d0bef6daf749ee2b987644fa363d39295ae419136ab700b397ee8f5ee97daf6c3b4bd124dd246678a97d54da0fdc68b0586c4c
7
- data.tar.gz: 3b137de00f7c1b74c4bb6367e09ee3fccd242d34f039592d5daf62e8fd85a65544e7fb704238830dfbc9bdae9bbc2b2018ad1e9f4e696dfd999af0109d796469
6
+ metadata.gz: 472f2ae3cdec1d19afeae74d93a2901fde46ef5df6e49f7322644075ff56bf702577f935643885c84be35aff1a5c9ac64786e8e657820eb64b5a824912a220b4
7
+ data.tar.gz: a6f033a31745f3e6e93c08cfb2bbf8baaf9aa0d9a5e2ee5070ac1e0af6181191de8496545c60ceeee0d54c3ae6b3042ad0c69b4ce4d5c77e8b52320ed2b1891e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Changelog
2
2
 
3
- ## 0.2.0
3
+ ## 0.3.1
4
4
 
5
5
  - Initial focused Better Business Bureau Ruby client for Crawlora's hosted API.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # Crawlora Better Business Bureau Ruby client
1
+ # Crawlora Better Business Bureau API client for Ruby (`crawlora-bbb`)
2
2
 
3
- This gem calls the Crawlora hosted API at `https://api.crawlora.net/api/v1`. It does not call or scrape Better Business Bureau directly. Requests require your Crawlora API key and use your account's service plan.
3
+ This Ruby gem calls Crawlora's hosted Better Business Bureau API at `https://api.crawlora.net/api/v1`. It exposes 16 endpoints covering business search, profiles, complaints, reviews, categories, and ScamTracker reports; it does not call or scrape Better Business Bureau directly. Requests require your Crawlora API key and use your account's service plan.
4
4
 
5
5
  ## Install
6
6
 
@@ -15,7 +15,7 @@ require "json"
15
15
  require "crawlora/bbb"
16
16
 
17
17
  client = Crawlora::Bbb::Client.new
18
- result = client.request("bbb-scamtracker-search", JSON.parse("{\"query\": \"sample\"}"))
18
+ result = client.request("bbb-search", JSON.parse("{\"query\": \"sample\", \"location\": \"sample\"}"))
19
19
  puts result
20
20
  client.close
21
21
  ```
@@ -30,4 +30,27 @@ client.close
30
30
 
31
31
  Client options include `api_key`, `base_url`, and `timeout`. Ruby stdlib provides the HTTP and JSON support.
32
32
 
33
+ ## Supported Better Business Bureau API endpoints
34
+
35
+ Browse every route included in this gem. The [endpoint reference](https://github.com/Crawlora-org/crawlora-bbb/blob/main/docs/usage.md) includes parameter and response details.
36
+
37
+ | Method | Endpoint | API operation | Description |
38
+ | --- | --- | --- | --- |
39
+ | `GET` | `/bbb/article` | `bbb-article` | Get a BBB article |
40
+ | `GET` | `/bbb/business` | `bbb-business` | Get a Better Business Bureau business profile |
41
+ | `GET` | `/bbb/business/complaints` | `bbb-business-complaints` | Get a Better Business Bureau business's complaint history |
42
+ | `GET` | `/bbb/business/more-info` | `bbb-business-more-info` | Get a Better Business Bureau business's full rating reasons and service area |
43
+ | `GET` | `/bbb/business/reviews` | `bbb-business-reviews` | Get a Better Business Bureau business's customer reviews |
44
+ | `GET` | `/bbb/category` | `bbb-category` | Browse a Better Business Bureau category |
45
+ | `GET` | `/bbb/local-bbb` | `bbb-local-bbb` | Get a local BBB chapter profile |
46
+ | `GET` | `/bbb/local-bbbs` | `bbb-local-bbbs` | List local BBB chapters serving a region |
47
+ | `GET` | `/bbb/news` | `bbb-news` | Get BBB newsroom stories |
48
+ | `GET` | `/bbb/news/topics` | `bbb-news-topics` | List BBB newsroom topics |
49
+ | `GET` | `/bbb/regions` | `bbb-regions` | List Better Business Bureau directory regions |
50
+ | `GET` | `/bbb/scamtracker/search` | `bbb-scamtracker-search` | Search Better Business Bureau Scam Tracker reports |
51
+ | `GET` | `/bbb/scamtracker/state-stats` | `bbb-scamtracker-state-stats` | Get Better Business Bureau Scam Tracker state/province aggregate stats |
52
+ | `GET` | `/bbb/scamtracker/{id}` | `bbb-scamtracker-detail` | Get a Better Business Bureau Scam Tracker report |
53
+ | `GET` | `/bbb/search` | `bbb-search` | Search Better Business Bureau businesses |
54
+ | `GET` | `/bbb/search/filters` | `bbb-search-filters` | Discover Better Business Bureau search filters |
55
+
33
56
  See [Crawlora](https://crawlora.net/?utm_source=rubygems&utm_medium=referral&utm_campaign=platform-clients&utm_content=bbb-ruby-homepage), the [API documentation](https://crawlora.net/docs?utm_source=rubygems&utm_medium=referral&utm_campaign=platform-clients&utm_content=bbb-ruby-api-docs), and [the package repository](https://github.com/Crawlora-org/crawlora-bbb) for account setup, the API operation reference, and release history.
@@ -19,7 +19,7 @@ module Crawlora
19
19
  end
20
20
 
21
21
  OPERATIONS = JSON.parse(<<~'JSON').freeze
22
- {"bbb-article": {"id": "bbb-article", "method": "GET", "params": [{"description": "Canonical BBB article URL", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/article/news-releases/34935-bbb-scam-alert-dont-be-fooled-by-free-gas-and-grocery-card-postcards"}], "path": "/bbb/article", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-business": {"id": "bbb-business", "method": "GET", "params": [{"description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"}], "path": "/bbb/business", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-business-complaints": {"id": "bbb-business-complaints", "method": "GET", "params": [{"description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"}], "path": "/bbb/business/complaints", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-business-more-info": {"id": "bbb-business-more-info", "method": "GET", "params": [{"description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"}], "path": "/bbb/business/more-info", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-business-reviews": {"id": "bbb-business-reviews", "method": "GET", "params": [{"description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"}, {"description": "Result page (10 per page), default 1", "in": "query", "name": "page", "type": "integer"}], "path": "/bbb/business/reviews", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}, {"in": "query", "name": "page", "type": "integer"}], "security": ["ApiKeyAuth"]}, "bbb-category": {"id": "bbb-category", "method": "GET", "params": [{"description": "BBB category browse URL, from a bbb-search result's related_categories", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/category/plumber"}, {"description": "Result page, default 1", "in": "query", "name": "page", "type": "integer"}, {"description": "Sort order", "enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum distance in miles; omit for all distances", "enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "description": "One or more BBB rating buckets", "in": "query", "items": {"enum": ["A", "B", "C", "D", "F"], "type": "string"}, "name": "rating", "type": "array"}, {"collectionFormat": "multi", "description": "Query-scoped category ID from bbb-search-filters", "in": "query", "items": {"type": "string"}, "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "description": "Query-scoped state or province code from bbb-search-filters", "in": "query", "items": {"type": "string"}, "name": "state", "type": "array"}, {"description": "Only BBB-accredited businesses", "in": "query", "name": "accredited", "type": "boolean"}, {"description": "Only businesses offering quote requests", "in": "query", "name": "get_quote", "type": "boolean"}, {"description": "Only businesses serving the searched area", "in": "query", "name": "service_area", "type": "boolean"}], "path": "/bbb/category", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}, {"in": "query", "name": "page", "type": "integer"}, {"enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "enum": ["A", "B", "C", "D", "F"], "in": "query", "name": "rating", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "state", "type": "array"}, {"in": "query", "name": "accredited", "type": "boolean"}, {"in": "query", "name": "get_quote", "type": "boolean"}, {"in": "query", "name": "service_area", "type": "boolean"}], "security": ["ApiKeyAuth"]}, "bbb-local-bbb": {"id": "bbb-local-bbb", "method": "GET", "params": [{"description": "Canonical BBB chapter URL from bbb-local-bbbs or a business record's local_bbb_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/local-bbb/bbb-serving-the-heart-of-texas"}], "path": "/bbb/local-bbb", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-local-bbbs": {"id": "bbb-local-bbbs", "method": "GET", "params": [{"description": "Country code from bbb-regions", "enum": ["us", "ca"], "in": "query", "name": "country", "required": true, "type": "string", "x-example": "us"}, {"description": "Two-letter region code from bbb-regions", "in": "query", "name": "region", "required": true, "type": "string", "x-example": "tx"}], "path": "/bbb/local-bbbs", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["us", "ca"], "in": "query", "name": "country", "required": true, "type": "string"}, {"in": "query", "name": "region", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-news": {"id": "bbb-news", "method": "GET", "params": [{"description": "Canonical BBB newsroom or topic page URL; include page=N for pagination", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/news/scams?page=2"}], "path": "/bbb/news", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-news-topics": {"id": "bbb-news-topics", "method": "GET", "params": [{"description": "Canonical BBB newsroom page URL", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/news"}], "path": "/bbb/news/topics", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-regions": {"id": "bbb-regions", "method": "GET", "params": [], "path": "/bbb/regions", "pathParams": [], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "bbb-scamtracker-detail": {"id": "bbb-scamtracker-detail", "method": "GET", "params": [{"description": "BBB Scam Tracker report id, from a bbb-scamtracker-search result's id or url", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1397968"}], "path": "/bbb/scamtracker/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "bbb-scamtracker-search": {"id": "bbb-scamtracker-search", "method": "GET", "params": [{"description": "Free-text search (phone number, website, email, business name, scam ID, description). Omit to browse the most-recent feed", "in": "query", "name": "query", "type": "string", "x-example": "amazon"}, {"description": "Scam category filter", "enum": ["Advance Fee Loan", "Bank/Credit Card Company Imposter", "Business Email Compromise", "Charity", "Counterfeit Product", "COVID-19", "Credit Cards", "Credit Repair/Debt Relief", "CryptoCurrency", "Debt Collections", "Employment", "Fake Check/Money Order", "Fake Invoice/Supplier Bill", "Family/Friend Emergency", "Foreign Money Exchange", "Government Agency Imposter", "Government Grant", "Healthcare/Medicaid/Medicare", "Home Improvement", "Identity Theft", "Investment", "Moving", "Online Purchase", "Other", "Phishing", "Rental", "Retail Business", "Romance", "Scholarship", "Sweepstakes/Lottery/Prizes", "Tax Collection", "Tech Support", "Travel/Vacation/Timeshare", "Utility", "Vanity Award", "Worthless Problem-solving Service", "Yellow Pages/Directories"], "in": "query", "name": "scam_type", "type": "string"}, {"description": "Optional 2-letter targeted-victim state/province code (US state or Canadian province)", "in": "query", "name": "state", "type": "string", "x-example": "TX"}, {"description": "Optional 2-letter reported-scammer state/province code (US state or Canadian province) -- where the scammer is reported to be, not the victim", "in": "query", "name": "scammer_state", "type": "string", "x-example": "NY"}, {"description": "Optional report-date range start (YYYY-MM-DD), inclusive. Must be set together with date_to", "in": "query", "name": "date_from", "type": "string", "x-example": "2026-01-01"}, {"description": "Optional report-date range end (YYYY-MM-DD), inclusive. Must be set together with date_from", "in": "query", "name": "date_to", "type": "string", "x-example": "2026-01-31"}, {"description": "Optional minimum reported dollar loss. Must be set together with max_dollars_lost", "in": "query", "name": "min_dollars_lost", "type": "integer", "x-example": 500000}, {"description": "Optional maximum reported dollar loss. Must be set together with min_dollars_lost", "in": "query", "name": "max_dollars_lost", "type": "integer", "x-example": 1000000}, {"description": "Result page (10 per page), default 1", "in": "query", "name": "page", "type": "integer"}], "path": "/bbb/scamtracker/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "type": "string"}, {"enum": ["Advance Fee Loan", "Bank/Credit Card Company Imposter", "Business Email Compromise", "Charity", "Counterfeit Product", "COVID-19", "Credit Cards", "Credit Repair/Debt Relief", "CryptoCurrency", "Debt Collections", "Employment", "Fake Check/Money Order", "Fake Invoice/Supplier Bill", "Family/Friend Emergency", "Foreign Money Exchange", "Government Agency Imposter", "Government Grant", "Healthcare/Medicaid/Medicare", "Home Improvement", "Identity Theft", "Investment", "Moving", "Online Purchase", "Other", "Phishing", "Rental", "Retail Business", "Romance", "Scholarship", "Sweepstakes/Lottery/Prizes", "Tax Collection", "Tech Support", "Travel/Vacation/Timeshare", "Utility", "Vanity Award", "Worthless Problem-solving Service", "Yellow Pages/Directories"], "in": "query", "name": "scam_type", "type": "string"}, {"in": "query", "name": "state", "type": "string"}, {"in": "query", "name": "scammer_state", "type": "string"}, {"in": "query", "name": "date_from", "type": "string"}, {"in": "query", "name": "date_to", "type": "string"}, {"in": "query", "name": "min_dollars_lost", "type": "integer"}, {"in": "query", "name": "max_dollars_lost", "type": "integer"}, {"in": "query", "name": "page", "type": "integer"}], "security": ["ApiKeyAuth"]}, "bbb-scamtracker-state-stats": {"id": "bbb-scamtracker-state-stats", "method": "GET", "params": [{"description": "Aggregation window, default 90", "enum": ["30", "90", "365", "all"], "in": "query", "name": "period", "type": "string"}], "path": "/bbb/scamtracker/state-stats", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["30", "90", "365", "all"], "in": "query", "name": "period", "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-search": {"id": "bbb-search", "method": "GET", "params": [{"description": "Business name or category/service keyword", "in": "query", "name": "query", "required": true, "type": "string", "x-example": "plumber"}, {"description": "City and state (e.g. 'Austin, TX') or a ZIP code", "in": "query", "name": "location", "required": true, "type": "string", "x-example": "Austin, TX"}, {"description": "Result page, default 1", "in": "query", "name": "page", "type": "integer"}, {"default": "USA", "description": "BBB country code", "enum": ["USA", "CAN"], "in": "query", "name": "country", "type": "string"}, {"description": "Sort order", "enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum distance in miles; omit for all distances", "enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "description": "One or more BBB rating buckets", "in": "query", "items": {"enum": ["A", "B", "C", "D", "F"], "type": "string"}, "name": "rating", "type": "array"}, {"collectionFormat": "multi", "description": "Query-scoped category ID from bbb-search-filters", "in": "query", "items": {"type": "string"}, "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "description": "Query-scoped state or province code from bbb-search-filters", "in": "query", "items": {"type": "string"}, "name": "state", "type": "array"}, {"description": "Only BBB-accredited businesses", "in": "query", "name": "accredited", "type": "boolean"}, {"description": "Only businesses offering quote requests", "in": "query", "name": "get_quote", "type": "boolean"}, {"description": "Only businesses serving the searched area", "in": "query", "name": "service_area", "type": "boolean"}], "path": "/bbb/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "required": true, "type": "string"}, {"in": "query", "name": "location", "required": true, "type": "string"}, {"in": "query", "name": "page", "type": "integer"}, {"enum": ["USA", "CAN"], "in": "query", "name": "country", "type": "string"}, {"enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "enum": ["A", "B", "C", "D", "F"], "in": "query", "name": "rating", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "state", "type": "array"}, {"in": "query", "name": "accredited", "type": "boolean"}, {"in": "query", "name": "get_quote", "type": "boolean"}, {"in": "query", "name": "service_area", "type": "boolean"}], "security": ["ApiKeyAuth"]}, "bbb-search-filters": {"id": "bbb-search-filters", "method": "GET", "params": [{"description": "Business name or category/service keyword; use with location when category_url is omitted", "in": "query", "name": "query", "type": "string", "x-example": "plumber"}, {"description": "City and state/province or ZIP code; use with query when category_url is omitted", "in": "query", "name": "location", "type": "string", "x-example": "Austin, TX"}, {"description": "BBB category browse URL; use instead of query and location", "in": "query", "name": "category_url", "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/category/plumber"}, {"default": "USA", "description": "BBB country code", "enum": ["USA", "CAN"], "in": "query", "name": "country", "type": "string"}, {"description": "Result page, default 1", "in": "query", "name": "page", "type": "integer"}, {"description": "Sort order", "enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum distance in miles; omit for all distances", "enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "description": "Selected rating values", "in": "query", "items": {"enum": ["A", "B", "C", "D", "F"], "type": "string"}, "name": "rating", "type": "array"}, {"collectionFormat": "multi", "description": "Selected category IDs previously returned for this search context", "in": "query", "items": {"type": "string"}, "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "description": "Selected state/province codes previously returned for this search context", "in": "query", "items": {"type": "string"}, "name": "state", "type": "array"}, {"description": "Only BBB-accredited businesses", "in": "query", "name": "accredited", "type": "boolean"}, {"description": "Only businesses offering quote requests", "in": "query", "name": "get_quote", "type": "boolean"}, {"description": "Only businesses serving the searched area", "in": "query", "name": "service_area", "type": "boolean"}], "path": "/bbb/search/filters", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "type": "string"}, {"in": "query", "name": "location", "type": "string"}, {"in": "query", "name": "category_url", "type": "string"}, {"enum": ["USA", "CAN"], "in": "query", "name": "country", "type": "string"}, {"in": "query", "name": "page", "type": "integer"}, {"enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "enum": ["A", "B", "C", "D", "F"], "in": "query", "name": "rating", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "state", "type": "array"}, {"in": "query", "name": "accredited", "type": "boolean"}, {"in": "query", "name": "get_quote", "type": "boolean"}, {"in": "query", "name": "service_area", "type": "boolean"}], "security": ["ApiKeyAuth"]}}
22
+ {"bbb-article": {"bodyParam": null, "bodyRequired": false, "id": "bbb-article", "method": "GET", "params": [{"description": "Canonical BBB article URL", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/article/news-releases/34935-bbb-scam-alert-dont-be-fooled-by-free-gas-and-grocery-card-postcards"}], "path": "/bbb/article", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-business": {"bodyParam": null, "bodyRequired": false, "id": "bbb-business", "method": "GET", "params": [{"description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"}], "path": "/bbb/business", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-business-complaints": {"bodyParam": null, "bodyRequired": false, "id": "bbb-business-complaints", "method": "GET", "params": [{"description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"}, {"default": 1, "description": "Complaint list page, 1 or greater (10 complaints per page, newest first). Defaults to 1", "in": "query", "minimum": 1, "name": "page", "type": "integer", "x-example": 1}], "path": "/bbb/business/complaints", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}, {"in": "query", "name": "page", "type": "integer"}], "security": ["ApiKeyAuth"]}, "bbb-business-more-info": {"bodyParam": null, "bodyRequired": false, "id": "bbb-business-more-info", "method": "GET", "params": [{"description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"}], "path": "/bbb/business/more-info", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-business-reviews": {"bodyParam": null, "bodyRequired": false, "id": "bbb-business-reviews", "method": "GET", "params": [{"description": "BBB business profile URL, from a bbb-search result's url or hq_profile_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"}, {"description": "Result page (10 per page), default 1", "in": "query", "name": "page", "type": "integer"}], "path": "/bbb/business/reviews", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}, {"in": "query", "name": "page", "type": "integer"}], "security": ["ApiKeyAuth"]}, "bbb-category": {"bodyParam": null, "bodyRequired": false, "id": "bbb-category", "method": "GET", "params": [{"description": "BBB category browse URL, from a bbb-search result's related_categories", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/category/plumber"}, {"description": "Result page, default 1", "in": "query", "name": "page", "type": "integer"}, {"description": "Sort order", "enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum distance in miles; omit for all distances", "enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "description": "One or more BBB rating buckets", "in": "query", "items": {"enum": ["A", "B", "C", "D", "F"], "type": "string"}, "name": "rating", "type": "array"}, {"collectionFormat": "multi", "description": "Query-scoped category ID from bbb-search-filters", "in": "query", "items": {"type": "string"}, "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "description": "Query-scoped state or province code from bbb-search-filters", "in": "query", "items": {"type": "string"}, "name": "state", "type": "array"}, {"description": "Only BBB-accredited businesses", "in": "query", "name": "accredited", "type": "boolean"}, {"description": "Only businesses offering quote requests", "in": "query", "name": "get_quote", "type": "boolean"}, {"description": "Only businesses serving the searched area", "in": "query", "name": "service_area", "type": "boolean"}], "path": "/bbb/category", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}, {"in": "query", "name": "page", "type": "integer"}, {"enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "enum": ["A", "B", "C", "D", "F"], "in": "query", "name": "rating", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "state", "type": "array"}, {"in": "query", "name": "accredited", "type": "boolean"}, {"in": "query", "name": "get_quote", "type": "boolean"}, {"in": "query", "name": "service_area", "type": "boolean"}], "security": ["ApiKeyAuth"]}, "bbb-local-bbb": {"bodyParam": null, "bodyRequired": false, "id": "bbb-local-bbb", "method": "GET", "params": [{"description": "Canonical BBB chapter URL from bbb-local-bbbs or a business record's local_bbb_url", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/local-bbb/bbb-serving-the-heart-of-texas"}], "path": "/bbb/local-bbb", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-local-bbbs": {"bodyParam": null, "bodyRequired": false, "id": "bbb-local-bbbs", "method": "GET", "params": [{"description": "Country code from bbb-regions", "enum": ["us", "ca"], "in": "query", "name": "country", "required": true, "type": "string", "x-example": "us"}, {"description": "Two-letter region code from bbb-regions", "in": "query", "name": "region", "required": true, "type": "string", "x-example": "tx"}], "path": "/bbb/local-bbbs", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["us", "ca"], "in": "query", "name": "country", "required": true, "type": "string"}, {"in": "query", "name": "region", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-news": {"bodyParam": null, "bodyRequired": false, "id": "bbb-news", "method": "GET", "params": [{"description": "Canonical BBB newsroom or topic page URL; include page=N for pagination", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/news/scams?page=2"}], "path": "/bbb/news", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-news-topics": {"bodyParam": null, "bodyRequired": false, "id": "bbb-news-topics", "method": "GET", "params": [{"description": "Canonical BBB newsroom page URL", "in": "query", "name": "url", "required": true, "type": "string", "x-example": "https://www.bbb.org/us/news"}], "path": "/bbb/news/topics", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "url", "required": true, "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-regions": {"bodyParam": null, "bodyRequired": false, "id": "bbb-regions", "method": "GET", "params": [], "path": "/bbb/regions", "pathParams": [], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "bbb-scamtracker-detail": {"bodyParam": null, "bodyRequired": false, "id": "bbb-scamtracker-detail", "method": "GET", "params": [{"description": "BBB Scam Tracker report id, from a bbb-scamtracker-search result's id or url", "in": "path", "name": "id", "required": true, "type": "string", "x-example": "1397968"}], "path": "/bbb/scamtracker/{id}", "pathParams": ["id"], "produces": ["application/json"], "queryParams": [], "security": ["ApiKeyAuth"]}, "bbb-scamtracker-search": {"bodyParam": null, "bodyRequired": false, "id": "bbb-scamtracker-search", "method": "GET", "params": [{"description": "Free-text search (phone number, website, email, business name, scam ID, description). Omit to browse the most-recent feed", "in": "query", "name": "query", "type": "string", "x-example": "amazon"}, {"description": "Scam category filter", "enum": ["Advance Fee Loan", "Bank/Credit Card Company Imposter", "Business Email Compromise", "Charity", "Counterfeit Product", "COVID-19", "Credit Cards", "Credit Repair/Debt Relief", "CryptoCurrency", "Debt Collections", "Employment", "Fake Check/Money Order", "Fake Invoice/Supplier Bill", "Family/Friend Emergency", "Foreign Money Exchange", "Government Agency Imposter", "Government Grant", "Healthcare/Medicaid/Medicare", "Home Improvement", "Identity Theft", "Investment", "Moving", "Online Purchase", "Other", "Phishing", "Rental", "Retail Business", "Romance", "Scholarship", "Sweepstakes/Lottery/Prizes", "Tax Collection", "Tech Support", "Travel/Vacation/Timeshare", "Utility", "Vanity Award", "Worthless Problem-solving Service", "Yellow Pages/Directories"], "in": "query", "name": "scam_type", "type": "string"}, {"description": "Optional 2-letter targeted-victim state/province code (US state or Canadian province)", "in": "query", "name": "state", "type": "string", "x-example": "TX"}, {"description": "Optional 2-letter reported-scammer state/province code (US state or Canadian province) -- where the scammer is reported to be, not the victim", "in": "query", "name": "scammer_state", "type": "string", "x-example": "NY"}, {"description": "Optional report-date range start (YYYY-MM-DD), inclusive. Must be set together with date_to", "in": "query", "name": "date_from", "type": "string", "x-example": "2026-01-01"}, {"description": "Optional report-date range end (YYYY-MM-DD), inclusive. Must be set together with date_from", "in": "query", "name": "date_to", "type": "string", "x-example": "2026-01-31"}, {"description": "Optional minimum reported dollar loss. Must be set together with max_dollars_lost", "in": "query", "name": "min_dollars_lost", "type": "integer", "x-example": 500000}, {"description": "Optional maximum reported dollar loss. Must be set together with min_dollars_lost", "in": "query", "name": "max_dollars_lost", "type": "integer", "x-example": 1000000}, {"description": "Result page (10 per page), default 1", "in": "query", "name": "page", "type": "integer"}], "path": "/bbb/scamtracker/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "type": "string"}, {"enum": ["Advance Fee Loan", "Bank/Credit Card Company Imposter", "Business Email Compromise", "Charity", "Counterfeit Product", "COVID-19", "Credit Cards", "Credit Repair/Debt Relief", "CryptoCurrency", "Debt Collections", "Employment", "Fake Check/Money Order", "Fake Invoice/Supplier Bill", "Family/Friend Emergency", "Foreign Money Exchange", "Government Agency Imposter", "Government Grant", "Healthcare/Medicaid/Medicare", "Home Improvement", "Identity Theft", "Investment", "Moving", "Online Purchase", "Other", "Phishing", "Rental", "Retail Business", "Romance", "Scholarship", "Sweepstakes/Lottery/Prizes", "Tax Collection", "Tech Support", "Travel/Vacation/Timeshare", "Utility", "Vanity Award", "Worthless Problem-solving Service", "Yellow Pages/Directories"], "in": "query", "name": "scam_type", "type": "string"}, {"in": "query", "name": "state", "type": "string"}, {"in": "query", "name": "scammer_state", "type": "string"}, {"in": "query", "name": "date_from", "type": "string"}, {"in": "query", "name": "date_to", "type": "string"}, {"in": "query", "name": "min_dollars_lost", "type": "integer"}, {"in": "query", "name": "max_dollars_lost", "type": "integer"}, {"in": "query", "name": "page", "type": "integer"}], "security": ["ApiKeyAuth"]}, "bbb-scamtracker-state-stats": {"bodyParam": null, "bodyRequired": false, "id": "bbb-scamtracker-state-stats", "method": "GET", "params": [{"description": "Aggregation window, default 90", "enum": ["30", "90", "365", "all"], "in": "query", "name": "period", "type": "string"}], "path": "/bbb/scamtracker/state-stats", "pathParams": [], "produces": ["application/json"], "queryParams": [{"enum": ["30", "90", "365", "all"], "in": "query", "name": "period", "type": "string"}], "security": ["ApiKeyAuth"]}, "bbb-search": {"bodyParam": null, "bodyRequired": false, "id": "bbb-search", "method": "GET", "params": [{"description": "Business name or category/service keyword", "in": "query", "name": "query", "required": true, "type": "string", "x-example": "plumber"}, {"description": "City and state (e.g. 'Austin, TX') or a ZIP code", "in": "query", "name": "location", "required": true, "type": "string", "x-example": "Austin, TX"}, {"description": "Result page, default 1", "in": "query", "name": "page", "type": "integer"}, {"default": "USA", "description": "BBB country code", "enum": ["USA", "CAN"], "in": "query", "name": "country", "type": "string"}, {"description": "Sort order", "enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum distance in miles; omit for all distances", "enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "description": "One or more BBB rating buckets", "in": "query", "items": {"enum": ["A", "B", "C", "D", "F"], "type": "string"}, "name": "rating", "type": "array"}, {"collectionFormat": "multi", "description": "Query-scoped category ID from bbb-search-filters", "in": "query", "items": {"type": "string"}, "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "description": "Query-scoped state or province code from bbb-search-filters", "in": "query", "items": {"type": "string"}, "name": "state", "type": "array"}, {"description": "Only BBB-accredited businesses", "in": "query", "name": "accredited", "type": "boolean"}, {"description": "Only businesses offering quote requests", "in": "query", "name": "get_quote", "type": "boolean"}, {"description": "Only businesses serving the searched area", "in": "query", "name": "service_area", "type": "boolean"}], "path": "/bbb/search", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "required": true, "type": "string"}, {"in": "query", "name": "location", "required": true, "type": "string"}, {"in": "query", "name": "page", "type": "integer"}, {"enum": ["USA", "CAN"], "in": "query", "name": "country", "type": "string"}, {"enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "enum": ["A", "B", "C", "D", "F"], "in": "query", "name": "rating", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "state", "type": "array"}, {"in": "query", "name": "accredited", "type": "boolean"}, {"in": "query", "name": "get_quote", "type": "boolean"}, {"in": "query", "name": "service_area", "type": "boolean"}], "security": ["ApiKeyAuth"]}, "bbb-search-filters": {"bodyParam": null, "bodyRequired": false, "id": "bbb-search-filters", "method": "GET", "params": [{"description": "Business name or category/service keyword; use with location when category_url is omitted", "in": "query", "name": "query", "type": "string", "x-example": "plumber"}, {"description": "City and state/province or ZIP code; use with query when category_url is omitted", "in": "query", "name": "location", "type": "string", "x-example": "Austin, TX"}, {"description": "BBB category browse URL; use instead of query and location", "in": "query", "name": "category_url", "type": "string", "x-example": "https://www.bbb.org/us/tx/austin/category/plumber"}, {"default": "USA", "description": "BBB country code", "enum": ["USA", "CAN"], "in": "query", "name": "country", "type": "string"}, {"description": "Result page, default 1", "in": "query", "name": "page", "type": "integer"}, {"description": "Sort order", "enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"description": "Maximum distance in miles; omit for all distances", "enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "description": "Selected rating values", "in": "query", "items": {"enum": ["A", "B", "C", "D", "F"], "type": "string"}, "name": "rating", "type": "array"}, {"collectionFormat": "multi", "description": "Selected category IDs previously returned for this search context", "in": "query", "items": {"type": "string"}, "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "description": "Selected state/province codes previously returned for this search context", "in": "query", "items": {"type": "string"}, "name": "state", "type": "array"}, {"description": "Only BBB-accredited businesses", "in": "query", "name": "accredited", "type": "boolean"}, {"description": "Only businesses offering quote requests", "in": "query", "name": "get_quote", "type": "boolean"}, {"description": "Only businesses serving the searched area", "in": "query", "name": "service_area", "type": "boolean"}], "path": "/bbb/search/filters", "pathParams": [], "produces": ["application/json"], "queryParams": [{"in": "query", "name": "query", "type": "string"}, {"in": "query", "name": "location", "type": "string"}, {"in": "query", "name": "category_url", "type": "string"}, {"enum": ["USA", "CAN"], "in": "query", "name": "country", "type": "string"}, {"in": "query", "name": "page", "type": "integer"}, {"enum": ["Relevance", "Distance", "Rating", "AToZ", "ZToA"], "in": "query", "name": "sort", "type": "string"}, {"enum": ["5", "10", "25", "50", "100"], "in": "query", "name": "distance", "type": "string"}, {"collectionFormat": "multi", "enum": ["A", "B", "C", "D", "F"], "in": "query", "name": "rating", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "category_id", "type": "array"}, {"collectionFormat": "multi", "in": "query", "name": "state", "type": "array"}, {"in": "query", "name": "accredited", "type": "boolean"}, {"in": "query", "name": "get_quote", "type": "boolean"}, {"in": "query", "name": "service_area", "type": "boolean"}], "security": ["ApiKeyAuth"]}}
23
23
  JSON
24
24
  OPERATION_IDS = JSON.parse(<<~'JSON').freeze
25
25
  ["bbb-article", "bbb-business", "bbb-business-complaints", "bbb-business-more-info", "bbb-business-reviews", "bbb-category", "bbb-local-bbb", "bbb-local-bbbs", "bbb-news", "bbb-news-topics", "bbb-regions", "bbb-scamtracker-detail", "bbb-scamtracker-search", "bbb-scamtracker-state-stats", "bbb-search", "bbb-search-filters"]
@@ -29,7 +29,7 @@ module Crawlora
29
29
  class Client
30
30
  attr_reader :base_url
31
31
 
32
- def initialize(api_key: ENV["CRAWLORA_API_KEY"], base_url: "https://api.crawlora.net/api/v1", timeout: 30, user_agent: "crawlora-bbb-ruby/0.2.0", transport: nil)
32
+ def initialize(api_key: ENV["CRAWLORA_API_KEY"], base_url: "https://api.crawlora.net/api/v1", timeout: 30, user_agent: "crawlora-bbb-ruby/0.3.1", transport: nil)
33
33
  @api_key = api_key
34
34
  @base_url = base_url.to_s.sub(%r{/+$}, "")
35
35
  @timeout = Float(timeout)
@@ -45,15 +45,24 @@ module Crawlora
45
45
  raise Errors::ClientError.new("unknown operation: #{operation_id}", operation_id: operation_id) unless operation
46
46
  raise Errors::ClientError.new("Crawlora API key is required", operation_id: operation_id) if @api_key.nil? || @api_key.to_s.empty?
47
47
  normalized = params.each_with_object({}) { |(key, value), out| out[key.to_s] = value }
48
+ payload = request_body(operation, normalized)
48
49
  url = build_url(operation, normalized)
49
50
  uri = URI.parse(url)
50
- request = Net::HTTP::Get.new(uri)
51
+ request = operation["method"] == "POST" ? Net::HTTP::Post.new(uri) : Net::HTTP::Get.new(uri)
52
+ unless payload.nil?
53
+ request.body = payload
54
+ request["Content-Type"] = "application/json"
55
+ end
51
56
  request["x-api-key"] = @api_key
52
57
  request["User-Agent"] = @user_agent
53
58
  request["Accept"] = operation["produces"].include?("text/plain") ? "application/json, text/plain" : "application/json"
54
59
  begin
55
60
  if @transport
56
- response = @transport.call(url, request.to_hash, @timeout)
61
+ response = if operation["method"] == "POST"
62
+ @transport.call(url, request.to_hash, @timeout, "POST", payload)
63
+ else
64
+ @transport.call(url, request.to_hash, @timeout)
65
+ end
57
66
  status = Integer(response.fetch(:status) { response.fetch("status") })
58
67
  body = response.fetch(:body) { response.fetch("body", "") }
59
68
  headers = response.fetch(:headers) { response.fetch("headers", {}) }
@@ -172,8 +181,21 @@ module Crawlora
172
181
 
173
182
  private
174
183
 
184
+ # POST operations take their JSON body under the body parameter name or "body".
185
+ def request_body(operation, params)
186
+ name = operation["bodyParam"]
187
+ return nil if name.nil?
188
+ value = params.key?(name) ? params[name] : params["body"]
189
+ if value.nil?
190
+ raise Errors::ClientError.new("missing request body: #{name}", operation_id: operation["id"]) if operation["bodyRequired"]
191
+ return nil
192
+ end
193
+ value.is_a?(String) ? value : JSON.generate(value)
194
+ end
195
+
175
196
  def build_url(operation, params)
176
197
  known = operation["params"].map { |param| param["name"] }
198
+ known << "body" if operation["bodyParam"]
177
199
  unknown = params.keys - known
178
200
  raise Errors::ClientError.new("unknown parameters: #{unknown.join(', ')}", operation_id: operation["id"]) unless unknown.empty?
179
201
  path = operation["path"].dup
@@ -1,5 +1,5 @@
1
1
  module Crawlora
2
2
  module Bbb
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,17 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crawlora-bbb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Crawlora
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-10-09 00:00:00.000000000 Z
11
+ date: 2026-10-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Credential-free Better Business Bureau API access through Crawlora's
14
- hosted service.
13
+ description: Ruby client for Crawlora's hosted Better Business Bureau API. Covers
14
+ business search, profiles, complaints, reviews, categories, and ScamTracker reports
15
+ across 16 endpoints.
15
16
  email:
16
17
  executables: []
17
18
  extensions: []
@@ -48,5 +49,5 @@ requirements: []
48
49
  rubygems_version: 3.4.19
49
50
  signing_key:
50
51
  specification_version: 4
51
- summary: Better Business Bureau client for the Crawlora hosted API
52
+ summary: Better Business Bureau API client for Crawlora (16 endpoints)
52
53
  test_files: []