pricingmonetizationapify-storeppe

How to Price Your Apify Actor for Maximum Revenue

Most Apify developers leave money on the table with their pricing. Here's how Pay Per Event works, what the pricing tiers look like, and how to think about setting your price.

ApifyForge Team

How to Price Your Apify Actor for Maximum Revenue

You have built an actor, pushed it to the Apify Store, and maybe even picked up a few users. But you are not making any money from it. Sound familiar?

The problem is not your actor — it is your pricing. Most developers on Apify either leave their actors completely free or set a price without much thought. Both approaches leave revenue on the table.

We manage over 250 actors on the Apify Store and have experimented extensively with pricing across different categories, use cases, and audience segments. This guide covers everything we have learned about the Pay Per Event (PPE) pricing model, how to think about what to charge, and the mistakes that cost developers the most revenue.

What is Pay Per Event?

Apify's PPE model charges users for specific events that happen during a run. You define the events, set a price for each one, and Apify handles billing.

The key thing to understand: users already pay Apify for compute (memory, CPU time) on every run. Your PPE price is on top of that. You are charging for the value your actor provides, not the infrastructure it runs on.

When a user runs your actor, they see two costs:

  • Platform usage — what Apify charges for compute (you do not control this)
  • Actor events — what you charge per result/action (this is your revenue)

Apify takes a cut of your event revenue and pays you the rest monthly. The revenue split is currently 80/20 in your favor — you keep 80% of every PPE charge.

How Events Work

An event is anything meaningful that happens during a run. You define them in your actor's pricing configuration. Common event types include:

  • Per result — charge for each item scraped, lead enriched, or record returned
  • Per domain/URL — charge for each website or domain processed
  • Per report — charge once for a composite analysis or report
  • Per action — charge for each API call made on the user's behalf

You can have multiple event types on a single actor. For example, an actor might have a cheap "search" event and a more expensive "deep analysis" event.

The Actor Start Event

There is a special apify-actor-start event that fires once per run. Most developers set this to a tiny amount (fractions of a cent) or zero. It exists mainly to cover the overhead of spinning up a run that produces no results.

We recommend setting this to $0.005-$0.01 for most actors. It discourages users from running your actor hundreds of times with bad inputs (which costs you compute even though no events fire), and it adds up over thousands of runs.

Implementing Events in Code

In your actor code, you charge events using Actor.charge():

import { Actor, log } from 'apify';

await Actor.main(async () => {
    const input = await Actor.getInput();
    const results = await scrapeWebsite(input.url);

    if (results.length > 0) {
        // Push results to dataset
        await Actor.pushData(results);

        // Charge for results — eventName must match your pricing config
        await Actor.charge({
            eventName: 'result-scraped',
            count: results.length
        });
        log.info(`Charged for ${results.length} results`);
    } else {
        log.warning('No results found — no charge applied');
    }
});

The eventName must match what you defined in your pricing configuration. The count parameter lets you charge for multiple events at once — useful when your actor produces batches of results.

Important: Only charge after you have delivered value. If your actor crashes before pushing results, the user should not be charged. Place your Actor.charge() call after Actor.pushData(), not before.

Multiple Event Types on One Actor

For actors that do multiple things, define separate events at different price points:

// Search is cheap — users might search hundreds of times
await Actor.charge({ eventName: 'search-performed', count: 1 });

// Deep analysis is expensive — involves multiple API calls and processing
const analysis = await performDeepAnalysis(target);
await Actor.pushData([analysis]);
await Actor.charge({ eventName: 'deep-analysis', count: 1 });

This pattern lets users pay less for lighter usage and more for premium features. It also gives you better insight into which features drive the most revenue.

Choosing Your Price Point

This is where most developers get stuck. Here is a framework we use across our 250+ actor portfolio.

Step 1: What is the User Getting?

A lead enrichment tool that returns verified emails, phone numbers, and social profiles is worth more than a simple text scraper. Price based on the value of the output, not the complexity of your code.

Ask yourself: if someone had to do this manually, how long would it take them? An hour of a sales rep's time is worth $30-50. If your actor replaces 10 minutes of that work per result, $0.10-0.25 per result is reasonable.

Here are real examples from our portfolio:

