Direct logo

Direct

Community
Silverov
direct

Yandex Direct (API v5/v501) advertising audit, management, and optimization for Unified Performance Campaigns (ЕПК) and combinatorial ads. Full account audits, campaign management, keyword and autotargeting operations, reports with Metrika goals, weekly budget analysis, and optimization recommendations for Russian market PPC. Triggers on: "Яндекс Директ", "Yandex Direct", "директ", "ЕПК", "РСЯ", "YAN", "direct audit", "direct campaigns", "direct report", "direct optimize".

Overview

PublisherSilverov
Repositoryyandex-direct-skill
Skill namedirect
Stars
62
Forks
16
Bundled files
10
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 10 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by Silverov on GitHub. Read the source before you install it.

Installation

Install the Direct AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Silverov/yandex-direct-skill/tree/master
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Silverov/yandex-direct-skill.git \
  .claude/skills/direct
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Direct in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Direct on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Direct is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Yandex Direct — PPC Audit & Management (API v5 / v501)

Authors: Nick Serebrov & Kobe 🐍 Version: 2.0.2 — актуально на октябрь 2026

Full-cycle Yandex Direct management: account audits, campaign CRUD, keyword management, reporting, optimization, and budget analysis.

Quick Reference

CommandWhat it does
/direct auditFull account audit (all campaigns), scoring 0-100
/direct campaignsList campaigns with type, strategy, weekly budget and stats
/direct createCreate a Unified Performance Campaign with groups, keywords, combinatorial ads
/direct keywordsKeywords and autotargeting (list, add, bids, categories, pause)
/direct reportPerformance stats by priority Metrika goals (CTR, CPC, CPA, spend)
/direct optimizeOptimization recommendations (pause losers, adjust bids and limits)
/direct budgetWeekly budget spend analysis and forecasting
/direct negativeNegative keywords (campaign, group, shared sets) from search queries

What changed in Direct (know this before acting)

DateChangeConsequence for the agent
2023-11 → 2024Unified Performance Campaign (UNIFIED_CAMPAIGN, ЕПК) replaced text-image, dynamic and smart-banner campaignsRead UnifiedCampaignFieldNames; search and YAN live in one campaign — split stats by AdNetworkType
2024-07-01Manual bids in YAN disabledManual strategy (HIGHEST_POSITION) is search-only
2025-06, 2025-09New strategies: AVERAGE_CPA_MULTIPLE_GOALS, PAY_FOR_CONVERSION_MULTIPLE_GOALS, MAX_PROFITSee references/bidding-strategies.md
2025-11-13bidmodifiers.toggle removedUse set (100 = off) or delete
2026-03-20Combinatorial ads (RESPONSIVE_AD): up to 7 titles, 3 texts, 5 images, 6 videosRequest ResponsiveAdFieldNames, otherwise the API returns them as TextAd with only the first title/text/image
2026-06-30 / 07-14Text-image ads in ЕПК are edit-only; existing ones converted to combinatorialads.add with TextAd creates RESPONSIVE_AD; Title2 is merged into the title (≤ 56 chars) or lost
2026-06-22 / 07-06Weekly budgets for manual-bid campaigns and shared account; up to 30% of unspent budget rolls overAnalyse WeeklySpendLimit, not a daily budget
2026-03-01Russian language rules for consumer informationFlag foreign words without Russian equivalents in ads (references/compliance.md)

API Configuration

Credentials: ~/.secrets/yandex-direct.json (chmod 600)

json
{ "client_id": "...", "client_secret": "...", "oauth_token": "...", "client_login": "optional-for-agency" }
  • Endpoint: https://api.direct.yandex.com/json/v5/<service>; Unified-campaign structures (UnifiedCampaign, UnifiedAdGroup, ShoppingAd, ListingAd) in add/update go to /json/v501/ — scripts/yd-api.sh routes them automatically.
  • Read campaigns and ad groups from v501 too: v5 shows a Unified campaign as TEXT_CAMPAIGN (groups as TEXT_AD_GROUP) without UnifiedCampaign settings such as search PlacementTypes. yd-api.sh routes get requests with UnifiedCampaign*/UnifiedAdGroup* field names to v501; otherwise set YD_API_VERSION=v501.
  • Auth: Authorization: Bearer {oauth_token}; agency or representative access: Client-Login: {client_login}.
  • Sandbox: YD_SANDBOX=1. Env overrides: YD_TOKEN, YD_CLIENT_LOGIN, YD_API_VERSION, YD_SECRETS.
  • Money in API requests and responses is in micro-units (× 1 000 000). Reports use rubles (returnMoneyInMicros: false).

