Blog Google
AgriciDaniel/claude-blog
Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…
Collect Google Keyword Planner ideas and historical monthly metrics, inspect immutable snapshots, and export receipt-linked evidence offline.
$ npx skills add mvanhorn/printing-press-library --skill pp-keyword-planner -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mvanhorn/printing-press-library pp-keyword-planner --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .claude/skills && cp -r skills-src/cli-skills/pp-keyword-planner .claude/skills/pp-keyword-planner && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pp-keyword-planner" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-keyword-planner into .claude/skills/pp-keyword-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-keyword-planner", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-keyword-plannerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mvanhorn/printing-press-library --skill pp-keyword-planner -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mvanhorn/printing-press-library pp-keyword-planner --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .agents/skills && cp -r skills-src/cli-skills/pp-keyword-planner .agents/skills/pp-keyword-planner && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pp-keyword-planner" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-keyword-planner into .agents/skills/pp-keyword-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-keyword-planner", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mvanhorn/printing-press-library --skill pp-keyword-planner -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mvanhorn/printing-press-library pp-keyword-planner --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/cli-skills/pp-keyword-planner .cursor/skills/pp-keyword-planner && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pp-keyword-planner" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-keyword-planner into .cursor/skills/pp-keyword-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-keyword-planner", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mvanhorn/printing-press-library.git --path cli-skills/pp-keyword-planner--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mvanhorn/printing-press-library --skill pp-keyword-planner -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mvanhorn/printing-press-library pp-keyword-planner --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/cli-skills/pp-keyword-planner .gemini/skills/pp-keyword-planner && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pp-keyword-planner" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-keyword-planner into .gemini/skills/pp-keyword-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-keyword-planner", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mvanhorn/printing-press-library pp-keyword-plannerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mvanhorn/printing-press-library --skill pp-keyword-planner -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .github/skills && cp -r skills-src/cli-skills/pp-keyword-planner .github/skills/pp-keyword-planner && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pp-keyword-planner" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-keyword-planner into .github/skills/pp-keyword-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-keyword-planner", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mvanhorn/printing-press-library --skill pp-keyword-planner -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mvanhorn/printing-press-library pp-keyword-planner --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/cli-skills/pp-keyword-planner .opencode/skills/pp-keyword-planner && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pp-keyword-planner" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-keyword-planner into .opencode/skills/pp-keyword-planner/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-keyword-planner", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pp-keyword-plannerCollect Google Keyword Planner ideas and historical monthly metrics, inspect immutable snapshots, and export receipt-linked evidence offline.
Pp Keyword Planner is an agent skill from mvanhorn/printing-press-library. Collect Google Keyword Planner ideas and historical monthly metrics, inspect immutable snapshots, and export receipt-linked evidence offline. Use for Google Keyword Planner or keyword-planner-pp-cli requests.
Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Marketing & SEO. It works with Google Ads and YouTube. The repository describes itself as: Official library of CLIs generated by the CLI Printing Press. Endorsed, tested, and community-contributed. The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d9a1696. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadBashFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxgoFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
developers.google.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GOOGLE_ADS_CLIENT_SECRETGOOGLE_ADS_REFRESH_TOKENGOOGLE_ADS_DEVELOPER_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pp Keyword Planner loads about 3.7k tokens when it runs. Until then it costs about 57 tokens; SKILL.md has 1,505 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
GOOGLE_ADS_REFRESH_TOKEN` loaded from `~/.env`. The approved grant must carry the AdWords scope. The CLI refreshes a shoads only the Google Ads bindings from `~/.env`, with explicit environment overrides. Keep that file private. Access tokeallowed-tools: Read, BashAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mvanhorn/printing-press-library at commit d9a1696, republished under its Apache-2.0 licence (© mvanhorn). 1,505 words, ~3,660 tokens.
.claude/skills/pp-keyword-planner/SKILL.md (or your agent's skills folder).<!-- GENERATED FILE — DO NOT EDIT.
This file is a verbatim mirror of library/marketing/keyword-planner/SKILL.md,
regenerated post-merge by tools/generate-skills/. Hand-edits here are
silently overwritten on the next regen. Edit the library/ source instead.
See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". -->
Use keyword-planner-pp-cli from PATH. Its default evidence portfolio is ~/.local/share/keyword-planner/snapshots.db. Follow Prerequisites: Install the CLI below.
keyword-planner-pp-cli --version
keyword-planner-pp-cli doctor --jsonUse this CLI when an agent needs Google Keyword Planner ideas or historical monthly metrics with explicit language, geography, range, and network context. Use the local portfolio commands to reopen evidence offline, trace a value to its raw receipt, compare saved collections, preserve variant lineage, or prepare a safe DuckDB handoff. Treat the returned volumes and bids as Planner signals for YouTube subject research, not as measured YouTube demand, RPM, or revenue.
Do not use this press for campaign or bid changes, account administration, Google Trends, automatic scoring, forecasts, schedules, or revenue predictions. Planner estimates are not measured YouTube demand or RPM.
--dry-run if needed.ideas to discover related terms, then historical for selected terms.Authentication uses the OAuth refresh-token flow with GOOGLE_ADS_CLIENT_ID, GOOGLE_ADS_CLIENT_SECRET, and GOOGLE_ADS_REFRESH_TOKEN loaded from ~/.env. The approved grant must carry the AdWords scope. The CLI refreshes a short-lived access token in memory and sends Authorization: Bearer. GOOGLE_ADS_CUSTOMER_ID selects the operating account; GOOGLE_ADS_LOGIN_CUSTOMER_ID supplies optional manager routing. Token responses never enter the portfolio. An invalid grant, permission error, or customer routing failure is an account-setup problem, not a reason to repeat the same request.
Google retired developer tokens on September 9, 2026. The CLI no longer loads or sends GOOGLE_ADS_DEVELOPER_TOKEN. API access belongs to the Google Cloud project that owns the OAuth client. Enable Google Ads API in that project and obtain Basic or Standard access: Explorer access excludes the Keyword Planner methods. New Basic access applications require completed brand verification. Browser cookies are not used.
Run keyword-planner-pp-cli doctor to verify setup.
| Command | Use |
|---|---|
keyword-planner-pp-cli ideas | Collect all idea pages |
keyword-planner-pp-cli historical | Collect chosen terms in bounded batches |
keyword-planner-pp-cli portfolio list | List saved snapshots |
keyword-planner-pp-cli portfolio show | Inspect saved requests and receipts |
keyword-planner-pp-cli portfolio search | Filter stored monthly evidence |
keyword-planner-pp-cli portfolio export | Emit local JSON or CSV |
keyword-planner-pp-cli doctor | Inspect local readiness; live checks require the explicit live flag |
Snapshot examples below use example IDs that must be replaced with IDs from your own portfolio. Run keyword-planner-pp-cli portfolio list --agent to choose compatible IDs in another portfolio; latest and previous can refer to different endpoints.
These local evidence views extend the direct API with receipt, coverage, lineage, comparison, integrity, and descriptive-statistics views.
portfolio trace — Trace one stored monthly value back to the exact request and raw receipt that produced it.
Reach for this when a number needs a receipt-backed explanation that a direct Planner call cannot provide.
keyword-planner-pp-cli portfolio trace 2c2f465c-6253-430a-a533-aa30fabbfbff --keyword "beef steak" --month 2026-07 --agentportfolio coverage — See requested, returned, missing, unavailable, raw-only, and incomplete coverage for a saved collection.
Use this before consuming a collection when the API response alone cannot explain what was absent or incomplete.
keyword-planner-pp-cli portfolio coverage latest --agentportfolio diff — Compare two preserved collections to see changed terms, monthly values, flags, and coverage.
Use this when the question is what changed between saved collections rather than what one live call returns.
keyword-planner-pp-cli portfolio diff 2c2f465c-6253-430a-a533-aa30fabbfbff c6ea4780-190b-42f4-8f4d-a8b7207a2395 --agentportfolio variants — Follow submitted keywords through returned terms and close variants without double-counting demand.
Pick this when a Planner result must be interpreted with its returned-term and close-variant relationships intact.
keyword-planner-pp-cli portfolio variants latest --limit 10 --agent --jsonportfolio integrity — Verify that raw receipts, hashes, normalized rows, and coverage still reconcile.
Run this before a warehouse handoff when evidence integrity matters more than a fresh remote request.
keyword-planner-pp-cli portfolio integrity latest --agentportfolio safe-stats — Compute descriptive monthly aggregates while excluding unavailable, ambiguous, anomalous, and incomplete rows.
Choose this for mechanical local summaries that must preserve warnings and avoid turning Planner signals into forecasts.
keyword-planner-pp-cli portfolio safe-stats --snapshot latest --agentkeyword-planner-pp-cli doctor --jsonConfirm local setup and portfolio schema without a network call.
keyword-planner-pp-cli ideas --seed "beef steak" --seed "ribeye steak" --seed "beef brisket" --seed "pork chops" --seed "meat cutting" --seed "butchery" --language languageConstants/1000 --geo geoTargetConstants/2840 --agentUse explicit resource names and preserve all pages for the six-to-eight-seed research pass.
keyword-planner-pp-cli historical --keyword "beef steak" --keyword "beef brisket" --language languageConstants/1000 --geo geoTargetConstants/2840 --agentKeep the submitted terms, returned terms, variant links, and every monthly value.
keyword-planner-pp-cli portfolio diff 2c2f465c-6253-430a-a533-aa30fabbfbff c6ea4780-190b-42f4-8f4d-a8b7207a2395 --agentCompare two compatible snapshots selected from portfolio list without replacing either or calling Google again.
keyword-planner-pp-cli portfolio export --snapshot latest --agent --select keyword,month,monthly_searchesEmit a narrow, traceable local relation for the read-only warehouse consumer.
keyword-planner-pp-cli historical --keyword "beef steak" --keyword "beef brisket" --language languageConstants/1000 --geo geoTargetConstants/2840 --dry-run --jsonInspect resolved targeting and the closed-month range without reading credentials, contacting Google, or writing the portfolio.
keyword-planner-pp-cli portfolio export --snapshot 2c2f465c-6253-430a-a533-aa30fabbfbff --start 2026-07 --end 2026-07 --format csvKeep the month bound explicit and export local evidence for a spreadsheet.
keyword-planner-pp-cli portfolio search "beef steak" --snapshot 2c2f465c-6253-430a-a533-aa30fabbfbff --available-only --limit 10 --jsonShow available saved monthly values with their flags and provenance; availability alone is not the safe-aggregate policy.
Live collection loads only the Google Ads bindings from ~/.env, with explicit environment overrides. Keep that file private. Access tokens exist only in memory; token responses and credential values never enter the portfolio or command output.
| Binding | Purpose |
|---|---|
GOOGLE_ADS_CLIENT_ID | OAuth client for the approved grant |
GOOGLE_ADS_CLIENT_SECRET | OAuth client secret |
GOOGLE_ADS_REFRESH_TOKEN | Approved refresh grant carrying the AdWords scope |
GOOGLE_ADS_CUSTOMER_ID | Explicit operating customer target |
GOOGLE_ADS_LOGIN_CUSTOMER_ID | Optional manager login context |
The operating target and manager context are separate bindings. Equal values are allowed after the target has been verified; manager status alone does not establish eligibility. Currency comes from a live account lookup and retains its provenance. Use doctor --live to check the configured target and both Planner methods. The default doctor is offline.
Use six to eight seeds at the subject's level. The API accepts one to twenty, so other valid counts produce a warning. Language and geography must be explicit official resource names. The only network is GOOGLE_SEARCH. Empty geography needs explicit all-geographies acknowledgement.
The default range is the latest twelve closed UTC months; explicit ranges override it. Missing months and missing CPC are unavailable, never inferred zero. A short returned window remains usable. Current/future request months are rejected; unexpected open months remain raw-only. Google's trailing twelve-month average and snapshot-level bid micros retain their original meaning.
Every response is saved before decoding. Every repeat creates a new snapshot. Errors and interrupted collections remain visible and incomplete. Local output limits do not reduce collection scope. Ambiguous zero/UNSPECIFIED metrics remain inspectable with PLANNER-BLIND and are excluded from safe aggregates. See DATA-CONTRACT.md for null, month, variant, currency, and coverage rules.
invalid_grant: the grant needs inspection or renewed authorization; repeating the same invalid grant will not repair it.Use --agent for structured output or --json for complete JSON. Use --select for a narrow field set. Empty lists remain []. Do not interpret absent values as zero. Collection limits and display limits have different meanings; an incomplete collection is never accepted as a complete result.
keyword-planner-pp-cli portfolio export --snapshot latest --json --select keyword,month,monthly_searches
keyword-planner-pp-cli portfolio coverage latest --agentRead agent-context or command help for runtime truth. Local learning/profile helpers use their own generated store; they do not replace a fresh collection or alter the evidence portfolio. Keep credentials out of taught queries, command text, logs, and reports.
Use the Printing Press installer below, or build a checkout from source as described in README.md.
<details>
<summary>Generator-owned public installer reference</summary>
This skill drives the keyword-planner-pp-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
$HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows:npx -y @mvanhorn/printing-press-library install keyword-planner --cli-onlykeyword-planner-pp-cli --version$PATH for the agent/runtime that will invoke this skill.If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.6 or newer). This installs into $GOPATH/bin (default $HOME/go/bin), so add that directory to $PATH instead:
go install github.com/mvanhorn/printing-press-library/library/marketing/keyword-planner/cmd/keyword-planner-pp-cli@latestIf --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.
</details>
The CLI collects keyword ideas and historical monthly metrics through Google's read-only v25 REST methods, preserving every raw response, request scope, coverage state, and supplied bid field in SQLite. Use the portfolio commands to trace a number to its receipt, compare preserved snapshots, keep close-variant lineage visible, and calculate policy-safe descriptive statistics offline. Planner search-volume and advertiser-bid fields are vendor estimates for subject research, not measured YouTube demand, YouTube RPM, or a revenue forecast.
© mvanhorn, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in cli-skills/pp-keyword-planner of mvanhorn/printing-press-library.
Open the folder on GitHubat commit d9a1696
Pp Keyword Planner next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pp Keyword Planner this skillmvanhorn/printing-press-library | 2.1k | — | ~3.7k | Automated safety check: Notes | Apache-2.0 | |
| Blog GoogleAgriciDaniel/claude-blog | 2.3k | 1 repos | ~3.3k | Automated safety check: Notes | MIT | |
| SEO Googleseranking/seo-skills | 161 | — | ~4.8k | Automated safety check: Pass | MIT | |
| Google Ads AuditAgriciDaniel/claude-ads | 9.9k | — | ~799 | Automated safety check: Pass | MIT | |
| Google Adsarnabbagxd/Brand-building-skills | 729 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Paid Creative AItech-leads-club/agent-skills | 7k | — | ~6.4k | Automated safety check: Pass | Custom licence |
AgriciDaniel/claude-blog
Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…
seranking/seo-skills
Direct access to Google's own SEO data via Search Console (Search Analytics, URL Inspection, Sitemaps), PageSpeed Insights v5, CrUX field data with 25-week history, Indexing API v3, GA4 organic…
AgriciDaniel/claude-ads
Audits a Google Ads account across measurement, search terms, structure, creative, bidding, budgets and policy, and keeps every change as a draft.
arnabbagxd/Brand-building-skills
Plan, build, and optimize Google Ads campaigns — Search, Shopping, Performance Max, Display, and YouTube — including keyword research, match types, bidding strategy, Quality Score, ad extensions…
tech-leads-club/agent-skills
When the user wants to create AI-generated ad creative, test performance creative, manage creative fatigue, or optimize paid media with AI tools.
kostja94/marketing-skills
When the user wants to set up, optimize, or manage Google Ads campaigns.
mvanhorn/printing-press-library
Desktop automation through the real Rust agent-desktop CLI, published in Printing Press through a small bridge.
mvanhorn/printing-press-library
Search, browse, and download Google Fonts from the terminal via the gfonts CLI.
mvanhorn/printing-press-library
The free, offline Trigger phrases: search 1688 for, find a factory on 1688 for, wholesale price on 1688 for, who is the cheapest supplier on 1688 for, compare 1688 suppliers for, use 1688, run 1688.
mvanhorn/printing-press-library
Inspect known Activity Japan plan IDs or URLs, compare dated prices and sessions, check language-sitemap coverage, and hand off to canonical booking pages.
mvanhorn/printing-press-library
Every Admin By Request portal action, plus a local SQLite mirror of audit, events, inventory and requests for ad-hoc...
mvanhorn/printing-press-library
macOS screen capture, window recording, GIF conversion, and agent evidence bundles from the terminal.
Works with
Categories
Collect Google Keyword Planner ideas and historical monthly metrics, inspect immutable snapshots, and export receipt-linked evidence offline. Pp Keyword Planner is an agent skill from mvanhorn/printing-press-library. Collect Google Keyword Planner ideas and historical monthly metrics, inspect immutable snapshots, and export receipt-linked evidence offline.
Pp Keyword Planner fits situations like: google Keyword Planner; keyword-planner-pp-cli requests.
Run `npx skills add mvanhorn/printing-press-library --skill pp-keyword-planner -a claude-code`. Or copy the skill folder (cli-skills/pp-keyword-planner in mvanhorn/printing-press-library) into .claude/skills/pp-keyword-planner in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mvanhorn/printing-press-library --skill pp-keyword-planner -a codex`. Or copy the skill folder (cli-skills/pp-keyword-planner in mvanhorn/printing-press-library) into .agents/skills/pp-keyword-planner in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mvanhorn/printing-press-library --skill pp-keyword-planner -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pp-keyword-planner, .gemini/skills/pp-keyword-planner, .github/skills/pp-keyword-planner and .opencode/skills/pp-keyword-planner in your project.
Going by SKILL.md and its folder, Pp Keyword Planner needs the command-line tools its instructions call (npx and go) and credentials named GOOGLE_ADS_CLIENT_SECRET, GOOGLE_ADS_REFRESH_TOKEN and GOOGLE_ADS_DEVELOPER_TOKEN. Our summary lists: A credential in GOOGLE_ADS_CLIENT_SECRET; A credential in GOOGLE_ADS_REFRESH_TOKEN. Its frontmatter pre-approves these tools: Read, Bash.
SKILL.md names 1 domain. As links in the text: developers.google.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file; pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Pp Keyword Planner is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pp Keyword Planner: Blog Google (AgriciDaniel/claude-blog, 2.3k stars), SEO Google (seranking/seo-skills, 161 stars), Google Ads Audit (AgriciDaniel/claude-ads, 9.9k stars) and Google Ads (arnabbagxd/Brand-building-skills, 729 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mvanhorn (a GitHub user) maintains it in mvanhorn/printing-press-library, which has 2,056 GitHub stars. The repository holds 506 skills in this directory. The repository was last updated on October 9, 2026.
Source: mvanhorn/printing-press-library on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.