Understanding PPE Pricing
How Pay Per Event works, how to set prices that attract users while covering costs, and common pricing mistakes that leave money on the table.
Pay Per Event (PPE) is Apify's monetization model for actors on the Store. Instead of charging a flat subscription, users pay per event. An "event" is whatever you define it to be: one search result, one page scraped, one API call processed, one report generated. You set the price per event, and Apify handles billing. The platform takes a 20% commission on PPE revenue, so you keep 80% of every dollar your actor earns. Understanding this model — the math, the pitfalls, and the strategy — is the difference between actors that earn pocket change and actors that generate real income.
How the 80/20 split works
When a user runs your actor and it charges 100 events at $0.01 each, that is $1.00 total. Apify keeps $0.20 (20%) and you receive $0.80 (80%). This split applies to all PPE revenue regardless of volume. There are no tiers, no minimum payouts, and no hidden fees. Revenue appears in your Apify account dashboard within 24 hours of the run completing.
Here is the math for common price points:
| Price per event | Events per run | Revenue per run | Your share (80%) | Apify share (20%) | |----------------|----------------|-----------------|-------------------|--------------------| | $0.001 | 1,000 | $1.00 | $0.80 | $0.20 | | $0.005 | 500 | $2.50 | $2.00 | $0.50 | | $0.01 | 200 | $2.00 | $1.60 | $0.40 | | $0.05 | 100 | $5.00 | $4.00 | $1.00 | | $0.50 | 10 | $5.00 | $4.00 | $1.00 |
Notice that a higher price per event with fewer events can generate the same or more revenue as a low price with high volume. The right price depends on the value your actor provides, not the compute it consumes.
Setting your price in actor.json
Pricing is configured in your actor's .actor/actor.json file under the pricingModel field. You define the pricePerEvent in USD, an eventTitle (singular noun), and an eventDescription that explains what one event represents.
{
"pricingModel": {
"pricingType": "PAY_PER_EVENT",
"pricePerEvent": 0.005,
"eventTitle": "result",
"eventDescription": "One scraped product result including title, price, and availability"
}
}**Important:** The eventTitle appears in the user's billing dashboard as "X results" or "X pages". Choose a noun that users immediately understand. "result", "page", "profile", "report", and "query" are all clear. "unit" and "credit" are vague and confuse users.
Charging events in your code
Setting the price in actor.json only defines the rate. You must explicitly charge events in your code using Actor.addChargeForEvent(). If you never call this method, users pay nothing regardless of what the pricing model says.
import { Actor } from 'apify';
Actor.main(async () => {
const input = await Actor.getInput();
const results = await scrapeProducts(input.keyword);
// Push all data first, then charge — never charge before delivering
await Actor.pushData(results);
// Charge one event per result
await Actor.addChargeForEvent({
eventName: 'result',
count: results.length,
});
console.log('Charged for ' + results.length + ' results');
});You can also charge incrementally as you process items, which is useful for long-running actors where you want users to see charges accumulate in real time:
// Incremental charging: push and charge one at a time
for (const result of results) {
await Actor.pushData(result);
await Actor.addChargeForEvent({
eventName: 'result',
count: 1,
});
}**Common pitfall:** Never charge events before delivering the data. If your actor charges 100 events but then crashes before pushing the results, the user has paid for nothing. Always push data first, then charge. If you must charge incrementally, pair each charge with the corresponding data push.
The 14-day notice period
Apify enforces a 14-day notice period for price increases to protect users. If you raise your price per event, the new price does not take effect for 14 days. Users see a notification that the price will change. Price decreases take effect immediately.
This has a critical strategic implication: do not launch with a low introductory price intending to raise it later. The 14-day window gives users two full weeks to find alternatives, migrate their workflows, and leave reviews complaining about the increase. Plan your pricing strategy upfront rather than iterating in production.
**Real-world tip from managing 250+ actors:** The 14-day rule also applies to metadata-only pushes. If you run apify push with a higher pricePerEvent in actor.json, the notice period starts immediately. Even if you push the old price back within minutes, the notice has already been sent to active users. Always double-check your actor.json pricing before pushing.
Pricing strategy by actor type
Different types of actors warrant different pricing approaches:
**Data extraction actors** (scrapers): Price per result returned. Typical range: $0.001 to $0.01 per result. Users expect high volume at low unit cost. Example: a LinkedIn profile scraper at $0.003 per profile. At 1,000 profiles per run, the user pays $3.00 and you earn $2.40.
**Intelligence/analytics actors**: Price per report or analysis. Typical range: $0.05 to $0.50 per report. Users are paying for processed insights, not raw data. Example: a competitor analysis actor at $0.25 per company analyzed.
**MCP server actors**: Price per tool call. Typical range: $0.005 to $0.05 per call. MCP servers bundle multiple tools, and each invocation is a billable event. See the Monetization guide (/learn/monetization) for MCP bundling strategies.
**Utility actors** (converters, formatters): Price per file or per operation. Typical range: $0.001 to $0.01 per item. Keep costs very low because alternatives exist for most utility tasks.
Competitive pricing analysis
Before setting your price, check competing actors on the Apify Store. Search for your target keywords and note the PPE pricing of the top 5 results. You do not need to be the cheapest — but you need to justify any premium with better output quality, more features, or higher reliability. The ApifyForge Tools section provides a competitive analysis view that compares your pricing against similar actors in your category.
Common pricing mistakes and how to avoid them
**Mistake 1: Pricing too low.** Developers set $0.001 per event thinking it will attract users. At that rate, even 10,000 events per day only generates $8.00 in revenue. Worse, an extremely low price signals low value. Users associate low price with low quality.
**Mistake 2: Vague event definitions.** If your event description says "one run" but each run processes variable amounts of data, users cannot predict costs and will avoid your actor. Be specific: "one search result returned" or "one URL processed" sets clear expectations.
**Mistake 3: Not charging events.** You define PPE pricing in actor.json but forget to call Actor.addChargeForEvent() in your code. The actor runs for free, you earn nothing, and you do not notice for weeks because there are no errors.
**Mistake 4: Charging on failure.** Your actor charges an event, then hits an error for that item. Now the user paid for a failed result. Always validate that a result is complete and correct before charging.
**Mistake 5: Ignoring compute costs.** PPE revenue must exceed your compute costs. If your actor uses 1 GB of RAM for 5 minutes to process 100 results at $0.001 each, you earn $0.08 but the compute cost is approximately $0.05. That is a 37.5% margin — workable but tight. Track compute costs and factor them into your pricing. The ApifyForge dashboard shows revenue-to-compute ratios for all your actors.
Updating prices with the Apify API
You can update pricing programmatically using the Apify API, which is useful for bulk price adjustments across a portfolio. Remember the 14-day rule applies to all price increases, regardless of whether they are made via UI or API.
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
// Update pricing for an actor
await client.actor('your-actor-id').update({
pricingModel: {
pricingType: 'PAY_PER_EVENT',
pricePerEvent: 0.008,
eventTitle: 'result',
eventDescription: 'One scraped product result with full details',
},
});Monitoring your PPE revenue
Track revenue daily, not monthly. A sudden drop in revenue could mean a competing actor launched, your actor has a bug reducing output volume, or a major user churned. The Apify Console shows per-actor revenue, but for portfolio-level tracking across 10+ actors, use the ApifyForge dashboard to see aggregated trends, per-actor breakdowns, and revenue-per-compute ratios. The Glossary section defines all pricing terms if you encounter unfamiliar terminology.
Related guides
Getting Started with Apify Actors
A complete walkthrough from zero to your first deployed actor. Covers project structure, Actor.main(), input schema, Dockerfile, and your first Apify Store listing.
How to Monetize Your Actors
Revenue strategies beyond basic PPE. Tiered pricing, free-tier funnels, bundling actors into MCP servers, and tracking revenue with ApifyForge analytics.
Actor Testing Best Practices
Use the ApifyForge test runner and regression suite to validate actors before every deploy. Define test cases, set assertions, and integrate with CI/CD.
Store SEO Optimization
How Apify Store search works, what metadata matters, and how to write READMEs that rank. Includes the quality score breakdown and how ApifyForge tracks it.
Managing Multiple Actors
Fleet management strategies for 10, 50, or 200+ actors. Bulk operations, shared configs, maintenance monitoring, and the ApifyForge dashboard workflow.
Cost Planning Tools: Calculator, Plan Advisor & Proxy Analyzer
How to use ApifyForge's cost planning tools to estimate actor run costs, choose the right Apify subscription plan, and pick the most cost-effective proxy type for each scraper.
AI Agent Tools: MCP Debugger, Pipeline Builder & LLM Optimizer
How to use ApifyForge's AI agent tools to debug MCP server connections, design multi-actor pipelines, optimize actor output for LLM token efficiency, and generate integration templates.
Schema Tools: Diff, Registry & Input Tester
How to use ApifyForge's schema tools to compare actor output schemas, browse the field registry, and test actor inputs before running — preventing wasted credits and broken pipelines.
Compliance Scanner, Actor Recommender & Comparisons
How to use ApifyForge's compliance risk scanner to assess legal exposure, the actor recommender to find the best tool for your task, and head-to-head comparisons to evaluate competing actors.
The ApifyForge Testing Suite
Five cloud-powered testing tools for Apify actors: Schema Validator, Test Runner, Cloud Staging, Regression Suite, and MCP Debugger. How they work together and when to use each one.
The Complete ApifyForge Tool Suite
All 14 developer tools in one guide: testing, schema analysis, cost planning, compliance scanning, LLM optimization, and pipeline building. What each tool does, when to use it, and how they work together.