Tool dataforseo
Skills + workspace for AI agents in B2B service firms
npx -y skills add b2bforce/b2bforce --skill tool-dataforseoAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
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.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.5 KB, 815 tokens by cl100k_base, as published. Nobody here has run it
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).
Gives 0 of the 12 instructions most seo skills give in 815 tokens
Counted across 454 of the 460 authors here whose files we hold, read 2026-08-06
- implement structured data using JSON-LDin 30 of 454, across 26 files
- write unique meta descriptions under 160 charactersin 27 of 454, across 20 files
- verify one H1 exists per pagein 24 of 454, across 15 files
- maintain a single h1 per pagein 24 of 454, across 15 files
- use JSON-LD format for all schema markupin 23 of 454, across 15 files
- use descriptive anchor text for internal linksin 21 of 454, across 16 files
- add descriptive alt text to imagesin 19 of 454, across 15 files
- read product marketing context before auditingin 19 of 454, across 10 files
- write unique title tags under 60 charactersin 19 of 454, across 14 files
- add unique title and meta description per pagein 19 of 454, across 17 files
- Reference the sitemap in robots.txtin 19 of 454, across 18 files
- verify core web vitals meet thresholdsin 17 of 454, across 9 files
Said here and by no other author read
- read credentials from .env only
- cache results in workspace where possible
- do not re-query the paid API
- dedupe competitor discovery by root domain
- fall back to AI research if credentials unset
- run --models before llm-response calls
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.