Evaluate Skill
every-app/open-seo
Test a candidate OpenSEO skill end to end by running fresh, isolated Codex sessions against the local backend and scoring the reports they save.
Every Semrush Analytics + Projects feature, plus a local SQLite store and cross-domain joins no other Semrush tool has.
$ npx skills add mvanhorn/printing-press-library --skill pp-semrush -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mvanhorn/printing-press-library pp-semrush --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-semrush .claude/skills/pp-semrush && 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-semrush" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-semrush into .claude/skills/pp-semrush/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-semrush", 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-semrushType 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-semrush -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mvanhorn/printing-press-library pp-semrush --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-semrush .agents/skills/pp-semrush && 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-semrush" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-semrush into .agents/skills/pp-semrush/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-semrush", 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-semrush -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mvanhorn/printing-press-library pp-semrush --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-semrush .cursor/skills/pp-semrush && 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-semrush" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-semrush into .cursor/skills/pp-semrush/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-semrush", 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-semrush--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-semrush -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mvanhorn/printing-press-library pp-semrush --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-semrush .gemini/skills/pp-semrush && 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-semrush" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-semrush into .gemini/skills/pp-semrush/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-semrush", 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-semrushInstalls 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-semrush -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-semrush .github/skills/pp-semrush && 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-semrush" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-semrush into .github/skills/pp-semrush/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-semrush", 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-semrush -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-semrush --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-semrush .opencode/skills/pp-semrush && 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-semrush" agent skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-semrush into .opencode/skills/pp-semrush/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pp-semrush", 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-semrushEvery Semrush Analytics + Projects feature, plus a local SQLite store and cross-domain joins no other Semrush tool has.
Pp Semrush is an agent skill from mvanhorn/printing-press-library. Every Semrush Analytics + Projects feature, plus a local SQLite store and cross-domain joins no other Semrush tool has. Trigger phrases: show me what changed for <domain this week, find the keyword gap between <my domain and <competitor, show me new referring domains for <domain, triage my Site Audit, what did Semrush cost me this month, detect keyword cannibalization on <domain, track SERP feature changes for <keyword, use semrush, run semrush.
Its SKILL.md is about 6.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, covering Keyword research and SEO audit. It works with SQLite. 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.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0fdcc7a. 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:
goclaudenpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SEMRUSH_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pp Semrush loads about 6.7k tokens when it runs. Until then it costs about 121 tokens; SKILL.md has 2,948 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.
allowed-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 0fdcc7a, republished under its Apache-2.0 licence (© mvanhorn). 2,948 words, ~6,708 tokens.
.claude/skills/pp-semrush/SKILL.md (or your agent's skills folder).<!-- GENERATED FILE — DO NOT EDIT.
This file is a verbatim mirror of library/marketing/semrush/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/". -->
This skill drives the semrush-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 semrush --cli-onlysemrush-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):
go install github.com/mvanhorn/printing-press-library/library/marketing/semrush/cmd/semrush-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.
Use this CLI when you need to query Semrush data the same way more than once — weekly drift, keyword gap, backlink gap, Site Audit regression — or when you're orchestrating Semrush through an agent that should not re-spend credits on data already pulled. It's not the right tool for one-off ad-hoc lookups (the official Semrush UI is faster) or for Trends API workflows (out of scope by design).
These capabilities aren't available in any other tool for this API.
drift — Diff this week's domain + keyword snapshot against last week's to see what moved, without re-spending credits on the data you already pulled.
When an agent is asked 'what changed for this domain this week', this is the single command that answers it from the local store with no API spend.
semrush-pp-cli drift apple.com --since 7d --agentsnapshot — Tag the current local-store state of any resource (e.g. monday-baseline) and later diff any two tags to see exactly what moved between them.
Lets an agent reason about state across multiple weeks of conversations without re-paying for the same data.
semrush-pp-cli snapshot tag monday && semrush-pp-cli snapshot diff monday today --select phrase,position --agentbacklink new — Show only the referring domains and backlinks first seen in a window, so the 'did anything new link to us this week' question is a one-liner.
Saves an agent from re-pulling and diffing two full backlink reports to answer a recency question.
semrush-pp-cli backlink new apple.com --since 7d --jsontracking drift — Window-function over Position Tracking snapshots: which keywords moved more than N positions, dropped off page 1, or entered page 1, per region and device.
Answers 'what tracked keywords moved this month' in one command — the question Position Tracking emails fail to answer.
semrush-pp-cli tracking drift 12345 --since 30d --min-delta 3 --agentaudit regression — Diff the latest two Site Audit snapshots for a project: new issue IDs introduced, issues resolved, count delta per severity.
Lets an agent tell you exactly what your tech-SEO state regressed on between two crawls.
semrush-pp-cli audit regression 12345 --agentbudget — Every API call's documented unit cost is logged locally; budget rolls up spend by day, command, resource, and projects month-end burn from the current balance probe.
Tells an agent before a request 'this would cost N units' and after a month 'here is where the units went' — neither answerable from the upstream alone.
semrush-pp-cli budget --since 30d --group-by command --agentkeyword gap — Set-difference of organic keywords across two or more domains in the same database, with intersection and unique-to-each modes.
Replaces the manual two-CSV VLOOKUP that every SEO consultant does by hand.
semrush-pp-cli keyword gap myco.com competitor1.com competitor2.com --database us --kd-max 40 --agentbacklink gap — Find referring domains that link to a competitor but not to you, filtered by authority score.
Directly surfaces link-building targets an agent can hand to an outreach workflow.
semrush-pp-cli backlink gap myco.com competitor.com --min-ascore 70 --agentdomain regions — Run Domain Overview across multiple country databases in one shot, persist all rows with the database key so later cross-region drift queries work.
Lets an agent answer 'how does this domain perform across our top 5 markets' as one call rather than five.
semrush-pp-cli domain regions apple.com --databases us,uk,de,fr,it --agentaudit triage — Rank Site Audit pages by weighted issue severity (errors x3, warnings x1, notices x0.1) so you fix the highest-impact pages first.
Turns a Site Audit dump into a prioritized action list an agent can hand to the next step.
semrush-pp-cli audit triage 12345 --top 20 --agentserp-features — Time-series view of which SERP features (featured snippet, People Also Ask, video, image pack) have appeared and disappeared for a tracked keyword.
Tells a content-strategy agent when an opportunity (e.g. featured snippet slot opening) appeared or closed.
semrush-pp-cli serp-features 'best running shoes' --since 30d --agentcannibalization — List phrases where the same domain ranks for multiple URLs (a known SEO problem) with the URLs and their respective positions.
Surfaces a high-value SEO problem in one command — most consultants charge to find this.
semrush-pp-cli cannibalization apple.com --database us --agentaccount — Account utilities (API units balance)
semrush-pp-cli account — Get remaining API units balance (free probe; no units cost)audit — Site Audit: enable, run, list snapshots, drill into issues and pages
semrush-pp-cli audit campaign-info — Get Site Audit campaign configuration and current status.semrush-pp-cli audit edit — Edit Site Audit campaign settings (page limit, user-agent, scope, etc.).semrush-pp-cli audit enable — Enable Site Audit on a project. One-time per project. Free (config call).semrush-pp-cli audit history — Site Audit snapshots history (time series of issue counts and score).semrush-pp-cli audit issue — Detailed report for one issue in a snapshot (affected pages, status).semrush-pp-cli audit issue-catalog — Get text descriptions for all Site Audit issue codes. Free.semrush-pp-cli audit page — Get full details for one crawled page (issues found, status, metrics).semrush-pp-cli audit page-by-url — Look up the page_id for a given URL within a snapshot.semrush-pp-cli audit run — Trigger a new Site Audit crawl. Free to launch; counts against page-credit pool.semrush-pp-cli audit snapshot-info — Get aggregated counts for a snapshot (errors/warnings/notices, total checks).semrush-pp-cli audit snapshots — List Site Audit snapshots for a project. Free (no API units).backlink — Backlinks: overview, list, referring domains/IPs, anchors, competitors, history
semrush-pp-cli backlink anchors — Anchors. 40 units/line. Anchor texts used in backlinks pointing at a target.semrush-pp-cli backlink authority-score — Authority Score profile. 40 units/request. Snapshot of Semrush Authority Score (AS) for a target.semrush-pp-cli backlink categories — Categories. 40 units/line. Subject-matter categories of referring domains.semrush-pp-cli backlink categories-profile — Categories profile. 40 units/request. Subject-matter categories of a target with confidence ratings.semrush-pp-cli backlink compare-batch — Batch Comparison. 40 units/request per domain. Side-by-side backlink stats for up to 200 domains.semrush-pp-cli backlink compare-refdomains — Comparison by Referring Domains. 40 units/line. Which refdomains link to multiple targets (matrix).semrush-pp-cli backlink competitors — Backlink Competitors. 40 units/line. Domains with similar backlink profiles to the target.semrush-pp-cli backlink geo — Referring Domains by Country. 40 units/line. Country distribution of referring domains.semrush-pp-cli backlink history — Historical data (Backlinks). 40 units/line. Time series of backlink/refdomain counts and AS.semrush-pp-cli backlink indexed-pages — Indexed Pages. 40 units/line. Pages on the target receiving backlinks.semrush-pp-cli backlink list — Backlinks. 40 units/line. Individual backlinks pointing at a target.semrush-pp-cli backlink overview — Backlinks Overview. 40 units/request. Total backlinks, refdomains, refips, follow ratio, AS.semrush-pp-cli backlink referring-domains — Referring Domains. 40 units/line. Deduped domains linking to a target.semrush-pp-cli backlink referring-ips — Referring IPs. 40 units/line. Deduped IP addresses hosting referring domains.semrush-pp-cli backlink tld — TLD Distribution. 40 units/line. Distribution of referring domains by TLD.domain — Domain analytics: overview, organic/paid keywords, competitors, pages, ad history
semrush-pp-cli domain ad-copies — Domain Ads Copies. 20 units/line. Unique ad creatives a domain has run (title + description).semrush-pp-cli domain ad-history — Domain Ad History. 100 units/line. 12-month archive of ad copies a domain ran for paid keywords.semrush-pp-cli domain compare — Domain vs. Domain. 80 units/line. Side-by-side keyword overlap between 2-5 domains.semrush-pp-cli domain competitors-organic — Competitors in Organic Search. 40 units/line. Domains sharing organic keywords with the target.semrush-pp-cli domain competitors-paid — Competitors in Paid Search. 40 units/line. Domains overlapping the target's Google Ads keyword set.semrush-pp-cli domain competitors-pla — PLA Competitors. 40 units/line. Domains overlapping the target's Google Shopping PLA keyword set.semrush-pp-cli domain organic-keywords — Domain Organic Search Keywords. 30 units/line. Keywords a domain ranks for in Google's top 100 organic results.semrush-pp-cli domain organic-pages — Domain Organic Pages. 30 units/line. Top organic landing pages on a domain by traffic.semrush-pp-cli domain overview — Domain Overview (one database). 10 units/line. Live or historical rankings in one regional database.semrush-pp-cli domain overview-all — Domain Overview (all databases). 10 units/line. ~140 lines covering every regional database.semrush-pp-cli domain overview-history — Domain Overview (history). 10 units/line. Monthly historical rankings for one database (back to 2012-2016).semrush-pp-cli domain paid-keywords — Domain Paid Search Keywords. 30 units/line. Keywords a domain buys in Google Ads.semrush-pp-cli domain pla-copies — Domain PLA Copies. 20 units/line. Unique PLA ad creatives (title, price, shop).semrush-pp-cli domain pla-keywords — Domain PLA Search Keywords. 30 units/line. Google Shopping PLA keywords for a domain.semrush-pp-cli domain subdomains — Domain Organic Subdomains. 30 units/line. Subdomains of a domain ranked by organic traffic.keyword — Keyword research reports (volume, difficulty, related, SERP, ad history)
semrush-pp-cli keyword ads-history — Keyword Ads History. 100 units/line. 12-month archive of advertisers who bid on the keyword.semrush-pp-cli keyword batch — Batch Keyword Overview. 10 units/line. Up to 100 keywords in one call.semrush-pp-cli keyword broad-match — Broad Match Keywords. 20 units/line. Phrase-match variants of a seed term.semrush-pp-cli keyword difficulty — Keyword Difficulty. 50 units/line. KDI (0-100) for one or more keywords.semrush-pp-cli keyword organic-serp — Organic Results (SERP) for a keyword. 10 units/line. Top organic ranking URLs for a phrase.semrush-pp-cli keyword overview — Keyword Overview (one database). 10 units/line. Single-database volume, CPC, competition, results count.semrush-pp-cli keyword overview-all — Keyword Overview (all databases). 10 units/line. ~140 rows covering every regional database.semrush-pp-cli keyword paid-serp — Paid Results (SERP) for a keyword. 20 units/line. Advertisers bidding on the phrase.semrush-pp-cli keyword questions — Phrase Questions. 40 units/line. Question-form keywords containing a seed phrase.semrush-pp-cli keyword related — Related Keywords. 40 units/line. Keywords semantically related to a seed phrase.project — Manage Semrush Projects (containers for Position Tracking, Site Audit, Listings)
semrush-pp-cli project create — Create a new Semrush project (container) with a name and root domain.semrush-pp-cli project delete — Delete a project. CLI requires --yes to confirm; otherwise dry-runs.semrush-pp-cli project get — Get a single project by ID. Free (no API units).semrush-pp-cli project list — List all projects on your account. Free (no API units).semrush-pp-cli project update — Update an existing project's name/url.subdomain — Subdomain analytics: overview, organic/paid keywords, pages
semrush-pp-cli subdomain organic-keywords — Subdomain Organic Search Keywords. 30 units/line.semrush-pp-cli subdomain organic-pages — Subdomain Organic Pages. 30 units/line.semrush-pp-cli subdomain overview — Subdomain Overview (one database). 10 units/line.semrush-pp-cli subdomain overview-all — Subdomain Overview (all databases). 10 units/line.semrush-pp-cli subdomain overview-history — Subdomain Overview (history). 10 units/line. Monthly historical rankings.semrush-pp-cli subdomain paid-keywords — Subdomain Paid Search Keywords. 30 units/line.subfolder — Subfolder analytics: overview, organic/paid keywords, pages
semrush-pp-cli subfolder organic-keywords — Subfolder Organic Search Keywords. 30 units/line.semrush-pp-cli subfolder organic-pages — Subfolder Organic Pages. 30 units/line.semrush-pp-cli subfolder organic-pages-unique — Subfolder Organic Pages (unique). 30 units/line. Unique top organic landing pages within a subfolder.semrush-pp-cli subfolder overview — Subfolder Overview (one database). 10 units/line.semrush-pp-cli subfolder overview-all — Subfolder Overview (all databases). 10 units/line.semrush-pp-cli subfolder overview-history — Subfolder Overview (history). 10 units/line. Monthly historical rankings.semrush-pp-cli subfolder paid-keywords — Subfolder Paid Search Keywords. 30 units/line.tracking — Position Tracking: create campaign, manage keywords/tags/competitors, organic and paid reports
semrush-pp-cli tracking campaigns — List Position Tracking campaigns under a project. Use this to find the campaign_id.semrush-pp-cli tracking competitors-add — Add competitors to an existing Position Tracking campaign.semrush-pp-cli tracking competitors-remove — Remove competitors from an existing Position Tracking campaign.semrush-pp-cli tracking create — Create a Position Tracking campaign on a project.semrush-pp-cli tracking dates — Available snapshot dates for a tracking campaign (used by --snapshot flag elsewhere).semrush-pp-cli tracking emails-disable — Disable weekly status emails for a Position Tracking campaign.semrush-pp-cli tracking emails-enable — Enable weekly status emails for a Position Tracking campaign.semrush-pp-cli tracking keywords-add — Add keywords to an existing Position Tracking campaign.semrush-pp-cli tracking keywords-remove — Remove keywords from an existing Position Tracking campaign.semrush-pp-cli tracking location-search — Universal location search (returns location IDs for cities/regions/countries).semrush-pp-cli tracking organic-competitors — Organic competitors discovery (auto-detected competitors ranked across the tracked keyword set).semrush-pp-cli tracking organic-landings — Top organic landing pages by tracked-keyword traffic.semrush-pp-cli tracking organic-overview — Organic overview report (visibility, estimated traffic, average position over a date range).semrush-pp-cli tracking organic-positions — Per-keyword organic positions report. Supports tag filters and competitor comparison.semrush-pp-cli tracking organic-visibility — Organic visibility (Share-of-Voice) index over a date range.semrush-pp-cli tracking paid-competitors — AdWords competitors discovery (auto-detected paid competitors).semrush-pp-cli tracking paid-landings — Top paid (AdWords) landing pages by tracked-keyword traffic.semrush-pp-cli tracking paid-overview — AdWords overview report (paid visibility, estimated traffic over a date range).semrush-pp-cli tracking paid-positions — Per-keyword paid (AdWords) positions report.semrush-pp-cli tracking paid-visibility — AdWords visibility (Share-of-Voice) index over a date range.semrush-pp-cli tracking tags-add — Add tags to existing keywords in a Position Tracking campaign.semrush-pp-cli tracking tags-remove — Remove tags from existing keywords in a Position Tracking campaign.url — URL-level analytics: overview, organic/paid keywords
semrush-pp-cli url organic-keywords — URL Organic Search Keywords. 30 units/line. Keywords this URL ranks for organically.semrush-pp-cli url overview — URL Overview (one database). 10 units/line.semrush-pp-cli url overview-all — URL Overview (all databases). 10 units/line.semrush-pp-cli url overview-history — URL Overview (history). 10 units/line. Monthly historical rankings for a URL.semrush-pp-cli url paid-keywords — URL Paid Search Keywords. 30 units/line. Keywords this URL has been advertised against.This printed CLI owns bounded freshness only for registered store-backed read command paths. In --data-source auto mode, those paths check sync_state and may run a bounded refresh before reading local data. --data-source local never refreshes. --data-source live reads the API and does not mutate the local store. Set SEMRUSH_NO_AUTO_REFRESH=1 to skip the freshness hook without changing source selection.
Covered paths:
semrush-pp-cli projectsemrush-pp-cli project getsemrush-pp-cli project listWhen JSON output uses the generated provenance envelope, freshness metadata appears at meta.freshness. Treat it as current-cache freshness for the covered command path, not a guarantee of complete historical backfill or API-specific enrichment.
When you know what you want to do but not which command does it, ask the CLI directly:
semrush-pp-cli which "<capability in your own words>"which resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code 0 means at least one match; exit code 2 means no confident match — fall back to --help or use a narrower query.
semrush-pp-cli snapshot tag monday-baselineAfter syncing your tracked domains and keywords, tag the snapshot. Re-sync on Friday and run snapshot diff monday-baseline today to see the week`s movement.
semrush-pp-cli keyword gap myco.com competitor.com --database us --kd-max 40 --json --select phrase,nq,kdSet-difference query in one shot — narrowed to keywords with realistic difficulty that the competitor ranks for but you don't.
semrush-pp-cli backlink gap myco.com competitor.com --min-ascore 70 --json --select domain,domain_ascore,backlinks_numAuthority-70+ referring domains linking to the competitor but not to you, ready to pipe into an outreach workflow.
semrush-pp-cli audit triage 12345 --top 20 --agentOnce a Site Audit snapshot exists, get the 20 highest-impact pages weighted by errors x3 + warnings x1 + notices x0.1.
semrush-pp-cli budget --since 30d --group-by command --agentLocal credit_log rolled up by command; surfaces the top spenders so you can throttle or cache them.
Set SEMRUSH_API_KEY from your Subscription Info → API Units page. The CLI uses the same v3 query-param auth as the official docs and the free balance endpoint as its doctor check, so you never spend credits to verify the key works.
Run semrush-pp-cli doctor to verify setup.
Add --agent to any command. Expands to: --json --compact --no-input --no-color --yes.
Pipeable — JSON on stdout, errors on stderr
Filterable — --select keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:
semrush-pp-cli backlink list mock-value --type example-value --agent --select id,name,statusPreviewable — --dry-run shows the request without sending
Offline-friendly — sync/search commands can use the local SQLite store when available
Non-interactive — never prompts, every input is a flag
Explicit retries — use --idempotent only when an already-existing create should count as success, and --ignore-missing only when a missing delete target should count as success
Commands that read from the local store or the API wrap output in a provenance envelope:
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}Parse .results for data and .meta.source to know whether it's live or local. A human-readable N results (live) summary is printed to stderr only when stdout is a terminal AND no machine-format flag (--json, --csv, --compact, --quiet, --plain, --select) is set — piped/agent consumers and explicit-format runs get pure JSON on stdout.
When you (or the agent) notice something off about this CLI, record it:
semrush-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
semrush-pp-cli feedback --stdin < notes.txt
semrush-pp-cli feedback list --json --limit 10Entries are stored locally at ~/.local/share/semrush-pp-cli/feedback.jsonl. They are never POSTed unless SEMRUSH_FEEDBACK_ENDPOINT is set AND either --send is passed or SEMRUSH_FEEDBACK_AUTO_SEND=true. Default behavior is local-only.
Write what surprised you, not a bug report. Short, specific, one line: that is the part that compounds.
Every command accepts --deliver <sink>. The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:
| Sink | Effect |
|---|---|
stdout | Default; write to stdout only |
file:<path> | Atomically write output to <path> (tmp + rename) |
webhook:<url> | POST the output body to the URL (application/json or application/x-ndjson when --compact) |
Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.
A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's "Beacon" pattern.
semrush-pp-cli profile save briefing --json
semrush-pp-cli --profile briefing backlink list mock-value --type example-value
semrush-pp-cli profile list --json
semrush-pp-cli profile show briefing
semrush-pp-cli profile delete briefing --yesExplicit flags always win over profile values; profile values win over defaults. agent-context lists all available profiles under available_profiles so introspecting agents discover them at runtime.
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Usage error (wrong arguments) |
| 3 | Resource not found |
| 4 | Authentication required |
| 5 | API error (upstream issue) |
| 7 | Rate limited (wait and retry) |
| 10 | Config error |
Parse $ARGUMENTS:
help, or --help → show semrush-pp-cli --help outputinstall → ends with mcp → MCP installation; otherwise → see Prerequisites above--agent)go install github.com/mvanhorn/printing-press-library/library/marketing/semrush/cmd/semrush-pp-mcp@latestclaude mcp add semrush-pp-mcp -- semrush-pp-mcpclaude mcp listwhich semrush-pp-cli
If not found, offer to install (see Prerequisites at the top of this skill).--agent flag:semrush-pp-cli <command> [subcommand] [args] --agentsemrush-pp-cli <command> --help.© 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-semrush of mvanhorn/printing-press-library.
Open the folder on GitHubat commit 0fdcc7a
Pp Semrush 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 Semrush this skillmvanhorn/printing-press-library | 2.1k | — | ~6.7k | Automated safety check: Notes | Apache-2.0 | |
| Evaluate Skillevery-app/open-seo | 23k | — | ~1.8k | Automated safety check: Notes | MIT | |
| FLOW SEO FrameworkAgriciDaniel/claude-seo | 18k | 2 repos | ~1.4k | Automated safety check: Pass | MIT | |
| SEO Drift MonitorAgriciDaniel/claude-seo | 18k | 1 repos | ~1.9k | Automated safety check: Pass | MIT | |
| SEO Audit with Search Consolenowork-studio/notfair-plugin | 3.9k | 1 repos | ~15k | Automated safety check: Warn | MIT | |
| DataForSEO SEO Toolkitzubair-trabzada/dataforseo-claude | 164 | — | ~3.2k | Automated safety check: Notes | MIT |
every-app/open-seo
Test a candidate OpenSEO skill end to end by running fresh, isolated Codex sessions against the local backend and scoring the reports they save.
AgriciDaniel/claude-seo
Brings the FLOW framework's stage-specific SEO prompts into the agent, from keyword discovery through backlinks, on-page work and conversion to local SEO, loaded on demand.
AgriciDaniel/claude-seo
Captures baselines of a page's SEO-critical elements, compares later snapshots against them and flags regressions by severity, like version control for on-page SEO.
nowork-studio/notfair-plugin
Runs a full SEO audit that combines Google Search Console, URL Inspection, PageSpeed Insights and a technical crawl, then ranks quick wins and a 30-day plan.
zubair-trabzada/dataforseo-claude
Runs keyword research, rank checks, backlink and competitor analysis, site audits and PDF reports from live Google data through the DataForSEO API.
zubair-trabzada/dataforseo-claude
Runs a full SEO audit through the DataForSEO API with five parallel subagents and produces a composite 0 to 100 SEO score, an action plan and an audit JSON for PDF export.
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
Every Semrush Analytics + Projects feature, plus a local SQLite store and cross-domain joins no other Semrush tool has. Pp Semrush is an agent skill from mvanhorn/printing-press-library. Every Semrush Analytics + Projects feature, plus a local SQLite store and cross-domain joins no other Semrush tool has.
Pp Semrush fits situations like: phrases: show me what changed for <domain this week; find the keyword gap between <my domain and <competitor; show me new referring domains for <domain; triage my Site Audit.
Run `npx skills add mvanhorn/printing-press-library --skill pp-semrush -a claude-code`. Or copy the skill folder (cli-skills/pp-semrush in mvanhorn/printing-press-library) into .claude/skills/pp-semrush in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mvanhorn/printing-press-library --skill pp-semrush -a codex`. Or copy the skill folder (cli-skills/pp-semrush in mvanhorn/printing-press-library) into .agents/skills/pp-semrush 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-semrush -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-semrush, .gemini/skills/pp-semrush, .github/skills/pp-semrush and .opencode/skills/pp-semrush in your project.
Going by SKILL.md and its folder, Pp Semrush needs the command-line tools its instructions call (go, claude and npx) and credentials named SEMRUSH_API_KEY. Our summary lists: Node.js. Its frontmatter pre-approves these tools: Read, Bash.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (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 Semrush 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 6.7k tokens (SKILL.md is roughly 27k 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 Semrush: Evaluate Skill (every-app/open-seo, 23k stars), FLOW SEO Framework (AgriciDaniel/claude-seo, 18k stars), SEO Drift Monitor (AgriciDaniel/claude-seo, 18k stars) and SEO Audit with Search Console (nowork-studio/notfair-plugin, 3.9k 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,053 GitHub stars. The repository holds 505 skills in this directory. The repository was last updated on October 7, 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.