Skip to content

CT (Chatting Team) Manager

Who this is for: Chatting Team managers. Time: ~12 minutes. You'll need: the management.ct module for the core surfaces, plus a grant per tool below (management.ct.overtime, management.ct.personal_sales, …) — P&C grants them individually, so you may have some and not others. Read Department Managers — the basics first.

Everything in the manager basics guide applies to you — Time Validations and Leaves & Absences work the same way. This guide covers the CT-only tools.


The CT management landing

Open Management and select the CT tab. Alongside Time Validations and Leaves, you get the CT toolset:

CT management landing: Time Validations, Leaves & Absences, Announcements, CT Quiz Winners, Model Mapping, Personal Sales Tracker, Cover Shift / Assist, SO-OF Model Sub Count, Overtime, and Pay Breakdown.

  • CT Quiz Winners — submit CT quiz wins on behalf of employees.
  • Model Mapping — track which CT employee covered which team each cutoff.
  • Personal Sales Tracker — reconcile pasted PST rows against in-system transactions for commission.
  • Cover Shift / Assist — record one CT employee covering another's shift, or assisting on another model as an extra body.
  • SO-OF Model Sub Count — record each stream session's subscriber count.
  • Overtime — record extra hours for fixed-rate CT employees; paid at their derived hourly rate on the next payroll sync.
  • Pay Breakdown — read-only commission and daily-bonus figures per cutoff.

How these fit together

Most of your day-to-day is crediting the right chatter for the right sales. Three surfaces feed that, in a chain:

  1. Model Mapping and Cover Shift / Assist record who was working which model, when — as coverage assignments. Regular team coverage, moving-support duties, and one-off cover shifts are all coverage assignments under the hood.
  2. Personal Sales Tracker (PST) takes a chatter's validated sales sheet and ties each in-system OF transaction to one of those assignments.
  3. Pay Breakdown rolls the attributed transactions up into commission that lands on the payslip Finance runs.

