diff --git a/sources/academy/build-and-publish/apify-store-basics/how_actor_monetization_works.md b/sources/academy/build-and-publish/apify-store-basics/how_actor_monetization_works.md
index 28dc044c22..7c4dd3cd10 100644
--- a/sources/academy/build-and-publish/apify-store-basics/how_actor_monetization_works.md
+++ b/sources/academy/build-and-publish/apify-store-basics/how_actor_monetization_works.md
@@ -66,26 +66,6 @@ If you want more details about PPE pricing, refer to our [PPE documentation](/pl
:::
-### Pay-per-result pricing model
-
-
-
-- _How it works_: you charge users based on the number of results your Actor generates. You earn 80% of the revenue minus platform usage costs.
-- _Profit calculation_: `profit = (0.8 * revenue) - platform usage costs`
-- _Cost breakdown_:
- - Compute unit: $0.3 per CU
- - Residential proxies: $13 per GB
- - SERPs proxy: $3 per 1,000 SERPs
- - Data transfer (external): $0.20 per GB
- - Dataset storage: $1 per 1,000 GB-hours
-- _Example_: you set a price of $1 per 1,000 results. Two users generate 50,000 and 20,000 results, paying $50 and $20, respectively. If the platform usage costs are $5 and $2, your profit is $49.
-
-:::info Pay-per-result details
-
-If you want more details about PPR pricing, refer to our [PPR documentation](/platform/actors/publishing/monetize/pay-per-result).
-
-:::
-
### Rental pricing model
@@ -115,15 +95,16 @@ If you want more details about rental pricing, refer to our [rental pricing docu
### Changing monetization
-Some monetization updates are applied immediately. However, significant pricing changes require a 14-day notice period.
+Monetization changes fall into two categories:
+
+- _Non-significant changes_ (take effect immediately): decreasing prices, removing events, updating descriptions
+- _Significant changes_ (require a 14-day notice period): increasing prices, adding new paid events, changing the pricing model
-Significant changes include:
+When you submit a significant change, your users are notified and the current pricing stays active for 14 days. You can only make significant changes **once per month** per Actor, and you **cannot cancel** a planned change on your own - you need to contact [Apify support](https://apify.com/contact).
-- Increasing prices
-- Adding a new paid pricing event (PPE)
-- Changing the pricing model
+This means roughly one month passes between your first significant change and when you can make the next one. Plan your pricing carefully before committing.
-You can make these significant changes only once per month.
+For full details, refer to the [monetization change rules](/platform/actors/publishing/monetize#change-monetization).
### Tracking and promotion
@@ -148,13 +129,11 @@ Apify Store is like any other marketplace, so take a look at your competition th
Learn more about what makes a good readme here: [How to create an Actor README](/academy/actor-marketing-playbook/actor-basics/how-to-create-an-actor-readme)
-### Pay-per-event (PPE), pay-per-result (PPR), or rental
+### Choose pay-per-event (PPE)
Pay-per-event (PPE) gives you the most flexibility and growth potential. You can charge for any meaningful event your Actor performs (for example, page scraped, browser page opened, or an external API call). This makes costs predictable for users, lets you model value precisely, and is fully compatible with AI and MCP-based integrations.
-Rental pricing allows you to charge a monthly fee for your Actor and users cover their own platform usage.
-
-Pay-per-result (PPR) charges users based on the number of items your Actor adds to the dataset. This model works best when each dataset item represents clear value to the user - like scraped product listings, extracted contact information, or processed documents.
+Rental pricing is being sunset (see the [rental documentation](/platform/actors/publishing/monetize/rental) for the timeline) and is no longer recommended for new Actors.
:::tip Additional benefits
@@ -164,9 +143,12 @@ Actors that implement PPE receive additional benefits, including increased visib
To estimate pricing, run a few test runs and review the statistics in the Actor [**Analytics**](https://console.apify.com/actors?tab=analytics) tab.
+
### Adapt when needed
-Donβt be afraid to experiment with pricing, especially at the start. You can monitor your results in the dashboard and adjust if necessary.
+Donβt be afraid to experiment with pricing, especially at the start. You can monitor your results in the dashboard and adjust if necessary. You can also choose to [pass platform usage costs to users](/platform/actors/publishing/monetize/pay-per-event#pass-platform-usage-to-users) while youβre still figuring out the right price.
+
+To estimate pricing, run a few test runs and review the statistics in the Actor [**Analytics**](https://console.apify.com/actors?tab=analytics) tab.
Keep an eye on SEO as well. If you monitor the volume of the keywords your Actor is targeting as well as how well your Actor's page is ranking for those keywords, you can estimate the number of people who actually end up trying your tool (aka conversion rate). If your keywords are getting volume, but conversions are lower than expected, it might point to a few issues It could be due to your pricing, a verbose README, or complex input. If users are bouncing right away, it makes sense to check out your pricing and your closest competitors to see where adjustments might help.
@@ -184,15 +166,15 @@ Example of useful pricing estimates from the **Analytics** tab:
:::tip Use emails!
-π« Don't forget to set an email sequence to warn and remind your users about pricing changes. Learn more about emailing your users here: [Emails to Actor users]
+π« Don't forget to set an email sequence to warn and remind your users about pricing changes. Learn more about emailing your users here: [Emails to Actor users](/academy/actor-marketing-playbook/interact-with-users/emails-to-actor-users)
:::
## Resources
- Learn about [incentives behind monetization](https://apify.com/partners/actor-developers)
-- Detailed guide to [setting up monetization models](https://docs.apify.com/academy/get-most-of-actors/monetizing-your-actor)
-- Guide to [publishing Actors](https://docs.apify.com/platform/actors/publishing)
+- Detailed guide to [setting up monetization models](/platform/actors/publishing/monetize)
+- Guide to [publishing Actors](/platform/actors/publishing)
- Watch our webinar on how to [build, publish and monetize Actors](https://www.youtube.com/watch?v=4nxStxC1BJM)
- Read a blog post from our CEO on the [reasoning behind monetizing Actors](https://blog.apify.com/make-regular-passive-income-developing-web-automation-actors-b0392278d085/)
- Learn about the [Creator plan](https://apify.com/pricing/creator-plan), which allows you to create and freely test your own Actors for $1
diff --git a/sources/academy/build-and-publish/apify-store-basics/how_store_works.md b/sources/academy/build-and-publish/apify-store-basics/how_store_works.md
index 752a5c6a83..f121c3eed9 100644
--- a/sources/academy/build-and-publish/apify-store-basics/how_store_works.md
+++ b/sources/academy/build-and-publish/apify-store-basics/how_store_works.md
@@ -37,12 +37,7 @@ Actors on Apify Store can be public or private:
## How Actor monetization works (briefly)
-You can monetize your Actors using three different pricing models:
-
-- Pay for usage: charge based on how much the Actor is used.
-- Pay per result: the price is based on the number of results produced, with the first few free.
-- Pay per event: the price is based on specific events triggered by the Actor.
-- Monthly billing: set a fixed monthly rental rate for using the Actor.
+You can monetize your Actors using pay-per-event pricing, where users pay for specific events triggered by the Actor.
For detailed information on which pricing model might work for your Actor, refer to [How Actor monetization works](/academy/actor-marketing-playbook/store-basics/how-actor-monetization-works).
diff --git a/sources/academy/build-and-publish/apify-store-basics/images/ppr-model.png b/sources/academy/build-and-publish/apify-store-basics/images/ppr-model.png
deleted file mode 100755
index 700b22e571..0000000000
Binary files a/sources/academy/build-and-publish/apify-store-basics/images/ppr-model.png and /dev/null differ
diff --git a/sources/academy/build-and-publish/apify-store-basics/importance_of_actor_url.md b/sources/academy/build-and-publish/apify-store-basics/importance_of_actor_url.md
index 8a7fdf692d..76dca6967d 100644
--- a/sources/academy/build-and-publish/apify-store-basics/importance_of_actor_url.md
+++ b/sources/academy/build-and-publish/apify-store-basics/importance_of_actor_url.md
@@ -74,7 +74,7 @@ Once set, the page URL should not be changed. Because of those two important rea
If you absolutely have to change the URL, you will have to communicate that fact to your users.
-π‘ Learn more about the easiest ways to communicate with your users: [Emails to Actor users]
+π‘ Learn more about the easiest ways to communicate with your users: [Emails to Actor users](/academy/actor-marketing-playbook/interact-with-users/emails-to-actor-users)
## How and where to set the Actor URL
diff --git a/sources/academy/build-and-publish/how-to-build/actorization_playbook.mdx b/sources/academy/build-and-publish/how-to-build/actorization_playbook.mdx
index 44896742dd..c38fea64c5 100644
--- a/sources/academy/build-and-publish/how-to-build/actorization_playbook.mdx
+++ b/sources/academy/build-and-publish/how-to-build/actorization_playbook.mdx
@@ -23,7 +23,7 @@ While most Actors on our marketplace are web scrapers or crawlers, there are eve
By publishing your service or project at [Apify Store](https://apify.com/store) your project will benefit from:
1. _Expanded reach_: Your tool instantly becomes available to Apify's user community and connects with popular automation platforms like [Make](https://www.make.com), [n8n](https://n8n.io/), and [Zapier](https://zapier.com/).
-2. _Multiple monetization paths_: Choose from flexible pricing models (monthly subscriptions, pay-per-result, or pay-per-event).
+2. _Multiple monetization paths_: Choose from flexible pricing models (pay-per-event or monthly subscriptions).
3. _AI integration_: Your Actor can serve as a tool for AI agents through Apify's MCP (Model Context Protocol) server, creating new use cases and opportunities while you earn 80% of all revenues.
:::tip Open-Source Benefits
diff --git a/sources/academy/build-and-publish/interacting-with-users/emails_to_actor_users.md b/sources/academy/build-and-publish/interacting-with-users/emails_to_actor_users.md
index 663628547a..d9a61646f3 100644
--- a/sources/academy/build-and-publish/interacting-with-users/emails_to_actor_users.md
+++ b/sources/academy/build-and-publish/interacting-with-users/emails_to_actor_users.md
@@ -66,7 +66,7 @@ A common situation in web scraping that's out of your control.
Inform users about the reason for changes and how the changes impact them and the Actor + give them a date when the change takes effect.
-### 3. Actor changing its payment model (from rental to pay-per-result, for example)
+### 3. Actor changing its payment model (e.g. changing pay-per-event pricing)
Email 1 (before the change, warning about deprecation).
diff --git a/sources/academy/build-and-publish/interacting-with-users/issues_tab.md b/sources/academy/build-and-publish/interacting-with-users/issues_tab.md
index 330809182d..d9745c822d 100644
--- a/sources/academy/build-and-publish/interacting-with-users/issues_tab.md
+++ b/sources/academy/build-and-publish/interacting-with-users/issues_tab.md
@@ -47,7 +47,7 @@ Now that the Issues tab is public and on the web, it also serves other goals:
Check out how the team behind the **Apollo.io leads scraper** manages their [Issues tab](https://apify.com/curious_coder/apollo-io-scraper/issues/open) for a great example of professional responses and quick problem-solving.
-Note that this Actor is a rental, so users expect a high-quality service.
+Note that this is a paid Actor, so users expect a high-quality service.

diff --git a/sources/academy/build-and-publish/why_publish.md b/sources/academy/build-and-publish/why_publish.md
index 7774cee15f..7046fe4103 100644
--- a/sources/academy/build-and-publish/why_publish.md
+++ b/sources/academy/build-and-publish/why_publish.md
@@ -62,7 +62,7 @@ Public Actors require higher standards than private ones. Since users depend on
### When you need to change things
-If you need to make breaking changes to your Actor, contact [community@apify.com](mailto:community@apify.com) beforehand. Major pricing changes require 14-day notice and are limited to once per month. The platform helps communicate changes to your users.
+If you need to make breaking changes to your Actor, contact [community@apify.com](mailto:community@apify.com) beforehand. Significant pricing changes require a 14-day notice period and are limited to once per month. The platform helps communicate changes to your users.
## Getting started
diff --git a/sources/platform/actors/development/actor_definition/actor_json.md b/sources/platform/actors/development/actor_definition/actor_json.md
index ad10ee4dba..931a983da8 100644
--- a/sources/platform/actors/development/actor_definition/actor_json.md
+++ b/sources/platform/actors/development/actor_definition/actor_json.md
@@ -83,7 +83,7 @@ Actor `name`, `version`, `buildTag`, and `environmentVariables` are currently on
| `storages.dataset` | Optional | You can define the schema of the items in your dataset under the `storages.dataset` field. This can be either an embedded object or a path to a JSON schema file. [Read more](/platform/actors/development/actor-definition/dataset-schema) about Actor dataset schemas. |
| `defaultMemoryMbytes` | Optional | Specifies the default amount of memory in megabytes to be used when the Actor is started. Can be an integer or a [dynamic memory expression string](./dynamic_actor_memory/index.md). |
| `minMemoryMbytes` | Optional | Specifies the minimum amount of memory in megabytes required by the Actor to run. Requires an _integer_ value. If both `minMemoryMbytes` and `maxMemoryMbytes` are set, then `minMemoryMbytes` must be equal or lower than `maxMemoryMbytes`. Refer to the [Usage and resources](https://docs.apify.com/platform/actors/running/usage-and-resources#memory) for more details about memory allocation. |
-| `maxMemoryMbytes` | Optional | Specifies the maximum amount of memory in megabytes required by the Actor to run. It can be used to control the costs of run, especially when developing pay per result Actors. Requires an _integer_ value. Refer to the [Usage and resources](https://docs.apify.com/platform/actors/running/usage-and-resources#memory) for more details about memory allocation. |
+| `maxMemoryMbytes` | Optional | Specifies the maximum amount of memory in megabytes required by the Actor to run. It can be used to control the costs of run. Requires an _integer_ value. Refer to the [Usage and resources](https://docs.apify.com/platform/actors/running/usage-and-resources#memory) for more details about memory allocation. |
| `usesStandbyMode` | Optional | Boolean specifying whether the Actor will have [Standby mode](../programming_interface/actor_standby.md) enabled. |
| `webServerSchema` | Optional | Defines an OpenAPI v3 schema for the web server running in the Actor. This can be either an embedded object or a path to a JSON schema file. Use this when your Actor starts its own HTTP server and you want to describe its interface. |
| `webServerMcpPath` | Optional | The HTTP endpoint path where the Actor exposes its MCP (Model Context Protocol) server functionality. When set, the Actor is recognized as an MCP server. For example, setting `"/mcp"` designates the `/mcp` endpoint as the MCP interface. This path becomes part of the Actor's stable URL when [Standby mode](../programming_interface/actor_standby.md) is enabled. |
diff --git a/sources/platform/actors/publishing/images/ppr-to-ppe-migration-button.png b/sources/platform/actors/publishing/images/ppr-to-ppe-migration-button.png
deleted file mode 100644
index 6e6861a85e..0000000000
Binary files a/sources/platform/actors/publishing/images/ppr-to-ppe-migration-button.png and /dev/null differ
diff --git a/sources/platform/actors/publishing/images/ppr-wizard.png b/sources/platform/actors/publishing/images/ppr-wizard.png
deleted file mode 100644
index 1cbb4a74f2..0000000000
Binary files a/sources/platform/actors/publishing/images/ppr-wizard.png and /dev/null differ
diff --git a/sources/platform/actors/publishing/index.mdx b/sources/platform/actors/publishing/index.mdx
index 3a0498ba3d..5c3e840954 100644
--- a/sources/platform/actors/publishing/index.mdx
+++ b/sources/platform/actors/publishing/index.mdx
@@ -30,13 +30,9 @@ Publishing your Actor on Apify Store transforms your code, eliminating tradition
- Multiple payment options with automated billing & transactions
- Minimal marketing efforts required due to marketplace presence
-Packaging your software as an Actor allows you to launch new SaaS product faster and earn income through various monetization models that match your Actor's value proposition like:
+Packaging your software as an Actor allows you to launch new SaaS product faster and earn income through monetization that matches your Actor's value proposition.
-- Fixed rental fee for continuous access
-- Pay-per-result for usage-based pricing
-- Pay-per-event for specific operations
-
-To learn more visit our [Actors in Store](https://docs.apify.com/platform/actors/running/actors-in-store#pricing-models) page.
+To learn more visit our [Actors in Store](https://docs.apify.com/platform/actors/running/actors-in-store#pricing-models) page.
## Maintain public Actors
diff --git a/sources/platform/actors/publishing/monetize/index.mdx b/sources/platform/actors/publishing/monetize/index.mdx
index 312f281e0c..06f4d098ce 100644
--- a/sources/platform/actors/publishing/monetize/index.mdx
+++ b/sources/platform/actors/publishing/monetize/index.mdx
@@ -1,12 +1,15 @@
---
title: Monetize your Actor
-description: Monetize your Actors on Apify Store by choosing a pricing model such as pay per result, pay per event, or a flat monthly rental fee for users.
+description: Monetize your Actors on Apify Store by choosing a pricing model such as pay per event or a flat monthly rental fee for users.
slug: /actors/publishing/monetize
sidebar_position: 2
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
+import RentalSunset from '../../../../_partials/_rental-sunsetting.mdx';
+
+
Apify Store allows you to monetize your web scraping, automation and AI Agent projects by publishing them as paid Actors. This guide explains the available pricing models and how to get started.
@@ -15,8 +18,7 @@ Apify Store allows you to monetize your web scraping, automation and AI Agent pr
Actors in Apify Store can be published under one of the following pricing models:
1. _Free_: Users can run the Actor without any additional charges beyond the platform usage costs generated by the Actor.
-1. _Pay per event (PPE)_: Users don't pay for the platform usage cost the Actor generates. Instead, they pay based on specific events that are programmatically triggered from the Actor's source code. These events are defined by the developer and can include actions such as generating a single result or starting an Actor.
-1. _Pay per result (PPR)_: Users don't pay for the platform usage costs. Instead, they pay the developer based on the number of results produced by the Actor.
+1. _Pay per event (PPE)_: Users pay for specific events that are programmatically triggered from the Actor's source code. These events are defined by the developer and can include actions such as generating a single result or starting an Actor. The developer also chooses whether to pass the platform usage costs to users.
1. _Rental_: Users pay for the platform usage costs. However, after a trial period, they need to pay a flat monthly fee to the developer to continue using the Actor.
For a detailed comparison of pricing models from the perspective of your users, refer to [Actors in Store](/platform/actors/running/actors-in-store) page.
@@ -25,16 +27,16 @@ For a detailed comparison of pricing models from the perspective of your users,
The following table compares the two main pricing models available for monetizing your Actors:
-| Feature/Category | Rental | Pay-per-result (PPR) | Pay-per-event (PPE) |
-|--------------------------|--------------------------------|-------------------------------|------------------------------------------------------------------|
-| Revenue scalability | Capped at monthly fee | Unlimited, scales with usage | Unlimited, scales with usage |
-| AI/MCP compatibility | β Not compatible | β
Fully compatible | β
Fully compatible |
-| User cost predictability | Unpredictable (rental + usage) | Predictable | Predictable |
-| Store discounts | β Single price only | β
Store discounts available | β
Store discounts available |
-| Marketing boost | Standard visibility | Standard visibility | Priority store placement |
-| Commission opportunities | Standard 20% | Standard 20% | Standard 20% |
-| Custom event billing | Not available | Not available | β
Charge for any event |
-| Per-result billing | Not available | β
Charge per dataset item | Optional (via event; automatic via `apify-default-dataset-item`) |
+| Feature/Category | Pay-per-event (PPE) | Rental |
+|--------------------------|------------------------------------------------------------------|--------------------------------|
+| Revenue scalability | Unlimited, scales with usage | Capped at monthly fee |
+| AI/MCP compatibility | β
Fully compatible | β Not compatible |
+| User cost predictability | Predictable | Unpredictable (rental + usage) |
+| Store discounts | β
Store discounts available | β Single price only |
+| Marketing boost | Priority store placement | Standard visibility |
+| Commission opportunities | Standard 20% | Standard 20% |
+| Custom event billing | β
Charge for any event | Not available |
+| Per-result billing | Optional (via event; automatic via `apify-default-dataset-item`) | Not available |
## Set up monetization
@@ -46,37 +48,57 @@ Choose the pricing model for your Actor.

Follow the monetization wizard to configure your pricing model.
-
-
-
-
-
-

+
+
+
### Change monetization
You can change the monetization setting of your Actor by using the same wizard as for the setup in the **Monetization** section of your Actor's **Publication** tab.
-Most changes take effect **immediately**. However, **major changes** require a 14-day notice period and are limited to once per month to protect users.
+Changes are split into two categories: _significant_ and _non-significant_. Non-significant changes take effect immediately, while significant changes require a 14-day notice period to give your users time to adjust.
+
+#### Significant changes
-**Major changes** that require 14-day notice include:
+The following changes are considered significant and require a **14-day notice period**:
-- Changing the pricing model (e.g., from rental to pay-per-result)
+- Changing the pricing model (e.g. from rental to pay-per-event)
- Increasing prices
-- Adding new pay-per-event charges
+- Adding new paid events
-All other changes (such as decreasing prices, adjusting descriptions, or removing pay-per-event charges) take effect immediately.
+When you submit a significant change, users of your Actor are notified and the change is scheduled to take effect after 14 days. During this waiting period, the current pricing remains active.
-:::important Frequency of major monetization adjustments
+#### Non-significant changes
-You can make major monetization changes to each Actor only **once per month**. After making a major change, you must wait until it takes effect (14 days) plus an additional period before making another major change. For further information & guidelines, please refer to our [Terms & Conditions](/legal/store-publishing-terms-and-conditions)
+The following changes take effect **immediately**:
+
+- Decreasing prices
+- Removing events
+- Updating event descriptions
+- Adjusting other non-pricing settings
+
+#### Restrictions on significant changes
+
+:::caution You cannot cancel a planned change
+
+Once you commit to a significant change, you cannot cancel or modify it yourself. If you need to revert a planned change, contact [Apify support](https://apify.com/contact).
:::
+Significant changes are limited to **once per month** per Actor. After submitting a significant change, you must wait for the full cycle to complete before making another one:
+
+1. You submit a significant change (e.g. a price increase).
+1. The change takes effect after **14 days**.
+1. You can then submit your next significant change, which also takes **14 days** to apply.
+
+This means approximately **one month** passes between committing to one significant change and having the next one take effect. Plan your pricing strategy carefully before committing.
+
+For full details on the rules governing monetization changes, refer to the [Store publishing terms and conditions](/legal/store-publishing-terms-and-conditions).
+
## Monthly payouts and analytics
Payout invoices are automatically generated on the 11th of each month, summarizing the profits from all your Actors for the previous month.
@@ -84,11 +106,11 @@ In accordance with our [Terms & Conditions](/legal/store-publishing-terms-and-co
:::note How negative profits are handled
-If your PPR or PPE Actor's price doesn't cover its monthly platform usage costs, it will have a negative profit. When this occurs, we automatically set that Actor's profit to $0 for the month. This ensures a single Actor's loss never reduces your total payout.
+If your PPE Actor's price doesn't cover its monthly platform usage costs, it will have a negative profit. When this occurs, we automatically set that Actor's profit to $0 for the month. This ensures a single Actor's loss never reduces your total payout.
:::
-You have 3 days to review your payout invoice in the **Development >Insights > Payout** section. During this period, you can either approve the invoice or request a revision, which we will process promptly.
+You have 3 days to review your payout invoice in the **Development > Insights > Payout** section. During this period, you can either approve the invoice or request a revision, which we will process promptly.
If no action is taken, the payout will be automatically approved on the 14th, with funds disbursed shortly after. Payouts require meeting minimum thresholds of either:
- $20 for PayPal
diff --git a/sources/platform/actors/publishing/monetize/pay_per_event.mdx b/sources/platform/actors/publishing/monetize/pay_per_event.mdx
index e9a21cc3f2..5c1ed4cdd9 100644
--- a/sources/platform/actors/publishing/monetize/pay_per_event.mdx
+++ b/sources/platform/actors/publishing/monetize/pay_per_event.mdx
@@ -8,7 +8,7 @@ sidebar_position: 1
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
-The PPE pricing model offers a flexible monetization option for Actors on Apify Store. Unlike [pay per result](/platform/actors/publishing/monetize/pay-per-result), PPE allows you to charge users based on specific events triggered programmatically by your Actor's code.
+The PPE pricing model offers a flexible monetization option for Actors on Apify Store as it allows you to charge users based on specific events triggered programmatically by your Actor's code.
PPE lets you define pricing for individual events. You can charge for specific events directly from your Actor using the [JS](/sdk/js/reference/class/Actor#charge)/[Python](/sdk/python/reference/class/Actor#charge) SDK, or by calling the [PPE charging API](/api/v2/post-charge-run) directly. Common events include Actor start, dataset item creation, and external API calls.
@@ -29,7 +29,7 @@ Your profit is calculated from the mentioned formula:
where:
- _Revenue_: The amount charged for events via the PPE charging API or through JS/Python SDK. You receive 80% of this revenue.
-- _Platform costs_: The underlying platform usage costs for running the Actor, calculated in the same way as for PPR. For more details, visit the [Computing your costs for PPE and PPR Actors](/platform/actors/publishing/monetize/pricing-and-costs#computing-your-costs-for-ppe-and-ppr-actors) section.
+- _Platform costs_: The underlying platform usage costs for running the Actor. For more details, visit the [Computing your costs for PPE Actors](/platform/actors/publishing/monetize/pricing-and-costs#computing-your-costs-for-ppe-actors) section.
Only revenue and cost for Apify customers on paid plans are taken into consideration when computing your profit. Users on free plans are not reflected there.
@@ -415,7 +415,7 @@ Fixed pricing is simpler for users to predict, while usage-based pricing more ac
Your profit and costs are computed _only from the first two users_ since they are on Apify paid plans.
-The platform usage costs are just examples, but you can see the actual costs in the [Computing your costs for PPE and PPR Actors](/platform/actors/publishing/monetize/pricing-and-costs#computing-your-costs-for-ppe-and-ppr-actors) section.
+The platform usage costs are just examples, but you can see the actual costs in the [Computing your costs for PPE Actors](/platform/actors/publishing/monetize/pricing-and-costs#computing-your-costs-for-ppe-actors) section.
### Revenue breakdown
diff --git a/sources/platform/actors/publishing/monetize/pay_per_result.mdx b/sources/platform/actors/publishing/monetize/pay_per_result.mdx
deleted file mode 100644
index ee7df0f587..0000000000
--- a/sources/platform/actors/publishing/monetize/pay_per_result.mdx
+++ /dev/null
@@ -1,302 +0,0 @@
----
-title: Pay per result
-description: Learn how to monetize your Actor with pay-per-result (PPR) pricing, charge users for each result stored in the dataset, and set a profitable price.
-slug: /actors/publishing/monetize/pay-per-result
-sidebar_position: 2
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-:::warning Pay per result is deprecated
-
-This pricing model is deprecated and will be removed in 2026. You can migrate to [pay per event with one click](#one-click-migration-to-ppe), and the migration is backward compatible.
-
-:::
-
-In this model, you set a price per 1,000 results. Users are charged based on the number of results your Actor produces and stores in the run's default dataset. Your profit is calculated as 80% of the revenue minus platform usage costs.
-
-The details on how your cost is computed can be found in [Example of a PPR pricing model](#example-of-ppr-pricing).
-
-## One click migration to PPE
-
-Select your PPR Actor, go to the **Publication** tab, open the **Monetization** section, and click the **Migrate to pay per event** button.
-
-
-
-### Why should I migrate
-
-The pay per event pricing model offers superior flexibility in charging not only for the results but also for any event.
-This helps you to pass on the costs of external APIs or additional processing directly to your users, price different functionalities of your Actor differently, avoid revenue loss from small but usage-heavy runs, and more.
-
-Given that the pay per event model is fully compatible with pay per result, and to bring more simplicity to users of your Actors, we are fully deprecating PPR in favor of PPE.
-The migration is completely automatic and fully backward compatible.
-
-### What happens during migration
-
-The migration switches your pricing model from pay per result to pay per event. Your price per 1,000 results is automatically converted to an equivalent `apify-default-dataset-item` [event](./pay-per-event#use-synthetic-default-dataset-item-event-apify-default-dataset-item) price.
-This change does not count towards the pricing change limits that you are allowed to do once every 30 days.
-
-**Code changes:** No changes to your Actor code are required if it already respects the `ACTOR_MAX_PAID_DATASET_ITEMS` environment variable (the price limit set by users).
-
-**After migration:** With [pay per event](./pay-per-event), you can define additional custom events beyond dataset items.
-
-**Respecting user spending limits:** You can continue using the `ACTOR_MAX_PAID_DATASET_ITEMS` environment variable to respect user-specified price limits.
-
-## How is profit computed
-
-Your profit is calculated from the mentioned formula:
-
-`profit = (0.8 * revenue) - platform costs`
-
-where:
-
-- _Revenue_: The amount charged for results via the PPR pricing API or through JS/Python SDK. You receive 80% of this revenue.
-- _Platform costs_: The underlying platform usage costs for running the Actor, calculated in the same way as for PPE. For more details, visit the [Example of a PPR pricing model](#example-of-a-ppr-pricing-model) section.
-
-Only revenue and cost for Apify customers on paid plans are taken into consideration when computing your profit. Users on free plans are not reflected there.
-
-## PPR vs PPE
-
-PPR charges based on the number of results produced. PPE lets you define pricing for individual events, and help you to make your pricing more flexible. You can charge for specific events directly from your Actor by calling the PPE charging API.
-
-:::info Learn more about PPE
-
-If you want to learn more about PPE, refer to the [pay per event](/platform/actors/publishing/monetize/pay-per-event) section.
-
-:::
-
-## Best practices for PPR Actors
-
-To ensure profitability, check the following best practices.
-
-### Set memory limits
-
-Set memory limits using `minMemoryMbytes` and `maxMemoryMbytes` in your [`actor.json`](https://docs.apify.com/platform/actors/development/actor-definition/actor-json) file to control platform usage costs.
-
-```json
-{
- "actorSpecification": 1,
- "name": "name-of-my-scraper",
- "version": "0.0",
- "minMemoryMbytes": 512,
- "maxMemoryMbytes": 1024,
-}
-```
-
-:::note Memory requirements for browser-based scraping
-
-When using browser automation tools like [Puppeteer](https://pptr.dev/) or [Playwright](https://playwright.dev/) for web scraping, increase the memory limits to accommodate the browser's memory usage.
-
-:::
-
-### Implement the `ACTOR_MAX_PAID_DATASET_ITEMS` check
-
-This check prevents your Actor from generating more results than the user has paid for, protecting both you and your users from unexpected costs.
-
-The `ACTOR_MAX_PAID_DATASET_ITEMS` environment variable contains the user-set limit on returned results for PPR Actors. Do not exceed this limit. You can see the example implementation in the following code snippets.
-
-
-
-
-```js
-import { Actor } from 'apify';
-
-// Use top-level variables with a closure so you don't have to initialize anything
-const MAX_ITEMS: number | undefined = Number(process.env.ACTOR_MAX_PAID_DATASET_ITEMS) || undefined;
-
-let isInitialized = false;
-let isGettingItemCount = false;
-let pushedItemCount = 0;
-
-export const pushDataMaxAware = async (data: Parameters[0]): Promise<{ shouldStop: boolean }> => {
- // If this isn't PPR, just push like normally
- if (!MAX_ITEMS) {
- await Actor.pushData(data);
- return { shouldStop: false };
- }
-
- // Initialize on the first call so it as standalone function
- if (!isInitialized && !isGettingItemCount) {
- isGettingItemCount = true;
- const dataset = await Actor.openDataset();
- const { itemCount } = (await dataset.getInfo())!;
- pushedItemCount = itemCount;
- isGettingItemCount = false;
- isInitialized = true;
- }
-
- // Others handlers will wait until initialized which should be few milliseconds
- while (!isInitialized) {
- await new Promise((resolve) => setTimeout(resolve, 50));
- }
-
- const dataAsArray = Array.isArray(data) ? data : [data];
- const dataToPush = dataAsArray.slice(0, MAX_ITEMS - pushedItemCount);
-
- if (dataToPush.length) {
- // Update the state before 'await' to avoid race conditions
- pushedItemCount += dataToPush.length;
- await Actor.pushData(dataToPush);
- }
-
- return { shouldStop: pushedItemCount >= MAX_ITEMS };
-};
-```
-
-
-
-
-```py
-import os
-import asyncio
-from apify import Actor
-from typing import Union, List, Dict, Any
-
-class PayPerResultManager:
- def __init__(self):
- self.max_items = int(os.getenv('ACTOR_MAX_PAID_DATASET_ITEMS', 0)) or None
- self.is_initialized = False
- self.is_getting_item_count = False
- self.pushed_item_count = 0
-
- async def push_data_max_aware(self, data: Union[Dict[Any, Any], List[Dict[Any, Any]]]) -> Dict[str, bool]:
- # If this isn't PPR, just push like normally
- if not self.max_items:
- await Actor.push_data(data)
- return {'shouldStop': False}
-
- # Initialize on the first call
- if not self.is_initialized and not self.is_getting_item_count:
- self.is_getting_item_count = True
- dataset = await Actor.open_dataset()
- dataset_info = await dataset.get_info()
- self.pushed_item_count = dataset_info['itemCount']
- self.is_getting_item_count = False
- self.is_initialized = True
-
- # Wait until initialized
- while not self.is_initialized:
- await asyncio.sleep(0.05) # 50ms
-
- data_as_array = data if isinstance(data, list) else [data]
- data_to_push = data_as_array[:self.max_items - self.pushed_item_count]
-
- if data_to_push:
- # Update the state before 'await' to avoid race conditions
- self.pushed_item_count += len(data_to_push)
- await Actor.push_data(data_to_push)
-
- return {'shouldStop': self.pushed_item_count >= self.max_items}
-
-# Create a singleton instance
-ppr_manager = PayPerResultManager()
-
-# Convenience function that uses the singleton
-async def push_data_max_aware(data: Union[Dict[Any, Any], List[Dict[Any, Any]]]) -> Dict[str, bool]:
- return await ppr_manager.push_data_max_aware(data)
-```
-
-
-
-
-### Test your Actor
-
-Test your Actor with various result volumes to determine optimal pricing. Start with minimal datasets (1-100 results) to understand your base costs and ensure the Actor works correctly with small inputs. Then test with typical usage volumes (1,000-10,000 results) to simulate real-world scenarios and identify any performance bottlenecks.
-
-Throughout all testing, monitor platform usage costs for each test run to calculate the true cost per result. This cost analysis is crucial for setting profitable pricing that covers your expenses while remaining competitive in the market.
-
-:::tip Use Actor analytics for cost estimation
-
-Check the **cost per 1000 results** chart in your Actor's analytics in Apify Console. This chart is computed from all runs of both paying and free users, giving you a comprehensive view of platform usage costs across different usage patterns. Use this data to better estimate the adequate price for your Actor.
-
-:::
-
-### Push at least one "error item" to the dataset
-
-In PPR Actors, users are only charged when your Actor produces results in the dataset. If your Actor encounters invalid input or finds no results, it should still push at least one item to the dataset to ensure the user is charged for the attempt.
-
-Why this matters:
-
-- _Prevents free usage_: Without pushing any items, users could run your Actor repeatedly with invalid inputs without being charged
-- _Ensures fair billing_: Users should pay for the processing attempt, even if no valid results are found
-- _Maintains profitability_: Every run should generate some revenue to cover your platform costs
-
-Example scenarios:
-
-- _User provides invalid search terms_: Push an error item explaining the issue
-- _Target website returns no results_: Push an item indicating "No results found"
-- _Input validation fails_: Push an item with validation error details
-
-This ensures that every run generates at least one result, guaranteeing that users are charged appropriately for using your Actor.
-
-## Example of PPR pricing
-
-You make your Actor PPR and set the price to be _$1/1,000 results_. During the first month, three users use your Actor.
-
-### Pricing breakdown by user
-
-
-
-
- | User |
- Plan |
- Results |
- Charges |
- Total |
- Platform cost |
-
-
-
-
- | 1 |
- Paid plan |
-
- 50,000 results
- |
-
- 50,000 Γ· 1,000 Γ $1.00
- |
- $50.00 |
- $5.00 |
-
-
- | 2 |
- Paid plan |
-
- 20,000 results
- |
-
- 20,000 Γ· 1,000 Γ $1.00
- |
- $20.00 |
- $2.00 |
-
-
- | 3 |
- Free plan |
-
- 5,000 results
- |
-
- 5,000 Γ· 1,000 Γ $1.00
- |
- $5.00 |
- $0.50 |
-
-
-
-
-Your profit and costs are computed _only from the first two users_ since they are on Apify paid plans.
-
-The platform usage costs are just examples, but you can see the actual costs in the [Computing your costs for PPE and PPR Actors](/platform/actors/publishing/monetize/pricing-and-costs#computing-your-costs-for-ppe-and-ppr-actors) section.
-
-### Revenue breakdown
-
-- _Revenue (paid users only): $50.00 + $20.00 = $70.00_
-- _Platform cost (paid users only): $5.00 + $2.00 = $7.00_
-- _Profit: 0.8 Γ $70.00 β $7.00 = $49.00_
-
-## Next steps
-
-- Check out the [Pricing and costs](./pricing_and_costs.mdx) section to learn how to compute your costs.
diff --git a/sources/platform/actors/publishing/monetize/pricing_and_costs.mdx b/sources/platform/actors/publishing/monetize/pricing_and_costs.mdx
index c383f1c5b5..a5c21343f5 100644
--- a/sources/platform/actors/publishing/monetize/pricing_and_costs.mdx
+++ b/sources/platform/actors/publishing/monetize/pricing_and_costs.mdx
@@ -1,13 +1,13 @@
---
title: Pricing and costs
-description: Learn how to set Actor pricing and calculate your costs, including platform usage rates, discount tiers, and profit formulas for PPE and PPR models.
+description: Learn how to set Actor pricing and calculate your costs, including platform usage rates, discount tiers, and profit formulas for the PPE model.
slug: /actors/publishing/monetize/pricing-and-costs
sidebar_position: 4
---
-## Computing your costs for PPE and PPR Actors
+## Computing your costs for PPE Actors
-For both PPE and PPR Actors, profit is computed using the formula `(0.8 * revenue) - costs`. In this section, we'll explain how the `costs` component is calculated.
+Profit is computed using the formula `(0.8 * revenue) - costs`. In this section, we'll explain how the `costs` component is calculated.
When paying users run your Actor, it generates platform usage in the form of compute units, data traffic, API operations etc. This usage determines the `costs` in the profit formula above.
@@ -19,7 +19,7 @@ Platform usage by _FREE_ tier users is covered by Apify and does not contribute
To calculate your costs for a specific run by paying user, multiply the unit cost of each service by the quantity consumed. For example, if a _BRONZE_ tier user run uses 10 compute units (CUs) at $0.3/CU, your cost would be $3.
-As highlighted in the [How to attract larger customers of PPE and PPR Actors](#how-to-attract-larger-customers-of-ppe-and-ppr-actors) section, if your Actor uses tiered pricing, the user's discount tier determines the unit costs applied to their runs. Your costs are lower for higher tiers, enabling you to offer more competitive pricing to these customers, while sustaining healthy profit margins.
+If your Actor uses tiered pricing, the user's discount tier determines the unit costs applied to their runs. Your costs are lower for higher tiers, enabling you to offer more competitive pricing to these customers, while sustaining healthy profit margins.
The following table summarizes the platform unit costs used for your cost computation across different discount tiers.
@@ -48,7 +48,7 @@ When you monetize your Actor in Standby mode using pay per event mode only, you
## Discount tiers and pricing strategy
-Each user running your PPE or PPR Actor belongs to a discount tier:
+Each user running your PPE Actor belongs to a discount tier:
- _FREE_
- _BRONZE_
@@ -58,7 +58,7 @@ Each user running your PPE or PPR Actor belongs to a discount tier:
You can define different prices for different tiers.
While optional, we recommend offering progressively lower prices for higher discount tiers. This approach can significantly improve attractiveness of your Actor to large enterprise customers who may spend thousands or tens of thousands of dollars on it.
-Your platform costs are also lower for these higher tier, which helps maintain healthy profit margins. This is further detailed in the [Computing your costs for PPE and PPR Actors](#computing-your-costs-for-ppe-and-ppr-actors) section.
+Your platform costs are also lower for these higher tier, which helps maintain healthy profit margins. This is further detailed in the [Computing your costs for PPE Actors](#computing-your-costs-for-ppe-actors) section.
## Implement discount tiers
diff --git a/sources/platform/actors/publishing/monetize/rental.mdx b/sources/platform/actors/publishing/monetize/rental.mdx
index 57acc8c278..0724c0174d 100644
--- a/sources/platform/actors/publishing/monetize/rental.mdx
+++ b/sources/platform/actors/publishing/monetize/rental.mdx
@@ -37,10 +37,6 @@ The rental model, while easy to set up, is less profitable because its pricing d
The growing limitation is AI compatibility. [Apify's MCP server](/platform/integrations/mcp) explicitly excludes rental Actors from search results, making them invisible to AI systems that dynamically select and execute tools. This significantly reduces your Actor's discoverability in AI workflows.
-## Consider pay-per-result or pay-per-event pricing models
-
-We recommend using the [pay-per-result](/platform/actors/publishing/monetize/pay-per-result) or [pay-per-event](/platform/actors/publishing/monetize/pay-per-event) models instead.
-
## Example of a rental pricing model
You make your Actor rental with _7-day free trial_ and then _$30/month_. During the first calendar month, three users start to use your Actor: