Apify · monetization · guide

Dev guide: how to best pick a date to migrate from rental to PPE while reducing chargebacks

Switching an Apify Actor from rental to pay-per-event (PPE) triggers a 14-day notice period. Time it wrong and Apify auto-refunds users who prepaid rent but got flipped to a new model mid-cycle — clawed back from your payout. This guide has two goals: pick a submit date that minimizes chargebacks, and know what to expect when your next invoice lands after the switch. Prefer a short version? →

Why submit timing matters

Apify requires roughly 14 days between when you submit a monetization change and when it goes live:

Submit date + 14 days = Effective date

On a rental model, subscribers prepay for the month. If you switch them to PPE while they’re still inside that prepaid window, Apify automatically refunds them — it’s built into the platform, not users manually calling their bank. You still eat the revenue clawback.

In practice, these “chargebacks” are refunds to users for the remaining days of their prepaid rental period — always pro-rated (unused days ÷ 30 × rent). Someone who paid $20 for a month on Nov 13 still has unused rental days if PPE goes live on Dec 1 — Apify credits them back for that portion only, and that amount is clawed back from your payout. Time the switch so most subscribers have finished their prepaid month first.

The fix isn’t guessing. Your Insights → Monetization chart shows when renewals hit — but the shape varies by Actor: one big spike, several smaller cohorts, or a chart that looks spread out with no obvious peak. Match your data to a pattern first, then apply the formula.

Goal 2: the next invoice after the switch

Even with decent timing, your first developer payout / invoice after PPE goes live can come as a shock compared with rental months: chargeback and refund line items, prepaid rental revenue tailing off, PPE usage still finding its level. That’s normal — not necessarily a sign you picked the wrong date. Compare against the approximate chargeback math in this guide, not against a peak rental month. Minimizing chargebacks is goal 1; reading the post-change invoice without panicking is goal 2.

Revenue patterns — yours may not be a single cluster

Before you pick dates, classify what you see in the monthly chart under Insights → Monetization:

Pattern What it looks like How to time the switch
One dominant cluster Most rent lands in a few days; rest is quiet or tiny batches Effective ≈ cluster end + ~30 days, then confirm the date is before the next month’s renewals on those same slots — see Scenario D trap.
Multiple clusters Two or more distinct spikes (e.g. day 5, 15, and 28 each month) Run the active-renewal rule per day-of-month slot. Set effective after the latest cluster you’re protecting, but check the following month’s renewal calendar on the same slots.
Looks flat / spread Many small bars; no obvious spike — common when renewals are staggered Export JSON, list renewals by day-of-month, then run the active-renewal rule per slot — savings are usually modest, not dramatic.

Multiple clusters: you rarely get zero chargeback on every slot at once. Run the active-renewal rule per day-of-month — subs renew monthly on the same dates, so the following month’s calendar matters as much as the spike you’re avoiding.

Looks flat? You might still shave a little off chargebacks with careful timing, but don’t expect a big win — and don’t trust eyeballing the Monetization chart. Use exported data; sparse or small bars are easy to misread.

Step-by-step: map your renewal clusters

  1. In Apify Console, open your Actor → Insights tab → Monetization.
  2. Set the view to monthly. Note every day-of-month where rent spikes (e.g. 12th, 13th, 20th). If the chart looks flat, skip visual guessing — pull JSON and tabulate by date instead.
  3. For each busy slot, record sub count and rent per renewal (each $20 bar ≈ one sub).
  4. Pick which pattern from the table above fits, then apply the active-renewal rule for your target effective date — one row per slot, not one lump per cluster.

Not 100% accurate. This is a heuristic — past Monetization charts are a guide, not a forecast. Subscribers may not renew (churn), and new users can subscribe on different days than last month’s pattern. Chargeback totals and optimal dates can shift. Use this to reduce risk, not eliminate it — then hope for the best 😅

Worked example: one dominant cluster + smaller cohorts

