Engine

The engine runs your period.

Pulls the data, applies your contracts, produces statements, and flags anything that looks off, on the cadence you chose, the same way every time. There is no "kick off the period" button you have to remember to press. The period runs itself; you walk in to a draft already prepared.

Period orchestration

What happens at period close.

On the cadence you chose (monthly or quarterly), the period closes itself. The run kicks off on schedule, every stage is orchestrated end-to-end, and you get a single notification when there's a draft to review.

01 · Pull

Pull every source.

Sales, expenses, ads, bank, payouts: pulled at period close from every connected platform. Nothing pre-staged, nothing left out.

Shopify · Keap · PlaidApr 1–30
02 · Reconcile & allocate

Net the noise.

Sales tax stripped at ingest. In-period refunds netted against gross. Processor fees deducted (or not, per the contract). Shared expenses allocated pro-rata across SKUs by revenue share, on the rules you set per tenant.

Tax · Refunds · Fees · Allocationsper SKU
03 · Compute against contract

Run each artist's deal.

Every contract runs its formula against its own version snapshot. Tiers, escalations, advances, reserves, splits: all applied automatically and recorded to the line item.

Pinned to contract versionper artist
04 · Assemble drafts

Statements per artist.

One statement per artist per tenant, fully rendered in your brand. Every figure carries the trace: the sale that drove it, the clause that authorized it, and the contract version that ran.

Branded · Tracedready to review
05 · Admin review

Approve before publish.

You see every draft on the dashboard before anything ships. Approve all in one click, or open a single statement to inspect the lines, the trace, and the math.

Hold · Inspect · Publish Allyour call
06 · Publish & pay

Ship and settle.

Statements are signed, locked, and routed to the artist portal. Payable records push to your connected payout providers: Bill.com, PayPal Payouts, Wise, whatever each artist uses.

SHA-256 + UTC timestamppayout queued
Sourced, computed, signed

Every figure is on the record.

On a CleaRoyalty calculation, no number is an opinion. Every input cites the source it was pulled from. Every operation cites the formula and the contract clause that authorized it. The final number carries a cryptographic signature and a UTC timestamp. If anyone (auditor, counsel, the creator) asks "where does this come from?", the answer is on the line that produced it.

Apr 2026 · Maren Aldo · § Net royalty
computed May 1 · 00:00:14 UTC
Units sold
1,224
SOURCE
App Store · pulled May 1, 00:00:08 UTC
× Average sale price
$14.24
SOURCE
App Store sales report · row hash a2f1…d09c
= Gross sales
$17,424.00
COMPUTED
multiply · units × price
− Store fee (30 %)
−$5,227.20
SOURCE
App Store standard fee · deducted at source
× Creator share
× 0.85
CLAUSE
CR-01847 §4.1 · v3 · tier crossed Q4 2025
− Reserve holdback (30-day)
−$0.00
CLAUSE
CR-01847 §6 · already passed for prior period
Net to Maren
$10,367.28
COMPUTED
finalize
SIGNED · STATEMENT V1
SHA-256 b7a4f2e1c93d…2f1c · ran against CR-01847 v3 · published May 1, 09:14:22 UTC
Inputs
Every input cites its source.
Units, prices, fees, refunds, expenses: each line records the platform it came from, the moment it was pulled, and the row hash of the source data. Reproducible from the source up.
Clauses
Every multiplier cites its clause.
Creator share, tier rate, reserve, recoupment: every operation that bends the math points back to the exact clause and contract version that authorized it.
Operations
Every computed line is named.
Add, subtract, multiply, allocate: the operation that produced an intermediate value is recorded next to it. Nothing is "computed somewhere else."
Signature
The final number is sealed.
SHA-256 hash + UTC timestamp on every published statement. The same hash recomputes from the same inputs. It changes the moment any input does.
Pull-based, period-aligned

Period boundaries stay clean.

There's no real-time order feed. No webhook from a storefront ever lands a sale in CleaRoyalty mid-period. By design. The engine pulls when it's time to run a period, and the data it pulls is what the period sees. No more, no less. Statements you ship match what was true at period close, exactly. A creator and an auditor looking at the same period a year apart get the same answer.

April period
data accrues at the source
pull · Apr close
May 1 · 00:00 UTC
May period
data accrues at the source
pull · May close
Jun 1 · 00:00 UTC
June period
Each pull collects Sales Expenses Ads Bank Payouts
✓ Pulls land at period boundaries. The April period sees exactly what was true on May 1, 00:00 UTC.
✕ No mid-period webhooks. No partial-state queries. A storefront that goes quiet for a day doesn't change anything. The next pull catches up at close.
Recalculate cleanly

Late docs change the math. The diff shows it.

When a late expense document or supplementary report lands after a period has been drafted, the engine recomputes the affected period and shows you exactly what changes. Nothing leaves CleaRoyalty until you approve the new numbers. If the period is already published, the recalc produces a proposed amendment with the same diff and the same trace, and you decide. Once a period is locked, it stays locked. Refunds, chargebacks, or late adjustments tied to a locked period flow into the next open period instead. The closed record is the closed record.

Apr 2026 · Maren Aldo · recalc
+ Amex CSV · Apr 28
Line
Was
Now
Gross sales
17,424.00
17,424.00
Store fee (30 %)
−5,227.20
−5,227.20
Allocated ad spend
−640.00
−895.50
Creator share (× 0.85)
+9,776.30
+9,559.62
Net to Maren
10,416.30
10,199.62
Deterministic by construction
Re-running a closed period returns the same numbers, every time. The contract version is pinned, the source data is snapshotted, the formula is the same.
Late docs are a workflow, not an exception
Drop in an Amex CSV or supplementary report any time. The period recomputes, the diff surfaces, you approve before anything goes out.
Amendments after publish
If a published statement needs to change, the recalc produces a proposed amendment with the same diff view. Original stays intact and remains the authoritative record for what was sent.
Locked at the objection window
Once the contractual objection window closes, statements lock permanently. There is no override path inside CleaRoyalty. Corrections after that happen with a signed audit-package export, never with quiet edits.
Anomaly watch

Surprises in the data show up to you, not your creator.

The engine watches every pull against rolling baselines. Anything that looks off is flagged on the dashboard and emailed to admins, before the period drafts, before a statement ships, before a creator opens the portal and asks why.

Refund spike
flagged
Refunds for the period exceed your tenant's rolling baseline by more than two standard deviations. The period stalls until you triage.
e.g. JST · Apr · refunds 4.1× baseline · 47 events
Revenue swing
flagged
Period gross moves more than the threshold versus rolling average, up or down. Worth a glance before the statements go out.
e.g. DF · Apr · revenue −38% vs 6mo avg
Missing data
flagged
A connected source hasn't reported in 24+ hours past expected. Auth lost, rate-limited, schema changed: we surface the cause and the fix.
e.g. Keap connector · last sync 36h ago · auth refresh required
Ad-spend variance
flagged
Allocated ad spend deviates significantly from the prior period for a SKU or campaign. Important when expenses recoup against royalties.
e.g. URM · Course X · ad spend +212% vs Mar
Connector failure
flagged
A pull fails repeatedly (24 hourly retries). The period holds, the cause is reported, and admins are paged via email so the next pull can recover.
e.g. Bill.com · 24 retries failed · investigate
Calculation outlier
flagged
An artist's payout for the period deviates significantly from their rolling average. Could be a real tier crossing, or a contract miswire worth a second look.
e.g. Maren Aldo · Apr · +287% vs 6mo avg

Watch a period run itself.