Top Partnerships (Brand-side)

External brand-user performance report.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/tl-top-partnerships.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit ThoughtLeaders-io/thoughtleaders-cli/skills/tl-top-partnerships#main ~/.claude/skills/tl-top-partnerships

For one project only, change the path to .claude/skills/tl-top-partnerships.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Top Partnerships (Brand-side)

Show the full text102 lines
namedescription
tl-top-partnershipsExternal brand-user performance report. Ranks a brand's sponsorships by effective CPM once the sponsored videos went live, and compares live eCPM against the sold-date projection. Use whenever a brand user asks "which of my sponsorships performed best", "top partnerships this year", "best ROI deals", "effective CPM on my deals", "which sponsorships overperformed", "/top-partnerships", or any variation of "show me my best-performing sponsorships". This is the brand-side equivalent of internal performance reporting — fire it eagerly any time a brand wants to look back at their booked deals through a performance lens, even if they don't say the words "CPM" or "eCPM".

Top Partnerships (Brand-side)

Helps a brand look back at their sold sponsorships and see which ones delivered the lowest effective CPM (eCPM) once the videos went live, vs the projection at sale.

Triggers

  • /top-partnerships — defaults to calendar YTD
  • /top-partnerships <range> — e.g. /top-partnerships 2025, /top-partnerships "last 12 months", /top-partnerships "Q1 2026"
  • Natural language: "top partnerships this year", "best sponsorships", "which deals performed best", "effective CPM on my deals", "show me my best ROI sponsorships"

What this skill computes

For every sold sponsorship the brand has where the video has actually gone live (has a publish_date and a non-null live views count):

  • Sold-date eCPM = price / projected_views_at_purchase_date * 1000
    • The projection captured on the adlink at the moment the deal was sold. This is the eCPM the brand "agreed to."
  • Live eCPM = price / views * 1000
    • The actual eCPM now that the video has accumulated views.
  • View ratio = views / projected_views_at_purchase_date
    • 1 means the video out-delivered its projection.

  • Delta = live_eCPM - sold_date_eCPM
    • Negative delta = the deal got cheaper per view than promised (good for the brand). Positive delta = the deal underdelivered.

It also pulls future bookings — any sponsorship that is sold, or open with the brand having reviewed it (brand_approval pending or approved), with a scheduled date strictly after today — and tags each deal and each channel with the earliest future scheduled date, or "Re-book - no future spot" if none exists. This turns the report into an actionable list, not just a backward look.

Output

A Google Sheet with two tabs, owned by the caller's Google account:

  • By Deal — one row per sponsorship, ranked by live eCPM (best first). Columns: rank, channel, title, video_url, scheduled_date, publish_date, price, promised_views, live_views, view_ratio, sold_date_ecpm, live_ecpm, delta_ecpm, measurable, next_booking.
  • By Channel — one row per channel, aggregated across all that channel's deals in range. Combined live eCPM is sum(price) / sum(live_views) * 1000 (volume-weighted, not an average of CPMs). Sorted by combined live eCPM. Columns: channel, deals, measurable_deals, total_price_usd, total_promised_views, total_live_views, view_ratio, sold_date_ecpm, live_ecpm, delta_ecpm, next_booking.

In chat: a short summary + top-10 channels table + the sheet URL.

Workflow

Step 1 — Resolve the brand

Run tl whoami --json and read the brands array.

  • One brand → use it silently.
  • Zero brands → tell the user this skill is for brand-user profiles and stop.
  • Multiple brands → ask which one. Don't guess.
Step 2 — Resolve the time range

Default = calendar YTD (Jan 1 of the current year through today).

Accept these forms in the user's input:

  • 2025 or "2024" → that full calendar year
  • "last 12 months" → trailing 12 months ending today
  • "Q1 2026", "Q4 2025" → that quarter
  • "YTD" → explicit current YTD
  • Anything else → ask the user to clarify, don't silently pick

Convert to a scheduled-date-start / scheduled-date-end pair (YYYY-MM-DD strings). Use scheduled_date as the time anchor because that is when the sponsorship actually ran for the brand — purchase_date can be months earlier.

Step 3 — Run the script
python3 <SKILL_DIR>/scripts/top_partnerships.py \
  --brand "<BRAND_NAME>" \
  --scheduled-date-start <YYYY-MM-DD> \
  --scheduled-date-end <YYYY-MM-DD>

<SKILL_DIR> resolves to this skill's directory at invocation time (same convention as tl-views-guarantee, tl-keyword-research).

The script does everything: pulls sold deals in range (paginated), pulls all future bookings, computes per-deal and per-channel metrics, creates a Google Sheet with two tabs, shares it back to the caller, and prints a markdown summary plus the sheet URL.

It uses tl for data and gws for sheet creation. Both must be on PATH and authed.

Step 4 — Present the result

