creatorhub admin

Last 14 days USD

Per creator click a row for detail · money in USD, Owed/Paid in the creator's currency · lilac rows are Month 2 (20% / 5%) · the CSV carries every column this table leaves out

💬 Creator messages conversations, not videos — videos to approve are in Pending approval below · answering notifies them in the hub

Quiet conversations archive themselves after days — a creator writing again brings the thread straight back.

Pending approval grouped by creator · oldest first · approving launches the ad · feedback required when rejecting

Pick a creator to open the conversation.

Add creator

Creators

🏆 Leaderboard what creators see in their hub

Same ranking a creator opens on their own Leaderboard tab — first name, photo, badges, and commission earned in the period, active creators only. Creators now see this whole board (owner 2026-09-23) — there is no top-10 cut any more, so what you read here is exactly what they read. Commission counts each creator's own rate on their code and link sales plus their rate on ad revenue their videos earned, and a creator Into Month 2 🚀✨ is on the higher pair — so the order can differ from ad spend or sales volume.

All time is the board everyone opens on, and its commission and sales are the same figures as the per-creator table on Overview. The dated windows read momentum, not standing - a creator who started today can out-earn one who has been running a fortnight.

Payout run pay everyone in one bank upload instead of one at a time

Exporting does not mark anyone paid — it opens a pending run below. Confirm it once the transfers actually land.

Pending runs confirm after the bank has sent the money — untick anyone whose transfer bounced

Record payout one-off / manual — bank transfer, details per creator below

Payout history attach the transfer confirmation per payout, then send it to the creator

Audit trail who did what, when — moderation + money events, latest first

Brand assets creators see these as download buttons on their dashboard

or

Commission

The 10% pays on every store sale carrying the creator's discount code or their link — the code on its own counts, they don't have to send the customer through the link. The one exception is traffic we put spend behind: if the order's UTMs show it came from an ad, it pays no 10%, because that revenue already pays them the 1% below. TikTok organic counts — that's where the creators post, so it's their audience — but a TikTok post we boost does not. The 1% on ad revenue has no ROAS threshold.

What counts as "came from an ad" UTM values that disqualify an order from the 10% — used by the daily ingest

Comma-separated, case-insensitive. An order is ad-driven when its utm_source is in the source list (platforms we only ever appear on by paying) or its utm_medium is in the medium list (we paid for it, whatever the platform).
This is what separates TikTok organic from TikTok ads. A creator's own post arrives as utm_source=tiktok with an organic or empty medium, so it pays. A boosted one carries utm_medium=paid (or utm_source=tiktokads), so it doesn't. Never add plain tiktok to the source list — it would cut creators out of their own organic sales.

Turn-off rule advisory — live ads under the floor get flagged in the Pipeline as your signal to pause them in Ads Manager

You pause ads in Meta Ads Manager yourself — the hub has read-only Meta access and the daily sweep mirrors each ad's status automatically (paused in Meta → "Turned off" here, running again → back to Live). Turning off freezes figures — accrued commission stays owed and payable; the creator gets a gentle notification, never a verdict.

Product links one affiliate link per product, auto-generated per creator

Milestones & guarantees fixed ladder — bonuses paid manually via a payout entry

FX table for ≈ displays only · auto-refreshes weekly (open.er-api.com)

Upload form options comma-separated — creators pick from these dropdowns

Wise batch columns headers for the Payouts → Wise batch CSV

Wise builds a template per currency corridor, so its headers are not fixed. Download your own template once from wise.com/batch/templates, and if a header differs, correct it here — our_field = Wise header, one per line. Only the right-hand side should change.

Changes apply retroactively to what dashboards display — commissions are always computed live from the current rules.

Ingest daily Meta stats