| Actor Type | Manual Time Saved | Price Per Result | Monthly Revenue | |---|---|---|---| | Email finder | 3-5 min/lead | $0.05-0.10 | $150-400 | | Contact scraper | 10-15 min/site | $0.10-0.20 | $200-600 | | Company enrichment | 20-30 min/company | $0.15-0.30 | $300-800 | | Competitive analysis | 1-2 hours/report | $0.50-1.00 | $100-500 |

Step 2: What Does the Market Charge?

Browse the Apify Store and look at actors in your category. What are the established ones charging? You do not need to undercut everyone — in fact, being the cheapest often signals low quality. But you should be in the same ballpark unless you have a clear differentiator.

We track competitor pricing quarterly across our key categories. The insights are consistent: mid-range pricing almost always outperforms rock-bottom pricing in total revenue. A $0.10/result actor with 5,000 monthly results earns $500. A $0.02/result actor needs 25,000 results to match that — and the cheaper price rarely drives 5x more usage.

Step 3: What is Your Cost to Serve?

Some actors call external paid APIs, run headful browsers, or require large amounts of memory. Make sure your price covers your costs with margin.

Calculate your cost per result:

// Example cost calculation
const MEMORY_GB_PER_HOUR = 0.25;  // Apify's approximate compute cost
const MEMORY_USED_GB = 1;          // Your actor's memory allocation
const RESULTS_PER_HOUR = 200;      // Average throughput

const computeCostPerResult = (MEMORY_GB_PER_HOUR * MEMORY_USED_GB) / RESULTS_PER_HOUR;
// = $0.00125 per result

const externalApiCostPerResult = 0.005; // If you call a paid API

const totalCostPerResult = computeCostPerResult + externalApiCostPerResult;
// = $0.00625 per result

// Set price with healthy margin (10-20x cost for value-based pricing)
const suggestedPrice = totalCostPerResult * 15;
// = $0.09 per result

If your actor costs $0.03 in compute per result, charging $0.02 per result means you lose money on every run. We have seen this happen — developers who forgot to account for the memory cost of headful browser scraping.

The Three Pricing Tiers

From managing 250+ actors across the Apify Store, we have observed that pricing tends to fall into three bands:

Budget Tier: $0.001 - $0.05 per event

Simple lookups, basic API wrappers, bulk data operations. Things where users process thousands of items per run. Email verification, DNS lookups, simple searches. Volume is your friend here — you make money through quantity.

When to use this tier:

  • Your actor processes items in bulk (100+ per run typical)
  • Each individual result has low standalone value
  • Users are price-sensitive and will compare alternatives
  • Your compute cost per result is very low

Standard Tier: $0.05 - $0.30 per event

Most scrapers and enrichment tools land here. Website scraping, contact extraction, tech stack detection, review analysis. Each result requires meaningful processing and delivers actionable data.

When to use this tier:

  • Each result saves the user 5-15 minutes of manual work
  • Your actor handles complexity the user cannot easily replicate
  • Output is directly usable (not raw data that needs further processing)
  • Typical run produces 10-100 results

Premium Tier: $0.30 - $1.00+ per event

Multi-source intelligence, composite reports, deep analysis. Actors that orchestrate multiple sub-processes, combine data from several sources, or produce comprehensive reports. The output replaces hours of manual research.

When to use this tier:

  • Your actor calls multiple data sources or APIs
  • Output is a complete analysis, not just raw data
  • Each result replaces 30+ minutes of human work
  • Users are businesses making decisions based on the output

Common Mistakes

Pricing Too Low

The most common mistake by far. Developers think lower prices attract more users, but Apify's audience is businesses who value their time. A $0.01 price on a powerful enrichment tool makes users question its quality. If your tool saves someone an hour of work, charge accordingly.

From our data: when we raised the price on our Website Contact Scraper from $0.03 to $0.12 per result, run volume dropped by 15% but total revenue increased by 180%. The users who left were tire-kickers. The users who stayed were serious buyers who ran larger jobs.

Not Setting PPE at All

If your actor has no pricing, you earn nothing. Users still pay Apify for compute, but none of that comes to you. Even if you want a free tier, set up PPE with a token amount so you can raise it later without disrupting existing users.

