Getting in
One shared login across your tools.
Open ops.cyrusmedia.agency (or the original cyrus-ops-dashboard.vercel.app) and sign in with your Signal Desk account β it's the same user database, so your existing email and password work. Kourosh: kuorosh@theatelier3.com. Teammates (Jyri, Houssem, Tara, Dianaβ¦) use their own.
Use the β button (top-right of the app) to switch light / dark. Your choice is remembered on that device.
The big idea
Records are connected, not islands.
The whole point of the Desk is that each record knows the ones around it. You never re-type the same thing twice β you link it.
- A PID knows which Network gave it and which Offer it runs on.
- An Offer shows every live PID on it β and which network is running each.
- Performance rolls up from PID β Offer β Network, and feeds the money numbers.
- A Wishlist request can turn into a real Offer, still linked to the network that asked.
Tabs run left to right roughly in that order. Click any row to open its full card; most cards have an Edit button, a Comments & tasks box, and links to the records it connects to.
01 Dashboard
The morning glance β what's healthy, what needs you.
Your home screen. Top cards show all-time validated revenue, traffic cost, net profit and margin, plus how many PIDs, offers and networks are live. Below that:
- Top PIDs and Poor / at-risk PIDs β ranked by net profit, so winners and bleeders surface instantly.
- Dasta bandi distribution β how many PIDs sit in each quality band right now.
- Alerts β negative-profit PIDs, low-validation PIDs, paused/capped offers, and urgent wishlist items, all in one feed β and pushed to your Telegram group as a daily digest.
- Data checks β automatically flags duplicate tracking URLs, duplicate PID names, impossible performance values (e.g. approved > raw), and multiple live PIDs on the same offer+network. Great to run right after a bulk import.
02 Networks
Who sends you traffic β the full partner profile.
One card per traffic source. This is where the commercial and compliance truth about a partner lives, so you only capture it once and every PID reuses it.
What to fill
- Identity β name, legal entity, website, LinkedIn, status.
- Traffic β type, geos, verticals, platforms, formats.
- Transparency β can they pass Publisher / Sub-pub / Click ID? block sub-sources?
- Capacity β realistic daily volume, pricing models, payout ranges, MMPs.
- Payment β terms (default NET30), method (Wire / USDT), currency, threshold.
- Governance β KYC notes, agreement links, free notes.
On the card
Open a network to see, linked automatically:
- Every PID that came from this network.
- Any wishlist apps this network has asked for.
Set Status to Active On Hold or Closed β it flows through to reporting.
03 Advertisers & Offers
What you're promoting, and the spread you make on it.
An Advertiser is the app owner; each has one or more Offers. The offer is where both sides of the money live:
- Payout from advertiser β what they pay you.
- Payout for network β what you pay the traffic source.
- The gap between them is your margin β and both numbers auto-fill into performance so you don't re-key payouts every day.
Offers also hold GEO, app links, OS/device, caps, allowed / prohibited sources, startβend dates, and separate terms by advertiser vs terms for networks.
04 PIDs
The tracking link β the unit everything measures.
Every PID links to the Network that gave it and the Offer it runs on β set those two and the rest of the system wires itself. A PID carries its tracking URLs, creation date, last-activity date (auto), and two statuses:
| Operational status | Quality (Dasta bandi) |
|---|---|
| Testing Live Paused Β· Capped Β· Under Review Closed Where it is in its lifecycle β you set this. |
New/No Data Good Average Poor Β· Blacklisted How well it performs β the system scores this. |
Open a PID to see its all-time performance (approved, validation, revenue, profit, margin) and add evidence links or notes.
05 Performance & validation
The daily habit that powers everything else.
The Performance tab has three views: Daily entry, Monthly rollup, and a built-in How to track card. Here's the routine:
- Pull the numbers once a day. MMP (AppsFlyer / Adjust) for installs & events, the advertiser panel for approved / rejected, the network panel for what they claim.
- Log one row per active PID. In Daily entry, pick the PID and date, then enter clicks, raw, pending, approved, rejected, chargebacks. Payouts auto-fill from the offer.
- Let it calculate. Revenue, cost, profit, margin, validation and EPC compute live as you type β nothing is worked out by hand.
- Tag the payment month if it differs from the conversion month, and add rejection reasons whenever rejected > 0.
- Weekly: open Dasta bandi and hit Recompute all to refresh quality scores; review anything flagged Poor.
- Monthly: check the Monthly rollup, Export CSV, and hand the approved / revenue / cost totals to the Finance tracker.
The formulas, once
| Conversion rate | Raw Γ· Clicks |
| Validation rate | Approved Γ· Raw |
| Revenue | Approved Γ advertiser payout |
| Traffic cost | Approved Γ network payout |
| Net profit | Revenue β Traffic cost β Fees |
| Margin | Net profit Γ· Revenue |
| EPC | Revenue Γ· Clicks |
06 Finance feed
Your performance numbers, shaped for the Numbers tracker.
The Finance tab turns validated performance into the exact rows your Financial Operations workbook needs β no re-typing, no re-calculating. Pick a month and you get three tables that mirror your sheets:
- Reconciliation β per month Γ advertiser Γ campaign Γ network: raw / approved / rejected, advertiser revenue, network cost, and margin.
- Advertiser Receivables β what each advertiser owes you (validated revenue) per month.
- Network Payables β what you owe each network per month.
Each table has a running Total and an β¬ Export CSV button whose column headers match the tracker β so it's paste-straight-in, or a quick sense-check before you invoice.
07 Dasta bandi β quality classification
Rules score every PID; you can always override.
Instead of judging PIDs by gut, the Desk scores them from their own numbers. Hit β» Recompute all and each PID lands in a band:
| Band | Default rule | Meaning |
|---|---|---|
| Good | validation β₯ 70% AND margin β₯ 15% AND β₯ 200 approved | Consistent, profitable, clean. |
| Average | Everything in between. | Acceptable but inconsistent. |
| Poor | validation < 40% OR margin < 0% | Low validation or losing money. |
| New/No Data | < 50 approved | Not enough volume to judge yet. |
| Blacklisted | Set by the Blacklist, not the maths. | Blocked β always wins. |
Thresholds aren't fixed β click β Thresholds to tune them (as fractions: 0.70 = 70%). The recompute screen shows stored vs computed side by side, so you see exactly what would change before you commit.
08 Blacklist
Separate from quality β because it blocks, not just labels.
A poor score is a warning; a blacklist is a stop. Kept apart on purpose. Each entry records the PID and publisher, the network and offer, the reason, evidence links, who approved it, and the date.
- Scope β Offer (this offer only), Network (everything from that source) or Global (everywhere).
- Permanent or temporary β temporary entries carry an expiry / review date.
- An active entry forces the matching PIDs to Blacklisted on the next recompute.
09 Network App Wishlist
What networks are asking for β and turning it into inventory.
When a network wants an app you don't carry yet, log it here: app, platform, GEO, conversion type, desired payout, expected volume, priority and owner. Move it along its pipeline as you work it:
Admin & housekeeping
The handful of things owners do occasionally.
π Passwords & users
- Users self-reset via Forgot password? on the login screen.
- Add a teammate or force-reset: Supabase dashboard β Authentication β Users.
- One-time: add
cyrus-ops-dashboard.vercel.app/**under Auth β URL Configuration β Redirect URLs so reset links land back on the app.
π§Ή Import, sample data & exports
- Bulk import: every tab has β¬ Template + β¬ Import β load your real networks, offers, PIDs and history from a spreadsheet instead of typing.
- Demo rows are prefixed
[DEMO]β delete them from each tab whenever you're ready to go live. - Export CSV lives on the Finance tab and the Monthly rollup.
- Every record has Comments & tasks for quick to-dos, and all edits are written to an audit log.
What's next
Deliberately left for phase 2.
- Finance feed shipped β the Finance tab now exports reconciliation, receivables and payables straight into your tracker's format. Fully automatic write-back (skipping the paste step) is the next step here.
- CSV bulk import shipped β templates + import on every tab. Live MMP / postback auto-sync (no file step) is the next step here.
- Duplicate / data-integrity detection shipped β see the Data checks card on the Dashboard.
- Scheduled Telegram alerts shipped β a daily digest posts to your team group automatically. Email alerts could follow.
- Role-based access for future employees, and a branded subdomain (e.g.
ops.theatelier3.com).