Skip to main content

Overview

The DataForSEO class provides integration with DataForSEO API to fetch SERP data, check rankings, analyze competitors, and perform keyword research.

Installation

from data_sources.modules.dataforseo import DataForSEO

Authentication

The module uses basic authentication with API credentials.

Environment Variables

DATAFORSEO_LOGIN=your-login
DATAFORSEO_PASSWORD=your-password
DATAFORSEO_BASE_URL=https://api.dataforseo.com

Getting API Credentials

  1. Sign up at DataForSEO
  2. Generate API credentials from your dashboard
  3. Set credentials in your environment

Initialization

dfs = DataForSEO(
    login="your-login",  # Optional, defaults to env var
    password="your-password"  # Optional, defaults to env var
)
login
str
API login. Defaults to DATAFORSEO_LOGIN environment variable.
password
str
API password. Defaults to DATAFORSEO_PASSWORD environment variable.

Methods

get_rankings

Get ranking positions for specific keywords.
rankings = dfs.get_rankings(
    domain="castos.com",
    keywords=["podcast hosting", "podcast analytics"],
    location_code=2840,  # USA
    language_code="en"
)
domain
str
required
Your domain (e.g., “castos.com”)
keywords
list
required
List of keywords to check
location_code
int
default:"2840"
DataForSEO location code (2840 = USA)
language_code
str
default:"en"
Language code
results
list
keyword
str
Search keyword
domain
str
Your domain
position
int
Ranking position (None if not ranking)
url
str
Ranking URL
ranking
bool
Whether domain is ranking
search_volume
int
Monthly search volume
cpc
float
Cost per click

get_serp_data

Get complete SERP data for a keyword.
serp = dfs.get_serp_data(
    keyword="podcast monetization",
    location_code=2840,
    limit=100
)
keyword
str
required
Search keyword
location_code
int
default:"2840"
DataForSEO location code
limit
int
default:"100"
Number of results to return
serp_data
dict
keyword
str
Search keyword
search_volume
int
Monthly search volume
cpc
float
Cost per click
competition
float
Competition level
organic_results
list
List of organic search results
features
list
SERP features present (featured_snippet, people_also_ask, etc.)
total_results
int
Total number of results

analyze_competitor

Analyze competitor rankings vs yours.
comparison = dfs.analyze_competitor(
    competitor_domain="anchor.fm",
    keywords=["podcast hosting", "podcast analytics"],
    your_domain="castos.com"
)
competitor_domain
str
required
Competitor’s domain
keywords
list
required
Keywords to compare
your_domain
str
Your domain (optional)
comparison
dict
competitor
str
Competitor domain
your_domain
str
Your domain
comparison
list
List of keyword comparisons

get_keyword_ideas

Get related keyword ideas.
ideas = dfs.get_keyword_ideas(
    seed_keyword="podcast hosting",
    location_code=2840,
    limit=100
)
seed_keyword
str
required
Starting keyword
location_code
int
default:"2840"
Location code
limit
int
default:"100"
Number of ideas to return
keywords
list
keyword
str
Keyword phrase
search_volume
int
Monthly search volume
cpc
float
Cost per click
competition
float
Competition level
avg_position
int
Average position in SERPs

get_questions

Get question-based queries related to keyword.
questions = dfs.get_questions(
    keyword="podcast monetization",
    location_code=2840,
    limit=50
)
keyword
str
required
Seed keyword
location_code
int
default:"2840"
Location code
limit
int
default:"50"
Number of questions to return
questions
list
question
str
Question query
search_volume
int
Monthly search volume
cpc
float
Cost per click

get_domain_metrics

Get domain overview metrics.
metrics = dfs.get_domain_metrics(
    domain="castos.com"
)
domain
str
required
Domain to analyze
metrics
dict
domain
str
Domain name
organic_keywords
int
Number of organic keywords ranking
organic_traffic
int
Estimated monthly organic traffic
domain_rank
int
Domain authority rank
Backlink metrics

check_ranking_history

Get ranking history for a keyword (requires historical data setup).
history = dfs.check_ranking_history(
    domain="castos.com",
    keyword="podcast hosting",
    months_back=3
)
domain
str
required
Your domain
keyword
str
required
Keyword to track
months_back
int
default:"3"
Months of history
history
list
List of historical rankings

Example Usage

from dotenv import load_dotenv
from data_sources.modules.dataforseo import DataForSEO

load_dotenv('data_sources/config/.env')

dfs = DataForSEO()

# Check rankings
rankings = dfs.get_rankings(
    domain="castos.com",
    keywords=["podcast hosting", "podcast analytics", "private podcast"]
)

for rank in rankings:
    print(f"\nKeyword: {rank['keyword']}")
    print(f"Position: {rank['position'] or 'Not ranking'}")
    if rank['search_volume']:
        print(f"Search Volume: {rank['search_volume']:,}")

# Get SERP data
serp = dfs.get_serp_data("podcast monetization")
print(f"\nSearch Volume: {serp['search_volume']:,}")
print(f"SERP Features: {', '.join(serp['features'])}")
print(f"\nTop 10 Results:")
for result in serp['organic_results'][:10]:
    print(f"{result['position']}. {result['domain']}")
    print(f"   {result['url']}")

# Related questions
questions = dfs.get_questions("podcast monetization")
for q in questions[:10]:
    print(f"- {q['question']}")
    if q['search_volume']:
        print(f"  Volume: {q['search_volume']:,}")

Source Code Reference

Location: data_sources/modules/dataforseo.py:14 The module uses DataForSEO’s REST API with basic authentication. All requests are made via POST to the appropriate endpoints.

Build docs developers (and LLMs) love