This is one real rental Actoreveryone’s data is different. November had $180 total at 100% margin: a mid-month cluster (~67% of revenue) plus a few one-off renewal days. Yours may be multiple spikes, one dominant cluster, or a visually flat chart — use the pattern table and JSON workflow on your Monetization data, not these dates.

Apify Actor Insights Monetization chart for November showing $180 total revenue with a renewal spike of $40 per day on November 13–15 and smaller $20 charges on November 12, 20, and 30
One pattern: dominant Nov 13–15 cluster (~67%) plus smaller cohorts on Nov 12, 20, and 30. Multi-cluster Actors need the same math repeated per spike.
November daily revenue breakdown for example Apify rental Actor
Date Daily revenue Notes
Nov 1–11$0Quiet — no renewals
Nov 12$20Small batch
Nov 13$402 subs renew
Nov 14$402 subs renew
Nov 15$402 subs renew
Nov 16–19$0Quiet
Nov 20$20Secondary cohort
Nov 21–29$0Quiet
Nov 30$20End-of-month renewal

The math: rental → PPE (dominant-cluster example)

Goal 1: don’t switch to PPE while subscribers are still inside a prepaid rental window — calculated per day-of-month slot, using whichever renewal is active on the effective date. Below walks through the dominant-cluster example; for multiple spikes, add one row per slot in each spike.

Chargeback formula (always pro-rated, per sub, per active renewal)

Assume each $20 bar = one monthly rental renewal (30-day prepaid). November total = $180 (9 renewals). The main cluster is not one blockNov 13, Nov 14, and Nov 15 each have their own subs and prepaid end dates. Sum chargebacks slot by slot:

Chargeback = (unused days ÷ 30) × $20  ·  unused days = last prepaid day − effective date + 1  (0 if PPE starts after last prepaid day)

A Nov 13 renewal covers 30 days → last prepaid day Dec 12. That sub’s November cycle is finished on Dec 13 — but the same sub renews again on Dec 13, starting a new prepaid window through Jan 11.

Critical rule — active renewal per slot: subs renew on roughly the same day-of-month every month. For each slot (12th, 13th, 20th…), ask: which payment is still mid-prepaid on the effective date?

  • If that slot’s current-month renewal has not happened yet → use the prior month renewal (e.g. Nov 14 effective, Nov 20 slot → Oct 20 payment still active).
  • If that slot’s current-month renewal has happened (effective day is after that slot in the month) → use that payment (e.g. Dec 15 effective, Nov 12 slot → Dec 12 payment just renewed — 27 unused days).
  • If effective lands on a slot’s renewal day during a spike → count that day’s payment too (Scenario C, Nov 14 slot on Nov 14 effective). If the same-day renewal hasn’t posted yet, the prior month cycle may already be expired → $0 (Scenario D, Nov 15 slot on Dec 15 effective).

The November Monetization chart tells you how many subs renew on each day-of-month. The chargeback table must use whichever renewal is active on your effective date — not always the November row.

November day-of-month slots — sub counts and prepaid end dates after November payment
Slot (day) Subs Nov revenue Last prepaid (Nov payment)
12th1$20Dec 11
13th2$40Dec 12
14th2$40Dec 13
15th2$40Dec 14
20th1$20Dec 19
30th1$20Dec 29

Scenario A — recommended: Nov 27 submit → Dec 11 effective

Window after the November spike prepaid periods are mostly tailing off, but before Dec 12–14 renewals fire. Every row uses the November payment (December renewals on those slots have not happened yet):

Slot Active renewal Subs Last prepaid Unused days Chargeback % of $180
Nov 12Nov 121Dec 111$0.670.4%
Nov 13Nov 132Dec 122$2.671.5%
Nov 14Nov 142Dec 133$4.002.2%
Nov 15Nov 152Dec 144$5.333.0%
Nov 20Nov 201Dec 199$6.003.3%
Nov 30Nov 301Dec 2919$12.677.0%
Total$31.3317.4%

Scenario B — too early: Nov 17 submit → Dec 1 effective

Every slot still mid-prepaid on its November payment — December renewals have not started yet (Dec 1 is before the 12th):

