Skip to content

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

MethodEndpoint
Live AdvancedPOST /v3/serp/google/maps/live/advanced
Standard Task POSTPOST /v3/serp/google/maps/task_post
Standard Task GETGET /v3/serp/google/maps/task_get/advanced/{id}
Tasks ReadyGET /v3/serp/google/maps/tasks_ready

The Maps API only supports the Advanced function — there is no Regular or HTML variant.

Device Support

DeviceAvailable OS
DesktopWindows, macOS
MobileAndroid, iOS

Setting a Task (Standard Method)

POST https://api.dataforseo.com/v3/serp/google/maps/task_post

Required Parameters

FieldTypeDescription
keywordstringSearch query. Max 700 characters.
location_codeintegerLocation code. Example: 2840 (United States). Required if location_name not set.
language_codestringLanguage code. Example: en. Required if language_name not set.

Optional Parameters

FieldTypeDefaultDescription
depthinteger100Number of results. Max 700. Billed per 100 results.
devicestringdesktopdesktop or mobile
osstringwindows / androidDesktop: windows, macos. Mobile: android, ios.
priorityinteger11 = normal, 2 = high priority
tagstringCustom task identifier (max 255 chars)
postback_urlstringURL to receive results when complete
pingback_urlstringURL to notify on completion
location_namestringFull location name (alternative to location_code). Example: New York,New York,United States
language_namestringFull 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

FieldTypeDescription
typestringAlways maps_element
rank_groupintegerPosition within the Maps result group
rank_absoluteintegerAbsolute position across all returned items
titlestringBusiness name
addressstringFull formatted address
phonestringPhone number as displayed
urlstringBusiness website URL
rating.valuefloatAverage star rating (0–5 scale)
rating.votes_countintegerNumber of ratings
reviews_countintegerTotal number of reviews
place_idstringGoogle Place ID
is_claimedbooleanWhether the listing is claimed by the business owner
categorystringPrimary business category
work_hoursobjectBusiness hours by day of week
feature_snippetsarrayHighlighted features (e.g., "wheelchair accessible", "free Wi-Fi")
check_urlstringGoogle 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.

Internal SOP reference — not affiliated with DataForSEO.