Appearance
Keywords Data API Fresh
The Keywords Data API is the primary source for keyword research metrics. It pulls data directly from Google Ads and Bing's advertising infrastructure — the same numbers advertisers see in their platforms.
What It Covers
The API provides:
- Search volume — monthly search counts for any keyword
- CPC — cost-per-click estimates (low and high top-of-page bids)
- Competition — advertiser competition index (0–100)
- Monthly search trends — up to 4 years of historical data
- Related keywords — discover new keyword opportunities
- Keywords for a site — keywords relevant to a given domain
- Ad traffic estimates — projected clicks, impressions, and cost
Data is returned for specific locations and languages. If no location is specified, worldwide results are returned.
Data Sources
All Endpoints (55 total)
Google Ads (16 endpoints)
| Sub-Group | Endpoints | What It Returns |
|---|---|---|
| Search Volume | 4 | Volume, CPC, competition, monthly breakdown |
| Keywords For Site | 4 | Keywords a domain ranks for (Google Ads index) |
| Keywords For Keywords | 4 | Related keyword suggestions from seeds |
| Ad Traffic By Keywords | 4 | Estimated clicks, impressions, cost for keyword bidding |
Google Trends (4 endpoints)
| Endpoint | What It Returns |
|---|---|
| Google Trends Explore — live | Interest over time, geographic breakdown, related queries |
| Google Trends Explore — task_post | Async version |
| Google Trends Explore — tasks_ready | Poll for completed tasks |
| Google Trends Explore — task_get | Retrieve trend data |
DataForSEO Trends (4 endpoints)
DataForSEO's own trend index — normalized search interest data.
| Endpoint | What It Returns |
|---|---|
| DataForSEO Trends — live | Trend data from DataForSEO's internal index |
| DataForSEO Trends — task_post | Async version |
| DataForSEO Trends — tasks_ready | Poll for completed tasks |
| DataForSEO Trends — task_get | Retrieve trend data |
Clickstream Data (3 endpoints)
Real user behavior data — clicks, CTR, refined intent signal. More accurate than modeled estimates.
| Endpoint | What It Returns |
|---|---|
/v3/keywords_data/clickstream/search_volume/live | Clickstream-based search volume |
/v3/keywords_data/clickstream/bulk_search_volume/live | Bulk clickstream volume (up to 1,000 keywords) |
/v3/keywords_data/clickstream/locations_and_languages | Supported locations |
Bing Ads (28 endpoints — 7 sub-groups × 4 endpoints each)
| Sub-Group | What It Returns |
|---|---|
| Search Volume | Bing search volume and CPC |
| Search Volume History | Historical Bing volume trends |
| Keywords For Site | Bing-relevant keywords for a domain |
| Keywords For Keywords | Bing-based related keywords |
| Keyword Performance | Performance metrics across Bing |
| Keyword Suggestions For URL | Keyword ideas for a specific URL |
| Audience Estimation | Estimated reach for keyword targeting on Bing |
Google Trends Example
python
import os, requests
from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth(os.environ["DATAFORSEO_LOGIN"], os.environ["DATAFORSEO_PASSWORD"])
r = requests.post(
"https://api.dataforseo.com/v3/keywords_data/google_trends/explore/live",
auth=auth,
headers={"Content-Type": "application/json"},
json=[{
"keywords": ["roofing contractor", "roof replacement", "metal roofing"],
"location_code": 2840,
"language_code": "en",
"type": "web",
"date_from": "2024-01-01",
"date_to": "2025-01-01"
}]
)
result = r.json()["tasks"][0]["result"][0]
print(result.get("items", []))Clickstream Search Volume Example
python
r = requests.post(
"https://api.dataforseo.com/v3/keywords_data/clickstream/search_volume/live",
auth=auth,
headers={"Content-Type": "application/json"},
json=[{
"keywords": ["roofing contractor dallas", "emergency roof repair"],
"location_code": 2840,
"language_code": "en"
}]
)
for item in r.json()["tasks"][0]["result"]:
print(f"{item['keyword']}: {item.get('search_volume', 0)}")Bing Keyword Volume Example
python
r = requests.post(
"https://api.dataforseo.com/v3/keywords_data/bing/search_volume/live",
auth=auth,
headers={"Content-Type": "application/json"},
json=[{
"keywords": ["roofing contractor dallas"],
"location_code": 2840,
"language_code": "en"
}]
)
### Google Ads Endpoints
| Endpoint | What It Returns |
|----------|----------------|
| Search Volume | Volume, CPC, competition, monthly breakdown |
| Keywords For Site | Keywords relevant to a domain |
| Keywords For Keywords | Related keyword suggestions |
| Ad Traffic By Keywords | Traffic estimates for keywords |
| Google Trends Explore | Trend interest over time |
### Bing Endpoints
| Endpoint | What It Returns |
|----------|----------------|
| Search Volume | Bing search volume and CPC |
| Keywords For Site | Bing-relevant keywords for a domain |
| Keywords For Keywords | Bing-based related keywords |
| Keyword Performance | Performance metrics across Bing |
## Supported Search Engines and Locations
Both Google and Bing endpoints support location-specific queries. You can target by:
- `location_name` — full name (e.g., `"London,England,United Kingdom"`)
- `location_code` — numeric code (e.g., `2840` for the United States)
- `location_coordinate` — GPS lat/long coordinates
A full list of supported locations is available via the `/v3/keywords_data/google_ads/locations` and `/v3/keywords_data/bing/locations` endpoints.
## Methods
### Live Method
Returns data immediately in a single request. Higher cost, instant results. Best for on-demand queries.
### Standard Method
Two-step flow: POST to set a task, GET to retrieve results. More affordable. Use when real-time response is not required.
Both methods support `pingback_url` and `postback_url` for webhook-based delivery.
## Rate Limits
- Up to **2000 API calls per minute**
- Up to **100 tasks per POST call**
- Up to **1000 keywords per task**
## Keyword Restrictions
Google Ads applies advertising policy restrictions to certain keyword categories. Categories including weapons, tobacco, drugs, and violence may return no data. If a batch contains one restricted keyword, the entire batch returns no data — submit restricted keywords in separate requests.
## Authentication
All endpoints use HTTP Basic Authentication. Encode `login:password` in Base64 and pass it in the `Authorization` header.
```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"python
from client import RestClient
client = RestClient("your_login", "your_password")