Paste rows as JSON array or CSV with columns: ad_name, date, spend, impressions, clicks, purchases, revenue, ad_status (ad_status optional — the ad's Meta status, mirrored automatically: not ACTIVE → Turned off, ACTIVE again → Live). Rows are matched to videos by the CH-… code inside the ad name. Re-ingesting a day overwrites it (safe to re-run).

Creator sales automatic — swept from Shopify every hour

Every order carrying a creator's discount code is attributed to them automatically. Their affiliate link is Shopify's own /discount/CODE URL, so it applies the code itself — link sales and code sales are the same signal, and both pay. Orders whose UTMs say we paid for the click pay the 1% ad rate instead of the 10% (paying both would charge us twice for the same media). A used code never pays nothing — it is organic or an ad sale, never zero. Revenue is the order subtotal after discounts, before shipping and tax. The last few days are re-swept on every run, so refunds and edits correct themselves.

Attribute an order by hand when the customer forgot the code

For a sale a creator clearly made where nothing in the order points at them — the customer forgot to type the code, or the UTMs were lost. Name the order and the creator, and every sweep from now on attributes it. Do not correct the day by hand instead: the hourly sweep rebuilds each day from Shopify and would erase that within the hour. Saving looks that one order up immediately and tells you what it pays, or that it could not be found.

Check every commission every order behind every number

One row per order, exactly as the hub stored it, with what it pays. Reconcile a creator against Shopify by counting their rows. Paid is what that order adds to their commission; a row paying 1% came from traffic we bought, 10% is their own. If Total and Sum of rows ever differ, the totals are being built from something other than these orders and that is a bug — tell me.

Manual override only to correct a day by hand

Rows: creator, date, orders, revenue — creator can be their slug, @handle, name, or their discount code. Count every order carrying the creator's discount code or their link — the code on its own counts. Then drop the orders whose UTMs say we put ad spend behind them (the values set in Rules → What counts as "came from an ad"); those already pay the creator 1% as ad revenue. TikTok organic is never dropped — that's the creators' own posts; only boosted TikTok traffic is. Optional sources breaks orders down per link (utm_content: store / product), and optional excluded reports what you filtered out. Re-ingesting a day overwrites it.

Where the numbers come from

Creator sales are swept from Shopify by this server, hourly. Ad numbers are pushed in daily by the creative-engine winner scan, because this server holds no Meta credential:


    

Automatic ad batches approved UGC → one ad set per batch, launched through AdNova

Loading…

Approved videos queue per product and wait for the launch day — every few days, everything approved since the last run goes live together instead of an ad set starting the moment one batch happens to fill. On that day each waiting batch uploads its videos to AdNova under their full ad names, one ad set per batch is duplicated from that product's EXCLUDING AUDIENCE template (that duplication is what carries the campaign, the UK + US + AU targeting and the customer exclusions), and each video becomes one ad per landing page — all off the same page, all starting 00:01 the next day. A batch that reaches the size limit stops taking videos and a fresh one opens behind it; both go on the same launch day. Videos keep syncing to Drive on approval, exactly as before.

Copy tests two primary texts + two headlines per ad, one set per batch

Each batch runs one copy set, so a batch is the unit of the test and the read stays clean. A set that has never run always gets the next slot; after that the best measured ROAS wins, except every 3rd batch, which goes to the least-used set so the pool keeps learning.

Launched batches

Settings

The most videos one ad set carries. A batch that hits this stops taking new videos and a fresh one opens behind it — both still wait for the launch day.
Everything approved since the last run goes live together on the launch day, instead of an ad set starting the moment a batch happens to fill. 0 = launch each batch as soon as it is full (the old behaviour).
Hour of the launch day, in the ad account's timezone. The ads themselves still start 00:01 the following day.
On: the launch day sends only batches that reached the size above. A partial batch keeps filling and goes on a later launch day — it is never dropped, and Launch them all now still sends it whenever you want. Off: everything waiting goes, however small.
1 batch in every N runs the least-used copy set instead of the best-performing one, so a set that won early can't quietly take every batch forever. 0 turns it off.
Below this, a set's ROAS is noise, so it is ordered by how little it has been used instead.
Creator NetWork batch number — its own sequence, unrelated to brief DCT numbers.

Creator batches are numbered CNW#1, CNW#2, … — their own namespace, because a batch is whatever five creators filmed, not a scripted concept with a hypothesis. Brief DCT numbers run separately and the two can never collide.

creatorhub admin