Install Ahrefs Python
Pick your agent. Every command is ready to paste.
npx skills add OpenClaudia/openclaudia-skills --skill ahrefs-pythonThe open skills CLI detects your agents (Claude Code, Cursor, Codex and 70+ more) and installs to the right folder. Add -g to install globally.
01
Install it
Run the command above, or upload the folder in Claude.
02
Ask naturally
Describe the task. Your agent loads ahrefs-python when the request matches its description.
03
Name it if needed
If it does not trigger, say “use the ahrefs-python skill”. In Codex, type $ahrefs-python.
Ahrefs Python SDK Skill
Overview
The Ahrefs API provides programmatic access to Ahrefs SEO data. The official Python SDK (ahrefs-python) provides typed request and response models for all endpoints, auto-generated from the OpenAPI spec.
Key capabilities:
- Site Explorer - Backlinks, organic keywords, domain rating, traffic, referring domains
- Keywords Explorer - Keyword research, volumes, difficulty, related terms
- Rank Tracker - SERP monitoring, competitor tracking
- Site Audit - Technical SEO issues, page content, page explorer
- Brand Radar - AI brand mentions, share of voice, impressions
- SERP Overview - Search result analysis
- Batch Analysis - Bulk domain/URL metrics via POST
Installation
pip3 install git+https://github.com/ahrefs/ahrefs-python.git
Requires Python 3.11+. Dependencies: httpx, pydantic.
API Method Discovery
The SDK has 52 methods across 7 API sections. The built-in search tool is the fastest way to find the right method — it returns matching method signatures, parameters, and return types directly, so there's no need to scan through a large reference.
Python (preferred when already in a Python context):
from ahrefs.search import search_api_methods
# Returns formatted text with method signatures, parameters, and return types
print(search_api_methods("domain rating"))
# Filter by API section and limit results
print(search_api_methods("backlinks", section="site-explorer", limit=3))
CLI (preferred when exploring from the terminal):
# Ensure python3 points to the interpreter where ahrefs-python is installed:
# which python3
# python3 -c "import ahrefs"
python3 -m ahrefs.api_search "domain rating"
python3 -m ahrefs.api_search "backlinks" --section site-explorer --limit 3
python3 -m ahrefs.api_search "batch" --json
python3 -m ahrefs.api_search --sections # list all API sections
IMPORTANT RULES
- ALWAYS use the
ahrefs-pythonSDK. DO NOT make rawhttpx/requestscalls to the Ahrefs API. - ALWAYS pass dates as strings in
YYYY-MM-DDformat (e.g."2025-01-15"). - ALWAYS use
selecton list endpoints to request only the columns you need. List endpoints return all columns by default, which wastes API units and increases response size. - USE context managers (
with/async with) for client lifecycle management. - NEVER hardcode API keys in source code. Use the
AHREFS_API_KEYenvironment variable or your preferred secrets mechanism. - The client handles retries (429, 5xx, connection errors) automatically. DO NOT implement your own retry logic on top of the SDK.
Quick Start
import os
from ahrefs import AhrefsClient
with AhrefsClient(api_key=os.environ["AHREFS_API_KEY"]) as client:
data = client.site_explorer_domain_rating(target="ahrefs.com", date="2025-01-15")
print(data.domain_rating) # 91.0
print(data.ahrefs_rank) # 3
SDK Patterns
Client Setup
import os
import ahrefs
with ahrefs.AhrefsClient(
api_key=os.environ["AHREFS_API_KEY"], # or any secrets source
base_url="...", # override API base URL (default: https://api.ahrefs.com/v3)
timeout=30.0, # request timeout in seconds (default: 60)
max_retries=3, # retries on transient errors (default: 2)
) as client:
...
Async client:
import os
from ahrefs import AsyncAhrefsClient
async with AsyncAhrefsClient(api_key=os.environ["AHREFS_API_KEY"]) as client:
data = await client.site_explorer_domain_rating(target="ahrefs.com", date="2025-01-15")
For parallel calls, use asyncio.gather:
import asyncio
async with AsyncAhrefsClient(api_key=os.environ["AHREFS_API_KEY"]) as client:
dr_ahrefs, dr_moz = await asyncio.gather(
client.site_explorer_domain_rating(target="ahrefs.com", date="2025-01-15"),
client.site_explorer_domain_rating(target="moz.com", date="2025-01-15"),
)
Calling Methods
Two calling styles -- both are equivalent:
# Keyword arguments (recommended)
data = client.site_explorer_domain_rating(target="ahrefs.com", date="2025-01-15")
# Request objects (full type safety)
from ahrefs.types import SiteExplorerDomainRatingRequest
request = SiteExplorerDomainRatingRequest(target="ahrefs.com", date="2025-01-15")
data = client.site_explorer_domain_rating(request)
Method names follow {api_section}_{endpoint}, e.g. site_explorer_organic_keywords, keywords_explorer_overview.
Responses
Methods return typed Data objects directly.
Scalar endpoints return a single data object (or None):
data = client.site_explorer_domain_rating(target="ahrefs.com", date="2025-01-15")
print(data.domain_rating)
List endpoints return a list of data objects. There is no pagination — set limit to the number of results you need. Use select to request only the columns you need:
items = client.site_explorer_organic_keywords(
target="ahrefs.com",
date="2025-01-15",
select="keyword,volume,best_position",
order_by="volume:desc",
limit=10,
)
for item in items:
print(item.keyword, item.volume, item.best_position)
Error Handling
import ahrefs
try:
data = client.site_explorer_domain_rating(target="example.com", date="2025-01-15")
except ahrefs.AuthenticationError: # 401
...
except ahrefs.RateLimitError as e: # 429 -- e.retry_after has the delay
...
except ahrefs.NotFoundError: # 404
...
except ahrefs.APIError as e: # other 4xx/5xx -- e.status_code, e.response_body
...
except ahrefs.APIConnectionError: # network / timeout
...
All exceptions inherit from ahrefs.AhrefsError.
Common Parameters
Most list endpoints share these parameters:
| Parameter | Type | Description |
|---|---|---|
target |
str |
Domain, URL, or path to analyze |
date |
str |
Date in YYYY-MM-DD format |
date_from / date_to |
str |
Date range for history endpoints |
country |
str |
Two-letter country code (ISO 3166-1 alpha-2) |
select |
str |
Comma-separated columns to return |
where |
str |
Filter expression |
order_by |
str |
Column and direction, e.g. "volume:desc" |
limit |
int |
Max results to return |
Parameters typed as enums in the API reference (CountryEnum, VolumeModeEnum, etc.) accept plain strings — pass country="us" not CountryEnum("us").
The where parameter takes a JSON string. Use json.dumps() to build it:
import json
where = json.dumps({"field": "volume", "is": ["gte", 1000]})
items = client.site_explorer_organic_keywords(
target="ahrefs.com", date="2025-01-15",
select="keyword,volume", where=where,
)
For full filter syntax (boolean combinators, operators, nested fields), see references/filter-syntax.md.
API Methods
Use search_api_methods("query") or python3 -m ahrefs.api_search "query" to find methods by keyword. Search covers all 52 methods across 7 API sections and returns complete signatures, parameters, and response fields.
Tips for Ahrefs Python
- • Start a fresh session after installing so your agent picks up the new skill.
- • It bundles reference files. The agent reads them only when needed, so they cost no context until then.
- • It is part of a pack with 30 skills. Install only the ones you need with --skill to keep triggers precise.
- • If two skills overlap, mention the one you want by name.
Questions about Ahrefs Python
What does the Ahrefs Python skill do?
Manages Ahrefs API usage in Python using `ahrefs-python` library. Use when working with SEO / marketing related tasks or with data including backlinks, keywords, domain ratings, organic traffic, site audits, rank tracking, and brand monitoring. Covers `ahrefs-python` usage including AhrefsClient / AsyncAhrefsClient, typed request/response models, error handling, and all API sections.
How do I install Ahrefs Python?
Run "npx skills add OpenClaudia/openclaudia-skills --skill ahrefs-python" in your project. The skills CLI installs it for Claude Code, Cursor, Codex and 70+ other agents. In Claude on the web, upload the skill folder as a ZIP under Customize > Skills.
Does Ahrefs Python work in Cursor and Codex?
Yes. Ahrefs Python uses the open SKILL.md format, so it works in Claude Code, Claude, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot and other agents that support agent skills.
Is Ahrefs Python free?
Ahrefs Python is open source on GitHub under the MIT license. It is free to install; check the license before commercial use.
Who made Ahrefs Python?
Ahrefs Python is published by OpenClaudia in the OpenClaudia/openclaudia-skills repository, together with 29 other skills.
