Apify Production Checklist
Overview
Complete checklist for deploying Actors to the Apify platform and integrating them into production applications. Covers Actor configuration, scheduling, monitoring, alerting, and rollback. Work top to bottom: clear the pre-deployment gates, then run the six deploy steps, then wire the alert conditions.
Prerequisites
- Actor tested locally with
apify run
apify login configured with production token
- Familiarity with
apify-core-workflow-a and apify-deploy-integration
Pre-Deployment Checklist
Actor Configuration
Code Quality
Data Output
Instructions
Read the Actor's .actor/actor.json, INPUT_SCHEMA.json, and Dockerfile first to confirm the pre-deployment gates above, then run the six deploy steps. Each step's full command and code block lives in references/implementation.md; the skeleton is below.
- Deploy Actor —
apify push, then apify builds ls to confirm the build, then apify actors call with a small production-like input to smoke-test on-platform.
- Configure Scheduling — create a cron schedule with
client.schedules().create({...}) (or Apify Console: Actors > Your Actor > Schedules). Set cronExpression, runInput, and runOptions (memory/timeout).
- Set Up Webhooks —
client.webhooks().create({...}) on ACTOR.RUN.SUCCEEDED/FAILED/TIMED_OUT with a payloadTemplate posting runId, status, and datasetId to your server.
- Monitor Runs — a
checkActorHealth(actorId, lookbackHours) helper lists recent runs and reports success rate, failures, timeouts, and total cost.
- Implement Rollback —
apify builds ls, then repoint the Actor at a prior build via the POST /v2/acts/ACTOR_ID?build=N API, or redeploy from a git tag.
- Cost Guard —
runWithCostGuard(actorId, input, maxCostUsd) polls usageTotalUsd every 30s and aborts the run if it exceeds budget.
The first deploy step in full:
# Build and push to Apify platform
apify push
# Verify the build succeeded
apify builds ls
Output
Working through this skill produces a production-ready Actor with:
- A pushed, verified build (
apify builds ls shows a SUCCEEDED build).
- A live cron schedule and a completion webhook firing on success/failure/timeout.
- A repeatable health check printing success rate, failure/timeout counts, and 24h cost.
- A tested rollback path (build repoint or git-tag redeploy).
- A cost guard that aborts runs exceeding budget.
Health-check output looks like:
Actor: username/product-scraper
Last 24h: 3 runs, 66.7% success
Failed: 1, Timed out: 0
Total cost: $0.4213
Production Alert Conditions
| Alert | Condition | Severity |
|---|
| Run failed | status === 'FAILED' | P1 |
| Run timed out | status === 'TIMED-OUT' | P2 |
| Low yield | Dataset items < expected threshold | P2 |
| High cost | usageTotalUsd > budget | P2 |
| Consecutive failures | 3+ failures in a row | P1 |
| No runs in window | Schedule didn't trigger | P1 |
Error Handling
| Issue | Cause | Solution |
|---|
| Build fails on platform | Local deps differ | Commit package-lock.json |
| Schedule not firing | Cron syntax error | Validate at crontab.guru |
| Webhook not received | URL not reachable | Use ngrok for testing; check HTTPS |
| Memory exceeded | Workload too large | Increase memory or reduce concurrency |
| Unexpected cost spike | No maxRequestsPerCrawl | Always set an upper bound |
Examples
Four worked examples — a first production deploy, health-check output, a cost guard aborting a runaway run, and a build rollback — are in references/examples.md. A first production deploy in brief:
# Smoke-test on-platform with a tiny input before scheduling
apify actors call username/product-scraper \
--input='{"startUrls":[{"url":"https://target.com"}],"maxItems":10}'
Then create the daily schedule and completion webhook (implementation.md Steps 2–3).
Resources
Next Steps
Once production is stable, plan version upgrades with the apify-upgrade-migration skill: it covers bumping the Actor base image, migrating INPUT_SCHEMA.json fields without breaking existing schedules, and re-running this checklist against the new build before repointing traffic.