CLI for querying Looker / Data Studio dashboards via public batchedDataV2 endpoint.
Includes Claude Code plugin (plugin/) — datastudio-qa to verify dashboard numbers against source Excel file.
- Python 3.11+ and
uv. - Dashboard URL — Looker Studio reporting URL shared with anonymous viewers.
- (Optional, for QA) Source
.xlsxdashboard built from.
Skills live in plugin/skills/ and work with any agent that supports the Claude SKILL.md format (Claude Code, Cursor, Codex, OpenCode, Cline, Gemini CLI, Copilot, Windsurf, and others).
With npx skills (any supported agent) — see vercel-labs/skills:
# install both skills globally for Claude Code
npx skills add spookyuser/datastudio-cli -g -a claude-code -y
# or target a different agent (cursor, codex, gemini-cli, ...)
npx skills add spookyuser/datastudio-cli -g -a cursor -y
# pick a single skill
npx skills add spookyuser/datastudio-cli --skill datastudio-qa -g -a claude-code -yClaude Code plugin (marketplace):
/plugin marketplace add spookyuser/datastudio-cli
/plugin install datastudio-cli@datastudio-cli
Local dev: launch Claude Code with claude --plugin-dir ./plugin from repo root.
Claude Code asks before each datastudio call unless you pre-approve. Add this to ~/.claude/settings.json (or the project's .claude/settings.json):
{
"permissions": {
"allow": ["Bash(datastudio:*)"]
}
}Once loaded, prompts like these auto-trigger datastudio-qa skill:
- "QA the dashboard against the Excel"
- "Verify the Overall Engagement page"
- "Check what happens when I filter Contract Hire to Local"
- "Audit the dashboard against the source Excel"
Claude runs CLI — connect, navigate pages, extract component data, apply filters, compare to Excel, report discrepancies. See plugin/skills/datastudio-qa/SKILL.md for workflow.
uv run datastudio connect "https://lookerstudio.google.com/u/0/reporting/<id>/page/<page-id>"
uv run datastudio pages
uv run datastudio go "<page name>"
uv run datastudio data --format json
uv run datastudio filter <Dimension> <Value>
uv run datastudio filter resetSession state persists in .datastudio/
Each component has own columns — not single flat table, but concatenation. For single-table dump, pick one component with --component <token>. For spreadsheet mixing heterogeneous components, use --format json and flatten to preferred shape.
uv run pytest