PPE (Pay Per Event)
Apify PPE (Pay Per Event) is a usage-based pricing model where the actor developer defines billable events and sets the price for each event. Instead of charging a flat subscription or rental fee, PPE lets developers monetize their actors based on actual value delivered — such as per result returned, per page scraped, per search performed, or per report generated. Common PPE price points range from $0.01-0.10 per result for simple data extraction, $0.02-0.05 per page for web scraping, and $0.10-1.00 per report for complex intelligence products. PPE matters because it aligns developer incentives with user outcomes. Users only pay for what they actually receive, which increases trust and adoption. Developers earn 80% of PPE revenue after Apify subtracts the platform compute costs from each run. This revenue share model means that a popular actor processing 100,000 events per month at $0.05 each generates $5,000 in gross revenue and $4,000 for the developer. PPE replaced the older rental pricing model (flat monthly fee for unlimited usage), which is being sunset in October 2026. All new monetized actors should use PPE pricing. To configure PPE pricing, navigate to your actor in the Apify Console, go to the Monetization tab, and define your event types with their prices. Each event type has a name (e.g., 'result-scraped'), a display name shown to users (e.g., 'Result scraped'), and a price in USD. In your actor code, charge events using Actor.charge({ eventName: 'result-scraped', count: results.length }). This call tells Apify to bill the user for the specified number of events at the configured price. You can also set PPE pricing via the Apify API: PUT /v2/acts/{actorId} with the pricingModel field set to your event definitions. Here is a code example as text: import { Actor } from 'apify'; Actor.main(async () => { const results = await scrapeProducts(input.url); await Actor.pushData(results); await Actor.charge({ eventName: 'product-scraped', count: results.length }); }); This charges the user for each product scraped after the data is safely pushed to the dataset. Common mistakes with PPE include charging before delivering results — always push data to the dataset first, then charge. If your actor crashes after charging but before pushing data, the user pays for nothing, gets a refund request, and your actor's reputation suffers. Another mistake is setting prices too high for commodity data: if 10 other actors scrape the same website at $0.02 per result, pricing yours at $0.10 will kill adoption. Research competitor pricing on the Apify Store before setting your prices. Also be aware that PPE pricing changes require a 14-day notice period and can only be modified once per month — you cannot experiment with prices rapidly, so do your research upfront. When deciding between PPE and free actors, consider your audience. Free actors with compute-only costs work well for open-source tools and developer utilities where you want maximum adoption. PPE actors work best for data products where each result has clear monetary value to the user — lead lists, price monitoring data, competitive intelligence, and enrichment services. PPE interacts with Compute Units: users pay both PPE charges (for the value delivered) and compute costs (for the infrastructure used). A well-optimized actor minimizes compute costs while maximizing PPE revenue — for example, using CheerioCrawler instead of PlaywrightCrawler when possible reduces compute costs by 5-10x without affecting PPE revenue. Monitor your PPE earnings in the Apify Console under the Earnings tab, which shows revenue per actor, per day, and per user. Related concepts: Compute Unit, Actor, Actor Run, Store Quality Score.