Out of our 250+ actors, the ones without PPE pricing generate exactly $0 in revenue regardless of how many runs they get. We had one actor getting 500+ runs per month with no PPE set. That is months of lost revenue we can never recover.

One Giant Event Instead of Granular Events

If your actor does multiple things, create separate events for each. A compliance screening tool could have "entity screened" at $0.05, "detailed report" at $0.15, and "batch screen" at $0.03. This lets users pay less for lighter usage and more for premium features.

Forgetting About the 14-Day Notice Period

Apify requires a 14-day notice period when you first set pricing or change prices. Plan ahead — if you push a new actor today and set PPE tomorrow, you will not earn anything for two weeks.

Pro tip: Set your PPE pricing immediately when you create the actor, even before you publish it. The 14-day clock starts ticking from when you set the price, not from when the actor goes public. By the time you finish testing and publish, the notice period may already be over.

Charging Before Delivering Value

Never call Actor.charge() before Actor.pushData(). If your actor crashes between the charge and the data push, the user pays for nothing. This destroys trust and leads to bad reviews. Always charge after you have confirmed the results are saved.

Setting Up PPE Pricing via the API

You can set pricing through the Apify Console (Actor Settings > Monetization) or via the API. The API approach is essential when you manage multiple actors and want to set pricing in bulk.

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

// Set PPE pricing on an actor
await client.actor('your-actor-id').update({
    pricingInfos: [{
        pricingModel: 'PAY_PER_EVENT',
        pricingPerEvent: {
            actorChargeEvents: {
                'result-scraped': {
                    eventTitle: 'Result scraped',
                    eventDescription: 'Charged for each result returned',
                    eventPriceUsd: 0.10,
                },
                'apify-actor-start': {
                    eventTitle: 'Actor start',
                    eventDescription: 'One-time charge per run',
                    eventPriceUsd: 0.005,
                }
            }
        }
    }]
});

When setting pricing across dozens of actors, script it. We have a script that reads pricing configs from a JSON file and applies them in bulk — what used to take a full day of clicking through the Console now takes 30 seconds.

How to Know if Your Price is Right

After your pricing goes live, watch these signals:

Usage Volume Changes

Does usage drop significantly? If you lose more than 30-40% of your run volume after enabling PPE, your price might be too high. But some drop is normal — free users who were just experimenting will leave, and that is fine. They were not going to pay anyway.

Revenue Per User Trends

Paying users tend to use actors more deliberately and consistently. If your revenue grows even with fewer total users, your pricing is working. Track this metric weekly for the first month after setting prices.

Run Size Patterns

Watch the average number of results per run. If users are requesting fewer results after pricing goes live, they are being more selective — which is healthy. If they are requesting the same volume, your price is well within their budget and you might even have room to increase.

The Revenue Maximization Formula

The sweet spot is where you maximize total revenue, not total users:

Total Revenue = (Active Users) x (Avg Results/User/Month) x (Price Per Result)

100 users x 500 results x $0.10 = $5,000/month
500 users x 200 results x $0.03 = $3,000/month

Fewer users at a higher price often wins. The 100-user scenario above generates 67% more revenue with 80% fewer users — and fewer users means fewer support requests and less infrastructure strain.

Pricing Strategy for Different Actor Categories

Based on our experience across 250+ actors in multiple categories:

Lead generation actors — Standard to Premium tier. Sales teams have budgets and value time savings highly. Price per lead, not per search. $0.05-0.25 per lead is the sweet spot.

Scraping actors — Budget to Standard tier. Competition is fierce and users compare on price. Differentiate on reliability and data quality rather than trying to charge premium prices. $0.01-0.10 per page.

Intelligence/analysis actors — Premium tier. If your actor produces insights rather than raw data, charge accordingly. Multi-source analysis, risk scoring, competitive intelligence — $0.25-1.00 per report.

Monitoring actors — Budget tier with high volume. Price per check or per alert. Users run these frequently and expect low per-unit costs. $0.001-0.02 per check.

Next Steps

The best time to set pricing was when you published your actor. The second best time is now. Start with the Standard tier for most actors, track your metrics for 30 days, and adjust from there. The data will tell you where to go.


Related resources: