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 loginconfigured with production token- Familiarity with
apify-core-workflow-aandapify-deploy-integration
Pre-Deployment Checklist
Actor Configuration
-
.actor/actor.jsonhas correctname,title,description -
INPUT_SCHEMA.jsonvalidates all required inputs -
Dockerfileuses pinned base image version (apify/actor-node:20, notlatest) -
package-lock.jsoncommitted (deterministic installs) - Memory set appropriately (start at 1024MB, tune after profiling)
- Timeout set with buffer (2x expected runtime)
Code Quality
-
Actor.main()wraps entry point (handles init/exit/errors) -
failedRequestHandlerlogs failures without crashing Actor - Input validation at Actor start (
if (!input?.startUrls) throw ...) - No hardcoded URLs, credentials, or magic numbers
- Proxy configured for target sites that block datacenter IPs
-
maxRequestsPerCrawlset to prevent runaway costs
Data Output
- Dataset schema documented (consistent field names)
-
SUMMARYkey-value store record saved with run stats - Large payloads chunked (9MB dataset push limit)
- PII sanitized before storage
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, thenapify builds lsto confirm the build, thenapify actors callwith 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). SetcronExpression,runInput, andrunOptions(memory/timeout). - Set Up Webhooks —
client.webhooks().create({...})onACTOR.RUN.SUCCEEDED/FAILED/TIMED_OUTwith apayloadTemplateposting 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 thePOST /v2/acts/ACTOR_ID?build=NAPI, or redeploy from a git tag. - Cost Guard —
runWithCostGuard(actorId, input, maxCostUsd)pollsusageTotalUsdevery 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 lsshows aSUCCEEDEDbuild). - 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
- Full deploy walkthrough (Steps 1–6)
- Worked examples
- Actor Deployment Guide
- Schedules Documentation
- Webhook Event Types
- Usage & Billing
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.