Originally published on the Devil Scrapes blog.
Quick answer: Pay per result web scraping means you're billed for what actually lands in your dataset, not for the compute time a run consumed or a flat monthly fee regardless of usage. On Apify, that's Pay-Per-Event: a small actor-start fee charged once per run, then a per-result price — typically $1 to $5 per 1,000 rows — charged only for the rows that were actually written. A run that finds nothing costs only the start fee.
Two charges, and only two
Every Actor we publish bills exactly two kinds of event:
-
actor-start— a fixed fee, charged once when the run begins, regardless of how much data it finds. It covers the warm-up cost: spinning up the run, resolving a proxy, establishing the first session. - A per-result event — charged once for each row that's validated and written to the dataset. Nothing charged for rows that were requested but never landed — a blocked page, an empty search, a target with no matching data.
That second point is the one buyers underrate. If you run a scraper against a query that returns nothing — a product that's out of stock, a search term with zero hits, a page the target took down — you are not billed as if the run failed on your end. You pay the start fee and nothing else, because nothing else happened.
Three real price points
Pricing varies by target, because the engineering cost varies by target — a static RSS feed and a JavaScript-heavy conversation graph are not the same amount of work to keep working. Here's what that looks like in practice, using our own published prices:
| Actor | Start fee | Per-result price | 1,000 results | 10,000 results |
|---|---|---|---|---|
| RSS Feed Scraper | $0.005 | $1.00 / 1,000 | $1.01 | $10.01 |
| Google Ads Transparency Scraper | $0.20 | $3.00 / 1,000 | $3.20 | $30.20 |
| Threads Reply Scraper | $0.20 | $5.00 / 1,000 | $5.20 | $50.20 |
Three things worth noticing in that table. First, the start fee itself varies: a feed parser that runs on a schedule against a lightweight, static format costs almost nothing to warm up, while a target that requires session handling and fingerprint rotation carries a heavier fixed cost per run. Second, the per-result price tracks how much reliability engineering the target demands — a conversation-graph scrape that has to hold a session across a nested reply tree costs more per row than parsing a well-formed feed. Third, and most importantly: at zero results, every row in that table collapses to just the start fee. A misconfigured input or a target with nothing new to return costs cents, not dollars.
What an empty run actually costs
Take the RSS Feed Scraper on a daily schedule watching for new posts. Most days, nothing new has been published — zero new items, zero per-result charges, just the $0.005 start fee. Only on the days something actually publishes does the per-result charge kick in. Contrast that with a model that bills for compute time regardless of output: a scheduled run that finds nothing still burns the same runtime cost as one that finds fifty items, because the meter is measuring seconds, not results.
How to cap spend before it happens
Pay-per-event pricing doesn't remove the need to set a ceiling — it just moves the ceiling to a place you control directly:
-
Use the Actor's own result-limit input. Most of our Actors expose a
maxResults(or equivalent) field — set it and the run stops pulling once it hits that number, capping the per-result charge at a known maximum before the run even starts. - Set Apify's account-level usage limits. Apify Console lets you cap total monthly spend across all Actors, which stops runs platform-wide once you hit it — a backstop independent of any single Actor's input.
- Start small and scale the input, not the trust. Run a capped test — a few dozen results — to confirm the output shape and rate before pointing the same Actor at a 10,000-row pull.
How this compares to the alternatives
Two other pricing models exist on scraping platforms, and neither is wrong — they're just measuring something different:
- Compute-unit pricing bills for the CPU and memory time a run consumes, independent of what it finds. It rewards efficient code and can be cheaper for very high-volume, low-per-item-cost targets, but it means a run that finds nothing still costs whatever compute it burned trying.
- Flat subscription pricing bills a fixed monthly rate regardless of usage. It's predictable and can be cheaper at very high, steady volume, but it means you're paying the same in a month you barely use it as in a month you lean on it hard.
Pay-per-result sits between the two: you're not billed for idle compute, and you're not paying a flat rate for a month you didn't use — you're billed for what showed up in your dataset, which is usually the number a buyer actually cares about.
Run it on Apify:
FAQ
What happens if my scraper run finds zero results?
You pay only the actor-start fee — typically a few cents to $0.20 depending on the Actor — and nothing else. The per-result charge only applies to rows that were actually validated and written to the dataset.
Is pay-per-result cheaper than a flat monthly subscription?
It depends on your usage pattern. For sporadic or variable-volume use, pay-per-result usually costs less because you're never paying for a month you didn't use. For very high, steady, predictable volume, a flat rate can work out cheaper — the two models are optimized for different usage shapes.
Why do different Actors charge different per-result prices?
The price reflects the ongoing engineering cost of keeping that specific target working — session handling, proxy rotation, and reliability engineering vary a lot by target, and the price tracks that, not an arbitrary markup.
Can I set a hard spending cap before running a scraper?
Yes, two ways: most Actors expose a result-limit input (like maxResults) that caps the run's own output, and Apify Console lets you set an account-wide monthly usage limit as a platform-level backstop.
Does the actor-start fee apply every time I run an Actor?
Yes — it's charged once per run, regardless of how many results come back, because it covers the fixed cost of starting the run itself: spinning up the container, resolving a proxy, establishing the first session.
Devil Scrapes builds and maintains 200+ pay-per-result web scrapers on the Apify Store. Blocks, retries and proxies handled by us. Browse the full catalog or commission a custom Actor.
Actors mentioned in this post:
Top comments (0)