---
name: analit-kpc
description: Refresh and reconcile Analit Google Ads keyword performance, import real Sol xhigh advice, and publish the dated read-only keyword review with honest form-event and ROI limits.
---

# Analit keyword performance control

Use the canonical KPC family without changing its shared code. Work from `/Users/agency/Documents/Agty/Analit`, keeping receipts in a dated gitignored `.tmp` directory. The client display is Analit Utazásszervező Kft. The currently returned Ads customer name is Analit Kft.

Read the project's `access-google-and-meta` skill, `ACCESS_GOOGLE_META.md`, and `look-for-access`. The intended Ads customer is `1938291268`, login manager `9494412337`, HUF, Europe/Budapest. The browser `ocid` `402455758` is not an Ads API customer. Historical credential filenames beginning with `csupi` are shared agency routes, never client identity evidence.

The configured protected profile is `/Users/agency/.config/riport-30d/clients/analit-ads-client.json`. It uses the existing shared agency OAuth grant with the verified login manager. Never print credential values. Before refreshing, run a real reporting-only `customer` identity query and reject a different ID, currency, timezone or manager account. A name variation must be resolved against the exact ID and live project access map.

## Run the frozen snapshot and advice loop

```bash
cd /Users/agency/Documents/Agty/Analit
python3 ~/.agents/skills/kpc/scripts/kpc.py run
```

This creates an append-only 60-day snapshot, reconciliation ledger, static dashboard and frozen advice bundle. Its window ends yesterday in the account timezone. The table covers current ENABLED/PAUSED Search criteria and retains paused campaign diagnostics. Account totals and campaign-type sums stay separate from actionable keyword scope. Any scope gap must remain disclosed.

Read the advice family contract and run a separate **Sol xhigh** model pass over the printed bundle. Use `/launch-agent` first. Give it the bundle, JSON schema, ownership of one output/report path, all tracking/grounding/evidence-floor rules, and a read-only investigation mandate. Advice must cover every current criterion identity `ad_group_id~criterion_id`. If native slots are occupied, an authenticated local `codex exec -m gpt-6.1-sol -c 'model_reasoning_effort="xhigh"'` invocation is an available route. Record the actual configured executor. If the required model cannot run, disclose that specific limit, never present hand-authored placeholders as a completed advice pass.

Validate schema, complete criterion coverage, exact cited metrics, observed candidate terms, summary membership, two practical options per flagged row, current serving reasons for zero-delivery rows, and the 200-impression plus 10-click exclusion floor. Then import the actual file:

```bash
python3 ~/.agents/skills/keywords-performance-control-advice/scripts/advice.py import-advice /absolute/path/sol-advice.json
python3 ~/.agents/skills/analit-kpc/scripts/period_metrics.py \
  --project /Users/agency/Documents/Agty/Analit --output /absolute/path/period-metrics.json
python3 ~/.agents/skills/analit-kpc/scripts/presentation.py \
  --report /absolute/path/ads-control/reports/stage-3-SNAPSHOT.html \
  --periods /absolute/path/period-metrics.json --output /absolute/path/analit-keyword-review.html
```

The period helper verifies customer identity, reads the latest snapshot boundaries, retrieves independent latest/prior 30-day account and campaign metrics and action names, then reconciles exact micros/clicks/impressions. The presentation helper preserves the embedded canonical KPC data byte-for-byte while correcting the stale column-help dates and Analit conversion labels, and adds the aligned 30-day reading path.

## Analit interpretation

The family field `phone_click_conversions` sums **all** conversion actions. In the October 3, 2026 snapshot the latest six are `ANALIT_FORM_SUCCESS_20260914` and the prior two are `balionline.hu (web) dynamic_trip_form_submit`. Re-read action names every run. Do not describe these as calls, CRM leads or bookings. Changing conversion definitions prevents an unqualified conversion/CPL trend. Keep unknown tracking coverage explicit rather than filling a call-tracking date from an action name.

The shared refresh currently reads an absent optional Quality Score as protobuf scalar zero. The period helper independently checks provider field presence. Zero must render as unavailable, and cannot justify a low-score judgement. The October 3 snapshot has 148 absent scores and 37 retrieved scores. Planner estimates have no configured language or geography and are not verified Hungarian search demand.

Prioritize keep/change/stop **investigations**, grounded in current spend, clicks, query intent, match type and serving status. Duplicate terms across the two enabled campaigns warrant comparative routing/landing/CRM attribution investigation, not automatic consolidation. Unknown conversions or zero delivery do not justify a budget cut or keyword pause. No proven ROI, ROAS or winner/loser ranking is possible without attributable revenue and contribution margin. Name the data that would change each decision. This workflow never changes Ads budgets, bids, keywords or activation.

## Stable review delivery

Apply `comment-html-review-host` to the final assembled dashboard. Use the whole shared-host mirror, preserve unrelated manifest routes and a stable comment document. Serialize concurrent publishers with the task's existing lock wrapper. Use a stable dated slug such as `analit-keyword-review-2026-10-03-v1` with document `analit-keyword-control`. Verify anonymous HTTP 200, exact snapshot/customer/advice identity, ledger reconciliation, manifest inclusion and an unrelated prior route. Keep raw provider receipts private and gitignored.

Do not open files, panels, tabs or previews automatically. Do not run default `kpc.py serve`, which opens a browser. HTTP readback and headless checks are sufficient for this internal review document. Reuse the same document and URL for corrections in the same review batch. Deliver the stable review URL first, the decision brief, and links to all reviewable outputs. The parent owns the single combined recap and any authorized audio.
