Agent skill
tool-dataforseo
Fetch Google SERP results or keyword search-volume data via the DataForSEO API.
Filed under Content and SEO.
From b2bforce/b2bforce · 29 skills · 2 · pushed 2026-08-21
What it does when it runs
Fetch Google SERP results or keyword search-volume data via the DataForSEO API. Use when a skill needs competitor discovery (SERP), keyword research, or search metrics. Reads DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD from .env.
Read from the skill and the 3 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- DATAFORSEO_PASSWORD
- Hosts it reaches
- api.dataforseo.com
- dataforseo.com
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- shell
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/b2bforce/b2bforce.git /tmp/b2bforce git -C /tmp/b2bforce sparse-checkout set ".agents/skills/tool-dataforseo" mkdir -p ~/.claude/skills/tool-dataforseo cp -R "/tmp/b2bforce/.agents/skills/tool-dataforseo/." ~/.claude/skills/tool-dataforseo/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
Before you install: this skill will not complete its job on a bare agent. It needs DATAFORSEO_PASSWORD, which you have to obtain separately.
The skill
Source on GitHub ↗Reproduced in full from b2bforce/b2bforce/blob/7682ed90c62190a0f3c09eb135596d08bd6890bc/.agents/skills/tool-dataforseo/SKILL.md, which is licensed MIT (skill frontmatter). 431 words, 13 headings.
Tool: DataForSEO
Thin wrapper for the DataForSEO API — SERP results and keyword data. Other skills call this instead of re-describing the API.
Requirements
curljq.envcredentials listed below
Auth
.env:
DATAFORSEO_LOGIN=
DATAFORSEO_PASSWORD=
HTTP Basic auth (login:password). Base: https://api.dataforseo.com/v3.
Request bodies are an array of task objects.
Endpoints
| Action | Endpoint | Use |
|---|---|---|
| SERP | POST /serp/google/organic/live/advanced | Top organic results for a phrase |
| Keyword volume | POST /keywords_data/google_ads/search_volume/live | Search volume / CPC / competition |
| LLM response | POST /ai_optimization/{engine}/llm_responses/live | Answer-engine response + cited sources |
| LLM models | POST /ai_optimization/{engine}/llm_responses/models | Model names the engine currently accepts |
| Account | POST /appendix/user_data | Check balance / credentials |
location_name uses DataForSEO format, e.g. "Poland", "United States".
{engine} is chat_gpt, claude, gemini, or perplexity. The request shape is the
same across engines; only some optional parameters differ.
Scripts
# Top 10 organic results for a phrase + country (prints url + title list)
bash .agents/skills/tool-dataforseo/scripts/serp.sh "drupal migration agency" "Poland"
# Keyword search volume (prints JSON)
bash .agents/skills/tool-dataforseo/scripts/keyword.sh "drupal migration" "Poland"
# Answer-engine response + cited sources (prints answer, citations, model, cost)
bash .agents/skills/tool-dataforseo/scripts/llm-response.sh chat_gpt \
"best drupal migration agency for mid-market retail" PL
# Which models this engine currently accepts — run this first, names drift
bash .agents/skills/tool-dataforseo/scripts/llm-response.sh --models chat_gpt
# Raw JSON passthrough
bash .agents/skills/tool-dataforseo/scripts/llm-response.sh --json perplexity "..." PL
llm-response.sh notes
web_searchis forced on. Without it the answer is not grounded in the live web and returns no citations, which makes the run useless for visibility work.- Prompts are capped at 500 characters by the API. The script fails on a longer prompt rather than truncating it, because a silently shortened prompt makes runs incomparable across batches.
- Only response items of type
messageare the answer. Reasoning items are excluded. - An empty citation list prints
none, so "no citations" is distinguishable from a failed extraction. - Model names change. If a call fails on
model_name, run--modelsand pass one.
Rules
- Credentials from
.envonly. - Paid API — cache results in
workspace/where possible; don't re-query. - For competitor discovery, dedupe by root domain after fetching.
- Degrade gracefully if unset — calling skills should fall back to AI research.
- Answer engines are non-deterministic. One LLM response is a sample, not a fact; the calling skill decides how many runs make a finding.
Used by
intel-competitor-discovery (SERP), marketing-seo-research (keywords),
marketing-service-page (SERP), intel-ai-visibility (LLM responses).
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- free-tool-strategy by manojbajaj95 · 92
Need help setting it up?
This page tells you what tool-dataforseo does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.