Reliable web scraping with Apify actors
Most scraping projects do not fail on the parsing. They fail on the economics — a job that costs pennies at 100 rows and becomes unaffordable at 100,000, or one that re-collects and re-bills the same unchanged data every morning.
What an actor actually is
On Apify, an actor is a containerised program with a defined input schema and a dataset output. In practice that means three things worth knowing before you pick one:
- It has a contract. The input schema documents exactly what it accepts; the dataset schema documents the fields you get back. You can read both before running anything.
- It runs on someone else's infrastructure, with proxy rotation and retry handling already solved — which is most of the work in practice.
- It is callable from anywhere — API, scheduler, or an integration node in n8n, Make or Zapier.
Pay per result, not per compute
Two pricing models dominate, and the difference matters more than the per-unit rate:
| Pay per compute unit | Pay per result | |
|---|---|---|
| You are billed for | Runtime and memory | Rows actually returned |
| A failed run costs | Full price | Nothing |
| A slow target site costs | More | The same |
| Cost is predictable | Only after testing | Before you start |
For anything you intend to run on a schedule, pay-per-result is the safer default: it makes the bill a function of the value delivered rather than a function of how badly the target site is performing today. Pair it with a hard spend cap so a pathological input cannot produce a pathological invoice.
Delta monitoring: pay once per row
The single largest saving in recurring collection is not scraping faster — it is not re-paying for rows you already have. A monitoring job that checks a hashtag, a job board or a review page every day will find that 90–98% of what it sees is identical to yesterday.
Delta monitoring keeps a fingerprint of what was returned previously and emits only what changed. The practical effect on a daily job:
naive daily run: 1,000 rows × 30 days = 30,000 billed rows
delta monitoring: 1,000 rows day 1
+ ~50 new rows × 29 days ≈ 2,450 billed rows
Same coverage, roughly a twelfth of the cost. When evaluating any recurring scraper, this is the first capability to check for.
Staying on the right side of the rules
Public-data collection is legitimate and widely used, but the boundaries are real. A defensible setup follows a few consistent principles:
- Public pages only. Nothing behind a login, a paywall or an access control you had to defeat.
- Respect the site's stated rules — robots directives, rate limits and terms. Slower and allowed beats faster and blocked.
- Collect what you need, not everything. Narrow field selection reduces both legal exposure and storage cost.
- Treat personal data carefully. Names and contact details carry obligations under GDPR, PIPEDA and similar regimes regardless of whether the page was public. Have a lawful basis, and honour deletion requests.
- Do not degrade the source. Rate limiting is not just politeness; hammering a site is what turns a tolerated activity into a blocked one.
This is general information, not legal advice. If your collection touches personal data or a jurisdiction with specific rules, get it reviewed by someone qualified before you scale it.
Wiring output into your stack
A dataset that nobody reads is a cost centre. Three integration patterns cover almost every use case:
- Scheduled run → webhook → automation tool. The actor runs on a schedule and pushes finished datasets into n8n or Make, where you filter, enrich and route. Best for alerting and CRM enrichment.
- API pull into a warehouse. Your own job calls the dataset endpoint and loads into Postgres or BigQuery. Best when you need history and joins.
- Direct export to a sheet. Unglamorous and often correct for one-off research; do not build a pipeline for a question you will ask once.
Judging a scraper before you rely on it
Store listings all claim reliability. These signals are harder to fake:
- Run success rate published on the actor or the author's profile. Below ~95% on a recurring job means you will be debugging it.
- A documented output schema rather than "returns JSON".
- A free tier or free first results — an author confident in the output lets you verify it before paying.
- Recent updates. Target sites change their markup; a scraper untouched for a year is a scraper that will break.
- Explicit failure behaviour. What happens on a blocked page — silent gap, or a flagged row? Silent gaps are how bad data enters your warehouse.