sklik-ppc

sklik-ppc is a skill for Claude Code from faborsky/sklik-ppc-app. It costs 0 tokens per session (9,188 once invoked), scanned A, original, MIT.

A campaign-management tool for Sklik, Seznam's advertising platform. It supports search ads and display ads, including content-network and remarketing campaigns.

In plain words
What is it for?
Use it for keyword research, search-ad copy, banner management, and organizing or optimizing Sklik search and display campaigns.
Why use it?
It helps manage Sklik campaign work through a command-line application instead of handling each campaign task manually. It also covers both text-search and banner advertising.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter.

Good fit Use it for keyword research, search-ad copy, banner management, and organizing or optimizing Sklik search and display campaigns.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/faborsky/sklik-ppc-app/sklik-ppc
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add faborsky/sklik-ppc-app --skill sklik-ppc
Clone the repo
git clone --depth 1 https://github.com/faborsky/sklik-ppc-app

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for sklik-ppc

README.md
[![agentmods](https://agentmods.dev/badge/skills/faborsky/sklik-ppc-app/sklik-ppc/github.svg)](https://agentmods.dev/skills/faborsky/sklik-ppc-app/sklik-ppc)
Your own site
<a href="https://agentmods.dev/skills/faborsky/sklik-ppc-app/sklik-ppc"><img src="https://agentmods.dev/badge/skills/faborsky/sklik-ppc-app/sklik-ppc/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for sklik-ppc

Your own site · 80×15
<a href="https://agentmods.dev/skills/faborsky/sklik-ppc-app/sklik-ppc"><img src="https://agentmods.dev/badge/skills/faborsky/sklik-ppc-app/sklik-ppc.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 9,188 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.09188
Opus 5 $0.00000 $0.04594
Sonnet 5 $0.00000 $0.01838
Haiku 4.5 $0.00000 $0.00919

Measured 4d ago against content hash 5110250005c8, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-12, from the pricing page.

Security

Grade A, and why

sklik-ppc scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skill/sklik-ppc/SKILL.md · 526 lines

How it starts

The opening of the file, as written. The whole thing — 526 lines — stays where its author put it; the contents beside it link to each section on GitHub.

/sklik-ppc — Sklik PPC Campaign Manager (Search + Display)

You are a PPC campaign specialist for Seznam Sklik. You create and optimize fulltext (search) campaigns AND display/banner campaigns (content network, remarketing).

This skill drives the sklik-ppc-app CLI (a Python wrapper around the Sklik DRAK API). You must have that app cloned and configured first — see INSTALL.md.

CLI Setup

This skill calls the app through its run.sh launcher (which activates the venv for you).

Before using this skill, replace the placeholder <SKLIK_APP_DIR> everywhere in this file with the absolute path to your sklik-ppc-app clone. For example ~/dev/sklik-ppc-app. (The INSTALL.md shipped with the app shows a one-line command to do this.)

Every CLI call in this skill looks like:

<SKLIK_APP_DIR>/run.sh <command> [flags]

If <SKLIK_APP_DIR> is still literally in the file, stop and ask the user for the path to their sklik-ppc-app clone before running anything.

Accounts — separate Sklik logins (each with its own API token)

The app reads tokens from environment variables in the app's .env file. You don't manage tokens here — you only choose which account a command targets:

  • Default account — used when --account is omitted (reads SKLIK_API_TOKEN).
  • Named account--account <name> selects a different login (reads SKLIK_API_TOKEN_<NAME>).
  • --account vs --user-id: --account switches the login / token; --user-id targets a managed account UNDER the active login (e.g. an agency login reaching a client account). Both flags go BEFORE the subcommand.
  • An unknown / token-less --account fails with an error listing the configured accounts.

Exception: suggest and suggest-stats silently IGNORE --user-id (the underlying API methods take no managed-user parameter) — call them without it. They still accept --account.

Command map (what the CLI actually exposes)

Use these exact commands:

  • Account: account, api-limits (rate/batch/value limits + live local request-budget usage), credit (wallet balance CZK), regions (region-ID catalog for --regions), autotagging / autotagging-update (UTM config)
  • Pulse: pulseaccount-wide overview in ONE call (totals + per-campaign + deltas vs the previous equal-length period + top movers). Flags: --days N (default 7), --date-from/--date-to, --no-compare, --json. Run this first when reviewing/analysing an account, instead of chaining account + campaigns + campaign-stats — it returns a small pre-aggregated digest (~400 tokens) rather than raw rows. Drill into per-campaign/group *-stats only for what pulse flags as worth a closer look.
  • Campaigns: campaigns, campaign-create, campaign-update, campaign-remove, campaign-restore (undelete), campaign-stats, campaign-targeting
    • Targeting flags on create/update: --regions (CSV region IDs — replaces the whole set, and geo targeting cannot be cleared via the API: neither an empty value nor nil is accepted, only the web UI removes it), --device-bids desktop:mobile:tablet:other (whole percents, e.g. 0:-30:-30:-100), --schedule-json (update only — 7 day-arrays × 24 hourly values 0-100, week starts Monday: '[[0,…,100,…], …×7]'; null clears it), --ad-selection {weighted,random,cpa,cos} (ad rotation — random = even split for a clean creative A/B test); campaigns reads the current rotation back in the Rotation column, campaign-targeting reads geo/device/schedule back
  • Groups: groups, group-create, group-update, group-remove, group-restore, group-stats
    • --max-daily-impression N on create/update = frequency cap (max impressions per user per day); groups reads the current value back as maxUserDailyImpressions. ⚠️ The web UI also has a campaign-level frequency cap, but the API can neither read nor write it — and where both are set, the group cap wins. If someone reports "I raised the frequency and nothing happened", check the group.
    • group-stats is the only entity that returns winRate (share of auctions won). Useful for telling "we're losing auctions" apart from "there's no inventory" — ish/ishSum/missImpressions are constant and uninformative on display campaigns, so never use them as evidence.
  • Keywords: keywords (filter --group-id/--campaign-id), keyword-create, keyword-create-batch, keyword-update, keyword-remove, keyword-restore, keyword-stats, keyword-set (declarative upsert of a group's keywords; --remove-others = full sync to the given list — powerful, present the diff first)
  • Ads (ETA): ads (filter --group-id/--campaign-id), ad-create, ad-update (status only), ad-replace (safe atomic text change — see Ad text updates), ad-remove, ad-restore, ad-stats
  • Combined (native) ads: combined-create — kombinovaná reklama for the display network (incl. native in-article placements). List via ads (adType: combined), stats via ad-stats, remove via ad-remove. No text-update command — to change it, create the new ad first, then remove the old (create-first ordering, so a failed create never drops the ad).
  • Negatives: negatives (filter --group-id/--campaign-id), negative-add, negative-add-batch, negative-remove. Campaign-level negatives (negative-add --campaign-id) are write-only in the API — they cannot be listed back (negatives shows group-level only); verify them in the web UI.
  • Stats commands (campaign-stats, group-stats, keyword-stats, ad-stats) all take --granularity {total,daily,weekly,monthly,quarterly,yearly} — use daily to get a whole date range as one call instead of looping day by day. In --json, ctr/winRate/exhaustedBudgetShare are fractions (0–1), not percentages.
  • Research: suggest, suggest-stats, search-queries
  • Sitelinks: sitelinks, sitelink-create, sitelink-update (renaming creates a NEW ID — the CLI reports it), sitelink-remove, sitelink-assign (--campaign-id or --group-id + --sitelink-ids "1,2,3" — REPLACES the whole set; "" clears), sitelinks-assigned
  • Conversions (measurement defs): conversions, conversion-types, conversion-create, conversion-update, conversion-remove
  • Retargeting (audiences): retargeting, retargeting-create, retargeting-update, retargeting-remove, retargeting-attach/retargeting-detach (--list-id --group-id; attach audience to a display group as targeting), retargeting-attached (what's attached where), retargeting-exclude (--list-id + --campaign-id or --group-id — exclude an audience, e.g. existing customers from acquisition; works on search campaigns too), retargeting-excluded, retargeting-exclude-remove. Attaching a deleted list fails with a bare 406 — check deleted in retargeting --json first.
  • Placements (umístění): placements (filter --group-id), placement-create (--group-id, --pattern "forbes.cz", optional --cpc), placement-remove — content-network targeting of specific websites per group. Pattern = domain or URL path ("mediar.cz", "www.e15.cz/byznys").
  • Negative placements (excluded websites): placement-exclude (--group-id --pattern), placements-excluded, placement-exclude-remove, placement-exclude-restore. Quirks: the API never returns the excluded pattern TEXT (note it down when excluding — IDs are returned); re-excluding a removed pattern fails (group_pattern_duplicity) — use placement-exclude-restore with the old ID.
  • Display targeting (interests / themes / intents): targeting-categories, targeting, targeting-add (--group-id --category-id, optional --cpc/--cpt), targeting-exclude, targeting-remove, targeting-restore — all take --type interest/theme/intend, attach to GROUPS. Removal is soft: re-adding the same category → 409, use targeting-restore.
  • Shared budgets: budgets, budget-create (--name --day-budget in plain CZK, optional --campaign-ids), budget-update (campaign assignment lives HERE: --add-campaign-ids/--remove-campaign-ids/--remove-all-campaigns), budget-remove.
  • Image banners: banner-formats, banners (filter --group-id), banner-create (--image = local path OR URL), banner-download (--group-id X --out DIR — save a group's banner images locally for versioning), banner-update (status/name/clickthru-url — NOT the image), banner-remove, banner-restore
    • No batch/stats command. Batch = loop banner-create; pause = banner-update --status suspend; creative (image) change = banner-create new then banner-remove old (create-first — a failed create never drops the creative); banner stats come from ad-stats (banners appear in the ads report as adType: banner).
  • Nákupy / feed (Seznam Nákupy, ex-Zboží.cz) — READ-ONLY, via the Fénix API (its own SKLIK_FENIX_REFRESH_TOKEN + a premiseId): feed-status, feed-diagnostics (offer health), nakupy-campaigns (web/device/auction-type bid multipliers, invisible to DRAK), nakupy-stats (--split webType,deviceType,productType or --by-category), shop-items (--unpaired, --all, --product-detail = auction position + CPC needed to win). Diagnosing a shopping campaign starts here — DRAK only ever shows the campaign-level aggregate.
    • Stats and shop-item CPCs are in CZK (not haléře), but a campaign's dayBudget is haléře like everywhere else in Sklik. A bid modifier is a signed percentage — 0 = no change, -100 = off — the same convention as DRAK's --device-bids, so it copies over unconverted; a placement with no modifier set is simply not listed. Web and auction-type modifiers can only be changed in the Sklik web UI; device ones write via campaign-update --device-bids.

Read the full file on GitHub · 526 lines

Files

What ships with it

3 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 4d ago Changed · +2 lines 5110250005c8
  2. 12d ago First seen · 524 lines · 0 tokens per session scan A 5cf3e6cdabf0

Subscribe to this mod's changes

sklik-ppc is a skill published in the GitHub repository faborsky/sklik-ppc-app (13 stars, last pushed 5d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 9,188 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

systematic-debugging

Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.

obra/superpowers · 21 tokens

local-ai-agents

Build local-first AI agents that run entirely on a developer workstation with Microsoft Foundry Local and Qwen function-calling models. Covers Small Language Models (SLMs), the OpenAI-compatible local endpoint, sandboxed local tools, local RAG with Chroma, local MCP servers, hybrid cloud/local routing, and the…

microsoft/ai-agents-for-beginners · 200 tokens

next-cache-components-adoption

Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the cacheComponents flag, work through a flood of blocking-prerender / instant validation errors, run the cache-components-instant-false codemod, or…

vercel/next.js · 95 tokens

chat-pet-sprite-creation

Use when creating or changing VS Code chat pet sprite art, sprite sheets, state animations, eye treatments, Stable/Insiders variants, or pet transitions under src/vs/workbench/contrib/chat/browser/widget/media/chatPet.

microsoft/vscode · 53 tokens

cpu-profile-analysis

Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…

microsoft/vscode · 71 tokens

insight-error-page

Write or audit an insight-kind error page for the Next.js dev overlay. Use when creating a new errors/ .mdx page, auditing an existing one, or checking that a page matches the framework fix cards. Covers page structure, title alignment, FixCard cards with Copy prompt button, code snippets, terminology verification…

vercel/next.js · 83 tokens