Datasets API endpoint
Searches stored Google Maps businesses near a coordinate in dataset id enum value `google-map-businesses`. `category` is the exact Google Maps category label returned for the business locale; it can be localized, non-ASCII, or contain punctuation, so use the category facet to discover exact filter values. A `rating` of `null` means no aggregate rating is available. A `review_count` of `null` means Google did not return a count; numeric `0` means Google confirmed zero reviews. `min_rating` above 0 excludes unrated businesses. Billing: this endpoint costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).
/datasets/google-map-businesses/nearbySearches scraped Google Maps business records near a coordinate.
Query parameters:
lat: required latitude.lon: required longitude.radius_m: required radius in meters, from 1 through 50000.category: optional exact category filter, max 128 characters. Values are the locale-specific labels returned by Google Maps and can be localized, non-ASCII, or contain punctuation. Use facet=category to discover exact values and pass the selected value unchanged.min_rating: optional minimum rating from 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: optional minimum review count.page: optional page number, defaults to 1.page_size: optional page size, defaults to 20 and maxes at 100.Response behavior:
distance_asc.distance_m on items when the search index returns geo-distance sort values.null rating in a result means no aggregate rating is available for that business (never a literal zero-star score); a present rating is always between 1.0 and 5.0.null review_count means Google did not return a count for that business. Numeric 0 means Google confirmed zero reviews; positive values are confirmed counts.state and county keep each country's own administrative vocabulary (Provincia de Madrid, Département du Nord, Regierungsbezirk Köln, plain ___ County in the US). state_code and county_code are the matching ISO 3166-2 codes (ES-MD, FR-59) and are the stable key for grouping or ranking across countries. They are filled by reverse geocoding and are omitted from a row that has not been resolved yet.10000; page * page_size must not exceed 10000.1 credit per record returned, minimum 2. A call that returns 20 records costs 20 credits, a full page of 100 costs 100, and an empty or one-record result costs 2. You are charged for what comes back, not for the page_size you ask for, but your balance must cover the requested page_size for the call to be accepted. The response header x-credit-cost shows what a call was charged.
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| id | 20 | |
| url | 20 | google.com |
| name | 20 | |
| place_id | 20 | |
| category | 20 | median 1 entry |
| address | 20 | |
| rating | 9 | 5 |
| review_count | 19 | 0 to 30, median 1 |
| permanently_closed | 1 | true in 0 of 1 |
| website | 7 | verbhouse.com and 6 other hosts |
| phone | 8 | |
| description | 1 | |
| image | 0 | |
| geo | 20 | |
| country | 20 | |
| state | 20 | |
| city | 20 | |
| geo_is_updated | 20 | true in 0 of 20 |
| contact_is_updated | 20 | true in 0 of 20 |
| created_at | 20 | 2024-10-23 to 2026-08-20 |
| updated_at | 20 | 2024-11-22 to 2026-09-10 |
| distance_m | 20 | 3.55 |
| county | 11 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| lat | number | Yes | Latitude | 40.7484257 | |
| lon | number | Yes | Longitude | -73.98567 | |
| radius_m | integer | Yes | Radius in meters, max 50000 | 5000 | |
| category | string | No | Exact locale-specific Google Maps category label; use the category facet to discover values, 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 | ||
| 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/nearby?lat=40.7484257&lon=-73.98567&radius_m=5000&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"dataset": "google-map-businesses",
"items": [
{
"place_id": "ChIJ99URUeOAhYAR0J5ZUxTesDQ",
"name": "Hotel Zephyr San Francisco",
"distance_m": 120.4
}
],
"page": 1,
"page_size": 20,
"total": 1,
"sort": "distance_asc"
}
}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 | Identifier of the dataset queried (`google-map-businesses`). | |||
| data.items | array | No | Matching Google Maps business records on this page. | |||
| data.items[].address | string | No | 250 Beach St, San Francisco, CA 94133 | Full street address as shown on Google Maps. | ||
| data.items[].amenities | array | No | ['Free Wi-Fi', 'Air-conditioned', 'Wi-Fi', 'Parking'] | List of amenities Google Maps shows for the business, for example `Free Wi-Fi`. | ||
| data.items[].category | array | No | ["hotel"] | Categories Google Maps lists for the business. Labels can be in the local language. | ||
| data.items[].city | string | No | San Francisco | Name of the city the business is in. | ||
| data.items[].contact | object | No | 🆕 Contact information | |||
| data.items[].contact.emails | array | No | ["john.doe@example.com","jane.doe@example.com"] | Email addresses found on the website. | ||
| data.items[].contact.socials | object | No | Social media profile links found on the website, one per network: `facebook`, `instagram`, `youtube`, `tiktok`, `twitter` and `linkedin`. | |||
| data.items[].contact.socials.facebook | string | No | https://facebook.com/johndoe | |||
| data.items[].contact.socials.instagram | string | No | https://instagram.com/johndoe | |||
| data.items[].contact.socials.linkedin | string | No | https://linkedin.com/in/johndoe | |||
| data.items[].contact.socials.tiktok | string | No | https://tiktok.com/@johndoe | |||
| data.items[].contact.socials.twitter | string | No | https://twitter.com/johndoe | |||
| data.items[].contact.socials.youtube | string | No | https://youtube.com/channel/UC123456789 | |||
| data.items[].contact.url | string | No | https://example.com | Website URL the contact details were found for. | ||
| data.items[].contact_is_updated | boolean | No | Whether the business's contact details have been collected. | |||
| data.items[].country | string | No | United States | 🆕 Geographic hierarchy | ||
| data.items[].county | string | No | San Francisco County | Administrative area below state level, named as the country itself names it. | ||
| data.items[].county_code | string | No | FR-59 | ISO 3166-2 code for the `county` value, for example `FR-59`. | ||
| 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... | Business description shown on Google Maps. | ||
| data.items[].distance_m | number | No | Distance from the query point in metres. Set when results are sorted by distance. | |||
| data.items[].geo | object | No | Coordinates of the business. Omitted when no map location is available for it. | |||
| data.items[].geo.lat | number | No | Latitude in decimal degrees. | |||
| data.items[].geo.lon | number | No | Longitude in decimal degrees. | |||
| data.items[].geo_is_updated | boolean | No | Whether the country, state, county, city and town fields have been filled in from the coordinates. | |||
| data.items[].id | string | No | ChIJ99URUeOAhYAR0J5ZUxTesDQ | Unique id of the business record in the dataset. | ||
| data.items[].image | string | No | https://lh5.googleusercontent.com/p/AF1QipP_O55x7gOwR3AaM09CVmzEUude9wMHMPwc--yp | URL of the business's main photo on Google Maps. | ||
| data.items[].locations | array | No | ['San Francisco', 'Los Angeles'] | Place names Google Maps lists with the business, for example `San Francisco`. | ||
| data.items[].name | string | No | Hotel Zephyr San Francisco | Business name as shown on Google Maps. | ||
| data.items[].permanently_closed | boolean | No | false | PermanentlyClosed reports Google's "Permanently closed" marker: true when Google marks the business permanently closed, false when a crawl confirmed it does not, and null when the business has not been re-crawled since status capture shipped (2026-08-31) — which is most of the dataset. null therefore means UNKNOWN, never "open": a count that treats null as operational is counting an unknown number of dead businesses. Use permanently_closed=false to exclude the confirmed-closed ones. | ||
| data.items[].phone | string | No | 14156176565 | Business phone number as listed on Google Maps. | ||
| data.items[].place_id | string | No | ChIJ99URUeOAhYAR0J5ZUxTesDQ | Google place id of the business. | ||
| 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 | ReviewCount is the aggregate Google review count. A null value means Google did not return a count; numeric zero means Google confirmed zero reviews. | ||
| data.items[].similarweb | object | No | Website traffic profile of the business website from SimilarWeb. | |||
| data.items[].similarweb.AiTrafficDetails | object | No | AiTrafficDetails carries SimilarWeb's AI-chatbot traffic insights (the extension's "AI Traffic" feature set): which AI platforms send traffic to this domain, how that mix changed over recent months, and the top prompts users asked those chatbots that referred visits here. Left at its zero value when DataSource is "public_page" because that source doesn't expose it. | |||
| data.items[].similarweb.AiTrafficDetails.ReferralTraffic | number | No | ||||
| data.items[].similarweb.AiTrafficDetails.TopPrompts | object | No | ||||
| data.items[].similarweb.AiTrafficDetails.TopPrompts.ErrorMessage | string | No | ||||
| data.items[].similarweb.AiTrafficDetails.TopPrompts.Prompts | array | No | ||||
| data.items[].similarweb.AiTrafficDetails.TopPrompts.Status | integer | No | ||||
| data.items[].similarweb.AiTrafficDetails.TotalVisits | number | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic | object | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution | object | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Boundary | string | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chart | array | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chart[].History | array | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chart[].History[].Date | string | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chart[].History[].Value | number | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chart[].Icon | string | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chart[].Name | string | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chatbots | array | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chatbots[].Icon | string | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chatbots[].Name | string | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Distribution.Chatbots[].Value | number | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Split | array | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Split[].Icon | string | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Split[].Name | string | No | ||||
| data.items[].similarweb.AiTrafficDetails.Traffic.Split[].Rank | integer | No | ||||
| data.items[].similarweb.Category | string | No | Category SimilarWeb places the site in. | |||
| data.items[].similarweb.CategoryRank | object | No | Rank of the site within its category, with the category name. | |||
| data.items[].similarweb.CategoryRank.Category | string | No | ||||
| data.items[].similarweb.CategoryRank.Rank | string | No | ||||
| data.items[].similarweb.Competitors | object | No | Sites SimilarWeb lists as most similar to the domain. | |||
| data.items[].similarweb.Competitors.TopSimilarityCompetitors | array | No | ||||
| data.items[].similarweb.Countries | array | No | Countries SimilarWeb returns with the site's data, each with a code, URL code and name. | |||
| 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 | Rank of the site within one country, with that country's code. | |||
| data.items[].similarweb.CountryRank.Country | integer | No | ||||
| data.items[].similarweb.CountryRank.CountryCode | string | No | ||||
| data.items[].similarweb.CountryRank.Rank | integer | No | ||||
| data.items[].similarweb.DataSource | string | No | extension_api | DataSource reports which upstream this response was populated from. "extension_api" is the full-coverage source (SimilarWeb's undocumented browser-extension API); "public_page" is a narrower, credential-free fallback (see website.go) used only when the extension API is unreachable -- some fields above are left at their zero value when DataSource is "public_page" because this source doesn't expose them. See docs/similarweb-web.md for the full field-availability breakdown. | ||
| data.items[].similarweb.Description | string | No | Site description as SimilarWeb shows it. | |||
| data.items[].similarweb.Engagments | object | No | Engagement figures for the latest month: bounce rate, pages per visit, visits, time on site, month and year. | |||
| 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 | Estimated visits per month, keyed by the first day of the month (YYYY-MM-DD). | |||
| 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 | Rank of the site within its category across all countries, when SimilarWeb provides it. | |||
| data.items[].similarweb.GlobalRank | object | No | Global traffic rank of the site, in `Rank`. | |||
| data.items[].similarweb.GlobalRank.Rank | integer | No | ||||
| data.items[].similarweb.IsDataFromGa | boolean | No | Whether SimilarWeb reports the site's data as coming from Google Analytics. | |||
| data.items[].similarweb.IsSmall | boolean | No | Whether SimilarWeb treats the site as a small site. | |||
| data.items[].similarweb.LargeScreenshot | string | No | URL of a large screenshot of the site. | |||
| data.items[].similarweb.Notification | object | No | Notice SimilarWeb attaches to the site's data, in `Content`. | |||
| data.items[].similarweb.Notification.Content | unknown | No | ||||
| data.items[].similarweb.Policy | integer | No | Numeric policy value SimilarWeb returns with the site's data. | |||
| data.items[].similarweb.SiteName | string | No | Domain name of the site. | |||
| data.items[].similarweb.SnapshotDate | string | No | Date and time of the SimilarWeb data snapshot. | |||
| data.items[].similarweb.Title | string | No | Site title as SimilarWeb shows it. | |||
| data.items[].similarweb.TopCountryShares | array | No | Countries that send the most visits, each with its country code and share of traffic. | |||
| 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 | Top search keywords bringing visits to the site, each with estimated value, volume and cost per click. | |||
| 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 | Share of traffic from each source: social, paid referrals, mail, referrals, search and direct. | |||
| 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 | Version number SimilarWeb returns with the site's data. | |||
| data.items[].state | string | No | California | State, region or province, named as the country itself names it. | ||
| data.items[].state_code | string | No | US-CA | StateCode and CountyCode are the ISO 3166-2 subdivision codes behind `state` and `county` (e.g. US-CA / FR-HDF for a state or region, FR-59 / IT-RM for a county, département or province). `state` and `county` deliberately keep each country's own administrative vocabulary ("Regierungsbezirk Köln", "Provincia de Madrid"), so these codes are the stable, country-agnostic join key for cross-country grouping or ranking. Filled by reverse geocoding since 2026-09-07; empty for rows not yet resolved. | ||
| data.items[].town | string | No | Fisherman's Wharf | Name of the town or neighbourhood the business is in. | ||
| data.items[].updated_at | string | No | Time the record was last updated, in UTC (RFC 3339). | |||
| data.items[].url | string | No | https://www.google.com/maps/place/?q=place_id:ChIJ99URUeOAhYAR0J5ZUxTesDQ | Google Maps link to the business. | ||
| data.items[].website | string | No | https://www.hotelzephyrsf.com/ | 🆕 Website and status | ||
| data.items[].website_status | object | No | Result of the last reachability check of the business website. | |||
| data.items[].website_status.checked_at | string | No | Time the website was checked, in UTC (RFC 3339). | |||
| data.items[].website_status.dns_resolvable | boolean | No | Whether the website's domain name resolved. | |||
| data.items[].website_status.error | string | No | Error message from the check. Omitted when the check raised no error. | |||
| data.items[].website_status.http_reachable | boolean | No | Whether the website answered an HTTP request. | |||
| data.items[].website_status.status_code | integer | No | HTTP status code the website returned. | |||
| data.items[].website_status.url | string | No | Website address that was checked. | |||
| data.page | integer | No | Page number returned. | |||
| data.page_size | integer | No | Number of items per page. | |||
| data.sort | string | No | Sort order applied. | |||
| data.total | integer | No | Total number of records matching the filters. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
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/nearby?lat=40.7484257&lon=-73.98567&radius_m=5000&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"