API limits that break naive requests:

  • adgroups.get, keywords.get, ads.get, bidmodifiers.get: CampaignIds ≤ 10 per request, AdGroupIds ≤ 1000.
  • Every get returns ≤ 10 000 objects; continue with Page.Offset = LimitedBy.
  • negativekeywordsharedsets.get: Ids ≤ 30; omit SelectionCriteria to get all sets. Same for sitelinks.get.
  • sitelinks.get: FieldNames: ["Id"] plus SitelinkFieldNames — "Sitelinks" in FieldNames together with SitelinkFieldNames is error 4004.
  • ads.get: TextAdFieldNames has AdExtensions, not AdExtensionIds (that is a filter / an add field).
  • Reports: Goals ≤ 10; AttributionModels only AUTO, LSCCD, FCCD, LC; ≤ 5 offline reports in queue; one request per 10 s (error 56, HTTP 400) — yd-report.sh polls every ≥ 10 s and retries error 56. The CampaignType report column shows a Unified campaign as TEXT_CAMPAIGN — take the type from campaigns.get v501.
  • ads.get: AutogeneratedErirAdDescription exists only in TextAdFieldNames; combinatorial ads have no such field (error 8000) — check the auto description in the web interface.
  • keywords.get: Productivity is always null; AutotargetingCategories is deprecated — use AutotargetingSettings (AutotargetingSettingsCategoriesFieldNames, AutotargetingSettingsBrandOptionsFieldNames).

Troubleshooting:

  • Empty HTTP 204 to every request, even with a wrong token → the Direct API is turned off on Yandex's side (e.g. the special mode after the October 2026 data-center incident: only the web interface and the mobile app work, see https://yandex.ru/support/direct/ru/special-mode). Not a token, IP or script problem — wait, and meanwhile use the web interface for read-only checks.
  • yd-audit.sh says «no campaigns found» → all campaigns may be archived; rerun with --include-archived (the script prints the archived count when it can).
  • The campaigns grid labels strategies «Оптимизация кликов» / «Оптимизация конверсий»; the API type is in BiddingStrategyType (see references/bidding-strategies.md).

Safety rule for changes

Every write call (add, update, delete, suspend, resume, archive, moderate, bids, set) is made only after the user approved that exact change: show the request JSON (or a readable diff of what changes) and wait for an explicit yes. Audit, report and optimize are read-only.

Orchestration Logic

/direct audit

  1. Run scripts/yd-audit.sh <dir> — collects all objects (chunked by 10 campaigns, paginated) and 4 reports for the last 30 days using the campaigns' priority goals (--goals to override).
  2. Read <dir>/summary.json: errors, campaign and ad types, goals used.
  3. Hand the directory to agents/audit-yandex.md (or run its steps): 55 checks from references/yandex-audit.md, scoring from references/scoring-system.md.
  4. Report in Russian: grade (A–F), findings, Quick Wins, prioritized action plan.

/direct campaigns

  1. campaigns.get (v501): FieldNames Id, Name, Type, State, Status, StatusClarification, Statistics; UnifiedCampaignFieldNames and TextCampaignFieldNames: BiddingStrategy, PriorityGoals, CounterIds.
  2. Table: type, state, search/network strategy, weekly limit (WeeklySpendLimit / 1 000 000), goals.
  3. Spend and conversions — from scripts/yd-report.sh campaign --by-network --goals <priority goals>.

/direct create

  1. Gather: name, geo, weekly budget, strategy and goal, landing URL, keywords, 3–7 titles, 2–3 texts, images.
  2. adimages.add (base64, Type: AUTO) → image hashes; see references/image-specs.md.
  3. campaigns.add with UnifiedCampaign (v501): BiddingStrategy.Search/Network, CounterIds, PriorityGoals, Settings (ADD_METRICA_TAG, ENABLE_SITE_MONITORING), TrackingParams with UTM.
  4. adgroups.add with UnifiedAdGroup (v501): RegionIds, negatives.
  5. keywords.add: phrases and/or ---autotargeting with AutotargetingSettings (categories, brand options).
  6. sitelinks.add (up to 8 per set) and adextensions.add (CALLOUT).
  7. ads.add with ResponsiveAd: Titles, Texts, Href, AdImageHashes, SitelinkSetId, AdExtensionIds, BusinessId if there is a Yandex Business profile. Do not use TextImageAd for this — it is an image-only banner.
  8. ads.moderate — only after the user reviewed the drafts.

