Fetch all reviews written by a single Google Maps contributor (Local Guide): profile header with Local Guide level and points, contribution counts, and the review feed with place detail, rating, date, snippet, photos and owner replies. The numeric contributor ID is the author ID returned as author_id by the Google Maps reviews endpoints.
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.
2 optional filters available.
string
Required
The numeric Google Maps contributor ID, taken from the author ID of any review.
114427132849405397807
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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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/contributor-reviews?contributor_id=114427132849405397807&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.
contributor
contributions
reviews
pagination
Common reviews fields
review_id
place_info
rating
snippet
{
"contributor": {
"contributor_id": "114427132849405397807",
"name": "Raafe Purnsley",
"thumbnail": "https://lh3.googleusercontent.com/a-/ALV-UjXNG_03CfdInQhDO-JDM3HIAhggw6HJTR2igs8WY0wZ8jhwAmk=s120-c-rp-mo-ba12-br100",
"local_guide_level": 4,
"points": 323,
"level_goal": "177 points away from Level 5",
"photo_count": 4
},
"contributions": {
"reviews": 13,
"ratings": 0,
"photos": 4,
"answers": 12,
"places_added": 0,
"edits": 0,
"videos": 0,
"qa": 0,
"roads_added": 0,
"captions": 0,
"reported_incorrect": 0,
"trip_feedback": 0,
"incident_reports": 1
},
"reviews": [
{
"review_id": "Ci9DQUlRQUNvZENodHljRjlvT2t3eU9EUkJTRkE0WmpKWldFaDNRMmxxWkRJdE5rRRAB",
"place_info": {
"place_id": "ChIJESlKXfbprIkRj4IVDwHKW-U",
"data_id": "0x89ace9f65d4a2911:0xe55bca010f15828f",
"title": "Hyper Kidz Durham",
"address": "105 W North Carolina 54 suite 237B, Durham, NC 27713",
"gps": {
"latitude": 35.9100245,
"longitude": -78.9384918
},
"type": "Indoor playground",
"type_id": "indoor_playground",
"rating": 4.9,
"review_count": 3594,
"google_mid": "/g/11wv44v3zt"
},
"rating": 5,
"snippet": "This place is an oasis for a world not designed for kids. When the heat index is too high and the parks hare far and few between (have lead in the soil) or don\u2019t have many amenities. Also JAYLA was amazing. Quick, knowledgeable, laughed at all my bad jokes.",
"language": "en",
"date": {
"timestamp": 1782926184747,
"relative": "3 months ago"
},
"images": [],
"owner_response": {
"text": "Dear Raafe,\\n\\nThank you so much for your thoughtful review! It means a lot to hear that HyperKidz has become a fun, comfortable place for families to enjoy, especially when outdoor options aren\u2019t ideal.",
"language": "en",
"url": "https://business.google.com/local/business/11760901612531927006/customers/reviews/reply?p=CkRDaTlEUVVsUlFVTnZaRU5vZEhsalJqbHZUMnQzZVU5RVVrSlRSa0UwV21wS1dsZEZhRE5STW14eFdrUkpkRTVyUlJBQhAA"
}
}
],
"pagination": {
"has_more": false,
"next_page_token": null,
"reviews_declared": 13,
"reviews_returned": 13,
"page_size": 100
}
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Validation Error
The contributor_id, hl or gl parameter failed validation before the upstream request ran.
{
"errors": {
"contributor_id": [
"The contributor ID must be a numeric Google Maps contributor ID (10-25 digits), for example 114427132849405397807."
]
},
"message": "The request validation failed"
}Contributor Reviews Temporarily Unavailable
The upstream service is temporarily unavailable. Please retry shortly.
{
"error": "Google Maps contributor reviews are temporarily unavailable. Please retry.",
"reviews": null,
"retryable": true,
"error_code": "google_maps_contributor_reviews_upstream_unavailable",
"pagination": null,
"contributor": null,
"retry_after": 5,
"contributions": null
}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.