Audit a live Apple Ads account
Read the account, explain what is observable, and stop before any mutation. This skill has no write
path. Route proposed fixes to apple-ads only after the user chooses an action.
When the full plugin is installed, use the operating skill's synced CLI references for command
syntax:
../apple-ads/references/asa-management.md for entity and catalog reads.
../apple-ads/references/asa-metrics.md for performance reads and metric definitions.
When this skill was installed alone and those files are absent, use
adapty asa <topic> <command> --help for the installed version. The playbooks name the allowed
read commands. Never reconstruct a missing flag or endpoint from memory.
Preflight
Run adapty asa whoami first in every session.
- If the CLI, authentication, subscription, or Apple connection is unavailable, hand off to
adapty-cli-setup and stop.
- If access is ready, resolve the organization, app, and requested scope from list results. Never
invent or reuse an identifier from a different company.
- If the user has no connected account and wants a proposed structure, use
apple-ads-strategy.
Route one audit question
Open references/INDEX.md and read the one playbook it names.
- Overall health, serving, performance warnings, or Apple-versus-Adapty installs →
references/playbooks/account-health.md.
- Live structure, duplicate targets, traffic ownership, or missing cross-negatives →
references/playbooks/structure-audit.md.
- A weekly or monthly operating review →
apple-ads, then its weekly-review.md playbook.
Do not run both audit playbooks by default. Finish the requested audit, then offer the other as a
separate follow-up if the evidence points there.
Read-only boundary
Allowed work:
whoami, list, get, metrics, and metrics overview reads.
- Normalizing and comparing returned entities.
- Producing findings and a proposed handoff.
Forbidden work:
- Any
create, update, add, sync, pause, enable, or automation mutation.
- Including a ready-to-run write command in the audit result.
- Asking for approval to write while this skill is active.
When the user asks to fix a finding, close the audit and hand the chosen finding to apple-ads as a
new task. The operator must re-resolve ids and obtain its own confirmation.
Diagnostic method
- Frame the question. Record the app, scope, date window, success metric, and any user-defined
limit. Ask only for missing inputs that materially affect the result.
- Plan the reads. Use list counts for entity counts and server aggregation for metrics. Keep
the standard audit inside the analytics budget; never loop per entity or per day.
- Normalize evidence. Give each returned row or metadata fact an evidence id. Keep the source,
window, entity id, and metric attached to it; include a cohort window only for
revenue, roas,
arpu, arppu, arpas, or roi.
- Separate layers. Write the observation first, then the explanation, then the recommendation.
Never present an explanation as observed fact.
- Apply applicability. Mark controls that cannot be evaluated as
unknown or
not_applicable; do not score them as failures.
- Report and stop. Recommend the smallest useful next action, but do not execute it.
Finding contract
Every audit response contains:
summary — a short plain-language answer.
scope — company, app, entity scope, and identifiers used.
date_window — exact dates and grouping, plus a cohort window only for a cohort root.
findings — ordered by severity.
evidence — ids that map every claim to returned data.
confidence — overall confidence and the limiting missing data.
unknowns — questions the available surface cannot settle.
recommended_actions — read-only follow-ups or operator handoffs.
Each finding contains:
| Field |
Meaning |
status |
healthy, attention, critical, unknown, or not_applicable |
observation |
What the returned data directly shows |
explanation |
The simplest supported interpretation, clearly labeled |
evidence |
Evidence ids, metric names, windows, and affected entity ids |
confidence |
high, medium, or low, with a reason |
recommendation |
The next read or an apple-ads handoff |
limitations |
What prevents a stronger conclusion |
Use critical only for a confirmed serving failure or a user-defined limit that was actually
breached. Use attention for a supported concern without that proof. Never invent a numeric health
score or universal threshold.
Simple install comparison
This is the entire attribution scope of this skill:
- Compare
total_installs from Apple with adapty_installs from Adapty for the same scope and exact
date window.
- Show both values and
absolute_gap = apple_installs - adapty_installs.
- Show
relative_gap = absolute_gap / apple_installs only when apple_installs > 0.
- If either value is absent, mark the comparison
unknown. If Apple installs are zero, say the
percentage is undefined.
- Explain plainly that the systems use different attribution and event definitions, so an exact
match is not expected.
- Do not diagnose attribution, assign fault, or claim a cause.
Evidence and confidence
- High: direct metadata or a server-aggregated metric for the exact scope and window.
- Medium: multiple direct signals support the interpretation, but the CLI does not expose the
cause or change history.
- Low: the conclusion depends on names, inferred intent, a thin sample, missing value data, or
mismatched maturity.
Name correlation as correlation: use "coincided with" when change history is unavailable, never
"was caused by".
Failure modes
- A missing business target means report facts, not winners and losers.
- A thin or immature cohort means
unknown, not unprofitable.
- An unscoped metadata read can mix apps or campaigns; stop and resolve scope.
- A
429 that reaches the agent means stop. Do not sleep and retry in a loop.
- A request to redesign a future account belongs to
apple-ads-strategy.
- A request to change anything belongs to
apple-ads after the audit is complete.
1---2name: apple-ads-audit3description: Use for read-only diagnostics of a connected Apple Ads account: account health, live campaign and ad-group structure, traffic ownership, duplicate exact keywords, missing cross-negatives, serving problems, spend without results, or a simple same-window comparison of Apple total installs and Adapty installs. Triggers on "audit my Apple Ads account", "what is broken", "which campaigns need attention", "is my live structure correct", or "why are Apple and Adapty installs different". Never use it to design a new account, run a weekly review, or make changes.4license: MIT5---67# Audit a live Apple Ads account89Read the account, explain what is observable, and stop before any mutation. This skill has no write10path. Route proposed fixes to `apple-ads` only after the user chooses an action.1112When the full plugin is installed, use the operating skill's synced CLI references for command13syntax:1415- `../apple-ads/references/asa-management.md` for entity and catalog reads.16- `../apple-ads/references/asa-metrics.md` for performance reads and metric definitions.1718When this skill was installed alone and those files are absent, use19`adapty asa <topic> <command> --help` for the installed version. The playbooks name the allowed20read commands. Never reconstruct a missing flag or endpoint from memory.2122## Preflight2324Run `adapty asa whoami` first in every session.2526- If the CLI, authentication, subscription, or Apple connection is unavailable, hand off to27 `adapty-cli-setup` and stop.28- If access is ready, resolve the organization, app, and requested scope from list results. Never29 invent or reuse an identifier from a different company.30- If the user has no connected account and wants a proposed structure, use `apple-ads-strategy`.3132## Route one audit question3334Open `references/INDEX.md` and read the one playbook it names.3536- Overall health, serving, performance warnings, or Apple-versus-Adapty installs →37 `references/playbooks/account-health.md`.38- Live structure, duplicate targets, traffic ownership, or missing cross-negatives →39 `references/playbooks/structure-audit.md`.40- A weekly or monthly operating review → `apple-ads`, then its `weekly-review.md` playbook.4142Do not run both audit playbooks by default. Finish the requested audit, then offer the other as a43separate follow-up if the evidence points there.4445## Read-only boundary4647Allowed work:4849- `whoami`, `list`, `get`, `metrics`, and `metrics overview` reads.50- Normalizing and comparing returned entities.51- Producing findings and a proposed handoff.5253Forbidden work:5455- Any `create`, `update`, `add`, `sync`, pause, enable, or automation mutation.56- Including a ready-to-run write command in the audit result.57- Asking for approval to write while this skill is active.5859When the user asks to fix a finding, close the audit and hand the chosen finding to `apple-ads` as a60new task. The operator must re-resolve ids and obtain its own confirmation.6162## Diagnostic method63641. **Frame the question.** Record the app, scope, date window, success metric, and any user-defined65 limit. Ask only for missing inputs that materially affect the result.662. **Plan the reads.** Use list counts for entity counts and server aggregation for metrics. Keep67 the standard audit inside the analytics budget; never loop per entity or per day.683. **Normalize evidence.** Give each returned row or metadata fact an evidence id. Keep the source,69 window, entity id, and metric attached to it; include a cohort window only for `revenue`, `roas`,70 `arpu`, `arppu`, `arpas`, or `roi`.714. **Separate layers.** Write the observation first, then the explanation, then the recommendation.72 Never present an explanation as observed fact.735. **Apply applicability.** Mark controls that cannot be evaluated as `unknown` or74 `not_applicable`; do not score them as failures.756. **Report and stop.** Recommend the smallest useful next action, but do not execute it.7677## Finding contract7879Every audit response contains:80811. `summary` — a short plain-language answer.822. `scope` — company, app, entity scope, and identifiers used.833. `date_window` — exact dates and grouping, plus a cohort window only for a cohort root.844. `findings` — ordered by severity.855. `evidence` — ids that map every claim to returned data.866. `confidence` — overall confidence and the limiting missing data.877. `unknowns` — questions the available surface cannot settle.888. `recommended_actions` — read-only follow-ups or operator handoffs.8990Each finding contains:9192| Field | Meaning |93|---|---|94| `status` | `healthy`, `attention`, `critical`, `unknown`, or `not_applicable` |95| `observation` | What the returned data directly shows |96| `explanation` | The simplest supported interpretation, clearly labeled |97| `evidence` | Evidence ids, metric names, windows, and affected entity ids |98| `confidence` | `high`, `medium`, or `low`, with a reason |99| `recommendation` | The next read or an `apple-ads` handoff |100| `limitations` | What prevents a stronger conclusion |101102Use `critical` only for a confirmed serving failure or a user-defined limit that was actually103breached. Use `attention` for a supported concern without that proof. Never invent a numeric health104score or universal threshold.105106## Simple install comparison107108This is the entire attribution scope of this skill:109110- Compare `total_installs` from Apple with `adapty_installs` from Adapty for the same scope and exact111 date window.112- Show both values and `absolute_gap = apple_installs - adapty_installs`.113- Show `relative_gap = absolute_gap / apple_installs` only when `apple_installs > 0`.114- If either value is absent, mark the comparison `unknown`. If Apple installs are zero, say the115 percentage is undefined.116- Explain plainly that the systems use different attribution and event definitions, so an exact117 match is not expected.118- Do not diagnose attribution, assign fault, or claim a cause.119120## Evidence and confidence121122- **High:** direct metadata or a server-aggregated metric for the exact scope and window.123- **Medium:** multiple direct signals support the interpretation, but the CLI does not expose the124 cause or change history.125- **Low:** the conclusion depends on names, inferred intent, a thin sample, missing value data, or126 mismatched maturity.127128Name correlation as correlation: use "coincided with" when change history is unavailable, never129"was caused by".130131## Failure modes132133- A missing business target means report facts, not winners and losers.134- A thin or immature cohort means `unknown`, not unprofitable.135- An unscoped metadata read can mix apps or campaigns; stop and resolve scope.136- A `429` that reaches the agent means stop. Do not sleep and retry in a loop.137- A request to redesign a future account belongs to `apple-ads-strategy`.138- A request to change anything belongs to `apple-ads` after the audit is complete.