Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Collect Apify debug evidence for support tickets and troubleshooting. Use when an Actor run has failed, is stuck, or produced empty output and you need to gather run metadata, logs, dataset samples, and environment info before opening a support ticket. Trigger with "apify debug", "apify support bundle", "collect apify logs", "apify diagnostic", "apify run failed why".
.claude/skills/jeremylongshore-apify-debug-bundle/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 414% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 158% | 0% |
Collect all diagnostic information needed to troubleshoot failed Actor runs and prepare Apify support tickets. Pulls run metadata, logs, dataset samples, and environment info into a single bundle so a support engineer (or you) can diagnose the failure without live access to your account.
apify-client installedAPIFY_TOKEN configuredAll API calls authenticate with the APIFY_TOKEN as a Bearer header (Authorization: Bearer $APIFY_TOKEN), and the SDK reads the same token from process.env.APIFY_TOKEN. Get the token from the Apify Console under Settings → Integrations → Personal API tokens. Never commit it — the bundle script redacts any local .env before packaging, and the platform auto-redacts secrets inside run logs.
The workflow has four steps. The skeleton below is enough to run it; each step's full implementation lives in implementation.md.
tail via the SDK. The core call:
typescript const client = new ApifyClient({ token: process.env.APIFY_TOKEN }); const run = await client.run(runId).get(); const log = await client.run(runId).log().get();
apify-debug-bundle.sh <RUN_ID>. Itcollects environment info, run details, log, a 5-item dataset sample, key-value store keys, a redacted .env, and platform health, then packages everything into a timestamped .tar.gz. Full script in implementation.md.
field-by-field to spot the delta (compareRuns(successId, failId)).
not yet available.
For copy-pasteable code for every step, see implementation.md.
A single timestamped tarball, apify-debug-YYYYMMDD-HHMMSS.tar.gz, containing:
| File | Contents | |------|----------| | environment.txt | Node/npm versions, installed Apify packages, CLI version | | run-details.json | Run status, options, stats, usage, cost | | run-log.txt | Full run log (secrets auto-redacted by the platform) | | dataset-sample.json | First 5 dataset items | | kv-store-keys.json | Key-value store key listing | | env-redacted.txt | Local .env with all values redacted | | platform-health.json | Apify platform health snapshot |
Attach the tarball directly to an Apify support ticket.
Always redact before sharing:
apify_api_*)Safe to include:
| Issue | Cause | Solution | |-------|-------|----------| | Run not found | Invalid run ID or expired | Unnamed runs expire after 7 days | | Log unavailable | Run still in progress | Wait for completion or stream live | | Empty dataset | Actor produced no output | Check failedRequestHandler in code | | High CU usage | Memory too high or slow execution | Reduce memory, optimize code |
Four worked scenarios — a plain FAILED run, an "it worked yesterday" regression diff, an empty-dataset investigation, and live-tailing a hung run — are in examples.md. The quickest path:
bashexport APIFY_TOKEN="apify_api_..." ./apify-debug-bundle.sh abc123DEF # → apify-debug-20260717-142530.tar.gz tar -xzf apify-debug-*.tar.gz && tail -40 apify-debug-*/run-log.txt
See examples.md for the full walkthroughs, including reading the comparison output and interpreting a live tail.
For rate limit issues, see the apify-rate-limits skill.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 14,116 | 10,390 | -26% | 1 | 1 | 0% | 3,109 | 3,698 | +19% | 0 | 0 | — |
case-02 | fail→pass | 3,569 | 12,073 | +238% | 1 | 1 | 0% | 694 | 3,569 | +414% | 0 | 0 | — |
case-03 | fail→fail | 13,225 | 12,882 | -3% | 1 | 1 | 0% | 2,877 | 4,043 | +41% | 0 | 0 | — |
case-04 | fail→pass | 11,299 | 2,705 | -76% | 1 | 1 | 0% | 2,105 | 1,712 | -19% | 0 | 0 | — |
case-05 | fail→pass | 18,128 | 1,535 | -92% | 1 | 1 | 0% | 1,558 | 1,552 | -0% | 0 | 0 | — |
case-06 | fail→pass | 3,717 | 1,390 | -63% | 1 | 1 | 0% | 592 | 1,529 | +158% | 0 | 0 | — |
case-07 | fail→pass | 5,147 | 1,206 | -77% | 1 | 1 | 0% | 900 | 1,427 | +59% | 0 | 0 | — |
case-08 | fail→pass | 20,464 | 1,383 | -93% | 1 | 1 | 0% | 1,874 | 1,443 | -23% | 0 | 0 | — |
case-09 | fail→pass | 9,059 | 2,158 | -76% | 1 | 1 | 0% | 1,912 | 1,615 | -16% | 0 | 0 | — |
case-10 | pass→pass | 8,368 | 1,436 | -83% | 1 | 1 | 0% | 1,448 | 1,512 | +4% | 0 | 0 | — |
case-11 | pass→pass | 10,572 | 5,038 | -52% | 1 | 1 | 0% | 1,917 | 2,176 | +14% | 0 | 0 | — |
case-12 | pass→pass | 10,230 | 6,580 | -36% | 1 | 1 | 0% | 1,802 | 2,391 | +33% | 0 | 0 | — |
case-13 | pass→pass | 6,274 | 3,672 | -41% | 1 | 1 | 0% | 1,160 | 1,796 | +55% | 0 | 0 | — |
case-14 | fail→pass | 6,794 | 3,571 | -47% | 1 | 1 | 0% | 1,234 | 1,816 | +47% | 0 | 0 | — |
case-15 | pass→pass | 5,738 | 3,196 | -44% | 1 | 1 | 0% | 982 | 1,793 | +83% | 0 | 0 | — |
case-16 | fail→pass | 6,725 | 4,152 | -38% | 1 | 1 | 0% | 1,565 | 2,272 | +45% | 0 | 0 | — |
case-17 | pass→pass | 13,899 | 1,621 | -88% | 1 | 1 | 0% | 2,569 | 1,518 | -41% | 0 | 0 | — |
case-18 | fail→pass | 10,321 | 4,829 | -53% | 1 | 1 | 0% | 1,843 | 2,077 | +13% | 0 | 0 | — |
case-19 | pass→pass | 2,675 | 1,788 | -33% | 1 | 1 | 0% | 474 | 1,532 | +223% | 0 | 0 | — |
case-20 | pass→pass | 6,623 | 6,311 | -5% | 1 | 1 | 0% | 1,410 | 2,566 | +82% | 0 | 0 | — |
case-21 | pass→pass | 8,202 | 8,422 | +3% | 1 | 1 | 0% | 1,821 | 3,056 | +68% | 0 | 0 | — |
case-22 | pass→pass | 8,904 | 7,413 | -17% | 1 | 1 | 0% | 1,745 | 2,699 | +55% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.