Take the script's stdout as-is. It already contains:

  1. Summary line — total sold deals, measurable count, median live eCPM, count overperforming.
  2. Top 10 channels by combined live eCPM — markdown table with the Next booking column bolded when it says "Re-book."
  3. Sheet URL — point the user at the two tabs.

If more than half the top-10 channels show "Re-book", call that out in one sentence as the headline action item. If most of the top channels already have follow-ups booked, congratulate briefly and stop.

Keep the writeup tight. No em dashes, no "just wanted to", no hedging. The data does the talking.

Brand-user mode notes

  • This skill assumes a brand-user tl auth. It uses only public CLI commands (tl whoami, tl sponsorships list) — no tl db pg and no Elasticsearch.
  • The tl sponsorships list endpoint already filters to deals the calling profile is allowed to see, so passing brand:"<name>" is a belt-and-braces filter rather than a privacy boundary.
  • View counts come from TL's own tracking on the views field returned by the CLI. They're the same numbers the brand sees in the TL dashboard, so the eCPMs are reconcilable with what they see in-app.
  • Don't include creators' contact emails, internal notes, or owner_* fields in the brand-facing output. The script already drops them from the CSV.

Edge cases worth mentioning to the user (only if they apply)

  • A deal that ran very recently (last 14-28 days) may show a misleadingly high Live eCPM because views are still accumulating. Mention this only if more than half the top-10 deals have a scheduled date inside the last 28 days.
  • If the brand has zero measurable deals in the range, say so plainly and suggest broadening the range (e.g., last 12 months).
1---
2name: tl-top-partnerships
3description: External brand-user performance report. Ranks a brand's sponsorships by effective CPM once the sponsored videos went live, and compares live eCPM against the sold-date projection. Use whenever a brand user asks "which of my sponsorships performed best", "top partnerships this year", "best ROI deals", "effective CPM on my deals", "which sponsorships overperformed", "/top-partnerships", or any variation of "show me my best-performing sponsorships". This is the brand-side equivalent of internal performance reporting — fire it eagerly any time a brand wants to look back at their booked deals through a performance lens, even if they don't say the words "CPM" or "eCPM".
4---
5 
6# Top Partnerships (Brand-side)
7 
8Helps a brand look back at their sold sponsorships and see which ones delivered the lowest effective CPM (eCPM) once the videos went live, vs the projection at sale.
9 
10## Triggers
11 
12- `/top-partnerships` — defaults to calendar YTD
13- `/top-partnerships <range>` — e.g. `/top-partnerships 2025`, `/top-partnerships "last 12 months"`, `/top-partnerships "Q1 2026"`
14- Natural language: "top partnerships this year", "best sponsorships", "which deals performed best", "effective CPM on my deals", "show me my best ROI sponsorships"
15 
16## What this skill computes
17 
18For every sold sponsorship the brand has where the video has actually gone live (has a `publish_date` and a non-null live `views` count):
19 
20- **Sold-date eCPM** = `price / projected_views_at_purchase_date * 1000`
21 - The projection captured on the adlink at the moment the deal was sold. This is the eCPM the brand "agreed to."
22- **Live eCPM** = `price / views * 1000`
23 - The actual eCPM now that the video has accumulated views.
24- **View ratio** = `views / projected_views_at_purchase_date`
25 - >1 means the video out-delivered its projection.
26- **Delta** = `live_eCPM - sold_date_eCPM`
27 - Negative delta = the deal got *cheaper* per view than promised (good for the brand). Positive delta = the deal underdelivered.
28 
29It also pulls **future bookings** — any sponsorship that is sold, or open with the brand having reviewed it (`brand_approval` pending or approved), with a scheduled date strictly after today — and tags each deal and each channel with the earliest future scheduled date, or "Re-book - no future spot" if none exists. This turns the report into an actionable list, not just a backward look.
30 
31## Output
32 
33A Google Sheet with two tabs, owned by the caller's Google account:
34 
35- **By Deal** — one row per sponsorship, ranked by live eCPM (best first). Columns: rank, channel, title, video_url, scheduled_date, publish_date, price, promised_views, live_views, view_ratio, sold_date_ecpm, live_ecpm, delta_ecpm, measurable, next_booking.
36- **By Channel** — one row per channel, aggregated across all that channel's deals in range. Combined live eCPM is `sum(price) / sum(live_views) * 1000` (volume-weighted, not an average of CPMs). Sorted by combined live eCPM. Columns: channel, deals, measurable_deals, total_price_usd, total_promised_views, total_live_views, view_ratio, sold_date_ecpm, live_ecpm, delta_ecpm, next_booking.
37 
38In chat: a short summary + top-10 channels table + the sheet URL.
39 
40## Workflow
41 
42### Step 1 — Resolve the brand
43 
44Run `tl whoami --json` and read the `brands` array.
45 
46- One brand → use it silently.
47- Zero brands → tell the user this skill is for brand-user profiles and stop.
48- Multiple brands → ask which one. Don't guess.
49 
50### Step 2 — Resolve the time range
51 
52Default = calendar YTD (Jan 1 of the current year through today).
53 
54Accept these forms in the user's input:
55 
56- `2025` or `"2024"` → that full calendar year
57- `"last 12 months"` → trailing 12 months ending today
58- `"Q1 2026"`, `"Q4 2025"` → that quarter
59- `"YTD"` → explicit current YTD
60- Anything else → ask the user to clarify, don't silently pick
61 
62Convert to a `scheduled-date-start` / `scheduled-date-end` pair (YYYY-MM-DD strings). Use `scheduled_date` as the time anchor because that is when the sponsorship actually ran for the brand — purchase_date can be months earlier.
63 
64### Step 3 — Run the script
65 
66```bash
67python3 <SKILL_DIR>/scripts/top_partnerships.py \
68 --brand "<BRAND_NAME>" \
69 --scheduled-date-start <YYYY-MM-DD> \
70 --scheduled-date-end <YYYY-MM-DD>
71```
72 
73`<SKILL_DIR>` resolves to this skill's directory at invocation time (same convention as `tl-views-guarantee`, `tl-keyword-research`).
74 
75The script does everything: pulls sold deals in range (paginated), pulls all future bookings, computes per-deal and per-channel metrics, creates a Google Sheet with two tabs, shares it back to the caller, and prints a markdown summary plus the sheet URL.
76 
77It uses `tl` for data and `gws` for sheet creation. Both must be on PATH and authed.
78 
79### Step 4 — Present the result
80 
81Take the script's stdout as-is. It already contains:
82 
831. **Summary line** — total sold deals, measurable count, median live eCPM, count overperforming.
842. **Top 10 channels by combined live eCPM** — markdown table with the Next booking column bolded when it says "Re-book."
853. **Sheet URL** — point the user at the two tabs.
86 
87If more than half the top-10 channels show "Re-book", call that out in one sentence as the headline action item. If most of the top channels already have follow-ups booked, congratulate briefly and stop.
88 
89Keep the writeup tight. No em dashes, no "just wanted to", no hedging. The data does the talking.
90 
91## Brand-user mode notes
92 
93- This skill assumes a brand-user `tl` auth. It uses only public CLI commands (`tl whoami`, `tl sponsorships list`) — no `tl db pg` and no Elasticsearch.
94- The `tl sponsorships list` endpoint already filters to deals the calling profile is allowed to see, so passing `brand:"<name>"` is a belt-and-braces filter rather than a privacy boundary.
95- View counts come from TL's own tracking on the `views` field returned by the CLI. They're the same numbers the brand sees in the TL dashboard, so the eCPMs are reconcilable with what they see in-app.
96- Don't include creators' contact emails, internal notes, or owner_* fields in the brand-facing output. The script already drops them from the CSV.
97 
98## Edge cases worth mentioning to the user (only if they apply)
99 
100- A deal that ran very recently (last 14-28 days) may show a misleadingly high Live eCPM because views are still accumulating. Mention this only if more than half the top-10 deals have a scheduled date inside the last 28 days.
101- If the brand has zero measurable deals in the range, say so plainly and suggest broadening the range (e.g., last 12 months).
102 

