Appearance
Google Maps SERP Fresh
Google Maps SERP delivers up to 100 local business results from Google Maps for a given keyword and location. Results are based on the "search this area" behavior in Google Maps — the most reliable method for location-specific searches.
Endpoint Summary
| Method | Endpoint |
|---|---|
| Live Advanced | POST /v3/serp/google/maps/live/advanced |
| Standard Task POST | POST /v3/serp/google/maps/task_post |
| Standard Task GET | GET /v3/serp/google/maps/task_get/advanced/{id} |
| Tasks Ready | GET /v3/serp/google/maps/tasks_ready |
The Maps API only supports the Advanced function — there is no Regular or HTML variant.
Device Support
| Device | Available OS |
|---|---|
| Desktop | Windows, macOS |
| Mobile | Android, iOS |
Setting a Task (Standard Method)
POST https://api.dataforseo.com/v3/serp/google/maps/task_postRequired Parameters
| Field | Type | Description |
|---|---|---|
keyword | string | Search query. Max 700 characters. |
location_code | integer | Location code. Example: 2840 (United States). Required if location_name not set. |
language_code | string | Language code. Example: en. Required if language_name not set. |
Optional Parameters
| Field | Type | Default | Description |
|---|---|---|---|
depth | integer | 100 | Number of results. Max 700. Billed per 100 results. |
device | string | desktop | desktop or mobile |
os | string | windows / android | Desktop: windows, macos. Mobile: android, ios. |
priority | integer | 1 | 1 = normal, 2 = high priority |
tag | string | — | Custom task identifier (max 255 chars) |
postback_url | string | — | URL to receive results when complete |
pingback_url | string | — | URL to notify on completion |
location_name | string | — | Full location name (alternative to location_code). Example: New York,New York,United States |
language_name | string | — | Full language name (alternative to language_code). Example: English |
Search Operator Warning
If keyword contains operators like site:, intitle:, filetype:, allintext:, related:, etc., the charge per task is multiplied by 5.
Depth Billing Note
Billed per 100-result increment. If depth is set to 150, you are billed for 200 results (2x base price).
Example Requests
curl
bash
login="your_login"
password="your_password"
cred="$(printf ${login}:${password} | base64)"
curl --location --request POST \
"https://api.dataforseo.com/v3/serp/google/maps/task_post" \
--header "Authorization: Basic ${cred}" \
--header "Content-Type: application/json" \
--data '[{
"keyword": "plumber near me",
"location_code": 1023191,
"language_code": "en",
"depth": 100
}]'Python (Live)
python
import requests
from requests.auth import HTTPBasicAuth
import json
login = "your_login"
password = "your_password"
url = "https://api.dataforseo.com/v3/serp/google/maps/live/advanced"
payload = [{
"keyword": "roofing contractor",
"location_code": 1023191,
"language_code": "en",
"depth": 100
}]
response = requests.post(
url,
auth=HTTPBasicAuth(login, password),
json=payload
)
result = response.json()
tasks = result.get("tasks", [])
for task in tasks:
for item in task.get("result", []):
for element in item.get("items", []):
print(
element.get("rank_absolute"),
element.get("title"),
element.get("rating", {}).get("value"),
element.get("reviews_count"),
element.get("address")
)PHP (Standard)
php
<?php
$client = new RestClient('https://api.dataforseo.com/', null, 'your_login', 'your_password');
$post_array = [[
'keyword' => 'plumber near me',
'location_code' => 1023191,
'language_code' => 'en',
'depth' => 100,
'priority' => 1
]];
$result = $client->post('/v3/serp/google/maps/task_post', $post_array);
$task_id = $result['tasks'][0]['id'];
// Retrieve when ready
$result = $client->get("/v3/serp/google/maps/task_get/advanced/{$task_id}");
print_r($result);
?>Response Structure
json
{
"tasks": [
{
"id": "01010101-0101-0101-0101-010101010101",
"status_code": 20000,
"status_message": "Ok.",
"result": [
{
"keyword": "plumber near me",
"location_code": 1023191,
"language_code": "en",
"items_count": 20,
"items": [
{
"type": "maps_element",
"rank_group": 1,
"rank_absolute": 1,
"title": "Joe's Plumbing",
"address": "123 Main St, Miami, FL 33101",
"phone": "+1 305-555-0100",
"url": "https://joesplumbing.com",
"rating": {
"rating_type": "Max5",
"value": 4.8,
"votes_count": 127
},
"reviews_count": 127,
"place_id": "ChIJ...",
"is_claimed": true,
"category": "Plumber",
"work_hours": {...},
"feature_snippets": [...]
}
]
}
]
}
]
}Key Response Fields — Maps Items
| Field | Type | Description |
|---|---|---|
type | string | Always maps_element |
rank_group | integer | Position within the Maps result group |
rank_absolute | integer | Absolute position across all returned items |
title | string | Business name |
address | string | Full formatted address |
phone | string | Phone number as displayed |
url | string | Business website URL |
rating.value | float | Average star rating (0–5 scale) |
rating.votes_count | integer | Number of ratings |
reviews_count | integer | Total number of reviews |
place_id | string | Google Place ID |
is_claimed | boolean | Whether the listing is claimed by the business owner |
category | string | Primary business category |
work_hours | object | Business hours by day of week |
feature_snippets | array | Highlighted features (e.g., "wheelchair accessible", "free Wi-Fi") |
check_url | string | Google Maps URL to manually verify results |
Verifying Results
Use the check_url field to open the search in Google Maps Incognito mode with the "search this area" option selected. This confirms that the results match the actual search for the specified location.