Slot Active renewal Subs Last prepaid Unused days Chargeback % of $180
Nov 12Nov 121Dec 1111$7.334.1%
Nov 13Nov 132Dec 1212$16.008.9%
Nov 14Nov 142Dec 1313$17.339.6%
Nov 15Nov 152Dec 1414$18.6710.4%
Nov 20Nov 201Dec 1919$12.677.0%
Nov 30Nov 301Dec 2929$19.3310.7%
Total$91.3350.7%

Scenario C — during spike: Oct 31 submit → Nov 14 effective

PPE lands during the November spike. Nov 12–14 rows use November payments; Nov 20 / Nov 30 slots use October payments (November renewals on those days not paid yet):

Slot Active renewal Subs Last prepaid Unused days Chargeback % of $180
Nov 12Nov 121Dec 1128$18.6710.4%
Nov 13Nov 132Dec 1229$38.6721.5%
Nov 14Nov 142Dec 1330$40.0022.2%
Nov 152$0.000%
Nov 20Oct 201Nov 185$3.331.9%
Nov 30Oct 301Nov 2815$10.005.6%
Total$110.6761.5%

Nov 15 slot: Nov 15 payment not made yet on Nov 14 — prior Oct 15 cycle already expired → $0. Nov 14 slot on Nov 14 effective: same-day spike renewal counts (30 unused days).

Scenario D — trap: Dec 1 submit → Dec 15 effective

Classic mistake: November cluster looks cleared, but Dec 12–14 renewals already happened — those subs just paid rent and are mid-prepaid again. Nov 20 / Nov 30 slots still use November payments (Dec 20 / Dec 30 not yet):

Slot Active renewal Subs Last prepaid Unused days Chargeback % of $180
Nov 12Dec 121Jan 1027$18.0010.0%
Nov 13Dec 132Jan 1128$37.3320.7%
Nov 14Dec 142Jan 1229$38.6721.5%
Nov 15Nov 152Dec 140$0.000%
Nov 20Nov 201Dec 195$3.331.9%
Nov 30Nov 301Dec 2915$10.005.6%
Total$107.3359.6%

Nov 15 slot on Dec 15: Dec 15 payment not posted yet; Nov 15 cycle expired Dec 14 → $0. Same method on your Actor: one row per day-of-month slot, using whichever renewal is active on the effective date.

Recommended timeline (Scenario A)

  • November cluster ends Nov 15 — prepaid tails run through ~Dec 14
  • Dec 12–14 renewals on the same slots would start fresh chargeback exposure — avoid effective dates after Dec 11 unless you accept ~$107+ clawback
  • Target effective = Dec 11 (last day before Dec 12 renewals) → submit Nov 27
  • Residual chargebacks on Dec 11: all slots still have small tails — heaviest are Nov 20 + Nov 30 ($31.33 total, 17.4%)
Action Date Chargebacks
Submit rental → PPE change Nov 27
PPE goes live Dec 11
Per slot on Dec 11 — see Scenario A table above
Total $31.33 (17.4% of $180)

Timelines to avoid — see Scenarios B, C & D

Submit Effective Chargebacks Why
Dec 1 Dec 15 $107.33 (59.6%)
Dec 12–14 renewals mid-prepaid — see Scenario D
Cluster + 30 lands on Dec 15, but December renewals already fired
Oct 31 Nov 14 $110.67 (61.5%)
Nov 12–14 spike + Oct 20 $3.33 + Oct 30 $10.00 — see Scenario C
PPE during November spike
Nov 17 Dec 1 $91.33 (50.7%)
All November renewals mid-prepaid — see Scenario B
Too early — every November slot still active

Quick rule of thumb

  1. List every renewal cluster (start → end) from Insights → Monetization — or, if the chart looks flat, export JSON and count by day instead of eyeballing.
  2. One dominant cluster: effective ≈ cluster end + ~30 days, then verify you’re before the next month’s renewals on the same day-of-month slots.
  3. Multiple clusters: run the active-renewal rule per slot; effective after the latest cluster you’re protecting, but check the following month’s renewal calendar.
  4. Looks flat / spread: perfectly even renewals are rare — you can usually trim chargebacks a little, but gains are modest. Use JSON, not the chart alone.
  5. Submit date = effective date − 14 (all patterns).
  6. Never set effective date inside a cluster or 1–3 days after it.

