asc-analytics-reports — скилл для Claude Code: выгрузка отчётов App
Скилл скачивает все сегменты аналитических отчётов App Store Connect через CLI asc и проверяет их по размеру и MD5 до анализа.
npx skills add rorkai/app-store-connect-cli-skills --skill asc-analytics-reports -a claude-codeЧто делает asc-analytics-reports
Скилл ведёт агента по шагам: сначала проверяет контракт установленного CLI, потом готовит приватную папку вне репозитория, находит существующий запрос отчёта, выбирает инстансы по дате обработки и гранулярности, качает каждый сегмент и сверяет байты с sizeInBytes, а MD5 — с checksum. Содержимое отчётов он не разбирает и не агрегирует: это работа отдельного шага.
Фильтры --processing-date, --granularity, --paginate и --include-segments требуют asc 3.5.0 или новее. Если их нет в asc analytics view --help, скилл просит обновить CLI и не подменяет фильтр устаревшим --date. Создание нового запроса меняет состояние App Store Connect и требует профиля с правами Admin, поэтому скилл спрашивает явное подтверждение и советует --reuse-existing. Без подтверждения команда не запускается.
Скачанные файлы лежат в приватной временной папке с правами только для владельца, а downloadUrl не печатается. asc analytics download отказывается перезаписывать существующий файл, поэтому при несовпадении размеров или хеша скилл повторяет попытку по новому пути и проверяет её заново. Пока проверка не прошла, файл не парсят.
Какие задачи решает
- выгрузить все сегменты аналитического отчёта App Store Connect за один проход
- выбрать инстансы отчёта по дате обработки и гранулярности
- сверить скачанный сегмент с размером и MD5 из метаданных Apple
- найти уже существующий запрос отчёта вместо создания нового
- сохранить выгрузку в приватную папку, не попавшую в репозиторий
Примеры запросов агенту
- Скачай аналитический отчёт App Store Connect для приложения, гранулярность DAILY
- Проверь размер и MD5 каждого скачанного сегмента перед анализом
- Найди существующий запрос отчёта и покажи доступные processingDate
Как установить asc-analytics-reports
1Через Skills CLI (Vercel)
npx skills add rorkai/app-store-connect-cli-skills --skill asc-analytics-reports -a claude-code2Вручную: положить файлы
~/.claude/skills/asc-analytics-reports/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/asc-analytics-reports/
1Через Skills CLI (Vercel)
npx skills add rorkai/app-store-connect-cli-skills --skill asc-analytics-reports -a codex2Вручную: положить файлы
.agents/skills/asc-analytics-reports/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add rorkai/app-store-connect-cli-skills --skill asc-analytics-reports -a cursor2Вручную: положить файлы
.cursor/skills/asc-analytics-reports/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install rorkai/app-store-connect-cli-skills asc-analytics-reports2Вручную: положить файлы
.github/skills/asc-analytics-reports/SKILL.md1Через Skills CLI (Vercel)
npx skills add rorkai/app-store-connect-cli-skills --skill asc-analytics-reports -a gemini-cli2Командой платформы
gemini skills install https://github.com/rorkai/app-store-connect-cli-skills --path skills/asc-analytics-reportsВручную: положить файлы
.devin/skills/asc-analytics-reports/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add rorkai/app-store-connect-cli-skills --skill asc-analytics-reports -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о asc-analytics-reports
Как установить asc-analytics-reports в Claude?
Выполните npx skills add rorkai/app-store-connect-cli-skills --skill asc-analytics-reports -a claude-code. Скилл появится в ~/.claude/skills/asc-analytics-reports/SKILL.md.
Что делает asc-analytics-reports?
Собирает полный набор сегментов аналитических отчётов App Store Connect через CLI asc, скачивает их и проверяет по размеру и MD5. Разбор содержимого в скилл не входит.
Что нужно для работы скилла?
CLI asc версии 3.5.0 или новее с фильтрами --processing-date, --granularity, --paginate и --include-segments. Создание нового запроса отчёта требует профиля с правами Admin и подтверждения пользователя.
Исходный текст
SKILL.md · MIT
---
name: asc-analytics-reports
description: Collect, download, and verify App Store Connect Analytics reports with asc. Use when users need to discover analytics report requests, select report instances by processing date or granularity, download every segment, or verify downloaded files against Apple's size and MD5 metadata before analysis.
---
# asc analytics reports
Collect a complete set of analytics report segments and verify the compressed
files before handing them to a separate analysis workflow. Do not interpret,
aggregate, or present the report contents as part of this skill.
## Guardrails
- Treat report inventories, signed URLs, downloaded segments, and identifiers as
confidential business data.
- Prefer an existing request. Creating a request changes App Store Connect state
and requires an Admin-authorized profile; obtain explicit user approval before
running `asc analytics request`.
- Never delete or replace a request as part of collection.
- Use `asc analytics download`; do not fetch or persist signed segment URLs
separately.
- Store private files outside the source repository with owner-only permissions.
- Do not claim the collection is complete if any expected segment is missing or
fails verification.
## 1. Verify the CLI contract
Inspect the installed command before authentication or collection:
```bash
asc analytics view --help
```
Continue only when help lists `--processing-date`, `--granularity`,
`--paginate`, and `--include-segments`. These filters require asc 3.5.0 or
newer. If either filter is absent, ask the user to upgrade. Do not substitute
the deprecated `--date` flag because it uses legacy local matching rather than
Apple's server-side processing-date filter.
## 2. Prepare private storage
Create a private temporary directory outside the repository before capturing
JSON or downloading segments:
```bash
umask 077
ASC_ANALYTICS_DIR="$(mktemp -d "${TMPDIR:-/tmp}/asc-analytics.XXXXXX")"
mkdir -m 700 "$ASC_ANALYTICS_DIR/segments"
```
Redirect command output and errors into this directory. Do not paste raw
inventory JSON or error output into chat, commits, issues, or pull requests.
## 3. Find an existing request
Resolve the app ID and selected asc profile, then list every request:
```bash
asc --profile "$PROFILE" analytics requests \
--app "$APP_ID" \
--paginate \
--output json \
> "$ASC_ANALYTICS_DIR/requests.json" \
2> "$ASC_ANALYTICS_DIR/requests.stderr"
```
Inspect the JSON structurally and select an existing usable request. Do not rely
on `--state` when discovery works without it. If no usable request exists, stop
and ask whether the user wants to create `ONGOING` or `ONE_TIME_SNAPSHOT`
access. State the target app and profile before requesting approval. After
approval, prefer `--reuse-existing` to avoid duplicates:
```bash
asc --profile "$APPROVED_PROFILE" analytics request \
--app "$APP_ID" \
--access-type "$ACCESS_TYPE" \
--reuse-existing \
--output json \
> "$ASC_ANALYTICS_DIR/request.json" \
2> "$ASC_ANALYTICS_DIR/request.stderr"
```
Do not run that command without explicit approval. Read the returned request ID
from the private JSON response before continuing:
```bash
REQUEST_ID="$(jq -er '.requestId' "$ASC_ANALYTICS_DIR/request.json")"
```
When a request was created or reused with the approved profile, set
`ANALYTICS_PROFILE="$APPROVED_PROFILE"`. For an existing request discovered
with the read-only profile, set `ANALYTICS_PROFILE="$PROFILE"`. Use that same
profile for every subsequent `analytics view` and `analytics download` call.
## 4. Discover and select report instances
First retrieve report and instance metadata without segment URLs:
```bash
asc --profile "$ANALYTICS_PROFILE" analytics view \
--request-id "$REQUEST_ID" \
--paginate \
--output json \
> "$ASC_ANALYTICS_DIR/discovery.json" \
2> "$ASC_ANALYTICS_DIR/discovery.stderr"
```
Select an available `processingDate` and the granularity requested by the user.
Accept `DAILY`, `WEEKLY`, and `MONTHLY`, individually or as a comma-separated
list. Split the input on commas, trim each token, and normalize it to uppercase.
Validate every token against that allowlist, including empty tokens. Report the
invalid input and stop before running `analytics view`; never silently discard
unsupported values or continue with an empty filter. After validation, remove
duplicates and join the remaining values with commas.
Treat `processingDate` as the date Apple processed the report, not necessarily
the period represented by its rows.
Retrieve the filtered inventory, including all segment metadata:
```bash
asc --profile "$ANALYTICS_PROFILE" analytics view \
--request-id "$REQUEST_ID" \
--processing-date "$PROCESSING_DATE" \
--granularity "$GRANULARITY" \
--paginate \
--include-segments \
--output json \
> "$ASC_ANALYTICS_DIR/inventory.json" \
2> "$ASC_ANALYTICS_DIR/inventory.stderr"
```
Always use `--paginate`; asc follows Apple-provided report and instance next
links. Do not reconstruct, alter, or follow pagination URLs manually.
## 5. Download every segment
Parse `inventory.json` structurally. For every selected instance, enumerate all
segments and retain each segment's exact ID, `sizeInBytes`, and `checksum` for
verification. Do not print `downloadUrl`.
Download each segment by its request, instance, and segment IDs. Use a filename
derived only from the segment ID and keep the compressed bytes intact. Analytics
reports are tab-delimited text, so use `.txt.gz` rather than implying CSV:
```bash
SEGMENT_FILE="$ASC_ANALYTICS_DIR/segments/$SEGMENT_ID.txt.gz"
asc --profile "$ANALYTICS_PROFILE" analytics download \
--request-id "$REQUEST_ID" \
--instance-id "$INSTANCE_ID" \
--segment-id "$SEGMENT_ID" \
--output "$SEGMENT_FILE" \
> /dev/null \
2>> "$ASC_ANALYTICS_DIR/download.stderr"
```
Do not use `--decompress` before verification. If an instance has multiple
segments, download every one; never treat the first segment as the whole report.
## 6. Verify the downloaded files
For each file, compare the compressed byte count with `sizeInBytes` and the
lowercase MD5 digest with `checksum`. Use local system tools such as:
```bash
actual_size="$(wc -c < "$SEGMENT_FILE" | tr -d ' ')"
actual_md5="$(openssl dgst -md5 -r "$SEGMENT_FILE" | awk '{print tolower($1)}')"
expected_md5="$(printf '%s' "$CHECKSUM" | tr '[:upper:]' '[:lower:]')"
```
Require `actual_size` to equal `sizeInBytes` and `actual_md5` to equal
`expected_md5`. On a mismatch, mark that segment failed, keep the raw error
private, and do not claim a complete collection. `asc analytics download`
refuses to overwrite an existing output, so retry the failed segment once to a
new path such as `$ASC_ANALYTICS_DIR/segments/$SEGMENT_ID.retry-1.txt.gz`. Verify
the retry independently and use it only if both checks pass. Keep the original
failed file unless the user approves its deletion. Do not parse or analyze a
file until verification succeeds.
## 7. Report the result
Return a concise summary containing:
- the selected processing date and granularity values;
- counts of reports, instances, expected segments, downloaded segments, and
verified segments;
- whether the collection is complete;
- failed or missing segment IDs, if any, without signed URLs or report rows;
- the private output directory when appropriate for the current user session.
Do not include analytics values, signed URLs, profile names, credentials, or raw
rows in a public artifact. Keep the verified files for the user's next workflow.
Ask before deleting the temporary directory or any downloaded evidence.
© rorkai · MIT · rorkai/app-store-connect-cli-skills