Skip to content

Google Ads Search Volume Fresh

Returns search volume, CPC, competition index, and 12-month trend data for up to 1,000 keywords per request. Data comes directly from Google Ads and reflects advertiser-side metrics. Historical data is available for 4 years.

Endpoint

POST https://api.dataforseo.com/v3/keywords_data/google_ads/search_volume/task_post

This is the Standard method — set a task, retrieve results when ready. For instant results, use the Live method at /v3/keywords_data/google_ads/search_volume/live/.

Task POST Parameters

Required

FieldTypeDescription
keywordsarrayKeywords to query. Max 1,000 per request. Max 80 characters per keyword. Max 10 words per phrase. Converted to lowercase.

Location (optional — omit for worldwide results)

FieldTypeDescription
location_namestringFull location name, e.g., "United States" or "London,England,United Kingdom"
location_codeintegerNumeric location code, e.g., 2840 for the United States
location_coordinatestringGPS coordinates in "latitude,longitude" format

Only one location field is needed.

Language (optional)

FieldTypeDescription
language_namestringFull language name, e.g., "English"
language_codestringLanguage code, e.g., "en"

Date Range (optional)

FieldTypeDescription
date_fromstringStart date in "yyyy-mm-dd" format. Min 4 years back. Default: 12 months ago.
date_tostringEnd date in "yyyy-mm-dd" format. Cannot exceed last month (Google doesn't return current month data).

Other Options

FieldTypeDescription
search_partnersbooleanInclude Google search partner networks. Default: false.
include_adult_keywordsbooleanInclude adult-category keywords. Default: false.
sort_bystringSort results by: relevance, search_volume, competition_index, low_top_of_page_bid, high_top_of_page_bid. Default: relevance.
tagstringCustom task identifier, max 255 characters. Returned in the response data object.
postback_urlstringURL to receive completed results via POST (gzip compressed).
pingback_urlstringURL to receive a GET notification when the task is complete.

Response Structure

The API returns a JSON object with the following top-level fields:

FieldTypeDescription
versionstringAPI version
status_codeintegerGeneral status code (20000 = success)
status_messagestringHuman-readable status message
timestringTotal execution time in seconds
costfloatTotal cost of this request in USD
tasks_countintegerNumber of tasks in the response
tasks_errorintegerNumber of tasks that returned errors
tasksarrayArray of task result objects

Task Object

FieldTypeDescription
idstringUnique task UUID
status_codeintegerTask-level status code
status_messagestringTask-level status message
timestringTask execution time
costfloatTask cost in USD
result_countintegerNumber of keyword results
dataobjectEcho of the parameters you submitted
resultarrayKeyword result objects (null on task_post, populated on task_get)

Result Object (per keyword)

FieldTypeDescription
keywordstringThe queried keyword
location_codeintegerLocation code used
language_codestringLanguage code used
search_volumeintegerAverage monthly searches over the date range
competitionstringCompetition level: LOW, MEDIUM, or HIGH
competition_indexintegerNumeric competition score (0–100)
cpcfloatAverage CPC in USD
low_top_of_page_bidfloatLower range bid estimate for top-of-page placement (USD)
high_top_of_page_bidfloatUpper range bid estimate for top-of-page placement (USD)
monthly_searchesarrayMonthly search volume breakdown — array of {year, month, search_volume} objects

Code Examples

cURL

bash
login="your_login"
password="your_password"
cred="$(printf ${login}:${password} | base64)"

curl --location --request POST "https://api.dataforseo.com/v3/keywords_data/google_ads/search_volume/task_post" \
  --header "Authorization: Basic ${cred}" \
  --header "Content-Type: application/json" \
  --data-raw '[
    {
      "location_name": "United States",
      "keywords": [
        "buy laptop",
        "cheap laptops for sale",
        "purchase laptop"
      ]
    }
  ]'

Python

python
from client import RestClient

client = RestClient("your_login", "your_password")

post_data = dict()

post_data[0] = dict(
    location_name="United States",
    language_code="en",
    keywords=[
        "buy laptop",
        "cheap laptops for sale",
        "purchase laptop"
    ]
)

response = client.post("/v3/keywords_data/google_ads/search_volume/task_post", post_data)

if response["status_code"] == 20000:
    task_id = response["tasks"][0]["id"]
    print(f"Task set. ID: {task_id}")
else:
    print(f"Error {response['status_code']}: {response['status_message']}")

Retrieving Results

After setting a task, poll for completion and retrieve results:

python
# Check which tasks are ready
ready = client.get("/v3/keywords_data/google_ads/search_volume/tasks_ready")

# Retrieve a specific task result
task_id = "your-task-uuid-here"
result = client.get(f"/v3/keywords_data/google_ads/search_volume/task_get/{task_id}")

if result["status_code"] == 20000:
    for keyword_data in result["tasks"][0]["result"]:
        print(keyword_data["keyword"], keyword_data["search_volume"], keyword_data["cpc"])

Pricing Notes

  • One request covers 1 to 1,000 keywords at the same price
  • Worldwide results (no location specified) are priced separately
  • Check the Pricing page for current rates per request

Internal SOP reference — not affiliated with DataForSEO.