For this Actor only: November spike ends Nov 15, but the lowest-chargeback window is Dec 11 effective (submit Nov 27) — before Dec 12–14 renewals. Blindly using cluster end + 30 → Dec 15 hits fresh December prepaid (~$107). Your dates will differ — always check the next month’s renewals on the same slots.

My workflow (with AI)

The November chart and tables in this guide are one illustration — your Monetization data will look different. Different sub counts, rental prices, renewal days, and cluster shapes mean your submit and effective dates will not match mine. Use the pattern logic here; plug in your numbers.

  1. Open your Actor → Insights tab → Monetization (monthly view for the cycle you care about).
  2. Export the data — JSON from the Network tab is best (DevTools → Network → filter XHR/fetch while Monetization loads, copy the response). A screenshot works for a quick pass but is easier to misread.
  3. Paste into your AI tool with context, for example:

“I’m switching this Apify Actor from rental to PPE (14-day notice: submit + 14 = effective). Here’s my Insights → Monetization data [paste JSON or paste the screenshot]. Map renewal day-of-month slots (which days have rent, how many subs). For my suggested effective date, use whichever renewal is still mid-prepaid per slot — current month if already paid, prior month if not. Suggest submit and effective dates to minimize chargebacks. Show math per slot.”

  1. Cross-check the suggested submit and effective dates against your data — cluster start/end, not just the tallest bar. AI can be off by a day when labels are sparse.
  2. Submit the rental → PPE change in Apify Console.

When in doubt, pick an effective date before the next month’s renewals on your busiest slots — not blindly cluster end + 30 if that lands after Dec 12-style renewals on the same day-of-month.

Tip: JSON beats screenshots. Include rental price per sub if you know it (e.g. each $20 bar = one renewal). If the chart looks flat, say so — but still paste JSON so the AI tabulates daily renewals instead of inventing spikes or telling you timing doesn’t matter.

I still sanity-check the output myself. AI is good at tabulating clusters from raw data; you own the final submit date in Console.

FAQ

Is this 100% accurate?

No. You’re projecting from past renewal days — a heuristic, not a forecast. Existing subscribers may not renew, so chargebacks can come in lower than the math suggests — or a spike shifts to different days next month. New subscribers can land on different days entirely. Trial bursts, promos, and Actor growth all move the chart. The tables show approximate chargebacks for a static snapshot; real outcomes will vary. Hope for the best 😅

Are these manual user chargebacks?

No. When a monetization change conflicts with a prepaid rental period, Apify refunds users automatically on the platform — for the unused days left in their rental month, not because someone filed a bank chargeback. You’re timing the change to avoid that clawback from your developer revenue.

Does this apply to PPE → rental or price increases?

The 14-day rule applies to all monetization changes. This guide focuses on rental → PPE because prepaid rent makes chargeback timing especially sensitive.

What if revenue looks flat across the month?

Perfectly even spread is almost impossible in practice — chargeback savings are usually modest. Export JSON, map day-of-month slots, and run the active-renewal rule per slot for your target effective date.

What if I have several renewal clusters, not one spike?

Run the active-renewal rule per day-of-month slot in each spike — not one row per cluster. For your effective date, check both the spike you’re avoiding and the following month’s renewals on the same slots. See Scenarios A–D.

How do I know which renewal is “active” for a slot?

Subs renew on roughly the same day-of-month every month. On effective date D, for slot S: if D > S, use the current month’s payment on day S; if D < S, use the prior month’s payment on day S. Same-day (D = S) depends on context — during a spike, that day’s renewal counts (Scenario C); if the new month’s payment hasn’t posted yet, the prior cycle may be expired (Scenario D). See the rule list in the math section.

Where is the 14-day rule documented?

Apify’s monetization change flow in Console enforces a notice period before changes go live. Confirm current policy in Apify docs.