DataForSEO
SkillSearchQuery DataForSEO for SEO + market-validation data — Google SERP rank checks, keyword search volume, keyword discovery (semantic ideas, related-search expansion, search-intent classification), domain/competitor analytics, backlinks, and App Store / Play data (which apps rank + review mining). Use when checking where a site ranks, finding or discovering what people search for, validating demand and competition for an app/business idea, analysing a domain or its competitors, auditing backlinks, or mining competitor app reviews for pain points. Requires DATAFORSEO_USERNAME (or DATAFORSEO_LOGIN) and DATAFORSEO_PASSWORD. Every call spends DataForSEO credits.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the DataForSEO skill
What this skill tells your AI
The instructions your AI receives, as published by thecolab-ai/.skills in skills/dataforseo/SKILL.md and read by ahel’s review.
Goal
Query DataForSEO's v3 endpoints through a CLI that is easy for agents to script and humans to scan — SERP, keyword research + discovery, domain/competitor analytics, backlinks, App Store / Play data, and one-shot idea validation.
Use this when
- Validating an app/business idea in one scored pass (
validate <idea>) - Checking where a site ranks, or listing the top organic results (
serp) - Finding search volume, CPC, and competition for keywords (
volume) - Discovering keywords — long-tail (
suggestions), semantic (ideas), related-search (related), intent (intent) - Seeing what keywords a domain already ranks for (
ranked) - Finding a domain's organic competitors (
competitors) - Getting a domain's organic/paid rank overview (
domain) - Auditing a domain's backlinks and referring domains (
backlinks,refdomains) - Which apps rank in a store (
appsearch); mining app reviews (appreviews)
Do not use this for
- Idle exploration — every command spends DataForSEO credits. Run the
narrowest command that answers the question, and use
--limitto cap rows. - Site audits / on-page crawling — not wrapped in v1 (uses async task endpoints).
- Bulk async jobs — this skill only calls synchronous
liveendpoints. - Anything outside SEO data (no writes, no account/billing management).
Setup
Requires DataForSEO API credentials (your API login + password from the dashboard — these are not your website login/password).
- Get them at https://app.dataforseo.com/api-access
- Export them in
~/.zshenv(not.zshrc, not a repo.env):.zshenvis read by every zsh — interactive and not — so the skill and the DataForSEO MCP subprocess both inherit them, and the secret never lands in a git repo.
Thenexport DATAFORSEO_USERNAME="your_api_login" # the email login export DATAFORSEO_PASSWORD="your_api_password" # plaintext — NOT the base64 tokenchmod 600 ~/.zshenvand open a fresh shell (orsource ~/.zshenv). - Use the plaintext password, not the pre-encoded "token" the dashboard shows — the CLI does its own base64 encoding, so a token gives auth failures.
The CLI accepts DATAFORSEO_USERNAME (the DataForSEO MCP's variable name) or
DATAFORSEO_LOGIN for the login, so one pair of env vars powers both. It does
not read the credentials until a command actually calls the API, so --help
works without them.
Preferred workflow
- Run
scripts/cli.pywith the narrowest subcommand that answers the task. - Default location is New Zealand (
nz). For keyword volume, a larger market (--location us) is usually more meaningful than tiny NZ numbers. - Use default human output for direct answers;
--jsonwhen piping to another tool or agent. - Keep
--limitlow to control cost, especially onrankedandrefdomains.
CLI
Run with:
python3 skills/dataforseo/scripts/cli.py <command> [flags]
Common flags: --location (alias like nz/us/uk/au or a numeric
location_code), --language (default en), --limit, --json.
validate <idea> — one-shot idea scorecard
The flagship for marketing-first validation. Runs discovery + demand + intent +
SERP + app-store competition in one pass (~6 API calls, one async) and prints a
scored scorecard: seed demand (anchored on the idea's own search volume, not
the noisiest discovered term), commercial intent, dominant search intent, whether
the SERP is content- or app-dominated, and app-incumbent strength — plus a
ready-to-run appreviews command to mine the top incumbent's pain points next.
python3 skills/dataforseo/scripts/cli.py validate "fruit tree care app" --location us --store apple
Use a specific seed that names the actual job (e.g. "fruit tree care app",
"garden planner app"). Broad/ambiguous seeds pollute the discovery table with
off-target semantic matches — the scorecard flags this, and the seed-anchored
demand line stays honest regardless, but the discovered-terms table is noisier.
It deliberately does not auto-mine reviews (slow + pricey); it hands you the
command to do that as the follow-up.
serp <keyword> [--domain <site>]
Top Google organic results for a keyword. With --domain, reports that site's
rank position instead of listing results.
python3 skills/dataforseo/scripts/cli.py serp "vegetable garden planner"
python3 skills/dataforseo/scripts/cli.py serp "garden planner app" --domain grovekeeper.app
python3 skills/dataforseo/scripts/cli.py serp "garden planner" --location us --limit 20
volume <keyword...>
Search volume, CPC, and competition for one or more keywords (Google Ads data).
python3 skills/dataforseo/scripts/cli.py volume "garden planner" "vegetable planner" --location us
suggestions <seed>
Long-tail keyword ideas containing the seed term, with volumes.
python3 skills/dataforseo/scripts/cli.py suggestions "companion planting" --location us --limit 25
ranked <domain>
Keywords a domain already ranks for.
python3 skills/dataforseo/scripts/cli.py ranked grovekeeper.app --location us --limit 25
competitors <domain>
Domains competing for the same keywords.
python3 skills/dataforseo/scripts/cli.py competitors grovekeeper.app --location us
domain <domain>
Organic/paid rank overview: keyword count, estimated traffic, position buckets.
python3 skills/dataforseo/scripts/cli.py domain grovekeeper.app --location us
backlinks <domain>
Backlink summary: total backlinks, referring domains, domain rank. (No location.)
python3 skills/dataforseo/scripts/cli.py backlinks grovekeeper.app
refdomains <domain>
Referring domains, ranked by domain rank. (No location.)
python3 skills/dataforseo/scripts/cli.py refdomains grovekeeper.app --limit 25
Discovery commands (counter confirmation bias)
These surface demand you did not seed — the antidote to "I searched my own idea and found some volume, so it's validated." Run these before deciding what a market wants.
ideas <seed...>
Semantically related keywords that need not contain the seed (category match, not text match). The workhorse for finding demand you'd never have typed. Review the output — semantic matching also surfaces adjacent meanings (a "grow a garden" seed can pull in a Roblox game).
python3 skills/dataforseo/scripts/cli.py ideas "companion planting" --location us --limit 25
related <seed>
Google's "searches related to" expansion, walked to --depth (0-4; default 2 —
higher is wider and pricier). Lateral exploration of a topic.
python3 skills/dataforseo/scripts/cli.py related "raised garden bed" --location us --depth 2
intent <keyword...>
Classifies each keyword as informational / navigational / commercial / transactional (with confidence). Tells "wants a free answer" from "wants to buy" — use it to separate real commercial demand from idle curiosity. (No location.)
python3 skills/dataforseo/scripts/cli.py intent "buy raised garden bed" "how to build raised bed" --language en
App Store / Play commands (async)
⚠️ DataForSEO does NOT provide in-store search volume (App Store / Play ASO
keyword demand) — nobody does; Apple/Google don't publish it. For apps you get
which apps rank, their ratings/review counts, and review text, so you infer
demand and read competition + pain points directly. Web search volume stays
your quantified demand signal.
These are async (submit + poll), so they take a few seconds and print after
polling — unlike the instant live commands. Raise --timeout if one is slow.
appsearch <keyword> [--store apple|google]
Which apps rank in the store for a query, with ratings and review counts (your
incumbent-strength read). Default store apple.
python3 skills/dataforseo/scripts/cli.py appsearch "plant identifier" --store apple --location us
appreviews <app_id> [--store apple|google] [--worst]
Mine an app's reviews for pain points (app_id comes from appsearch). --worst
floats the lowest-rated reviews to the top — the store-agnostic way to find what
users hate about the incumbent, in their own words. This is the highest-signal,
lowest-bias input for spotting a gap. Pull a larger --limit to reach more
critical reviews (Apple has no "most critical" API sort).
python3 skills/dataforseo/scripts/cli.py appreviews 1252497129 --store apple --worst --limit 30
Notes
- Location aliases:
nz us uk/gb au ca ie za in. For anything else, pass a numericlocation_code(see the DataForSEO locations endpoints). - Errors surface DataForSEO's
status_messageand exit non-zero rather than dumping raw JSON. HTTP 401/403 means the credentials are wrong (or you used your website login instead of the API login). - See
references/endpoints.mdfor the endpoint each command hits and approximate per-call cost.
Testing
python3 skills/dataforseo/scripts/smoke_test.py
Offline checks (--help, arg validation, missing-credential handling) always
run. Live API checks run only when DATAFORSEO_LOGIN/DATAFORSEO_PASSWORD are
set, and each one spends a small amount of credit.
Signals
- GitHub stars
- 25
- Forks
- 6
- Last commit
- Sep 2026
ahel review
K6low
bundled executables the agent is told to run
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
dataforseo-thecolab-ai- Source
- github.com/thecolab-ai/.skills