The key rule (post-#322): a PST upload must attribute to a cover shift, an assist, or a moving-support assignment. Regular team rows are not valid PST targets. So before you can upload a chatter's personal sales, that chatter needs a cover-shift or a moving-support row in the cutoff — otherwise the upload is blocked and the page points you to Model Mapping or the cover-shift form to create one first.

The rest of this guide walks each operation in that order: set up coverage (Model Mapping + moving support), record cover shifts, then upload PST against them.


1. Model Mapping

Open Model Mapping. This is the per-cutoff record of which CT employee covered which team.

Model Mapping: a cutoff-period selector and the per-cutoff team setup.

  • Pick the cutoff period at the top.
  • If nothing exists yet, Set up teams for this cutoff to start.

Once set up, you get a per-model editor. For each model, add a coverage row: pick the employee, the days, and the start/end. Use Sync teams to refresh the model list, and switch between Table and Calendar views.

Model Mapping editor: per-model cards with "Add row" (employee, days, start/end), Sync teams, and Table/Calendar toggle.

Switch to the Calendar view (and By team / By employee) to see coverage laid out across the cutoff's days.

Model Mapping calendar view: per-model rows across the cutoff's day columns, with By team/By employee and Table/Calendar toggles.

  • Mapping drives who is credited for each model's coverage that period, which feeds commission.

One team per account, not per model

A model can be worked on more than one platform, and the two are different jobs with different revenue. So a team covers an account, not a model: "Karina" is Karina on OnlyFans and SP Karina is Karina on SextPanther, each with its own roster. Each card carries a platform badge, and the board groups the platforms into sections once there is more than one.

OnlyFans 3.00% of the day's tips + messages net, shared by the roster
SextPanther 1.50% of the day's text & media + tips, shared by the roster
  • The platform dropdown next to the cutoff picker narrows the board to one of them, and the team picker beside it follows — so you can't end up on a team the platform filter has already hidden.
  • A platform HRIS can't price coverage on — Chaturbate, Stripchat, BongaCams, MyFreeCams — gets no team. Adding one of those accounts changes nothing here.
  • A model with no account at all still gets one team, badged No account. It pays no commission, and always has; coverage bonuses, which pay for showing up, are unaffected.
  • Attach an account to a model you'd already staffed and the next Sync teams hands that account to the team that already has the roster, rather than leaving it unpaid beside a new empty one.
  • Cover shifts and assists are OnlyFans-only. They're paid from personal sales, which no other platform reports, so the form refuses them on a SextPanther team and says so. Regular coverage rows are unaffected.

Model Mapping grouped by platform: the end of the OnlyFans section with OF badges, then a SextPanther heading over "SP camilaamorronexx" and "SP keirasworldd" with purple SP badges, then a "No account" heading.

Day-off shifts

Someone covering a model outside their normal roster — a Team Leader working a day off — flips the Day-off shift switch on the add-row form.

  • It earns the team's commission split exactly like any other row: same rate, same roster, same division. Alone on the model that day, they take the whole day's percentage.
  • It takes no CT Daily Bonus slot. The bonus pays whoever is rostered to a model, and a day-off shift is by definition not that.
  • The row carries a Day-off badge, and the shift is listed on the Daily Bonus breakdown so it's visible as a decision rather than just absent.

It has to be its own row. You can't drop a day-off shift inside an existing range for the same person on the same team — the form refuses it, and says so. That's the point: the existing row would still earn a bonus for that day and quietly cancel the flag. Split the range around the day off first:

Maria · May 1–15                     ✗ a day-off shift on May 5 is refused
Maria · May 1–4, May 6–15            ✓ then May 5 as a day-off shift

The money moves, and not only on that day. The bonus pool is fixed, so the excluded share can't vanish — it goes to the chatters. If the shift was the only coverage on that day, the day stops counting entirely and the model's share re-spreads over its remaining days, so the per-day rate rises on days the shift never touched.

Anyone can be flagged — "TL" names the usual case, not a rule. HRIS doesn't know anyone's rest day, so the switch records what happened; it can't check it.

Operations on this page, step by step

  • Set up teams for this cutoff — the first thing you do on a fresh cutoff. It creates the per-model model teams and the fixed system teams (Moving Support, and a Probationary per platform) for that period. Until you run it the board is empty.
  • Sync teams — re-runs the setup to pull in any models or accounts added since. Existing rows are kept; new teams appear. Run it if a model is missing from the board, or after a model is added to a second platform.
  • Add row (on any team card) — pick the employee, then a start day and end day from the cutoff's day range. Start day must be on or before end day. This is the coverage assignment.
  • Remove row (trash icon) — deletes a single coverage assignment. Removing an empty team card deletes the team.
  • Platform and All teams — two filters that compose. Pick a platform to narrow the board to it; the team picker then only offers that platform's teams. The System section stays visible, carrying that platform's system teams — picking SextPanther keeps SP Probationary in view, because a probationary chatter on SextPanther is part of that platform's roster.
  • Table / Calendar and By team / By employee — read-only views of the same data; they don't change anything.

Probationary

Probationary is a system team — a holding bucket for a chatter not yet on a model of their own. It earns no commission and takes no share of the CT Daily Bonus pool; it records where someone is, not what they are paid.

There is one per platform, named the same way model teams are: the OnlyFans one is Probationary and SextPanther's is SP Probationary. Put a chatter on the bucket for the platform they are actually learning on.

On a cutoff you set up before this existed, the SextPanther bucket won't be there yet. Press Sync teams once and it appears, with the OnlyFans one and its rows untouched.

Model Mapping, System section: three cards — Moving Support with an OF badge, Probationary with an OF badge, and SP Probationary with a purple SP badge — each marked System and each with its own Add row control.

Moving support duties

Moving Support is a system team on the Model Mapping board (it appears automatically after Set up teams — you don't create it, and it isn't tied to a single model). Use it to record a chatter who floated across models rather than covering one fixed team or one named person's shift.

Unlike Probationary there is only one, and it is OnlyFans. Moving support is paid from attributed personal sales, which no other platform reports — a SextPanther one would roster people and pay them nothing.

  • Find the Moving Support card on the Model Mapping board and Add row: employee + the day range they floated.
  • Each moving-support row is a valid attribution target for Personal Sales Tracker. That's why these rows — and only these rows — show an Upload PST icon and a clickable employee name: both jump straight to that chatter's PST page so you can attribute their sales to the moving-support assignment.
  • Use moving support (vs. a cover shift) when there's no single "covered-for" person — the chatter helped across several models and you just need somewhere to hang their personal sales for the cutoff.

Model Mapping — the Moving Support system-team card with coverage rows, each showing the Upload PST icon and a clickable employee name.

Which one to record: a cover shift replaces one named person on one model for a specific time window (and can dock that person as absent). An assist is the same shape minus the replacement — the chatter worked another model's account as an additional body, so nobody is named and nobody is marked absent. Moving support is open-ended floating help across models with no single team. All three are coverage assignments and all three can receive PST — pick whichever matches what actually happened.


2. Cover Shift / Assist

Open Cover Shift / Assist. This surface records a CT employee working a model team outside their own roster, in two flavours:

  • Cover — they stood in for a named chatter who wasn't working that shift. That person is marked absent for those days.
  • Assist — they helped on another model's account as an additional body. Nobody is covered and nobody is marked absent.

Both carry a time window, both pay the same solo commission on the sales you attribute to them, and both are valid targets for a personal-sales upload — see Personal Sales Tracker. The Cover vs Assist panel at the top of the page repeats this if you need it in the moment.

The list has All / Cover / Assist tabs, and each row carries a badge so you can tell the two apart at a glance.

Cover Shift / Assist for the selected period: the expanded "Cover vs Assist" explainer, All / Cover / Assist filter tabs, and a table whose Kind column badges each row as Cover or Assist — the assist showing an em dash under "Covering / Assisting".

Click New shift to record one. The form opens on two tabs — Cover and Assist — because the two need different fields:

New Cover Shift / Assist form on the Cover tab: cutoff, model team being covered, assignee, "covering for", start/end (PHT), and a "mark the covered employee as absent" toggle.

The Assist tab drops the two fields a cover needs and nothing else does — there is no Covering for picker and no mark-absent toggle, because an assist replaces nobody:

New Cover Shift / Assist form on the Assist tab: cutoff, model team, assignee (the one assisting), and start/end (PHT). No "covering for" field and no mark-absent toggle; the button reads "Save assist".

Filling the form, field by field

  1. Cutoff — defaults to the earliest open cutoff. The team, employee, and day lists below are all scoped to this cutoff, so set it first.
  2. Model team being covered — only model teams appear here (system teams like Moving Support are excluded — a cover shift is always for a specific model). If the list is empty, the cutoff hasn't had its teams set up yet in Model Mapping.
  3. Assignee (the one covering) — the chatter who actually worked the shift. This is who gets the coverage credit and who you'll later attribute PST to.
  4. Covering for — Cover tab only. The person whose shift it was. Must be different from the assignee (the form won't submit if they match). The Assist tab has no such field: an assist replaces nobody.
  5. Start / End (PHT) — each is a date + time in Philippine wall-clock. The date prefills to the cutoff's first day as a hint; correct it to the real shift window. The time window matters: it's what PST uses to flag transactions that fall outside the shift.
  6. Mark … as absent (default on) — Cover tab only. Records an absence for each day of the shift. Fixed-salary employees are docked a daily rate; hourly employees are unaffected (they shouldn't be logging Time Doctor time anyway). Uncheck it for an approved swap where no deduction applies. The Assist tab doesn't show this at all — there's no one to mark absent.

Click Save. A cover shift moves the coverage credit to the person who actually worked it; an assist adds credit for the helper on top of the model's own roster. Neither changes that team's shared commission — but both count toward the model's daily bonus for the days they cover, so an assist adds a slot and the day's pool divides one way further.

Shortcut from PST: if you start a PST upload for a chatter who has no eligible assignment, the empty state offers Assign Cover Shift / Assist — that link opens this form with the assignee prefilled to that chatter, so you can create the shift and come straight back to upload.

The cover-shift detail page

Click a row in the list to open its detail page. It shows the shift summary (who covered whom, or who assisted on which model, plus the PHT window) and a list of Attributed transactions — every PST entry currently tied to this shift, with gross / net / fee and a refunded badge where relevant.

Cover-shift detail page: the shift summary card with "Edit in PST", and the Attributed transactions list.

From here:

  • Edit in PST (and the per-row Edit) jump to the chatter's PST page with the cutoff preserved, so you can add or remove attributed sales.
  • An empty list means no personal sales have been attributed to this shift yet.

3. CT Quiz Winners

Open CT Quiz Winners to submit quiz wins on behalf of employees. The list has Pending / Approved / Rejected / Auto-rejected / All tabs.

CT Quiz Winners list with status tabs and a New action.

Click New to submit one — pick the employee and the win date; the $10 prize lands on the payroll period that covers that date. Attach proof optionally.

New CT Quiz Winner form: employee, win date, and optional proof.


4. Overtime

Open Overtime to record extra hours rendered by fixed-rate CT employees. Overtime is paid at the employee's derived hourly rate (their fixed cutoff salary ÷ the hours in a cutoff — the same basis leave and absences use) and is applied to payroll on the next Pull/Sync: you record it here, and Finance's next sync books it.

Overtime list for the selected cutoff, with a Record overtime action.

  • Pick the cutoff period at the top; the list shows each entry's employee, date, and hours for that cutoff.
  • Fixed-rate only. Hourly employees aren't eligible — their hours are already captured by Time Doctor, so an overtime line on top would pay them twice (the form rejects an hourly pick).

Click Record overtime to add one:

New overtime form: employee, date, and overtime hours (decimal or HH:MM).

Filling the form, field by field

  1. Employee (fixed-rate CT) — the searchable picker lists active CT employees. Pick the one who worked the extra hours. Choosing an hourly employee is rejected on save with a "fixed-rate only" message.
  2. Date — the calendar date the overtime was rendered (date only, no time). The cutoff that contains this date is the one that gets the pay.
  3. Overtime hours — the number of extra hours, entered either as a decimal (e.g. 1.5) or in HH:MM (e.g. 1:30); the toggle switches between the two. This is a duration, not a clock time.
  4. Notes (optional) — context for Finance.

Click Record overtime. Nothing changes on payroll immediately — the entry flags the cutoff for a re-sync, and the next Pull/Sync books an Overtime line item (amount = hours × the employee's derived hourly rate) on that employee's payslip. Editing or deleting an entry re-flags the affected cutoff so the next sync corrects the payslip.

Why fixed-rate only? A fixed employee's salary is a flat per-cutoff amount, so genuine extra hours aren't otherwise reflected on their pay. Hourly employees are paid from their logged Time Doctor hours, which already include any extra time — an overtime line on top would double-pay them.


5. Personal Sales Tracker

Personal Sales Tracker (PST) is where a chatter's personal sales sheet becomes commission. Each row you confirm ties one in-system OF transaction to that chatter and to one of their coverage assignments — so the money lands on the right payslip.

Every personal-sales entry must be attributed to either of the following (both are set up elsewhere in this guide, then uploaded against here):

  • a Cover Shift — the chatter covering a named person on one model, for a specific day + time window; or
  • a Moving Support assignment — the chatter floating across models over a contiguous day range.

There is no unattributed option — if the chatter has neither in the cutoff, you have to create one first (see the prerequisite below).

Open Personal Sales Tracker, pick a cutoff, and you get the CT-employee landing list.

Personal Sales Tracker: cutoff selector and a per-employee list (PST entries, last upload).

  • Scoped to a cutoff; the table lists each CT employee with their PST entry count and last upload for that cutoff (so you can see at a glance who's still outstanding). Search by name or code; sort by any column.
  • Click a chatter to open their per-employee PST page. You can also arrive here from the Upload PST icon on a Moving Support row (Model Mapping) or from Edit in PST on a cover-shift detail — those carry the cutoff for you.

Prerequisite: an eligible assignment

The per-employee page checks whether the chatter has a cover-shift or moving-support assignment in the selected cutoff:

  • If they have none, the page blocks the upload and shows an empty state with two buttons — Go to Model Mapping (to add a moving-support row) and Assign Cover Shift (opens the cover-shift form with this chatter prefilled). Create one, then come back.
  • If they have one or more, the Add sales button appears.

PST per-employee page with no eligible assignment: the blocked empty state and its "Go to Model Mapping" / "Assign Cover Shift" buttons.

The upload flow, step by step

The whole flow happens in place on the page — the top-right button changes label as you move through the three modes (list → paste → confirm).

1. Add sales. Click Add sales to enter paste mode.

2. Attribute to. Every upload must be attributed to a shift — either a Cover Shift or a Moving Support assignment. There is no "unattributed" option; personal sales always hang off one of these two, which is how the commission reaches the right chatter. Pick the category, then the specific instance from the dropdown. Each button shows a count of available options; if a category has exactly one option (and the other has none), it's auto-selected to save clicks. The whole upload attributes to this one assignment — you pick it once here and every confirmed row inherits it.

Moving support is a single, contiguous range — not one entry per day. A Moving Support row spans a start day – end day window (e.g. Jul 1–15), and it shows up in the picker as one option covering that whole range. You do not create a separate day-by-day entry to paste against — add the moving-support range once in Model Mapping, then attribute the chatter's sales for any day inside that window to that single entry. (Cover shifts, by contrast, are pinned to a specific day + time window.)

3. Paste the rows. Paste the data rows from the validated PST sheet — data rows only, no header. The columns are tab-separated (date/time, gross, fee, net, description, model). HRIS reads only the model name and the timestamp; the dollar amounts come from the matched in-system transaction, not from your paste — so a mistyped amount in the sheet can't inflate commission.

The model column must be the model's exact OF username. Matching keys on model + timestamp, and the model is resolved by its OnlyFans username (the @handle) — not a display name, nickname, or the CT floor's shorthand. If the sheet's model column isn't the exact OF username, the row comes back unmatched even when a real transaction exists at that minute. Keep the sheet's model column set to the live OF username; if a model's handle changes upstream, update the sheet to the new one.

PST paste mode: the "Attribute to" category buttons (Cover Shift / Assist / Moving Support) with the instance dropdown, above the paste textarea, whose hint says amounts come from the matched in-system OnlyFans transactions.

4. Preview matches. Click Preview matches. HRIS parses each row and matches it against in-system OF transactions in a ±60-second window around the timestamp for that model. Each row gets a badge:

  • matched — found a transaction; it's checked by default.
  • unmatched — no transaction in the window (wrong model, wrong time, or the transaction isn't in-system).
  • parse error — the row couldn't be read (bad date/model column).
  • no transaction left — two paste rows landed on the same minute but there was only one transaction; rows pair 1:1 in order, and the surplus row gets this badge.

5. Confirm. In confirm mode each matched transaction is a checkbox. Review and adjust the selection; a running net / gross total of what's checked shows at the top. Two things to watch for:

  • Already saved (disabled, greyed) — a transaction can credit only one employee. If it's already recorded (for anyone), you can't check it. To re-record it elsewhere, remove the existing entry first.
  • Out-of-range warning (amber ⚠) — the transaction's date falls outside the picked assignment's coverage window. It's a heads-up, not a hard block — make sure you attributed to the right shift.

PST confirm mode: the shift picker at the top, the per-row list with match badges and checkboxes, and the running net/gross totals.

The same flow attributed to a moving-support assignment looks like this — the picker shows Moving Support selected, and its instance is the whole-cutoff contiguous range (e.g. Moving support · Jul 1–Jul 15), so every matched row inside the cutoff hangs off that single entry:

PST confirm mode attributed to a moving-support assignment: "Moving Support" selected with a whole-cutoff "Jul 1–Jul 15" range, and matched message rows.

6. Confirm and save. Click Confirm and save. HRIS creates an upload holding each selected entry, tied to the chatter and the assignment. You get a "Saved N entries" toast and drop back to the list.

Reviewing and correcting entries

Back in list mode there are two tabs:

  • Entries — every attributed transaction for this chatter in the cutoff, newest first. Delete a single entry, or select several and bulk delete. Deleting is a soft-delete that stamps you as the actor and frees the transaction to be re-recorded to another chatter; it also flags the cutoff for a pay resync so Finance picks up the change.
  • History — the list of past upload sessions (who uploaded, when, how many entries), so you can trace where an entry came from.

If commission looks wrong for a chatter: check that (a) their sales were attributed to the right assignment, (b) no transaction is double-claimed elsewhere, and (c) out-of-range rows really belong to that shift. Fix by deleting the mis-attributed entries and re-uploading against the correct cover-shift / moving-support assignment.


6. SO-OF Model Sub Count

HRIS suggests a figure. It never records one for you. An hour after a stream ends, it asks OnlyFans how many new subscriptions landed during that session and shows you the answer — with an Apply button. Nothing is paid on that number until you apply it or type your own.

That is deliberate. A suggestion that quietly became the payable figure would mean money moving because nobody looked, and the whole reason this board exists is that a person stands behind the count. A session nobody has acted on still pays its operators nothing, exactly as before — a suggestion sitting unapplied is still a to-do.

It can't always produce a suggestion, and when it can't it says so rather than offering a zero — see When there's no suggestion.

Open SO-OF Model Sub Count. It's the same calendar the SOT Scheduling Hub uses — Month, Year, Cutoff, and Day — showing every stream session.

SO-OF Model Sub Count, Month view: a calendar of August stream sessions, two of them flagged amber for having no sub count recorded yet.

  • An amber ⚠ marks a session that has finished with no count recorded. Those are your to-do list. A session with an unapplied suggestion is still on it — the suggestion isn't a count until you say so.
  • The Day and Cutoff views list each session with its recorded count, or Not recorded. A session with a waiting suggestion shows it as · 42 suggested, so you can see at a glance which ones are one click away.

SO-OF Model Sub Count, Day view: two sessions for keirasworldd on Aug 3, showing 53 subs and 5 subs.

Entering a session's numbers

Click a session to open it.

Sub count dialog for a keirasworldd session: a single Subscriptions field showing 53, then Rebills, WM unlocks and Total sales recorded for reference.

  • Subscriptions is the session's full subscriber count — the number SOT subscriber commission is paid on.

    If a suggestion was fetched, it's shown underneath with an Apply button. Apply records that figure as the session's count straight away — it's the same as typing it in, and your name goes on it. You can type over it afterwards; a later fetch never overwrites what you recorded.

    Blank and 0 are different. Blank means nobody has counted — the session pays nothing and keeps its amber flag. 0 means you counted and there were none. Save a genuine zero as 0, not by leaving the box empty. - Rebills, WM unlocks, and Total sales are recorded for reference only — no effect on anyone's pay. They're captured here because this is the moment you have the numbers in front of you. - Notes is free text for anything worth remembering about the figures.

This number becomes money. It's split among the session's stream operators and team leaders and tiered per person for the month. Enter what you counted, not an estimate.

Where the suggestion comes from

An hour after the session's end time, HRIS asks OnlyFans for the new subscriptions in that window — paid ones, plus free and free-trial subs. The hour is there because OnlyFans lags behind a live stream; asking at the end reliably comes back short.

It is a starting point, not a verdict. OnlyFans can only see what it can see, and you were there — if your count differs, yours is the one that's right.

Renewals are not included. A fan whose existing subscription renewed during the stream isn't a new sub, and counting them would pay for something the session didn't land. Renewals fill the Rebills field instead, which pays nothing.

If the session is rescheduled or shortened, the fetch re-arms and uses the new window — it never reports on a window the session no longer covers.

When there's no suggestion

The fetch will tell you it couldn't produce a number rather than guess at one. None of these mean zero subscriptions — they all mean nobody knows yet, and the session needs a count from you.

What the dialog says What happened
No suggestion yet The session hasn't ended, or the hour hasn't passed
The fetch failed OnlyFans couldn't be reached. It retries on its own; you can enter the count meanwhile
The price changed around this stream The subscription price moved mid-window, so paid and free subs can't be separated into one reliable total. Both figures are shown — judge it and type the one you want
This model has no OnlyFans account There's nothing to ask. These sessions are always counted by hand

A zero is never invented. If a fetch fails, the session reads Not recorded and keeps its amber flag. The alternative — offering 0 as a suggestion — invites a click that pays the operators nothing and looks like a deliberate count, which is the worst way for this to be wrong.

When you can edit

There's no cut-off for entering a count. Unlike Overtime, a closed period doesn't lock you out — you often only have the number after the fact, and a missing count is a wrong payslip either way.

What you'll see instead is an amber warning on sessions whose payroll has already moved past draft, telling you how many payslips your change can no longer reach. The save still goes through, and every save flags the cutoff so Finance is prompted to re-sync. If some payslips are already processed or sent, tell Finance — their share is frozen and only a re-run picks up the rest.

If a model has stream commission switched off (see Models), the dialog says so. Keep recording the count — it still feeds reporting — but no subscriber commission is paid for that session.


7. Pay Breakdown (read-only)

Open Pay Breakdown to see the same commission and daily-bonus figures Finance sees for a cutoff.

  • Commission is paid per team, at that team's platform rate — OnlyFans at 3.00%, SextPanther at 1.50%. Cover, assist and moving support are OnlyFans-only throughout, because they're paid from personal sales.
  • The Daily Bonus pool is OnlyFans only. It's a fixed share of OnlyFans CT bases divided among the chatters who worked them, so a SextPanther roster takes nothing from it and changes nobody else's share. SextPanther coverage is paid its 1.50% and nothing from the pool.
  • A model carries weight in the pool only if somebody earning a slot worked it. Rostered only on SextPanther? It still contributes its 2.7%, takes no share, and that money funds the models that were worked — the same thing a model below the first layer already does. Rostered to nobody at all? It keeps its weight on purpose, so its unpayable share trips the validation and the run is held until someone fixes the mapping.
  • Revenue from any other platform (entered under Models → Income) feeds neither.

Pay Breakdown: Commission and Daily Bonus tabs, a total-commission summary, "How this is calculated", and a per-chatter breakdown, with Export CSV.

Open How this is calculated for the rates and the four commission paths.

Commission "How this is calculated" expanded: the rates line showing a regular percentage per platform, then "Commission is paid on platform earnings", with Regular team (day net is that account's CT base), Cover shift, Assist and Moving support.

  • Choose the cutoff period; switch between Commission and Daily Bonus.

Pay Breakdown — Daily Bonus tab: bonus pool (% of CT base) and a per-model breakdown.

Daily Bonus "How this is calculated" expanded: the pool is 2.7% of the total CT base (OnlyFans tips + messages net), the five distribution steps, the layer table and who earns. - The summary shows the total for the cutoff (regular / cover / moving) and a per-chatter breakdown. - How this is calculated explains the numbers; Export CSV downloads them. - This view is read-only — the figures match what lands on payslips.


Troubleshooting

Problem What to do
Model Mapping is empty Pick the right cutoff, then Set up teams for this cutoff
A model is missing from the board Sync teams to pull in models added since setup
A model appears twice, e.g. "Karina" and "SP Karina" Expected — those are two accounts, two rosters and two rates. Staff whichever the chatter actually worked
A model's second platform has no team Only OnlyFans and SextPanther can be commissioned. A Chaturbate (or Stripchat, BongaCams, MyFreeCams) account gets no team, because nothing can say what coverage on it would be paid on
A team is badged No account The model has no OnlyFans or SextPanther account, so the team earns no commission. Coverage bonuses are unaffected
A cover shift is refused on a SextPanther team Cover and assist are paid from personal sales, which SextPanther doesn't report. Record it on the OnlyFans team
A day-off shift is refused as "overlapping" The person already has a range covering that day on that team, and it would still earn a daily bonus. Split the existing range around the day off, then add the shift
The Day-off shift switch does nothing on a cover or assist Those are paid solo from personal sales and take no roster slot, so there is no daily bonus to exclude them from. The switch is regular rows only
A chatter's bonus went up and nobody changed their mapping Someone marked a row on one of their models as a day-off shift. That share can't vanish, so it goes to whoever is still rostered — including on days the shift never covered
A platform account won't delete It has earnings or a coverage team on it. Switch the account off instead — the history stays and no new teams are created for it
Daily Bonus shows "payment held" and nobody was paid A model earned this cutoff and has no coverage rows at all. Its share can't be paid, so the totals don't reconcile and the run is held. Map its team in Model Mapping, then Pull/Sync
A model's Weight reads "no bonus-earning coverage" It's worked, but only by coverage the pool doesn't pay — a SextPanther team. It still contributes to the pool; its share goes to the models that were worked
Commission looks wrong in Pay Breakdown Check Model Mapping and Cover Shifts for that cutoff — they drive the credit
A cover isn't being paid to the right person Add/adjust the Cover Shift record for that window
Can't start a PST upload — "no cover-shifts or moving-support assignments" The chatter needs an eligible assignment first: add a Moving Support row in Model Mapping or Assign Cover Shift
PST rows won't reconcile They must match in-system OnlyFans transactions within ±60s of the timestamp for that model
A PST row is "unmatched" but the sale is real The model column probably isn't the model's exact OF username — fix the sheet's handle and re-preview
A PST candidate is greyed out / "Already saved" That transaction is already credited to someone. Remove the existing entry first — a transaction credits only one employee
PST row shows an out-of-range ⚠ The transaction date is outside the picked shift's window — attribute it to the correct cover-shift/moving-support instead
Overtime isn't on the payslip It books on the next Pull/Sync — Finance needs to sync the cutoff. Also confirm the employee is fixed-rate (hourly overtime is never booked)
Can't record overtime for someone Overtime is fixed-rate only — hourly employees are rejected (their Time Doctor hours already cover extra time)
A session shows "Not recorded" Nobody has recorded a count. Until someone does, that session pays its operators nothing — open it to apply the suggestion or enter your own
Count entered but the operator's commission didn't change It books on the next Pull/Sync — Finance needs to re-sync the month's second cutoff, which is where SOT subscriber commission lands
Sub count dialog says commission is switched off That model has Stream commission available unticked in the Models module. Recording still works; nothing is paid
Amber ⚠ on a session in the sub-count calendar It finished with no figure from either source. Open it and enter the number (0 is a valid answer — save it as 0, don't just leave the box blank)
A session shows "42 suggested" but still counts as not recorded Correct — a suggestion pays nothing. Open it and press Apply, or type your own number
Pressed Apply, want a different number Type over it and save. Apply just fills in the count; it isn't locked
Typed a count, and the fetch replaced it It can't. A recorded number is never overwritten by a fetch — the suggestion is kept beside it for comparison only. If your figure really changed, check who last saved the session
The dialog says the price changed around this stream Paid and free subs can't be separated into one reliable total for that window, so no suggestion is offered. Both numbers are shown — judge it and type one
A model with no OnlyFans account never gets a suggestion Expected — there's nothing to ask. Those sessions are always counted by hand, and they read Not recorded, never 0