Skip to content
Browse documentation

Billing schedules (auto-invoicing and auto-payouts)

Create payout statements and draft invoices automatically for every closed weekly, two-weekly or monthly period, with a delay for late approvals and a minimum threshold.

Last updated 3 min read

On this page

Billing schedules run the same Generate payouts and Generate invoices logic as the manual dialogs, on a calendar. For each closed period they create pending payout statements and draft invoices — you still review, approve, send and pay them.

Set up a schedule#

  1. Open Billing → Schedules (/app/billing/schedules). There are two cards: Partner payouts and Advertiser invoices.

  2. Click Add payout schedule or Add invoice schedule.

  3. Fill in:

    FieldOptions
    Applies toEvery partner (workspace default) / Every advertiser (workspace default), or One partner (override) / One advertiser (override). Only one default per side.
    Partner / AdvertiserFor an override.
    FrequencyWeekly, Every two weeks or Monthly.
    Period starts onWeekday (weekly and two-weekly).
    Period starts on day1–28 (monthly). "1 = calendar months (1–28)."
    Delay (days)"Wait after the period ends (late approvals)."
    Threshold (USD)Minimum amount to bill; 0 = no threshold. The label shows the workspace currency, but the number is compared with the amount in each statement currency as is (no conversion).
    ActiveSwitch off to stop the schedule without deleting it.
  4. Click Save schedule.

The table shows Applies to, Period, Threshold, Next run and Last run. Deleting a schedule keeps the statements it already created.

Periods#

FrequencyPeriods
Weekly7 days starting on the chosen weekday, e.g. Monday–Sunday.
Every two weeks14 days starting on the chosen weekday, on a fixed two-week rhythm (anchored to Monday 1 January 2024).
MonthlyFrom the chosen day to the day before it in the next month, e.g. day 1 → calendar months, day 15 → 15 Oct – 14 Nov.

Days are calendar days in the workspace time zone.

When a schedule runs#

The worker checks schedules every 15 minutes. A period is due once its end date + 1 day + Delay has been reached — a monthly schedule for October with a 3-day delay runs on 4 November. Each period is run once: the schedule remembers the last period it billed, and a skipped day is caught up at the next check. Schedules of suspended workspaces do not run.

Which entities a run covers:

  • Default schedule: every active partner or advertiser of the workspace that has no override of its own.
  • Override: that one partner or advertiser.

Payout runs#

  1. The preview of Generate payouts is computed for the period.
  2. A partner is included when at least one of its currencies reaches the Threshold; partners below it carry over to the next period.
  3. The usual rules still apply: the partner's own Minimum payout and, when required, a verified tax form.
  4. Pending statements are created; each partner is notified "Payout statement <from> – <to>", and staff get "N payout statements created".

Invoice runs#

For each advertiser:

  1. If its last invoice ended before the period started (an earlier period was below the threshold), the run starts the day after that last invoice, so carried-over click revenue is billed now.
  2. An advertiser already invoiced up to the period end is skipped.
  3. If every currency's amount is below the Threshold, nothing is created and the amount carries over.
  4. Otherwise draft invoices are created. Staff get "N invoices created — Review the drafts and send them."

Invoices are never sent automatically: mark them sent after review (see Advertiser invoices).

Example setups#

GoalConfiguration
Pay every partner monthly, net 15Payouts, every partner, Monthly, day 1, Delay 15, threshold 50
Weekly payouts for one top partnerPayouts, One partner (override), Weekly, Monday, delay 2
Monthly invoices to all advertisersInvoices, every advertiser, Monthly, day 1, delay 3

Permissions#

Viewing needs a manager role; creating, editing and deleting schedules needs an admin or owner.

Something unclear or missing in this article?Tell us