dataforseo
dataforseo.
Keyword research on Google: volume, CPC, difficulty, intent, ideas, trends.
setup & usage
DataForSEO is pay-as-you-go: no plan, no seat, a prepaid USD balance drawn per call (minimum top-up $50, the balance does not expire).
dataforseo_account(op="balance") reads the balance of YOUR key; it is refused on the shared key, whose balance is the platform'sdataforseo_keywords(op="overview", keywords=[…], location=2250, language="fr")op="ideas" (same topic), op="suggestions" (contains X), op="related" (Google's related searches); "is X growing?" → op="trends"dataforseo_domain(op="overview" | "keywords" | "pages" | "history", target="example.com")op="competitors", then op="gap", target2=…, shared_only=false; "who wins on THESE keywords?" → op="serp_competitors", keywords=[…]dataforseo_domain(op="traffic", targets=[…]), one calldataforseo_backlinks(op="summary"), op="referring_domains", then op="gap", targets=[competitors], exclude_targets=[my site]; "what did we gain or lose?" → op="new_lost", date_from=…dataforseo_ai_visibility(op="metrics", domain=…), then op="mentions" for the answers themselves; "ask Perplexity what it recommends" → op="ask", engine="perplexity", model=… (op="models" lists them)dataforseo_web_mentions(op="summary", keyword=…)dataforseo_site_audit(op="page" | "lighthouse", url=…); a whole site: op="crawl_start", op="crawl_status" until finished, then op="crawl_results", report=…dataforseo_technologies(op="domain", target=…), op="domains_using", technologies=["Shopify"], filters=[["country_iso_code", "=", "FR"]]location is a DataForSEO code (2250 France, 2840 United States, 2826 United Kingdom) or an English name; dataforseo_account(op="locations", query="…") lists them. Some ops require a location and a language: the tool says which.
every answer carries cost_usd, the real amount DataForSEO charged; a refused call costs nothing. List ops are billed per returned row, so they default to limit=20 (max 1000).
history about $0.13; a site crawl about $0.00015 per page, paid at start, and reading its results is freefull=true returns DataForSEO's result as isfilters and order_by use DataForSEO's syntax, e.g. ["keyword_info.search_volume", ">", 100] and ["keyword_info.search_volume,desc"]; other documented fields go in optionsserper_searchthis connector accepts multiple comptes: each stored credential becomes a named account (one name per compte), at your level, your team's or your org's.
_account="<name>" on the tool; list them: oto_identity(op='list', connector='dataforseo') (scope='org' or scope='group' for the org's or team's)oto_identity(op='set', connector='dataforseo', identity_id='<name>'); rename: op='rename' with new_name_account) and adding upoutils
utilisation
claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configurés.pipx install oto-cli puis oto dataforseo …