Discussion

Alternatives

Also in MonitoringSee all 533 in Development →
Professional Full-Stack Developer for Network Mapping & Monitoring ApplicationAct as a professional full-stack developer tasked with building a web application for mapping and monitoring networks using Mikrotik Netwatch API. Implement multi-user role-based management to handle devices, monitor their status, and manage user subscriptions.Coding · CC0-1.0Prompt refinerHigh-end Prompt Engineering & Prompt Refiner skill. Transforms raw or messy user requests into concise, token-efficient, high-performance master prompts for systems like GPT, Claude, and Gemini. Use when you want to optimize or redesign a prompt so it solves the problem reliably while minimizing tokens.Data & AI · CC0-1.0Constraint driven developmentEstablishes a project's quality bar as a written contract and stops agents quietly lowering it. Interviews the user on which dimensions matter, supplies sane default thresholds when they have no number in mind, records everything in CONSTRAINTS.md, and watches the diff for a weakened bar — new @ts-ignore or eslint-disable suppressions, skipped or deleted tests, assertions stripped out, unimplemented stubs, thresholds edited down. Use when no quality bar is written down, when the user says "set up constraints" or "define our standards", when the user wants dimensions they care about — accessibility, web performance, coverage — set up as enforced constraints, when an agent keeps silencing checks or skipping tests to get to green, when you need a coverage or performance threshold and don't know what number to pick, or when an agent writes more code than anyone will read.Coding · MITObservability and instrumentationInstruments code so production behavior is visible and diagnosable. Use when adding logging, metrics, tracing, or alerting. Use when shipping any feature that runs in production and you need evidence it works. Use when production issues are reported but you can't tell what happened from the available data.Coding · MIT