Datasets API endpoint
Use Crawlora's Google Maps Business Dataset Search API to search or inspect stored structured datasets as JSON. This page includes request parameters, cURL examples, response schema, validation behavior, credit cost, and a Playground link for testing before integration. Dataset endpoints read indexed records and do not apply proxy routing.
/datasets/google-map-businesses/searchSearches Google Maps business records stored in a search index. Sort enum: `relevance`, `updated_at_desc`, `rating_desc`, `review_count_desc`, `distance_asc`. `category` is a Google Maps type token in lower-case snake_case (e.g. `dentist`, `bus_stop`, `atm`), both as the `category` filter and in each result's `category` field. A `rating` of `null` means no aggregate rating is available for that business (too few reviews, or a place type Google does not rate) — it is never a literal zero-star score; read it together with `review_count`, and note that `rating_desc` sorts unrated businesses last and `min_rating` above 0 excludes them. Use `has_geo=false` to isolate locationless service-area businesses (which have a `null` `geo`). Developers commonly use this endpoint for repeatable dataset search, filtering, facets, local business enrichment, analytics, exports, and internal tools that need structured records beyond the limited manual refinement available in the Google Maps app. Authentication uses the x-api-key header, usage is metered with the credit cost shown on this page, and the request does not trigger live scraping or proxy routing.
Request parameters are generated from the active endpoint catalog. Dataset parameters filter, page, facet, or locate stored structured records; they do not configure a live scraper or proxy path.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | No | Full-text business search query, max 256 characters | ||
| category | string | No | Exact category filter: a Google Maps type token in lower-case snake_case (e.g. dentist, bus_stop), max 128 characters | ||
| country | string | No | Exact country filter, max 128 characters | ||
| state | string | No | Exact state filter, max 128 characters | ||
| county | string | No | Exact county filter, max 128 characters | ||
| city | string | No | Exact city filter, max 128 characters | ||
| town | string | No | Exact town filter, max 128 characters | ||
| min_rating | number | No | Minimum rating, 0 through 5. Businesses with no aggregate Google rating are returned with rating null, so any min_rating above 0 excludes them. | ||
| min_review_count | integer | No | Minimum review count | ||
| has_website | boolean | No | Filter by website presence | ||
| has_phone | boolean | No | Filter by phone presence | ||
| has_geo | boolean | No | Filter by location presence: true keeps only mappable businesses with coordinates; false isolates locationless service-area businesses that have no map location | ||
| lat | number | No | Latitude for radius filtering or distance sort | ||
| lon | number | No | Longitude for radius filtering or distance sort | ||
| radius_m | integer | No | Radius in meters, 1 through 50000; requires lat and lon when supplied | ||
| sort | string | No | Sort enum: relevance, updated_at_desc, rating_desc, review_count_desc, distance_asc | ||
| page | integer | No | 1 | Page number, defaults to 1 | |
| page_size | integer | No | 20 and maxes at 100 | Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/datasets/google-map-businesses/search?q=coffee&country=us&has_website=true&has_phone=true&has_geo=true&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.
Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.
| Plan | Price | Included credits | Daily cap | Rate limit | Overage |
|---|---|---|---|---|---|
| Free | $0/mo | 2,000 | 500 daily credits | 5/min | No overage |
| Starter | $9/mo | 20,000 | 5,000 daily credits | 15/min | $0.75/1,000 overage credits when enabled |
| Growth | $29/mo | 100,000 | 25,000 daily credits | 45/min | $0.45/1,000 overage credits when enabled |
| Pro | $79/mo | 400,000 | No daily cap | 120/min | $0.30/1,000 overage credits |
| Business | $199/mo | 1,200,000 | No daily cap | 300/min | $0.20/1,000 overage credits |
| Enterprise | $499/mo | 5,000,000 | No daily cap | 1,000/min | $0.12/1,000 overage credits |
This endpoint reads stored indexed dataset records. It does not execute a live upstream Google Maps request, browser session, or proxy-routed scraping job.
- Defaults to `relevance` sort when `q` is supplied. - Defaults to `updated_at_desc` sort when no `q` is supplied. - `lat` and `lon` must be supplied together. `distance_asc` requires `lat` and `lon`, but does not require `radius_m`. - The maximum result window is `10000`; `page * page_size` must not exceed `10000`. - A `null` `rating` in a result means no aggregate rating is available for that business (too few reviews, or a place type Google does not rate) — it is never a literal zero-star score. A present `rating` is always between `1.0` and `5.0`. Read it together with `review_count`; `rating_desc` sorts unrated (null) businesses last. - Invalid enum values return the standard invalid params envelope. - Does not trigger live scraping. Example response: ```json { "code": 200, "msg": "OK", "data": { "dataset": "google-map-businesses", "items": [ { "place_id": "ChIJ99URUeOAhYAR0J5ZUxTesDQ", "name": "Hotel Zephyr San Francisco", "category": ["hotel"], "rating": 4.1, "review_count": 3213 } ], "page": 1, "page_size": 20, "total": 1, "sort": "relevance" } } ```
Crawlora does not silently return invalid dataset search results when filters, pagination, coordinates, or stored record lookups cannot be satisfied.
| Status | Common failure case |
|---|---|
| 400 | Invalid input, missing required parameter, invalid enum, bad coordinate pair, or result window beyond the dataset limit |
| 404 | Requested stored dataset item is not present |
| 429 | Plan or endpoint rate limit exceeded |
| 500 | Internal dataset query or storage error |
When possible, Crawlora returns structured error context so your integration can adjust filters, page size, location inputs, or lookup identifiers.
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
{
"code": 200,
"msg": "OK",
"data": {
"dataset": "google-map-businesses",
"items": [
{
"place_id": "ChIJ99URUeOAhYAR0J5ZUxTesDQ",
"name": "Hotel Zephyr San Francisco",
"category": [
"hotel"
],
"rating": 4.1,
"review_count": 3213
}
],
"page": 1,
"page_size": 20,
"total": 1,
"sort": "relevance"
}
}Request schema
No body schema
Response schema
#/definitions/datasets.googleMapBusinessesSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | datasets.GoogleBusinessSearchResponse | No | ||||
| data.dataset | string | No | ||||
| data.items | array | No | ||||
| data.items[].address | string | No | 250 Beach St, San Francisco, CA 94133 | |||
| data.items[].amenities | array | No | ['Free Wi-Fi', 'Air-conditioned', 'Wi-Fi', 'Parking'] | |||
| data.items[].category | array | No | ["hotel"] | |||
| data.items[].city | string | No | San Francisco | |||
| data.items[].contact | unknown | No | 🆕 Contact information | |||
| data.items[].contact_is_updated | boolean | No | ||||
| data.items[].country | string | No | United States | 🆕 Geographic hierarchy | ||
| data.items[].county | string | No | San Francisco County | |||
| data.items[].created_at | string | No | 🆕 Timestamps | |||
| data.items[].description | string | No | A 3-minute walk from Pier 41 in the Fisherman's Wharf district... | |||
| data.items[].distance_m | number | No | ||||
| data.items[].geo | es.GeoPoint | No | ||||
| data.items[].geo.lat | number | No | ||||
| data.items[].geo.lon | number | No | ||||
| data.items[].geo_is_updated | boolean | No | ||||
| data.items[].id | string | No | ChIJ99URUeOAhYAR0J5ZUxTesDQ | |||
| data.items[].image | string | No | https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp | |||
| data.items[].locations | array | No | ['San Francisco', 'Los Angeles'] | |||
| data.items[].name | string | No | Hotel Zephyr San Francisco | |||
| data.items[].phone | string | No | 14156176565 | |||
| data.items[].place_id | string | No | ChIJ99URUeOAhYAR0J5ZUxTesDQ | |||
| data.items[].rating | number | No | 4.1 | Rating is the aggregate Google rating (1.0–5.0). It is a pointer so a business with NO aggregate Google rating serializes as `rating: null` rather than a misleading 0 — Google never assigns a 0.x average, so 0 always meant "unrated". Consumers computing an average must skip nulls; use min_rating>0 to exclude them. | ||
| data.items[].review_count | integer | No | 3213 | |||
| data.items[].similarweb | similarweb.SimilarWebResp | No | ||||
| data.items[].similarweb.Category | string | No | ||||
| data.items[].similarweb.CategoryRank | object | No | ||||
| data.items[].similarweb.CategoryRank.Category | string | No | ||||
| data.items[].similarweb.CategoryRank.Rank | string | No | ||||
| data.items[].similarweb.Competitors | object | No | ||||
| data.items[].similarweb.Competitors.TopSimilarityCompetitors | array | No | ||||
| data.items[].similarweb.Countries | array | No | ||||
| data.items[].similarweb.Countries[].Code | string | No | ||||
| data.items[].similarweb.Countries[].Name | string | No | ||||
| data.items[].similarweb.Countries[].UrlCode | string | No | ||||
| data.items[].similarweb.CountryRank | object | No | ||||
| data.items[].similarweb.CountryRank.Country | integer | No | ||||
| data.items[].similarweb.CountryRank.CountryCode | string | No | ||||
| data.items[].similarweb.CountryRank.Rank | integer | No | ||||
| data.items[].similarweb.Description | string | No | ||||
| data.items[].similarweb.Engagments | object | No | ||||
| data.items[].similarweb.Engagments.BounceRate | string | No | ||||
| data.items[].similarweb.Engagments.Month | string | No | ||||
| data.items[].similarweb.Engagments.PagePerVisit | string | No | ||||
| data.items[].similarweb.Engagments.TimeOnSite | string | No | ||||
| data.items[].similarweb.Engagments.Visits | string | No | ||||
| data.items[].similarweb.Engagments.Year | string | No | ||||
| data.items[].similarweb.EstimatedMonthlyVisits | object | No | ||||
| data.items[].similarweb.EstimatedMonthlyVisits.2024-09-01 | integer | No | ||||
| data.items[].similarweb.EstimatedMonthlyVisits.2024-10-01 | integer | No | ||||
| data.items[].similarweb.EstimatedMonthlyVisits.2024-11-01 | integer | No | ||||
| data.items[].similarweb.GlobalCategoryRank | unknown | No | ||||
| data.items[].similarweb.GlobalRank | object | No | ||||
| data.items[].similarweb.GlobalRank.Rank | integer | No | ||||
| data.items[].similarweb.IsDataFromGa | boolean | No | ||||
| data.items[].similarweb.IsSmall | boolean | No | ||||
| data.items[].similarweb.LargeScreenshot | string | No | ||||
| data.items[].similarweb.Notification | object | No | ||||
| data.items[].similarweb.Notification.Content | unknown | No | ||||
| data.items[].similarweb.Policy | integer | No | ||||
| data.items[].similarweb.SiteName | string | No | ||||
| data.items[].similarweb.SnapshotDate | string | No | ||||
| data.items[].similarweb.Title | string | No | ||||
| data.items[].similarweb.TopCountryShares | array | No | ||||
| data.items[].similarweb.TopCountryShares[].Country | integer | No | ||||
| data.items[].similarweb.TopCountryShares[].CountryCode | string | No | ||||
| data.items[].similarweb.TopCountryShares[].Value | number | No | ||||
| data.items[].similarweb.TopKeywords | array | No | ||||
| data.items[].similarweb.TopKeywords[].Cpc | number | No | ||||
| data.items[].similarweb.TopKeywords[].EstimatedValue | number | No | ||||
| data.items[].similarweb.TopKeywords[].Name | string | No | ||||
| data.items[].similarweb.TopKeywords[].Volume | number | No | ||||
| data.items[].similarweb.TrafficSources | object | No | ||||
| data.items[].similarweb.TrafficSources.Direct | number | No | ||||
| data.items[].similarweb.TrafficSources.Mail | number | No | ||||
| data.items[].similarweb.TrafficSources.Paid Referrals | number | No | ||||
| data.items[].similarweb.TrafficSources.Referrals | number | No | ||||
| data.items[].similarweb.TrafficSources.Search | number | No | ||||
| data.items[].similarweb.TrafficSources.Social | number | No | ||||
| data.items[].similarweb.Version | integer | No | ||||
| data.items[].state | string | No | California | |||
| data.items[].town | string | No | Fisherman's Wharf | |||
| data.items[].updated_at | string | No | ||||
| data.items[].url | string | No | https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ | |||
| data.items[].website | string | No | https://www.hotelzephyrsf.com/ | 🆕 Website and status | ||
| data.items[].website_status | es.WebsiteStatus | No | ||||
| data.items[].website_status.checked_at | string | No | ||||
| data.items[].website_status.dns_resolvable | boolean | No | ||||
| data.items[].website_status.error | string | No | ||||
| data.items[].website_status.http_reachable | boolean | No | ||||
| data.items[].website_status.status_code | integer | No | ||||
| data.items[].website_status.url | string | No | ||||
| data.page | integer | No | ||||
| data.page_size | integer | No | ||||
| data.sort | string | No | ||||
| data.total | integer | No | ||||
| msg | string | No | OK |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/datasets/google-map-businesses/search?q=coffee&country=us&has_website=true&has_phone=true&has_geo=true&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"Crawlora is designed for responsible structured public web data workflows. Customers are responsible for using Crawlora in compliance with applicable laws, third-party rights, target-platform rules, and Crawlora terms.
Read Crawlora terms