Guides

Apify guides

Build your first JavaScript actor

JS

Scaffold, code, run, and deploy in one sitting

A beginner-friendly walkthrough that takes you from `apify create` to a deployed JavaScript actor that scrapes page titles. No Crawlee, no Puppeteer — just the Apify SDK and built-in fetch.

Read guide

Build your first Python actor

Python

Scaffold, code, run, and deploy in one sitting

A beginner-friendly walkthrough that takes you from `apify create` to a deployed Python actor that scrapes page titles. Uses the Apify Python SDK and httpx — nothing else.

Read guide

Use Apify Proxy without getting blocked

JSPython

Session pools, country targeting, retry-on-block

The four knobs that actually matter — datacenter vs residential, country targeting, session pools, and retry-on-block — plus drop-in JS and Python helpers for Crawlee and raw fetch.

Read guide

Cache expensive scrapes across runs

JSPython

Don't re-scrape what you scraped yesterday

A KV-store cache helper that turns 10k unchanged product pages into 1k. Includes TTL strategies, cache busting via a version constant, and the gotchas around per-actor scope and value size.

Read guide

Schedule your actor (without burning credits)

JSPython

Cron + a cursor pattern that prevents rework

Apify Schedules plus a KV-store cursor so a daily 6am job doesn't re-scrape yesterday's data. Covers UTC gotchas, overlapping runs, and how to keep state consistent across failures.

Read guide

Chain Apify actors

JSPython

Actor.call() vs Actor.start(), and reading the dataset

Call one actor from another — synchronously with `Actor.call()`, fire-and-forget with `Actor.start()`. Orchestrator patterns, dataset reading, cost compounding, and how to avoid infinite loops.

Read guide

Send run results to a webhook

JSPython

Deliver datasets to Slack, Sheets, S3, your own server

Configure Apify webhooks via the Console or `.actor/actor.json`, verify the request without HMAC, pull the dataset by id, and stay idempotent on retries. JS (Express) and Python (FastAPI) receivers.

Read guide

Write a high-converting Store listing

JSPython

Title formula, README skeleton, screenshots, pricing

Most actors ship with 2-star listings. The title formula that ranks, the README skeleton buyers actually read, the three screenshots that sell, and the pricing presentation that prevents chargebacks.

Read guide

Add free-tier limits to your actor

JSPython

Cap results, runs/day, and add a cooldown

Push free users to upgrade without breaking your actor. A drop-in helper that limits results per run, daily runs, and enforces a cooldown — with paid users bypassed via APIFY_USER_IS_PAYING.

Read guide

How to tell if a user is paying

JSPython

Detect paid plans with APIFY_USER_IS_PAYING

The env var Apify injects on every run to tell you whether the user is on a paid plan — plus a reusable tier helper, gating patterns, watermarking, and the gotchas worth knowing.

Read guide

Got an Apify question you wish was a guide? Email support@mail.apifyhub.com — we read every request.