Fetch the owner posts of the Updates tab of a single Google Maps place: post text, offer and event headlines, validity window, call-to-action link, thumbnails and publication date. Posts come newest first, 10 per page, and the response carries the next page token.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
1 required parameter needed before sending a request.
3 optional filters available.
string
Required
Google Maps place identifier in google_id (0x...:0x...) format, the same id the reviews endpoints accept.
0x89c259a61c75684f:0x79d31adb123348d2
string
Optional
Token from the previous response to read the next, older page of posts.
example
string
Optional
Interface language for the upstream payload.
en
string
Optional
Country/region code for the upstream payload.
us
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/maps/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us",
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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us');
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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us', 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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us',
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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us")
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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us", 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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us', 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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us")
.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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us", 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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us"
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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us"));
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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us',
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/posts?data_id=0x89c259a61c75684f%3A0x79d31adb123348d2&hl=en&gl=us")
.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
posts
pagination
Common posts fields
post_id
title
description
link
{
"place": {
"data_id": "0x89c259a61c75684f:0x79d31adb123348d2",
"cid": "8778389626880739538",
"name": "Stumptown Coffee Roasters",
"logo": "https://lh6.googleusercontent.com/-uNxSvNQ0g1M/AAAAAAAAAAI/AAAAAAAAAAA/_ns-K8u9qxU/s40-c-k-mo/photo.jpg"
},
"posts": [
{
"post_id": "7922670519655566438",
"title": null,
"description": "We're proud to welcome back Costa Rica Montes de Oro to our single-origin lineup for the 15th year! Enjoy tasty notes of crisp green apple, syrupy apricot, and caramel sweetness in every cup.",
"link": "http://stumptowncoffee.com/",
"post_link": "https://search.google.com/local/posts?q=Stumptown+Coffee+Roasters&ludocid=8778389626880739538&lpsid=CIHM0ogKEICAgIC6ibDXGg&source=sh/x/loc/post/m1/1&lsig=AB86z5Vmj2Bn15Dk-BEO21A7q_SQ&shem=epsd1,esd2e,rimspwouoe,sdpie&shndl=-1",
"thumbnails": [
"https://lh3.googleusercontent.com/geougc/AF1QipMRyagBv6NZAjs4n7GOE7zjFMXos10L9mCYN5Gr=h305-no"
],
"source": "Stumptown Coffee Roasters",
"source_logo": "https://lh6.googleusercontent.com/-uNxSvNQ0g1M/AAAAAAAAAAI/AAAAAAAAAAA/_ns-K8u9qxU/s40-c-k-mo/photo.jpg",
"online_link": "http://stumptowncoffee.com/",
"online_link_text": "Order online",
"posted_at_text": "Sep 7, 2021",
"time": null
},
{
"post_id": "1365009519158844022",
"title": "Free Shipping",
"description": "Free shipping on all orders until 9/5",
"link": "https://search.google.com/local/posts?q=Stumptown+Coffee+Roasters&ludocid=8778389626880739538&lpsid=136500",
"post_link": "https://search.google.com/local/posts?q=Stumptown+Coffee+Roasters&ludocid=8778389626880739538&lpsid=136500",
"thumbnails": [
"https://lh3.googleusercontent.com/geougc/AF1QipPjMsnKP14O3fJfh89EqfFopfpoG-b8dmq4MUvK=h305-no"
],
"source": "Stumptown Coffee Roasters",
"source_logo": "https://lh6.googleusercontent.com/-uNxSvNQ0g1M/AAAAAAAAAAI/AAAAAAAAAAA/_ns-K8u9qxU/s40-c-k-mo/photo.jpg",
"online_link": "https://search.google.com/local/posts?q=Stumptown+Coffee+Roasters&ludocid=8778389626880739538&lpsid=136500",
"online_link_text": "View Offer",
"posted_at_text": "Aug 30, 2021",
"time": "Valid Aug 30 - Sep 5"
}
],
"pagination": {
"next_page_token": "CgsI6b369gUQwLGfBSoA",
"has_more": true,
"posts_returned": 10
}
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Validation Error
The data_id, next_page_token, hl or gl parameter failed validation before any upstream request ran. This response is not billed.
{
"errors": {
"data_id": [
"The data ID must be a google_id in the 0x...:0x... format, for example 0x89c259a61c75684f:0x79d31adb123348d2."
]
},
"message": "The request validation failed"
}Posts Temporarily Unavailable
The upstream service is temporarily unavailable. Please retry shortly.
{
"error": "Google Maps posts are temporarily unavailable. Please retry.",
"place": null,
"posts": null,
"retryable": true,
"error_code": "google_maps_posts_upstream_unavailable",
"pagination": null,
"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.