Popular times of one Google Maps place: how busy it usually is for every hour of every opening day, the live busyness of the current hour when Google shows it, the typical visit duration and the busiest hours per day. One request costs 3 credits; failed requests and places without popular times are never charged. Pass the business_id (or place_id). The name of the place is read from Google Maps and checked against the result, so you never get the graph of another place. Send q with the exact place name to skip that lookup. Labels are always English. busyness_percent is relative to the busiest hour of the week (100). A value of null marks an hour outside opening time. Closed days are listed in closed_days and are missing from days. peak_hours is derived by Scrappa: the three busiest hours of each day.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
This endpoint has no required query parameters.
3 optional filters available.
string
Optional
Google Maps business in google_id (0x...:0x...) or place_id (ChIJ...) format. Send this or place_id. Example: 0x89c2598f7ff4aa09:0x313547e757cb8cea
0x89c2598f7ff4aa09:0x313547e757cb8cea
string
Optional
Google place_id (ChIJ...). Alternative to business_id.
1234567890
string
Optional
Optional exact name of the place, for example Katz's Delicatessen New York. It replaces the name lookup. The Google result must show the same name, otherwise the request answers 404.
coffee shops
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: YOUR_API_KEY_HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
<?php
use Illuminate\Support\Facades\Http;
$response = Http::timeout(30)
->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
->get('https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea');
if ($response->successful()) {
echo $response->body();
} else {
echo "Error: " . $response->status();
}
const options = {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE'
}
};
fetch('https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea', options)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.text();
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
const axios = require('axios');
const options = {
method: 'GET',
url: 'https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea',
headers: {
x-api-key: 'YOUR_API_KEY_HERE',
}
};
try {
const response = await axios(options);
console.log(response.data);
} catch (error) {
console.error('Error:', error.message);
}
require 'net/http'
require 'uri'
uri = URI.parse("https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'
begin
response = http.request(request)
puts response.body
rescue => e
puts "Error: #{e.message}"
end
import http.client
import json
conn = http.client.HTTPSConnection("scrappa.co")
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
conn.request("GET", "/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
except Exception as e:
print(f"Error: {e}")
finally:
conn.close()
import requests
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
response = requests.get('https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea', headers=headers)
response.raise_for_status()
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class ApiExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea")
.addHeader("x-api-key", "YOUR_API_KEY_HERE")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
System.out.println(response.body().string());
} else {
System.out.println("Error: " + response.code());
}
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea", nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(body))
}
#!/bin/bash
curl -X GET \
-H "x-api-key: YOUR_API_KEY_HERE" \
"https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea"
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");
try
{
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea"));
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
import axios from 'axios';
async function run(): Promise<void> {
try {
const response = await axios({
method: 'GET',
url: 'https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE',
},
});
console.log(response.data);
} catch (error) {
console.error('Error:', error);
}
}
void run();
use reqwest::Client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let response = client
.get("https://scrappa.co/api/maps/popular-times?business_id=0x89c2598f7ff4aa09%3A0x313547e757cb8cea")
.header("x-api-key", "YOUR_API_KEY_HERE")
.send()
.await?;
println!("{}", response.text().await?);
Ok(())
}
Response Schema
Example response fields are illustrative; inspect the JSON before integrating.
Example response fields
Scan these fields before integrating.
place
current_day
current_hour
live
typical_visit_duration
closed_days
days
credits_charged
Common days fields
day
hours
peak_hours
{
"place": {
"business_id": "0x89c2598f7ff4aa09:0x313547e757cb8cea",
"name": "Katz's Delicatessen",
"address": "Katz's Delicatessen, 205 E Houston St, New York, NY 10002"
},
"current_day": "tuesday",
"current_hour": 18,
"live": {
"day": "tuesday",
"hour": 18,
"hour_label": "6 PM",
"busyness_percent": 51,
"label": "A little busy",
"usual_busyness_percent": 78,
"usual_label": "Usually a little busy",
"wait_time": null
},
"typical_visit_duration": {
"text": "20 min to 1.5 hr",
"min_minutes": 20,
"max_minutes": 90
},
"closed_days": [],
"days": [
{
"day": "monday",
"hours": [
{
"hour": 6,
"hour_label": "6 AM",
"busyness_percent": null,
"label": null,
"wait_time": null,
"wait_minutes": null
},
{
"hour": 12,
"hour_label": "12 PM",
"busyness_percent": 77,
"label": "Usually a little busy",
"wait_time": null,
"wait_minutes": null
},
{
"hour": 18,
"hour_label": "6 PM",
"busyness_percent": 84,
"label": "Usually as busy as it gets",
"wait_time": null,
"wait_minutes": null
}
],
"peak_hours": [
{
"hour": 14,
"hour_label": "2 PM",
"busyness_percent": 86
},
{
"hour": 15,
"hour_label": "3 PM",
"busyness_percent": 87
},
{
"hour": 16,
"hour_label": "4 PM",
"busyness_percent": 87
}
]
},
{
"day": "tuesday",
"hours": [
{
"hour": 6,
"hour_label": "6 AM",
"busyness_percent": null,
"label": null,
"wait_time": null,
"wait_minutes": null
},
{
"hour": 12,
"hour_label": "12 PM",
"busyness_percent": 79,
"label": "Usually a little busy",
"wait_time": null,
"wait_minutes": null
},
{
"hour": 18,
"hour_label": "6 PM",
"busyness_percent": 78,
"label": "Usually a little busy",
"wait_time": null,
"wait_minutes": null
}
],
"peak_hours": [
{
"hour": 13,
"hour_label": "1 PM",
"busyness_percent": 87
},
{
"hour": 14,
"hour_label": "2 PM",
"busyness_percent": 89
},
{
"hour": 15,
"hour_label": "3 PM",
"busyness_percent": 87
}
]
}
],
"credits_charged": 3
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Validation Error
No business_id or place_id was sent, or a value is malformed. This response is not billed.
{
"message": "The request validation failed",
"errors": {
"business_id": [
"Provide a business_id or a place_id."
]
}
}No Popular Times
Google Maps has no place for this id, Google shows no popular times for it, or the result shows another place. This response is not billed.
{
"error": "Google shows no popular times for this place.",
"error_code": "google_maps_popular_times_not_found"
}Popular Times Temporarily Unavailable
No Google session could read the result. Retry after the Retry-After interval; this response is not billed.
{
"error": "Google Maps popular times are temporarily unavailable. Please retry.",
"error_code": "google_maps_popular_times_unavailable",
"retryable": true,
"retry_after": 5
}Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Related reading
Google Reviews API
Fetch Google Maps review text, ratings, author metadata, images, and owner responses as JSON.
Google Maps scraping API
Compare Maps data APIs for places, reviews, photos, and local SEO workflows.
Google Maps API
Review Scrappa's Maps endpoints for search, details, reviews, photos, and directions.
Pay-as-you-go scraping API
Compare flexible pricing before scaling Maps API usage.
Try It Live
Test this endpoint in our interactive playground with real data.