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 new file mode 100644 index 0000000000..6e6861a85e Binary files /dev/null and b/sources/platform/actors/publishing/images/ppr-to-ppe-migration-button.png differ diff --git a/sources/platform/actors/publishing/monetize/pay_per_event.mdx b/sources/platform/actors/publishing/monetize/pay_per_event.mdx index ce27851f49..51a2561c34 100644 --- a/sources/platform/actors/publishing/monetize/pay_per_event.mdx +++ b/sources/platform/actors/publishing/monetize/pay_per_event.mdx @@ -61,11 +61,12 @@ An Actor's negative net profit does not affect the positive profit of another Ac Finish the Actor run once charging reaches user-configured maximum cost per run. Apify SDKs (JS and Python) return `ChargeResult` that helps determine when to finish. -The `eventChargeLimitReached` property checks if the current event type can be charged more. If you have multiple event types, analyze the `chargeableWithinLimit` property to see if other events can still be charged before stopping the Actor. +The `eventChargeLimitReached` property checks if the user's limit allows for another charge of this event. If you have multiple events, analyze the `chargeableWithinLimit` property to see if other events can still be charged before stopping the Actor. :::info ACTOR_MAX_TOTAL_CHARGE_USD environment variable For pay-per-event Actors, users set a spending limit through the Apify Console. This limit is available in your Actor code as the `ACTOR_MAX_TOTAL_CHARGE_USD` [environment variable](/platform/actors/development/programming-interface/environment-variables), which contains the user's maximum cost. +The Apify SDK's `ChargeResult` respects the user set limit already. ::: diff --git a/sources/platform/actors/publishing/monetize/pay_per_result.mdx b/sources/platform/actors/publishing/monetize/pay_per_result.mdx index 6ab39b0420..e712d0a16b 100644 --- a/sources/platform/actors/publishing/monetize/pay_per_result.mdx +++ b/sources/platform/actors/publishing/monetize/pay_per_result.mdx @@ -12,9 +12,41 @@ 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-a-ppr-pricing-model). +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. + +![Migration button](../images/ppr-to-ppe-migration-button.png) + +### 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 @@ -35,7 +67,7 @@ PPR charges based on the number of results produced. PPE lets you define pricing :::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. +If you want to learn more about PPE, refer to the [pay per event](/platform/actors/publishing/monetize/pay-per-event) section. ::: diff --git a/sources/platform/actors/publishing/quality_score.mdx b/sources/platform/actors/publishing/quality_score.mdx index ed246911ed..3e32396200 100644 --- a/sources/platform/actors/publishing/quality_score.mdx +++ b/sources/platform/actors/publishing/quality_score.mdx @@ -29,13 +29,14 @@ The Actor quality score recalculates several times per day. Changes you make to Your quality score may change even without you modifying your Actor. This happens for two reasons: First, your score is influenced by how well your Actor performs relative to other Actors on the platform. As other Actors improve or decline, your relative position may shift. Second, the quality score algorithm continues to evolve with new properties being added and adjustments to existing calculations. -There are seven quality categories: +These are the quality categories: - Reliability - Popularity - Feedback and community - Ease of use - Pricing transparency +- Trustworthiness - History of success - Congruency of texts