/direct keywords

  1. keywords.get by AdGroupIds or ≤ 10 CampaignIds; include ServingStatus and autotargeting settings.
  2. Operations: add, suspend, resume, delete, bids (keywordbids.set with manual strategy), autotargeting categories.
  3. Performance — scripts/yd-report.sh criteria (Criterion, CriterionType), not the deprecated Productivity.

/direct report

  1. scripts/yd-report.sh <preset>: account, campaign, adgroup, ad, criteria, search_query, placement, custom.
  2. Always pass --goals with priority goals (from campaigns.get → PriorityGoals): without it conversions are summed over ALL Metrika goals, including micro-goals.
  3. For Unified campaigns add --by-network to separate search and YAN.
  4. Dates: --from/--to (default: 30 days ending yesterday) or --period LAST_7_DAYS. Offline reports are polled automatically (retryIn header).

/direct optimize

  1. Reports for 30 days with goals: criteria, search_query, placement, campaign --by-network.
  2. Find: conditions and queries with spend > 2× target CPA and no conversions; YAN placements to exclude; network vs search CPA gap inside one campaign; groups with RARELY_SERVED; rejected ad elements.
  3. Compare with the account's own medians first, then references/benchmarks.md.
  4. Recommendations sorted by impact; 3× Kill Rule: flag anything with CPA > 3× target.
  5. Do not touch strategy, its spend-limit type or payment model during learning (references/bidding-strategies.md).

/direct budget

  1. Weekly limits from BiddingStrategy.*.WeeklySpendLimit (or CustomPeriodBudget for flights).
  2. Spend by day — yd-report.sh campaign --daily --from <Monday>; run rate and weekly forecast.
  3. Flag: limit hit before the end of the week; spend < 70% of the limit; pay-per-conversion budget < 10 × CPA; weekly budget < 300 ₽. Unspent budget of CPC campaigns rolls over (up to 30%) since 06.07.2026.

/direct negative

  1. Campaign and group negatives (NegativeKeywords) and shared sets (negativekeywordsharedsets.get, all sets).
  2. yd-report.sh search_query --goals … → irrelevant queries with spend and no conversions.
  3. Propose negatives (campaign level or shared set); apply via campaigns.update / negativekeywordsharedsets.update after approval.

Quality Gates

  • Write operations only after explicit approval of the exact change.
  • Conversion analysis only on priority goals; never on the all-goals sum.
  • 3× Kill Rule: flag keywords/groups/placements with CPA > 3× target for pause.
  • Strategy learning: goal ≥ 10 conversions a week; don't change strategy, spend-limit type or payment model in the first 2–3 weeks; a pause > 7 days restarts learning.
  • Budget: weekly budget ≥ 300 ₽; pay-per-conversion ≥ 10 × CPA.
  • Moderation: check Status/StatusClarification of ads and of each combinatorial element before optimizing.
  • Tracking: ADD_METRICA_TAG on, UTM via TrackingParams (campaign or group) or in Href.

Reference Files

Load on-demand, NOT at startup:

  • references/yandex-audit.md — 55 audit checks (YD01-YD55) with data sources
  • references/scoring-system.md — Weighted scoring (0-100, grades A-F)
  • references/benchmarks.md — How to compare metrics; rough Russian market references
  • references/bidding-strategies.md — ЕПК strategies ↔ API, weekly budgets, learning, bid modifiers
  • references/compliance.md — Yandex moderation rules, ad marking, Russian language rules
  • references/image-specs.md — Images and video for combinatorial ads

Scripts

  • scripts/yd-api.sh — Generic API call wrapper (v5/v501 routing, Client-Login, item-level error detection)
  • scripts/yd-report.sh — Reports wrapper (presets, goals, attribution, offline polling)
  • scripts/yd-audit.sh — Automated audit data collection (all objects + 4 reports)

Requirements: bash, curl, jq.

Subagents

  • agents/audit-yandex.md — Audit subagent for parallel campaign analysis

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Direct AI skill do?

Yandex Direct (API v5/v501) advertising audit, management, and optimization for Unified Performance Campaigns (ЕПК) and combinatorial ads. Full account audits, campaign management, keyword and autotargeting operations, reports with Metrika goals, weekly budget analysis, and optimization recommendations for Russian market PPC. Triggers on: "Яндекс Директ", "Yandex Direct", "директ", "ЕПК", "РСЯ", "YAN", "direct audit", "direct campaigns", "direct report", "direct optimize".

Why use Direct on TypingMind?

Because you install it once and use it with any model. Direct is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Direct in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Silverov/yandex-direct-skill/tree/master. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Direct?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Direct?

As many as you like. As long as a model supports skills, you can use Direct with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Direct AI skill free?

Yes. It is published on GitHub by Silverov under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