Install
openclaw skills install skills-sh:mbfinotti/partnerships-skills/affiliate-disclosure-complianceAffiliate Disclosure Compliance Check one piece of affiliate or influencer content against disclosure regulations and return a compliance review: pass/fail per requirement, with placement, wording, and per-format fixes. Built for program managers reviewing partner and creator…
openclaw skills install skills-sh:mbfinotti/partnerships-skills/affiliate-disclosure-complianceCheck one piece of affiliate or influencer content against disclosure regulations and return a compliance review: pass/fail per requirement, with placement, wording, and per-format fixes. Built for program managers reviewing partner and creator content before publication, and remediating what is already live. The legal basis is the FTC's clear-and-conspicuous standard (16 CFR 255.0(f)), CAP Code rule 2.1, the UCPD, and national overlays; the checklist itself is this skill's own working tool, not an official named framework.
[COUNSEL: <question>], attached to the affected finding, never pooled at the end of the report.Ambiguity flagged inline stays attached to the evidence that raised it; a footer disclaimer gets skimmed past and the nuance is lost.
Ask one question per message; offer multiple-choice answers; skip anything already answered or evident from the artefact.
Re-rank the menus in Ranked Choices against the last three answers, and name the move out loud:
[COUNSEL] if the user intends to assert the obligation to a partner.[COUNSEL] instead of asserting an answer.Judge each layer per jurisdiction; a single fail on any layer fails the asset.
These six layers are gates, not a menu: they carry no efficiency ranking and never will. A legal disclosure obligation is not a trade-off; never run the two highest-ratio layers, skip the rest, and call the asset reviewed.
No layer has a discounted version that partially passes, and no cheaper check anywhere in this skill substitutes for one. Rank the delivery choices around the review (see Ranked Choices); never the obligations themselves.
Three genuine menus sit around the obligations above:
Each is ranked by value per unit of effort: effort meaning monitoring hours, tooling setup, coordination, relationship capital, and reversibility. Read every axis line as descending on that axis: highest value, highest effort, highest compliance cost first. The efficiency line is the recommended order of attack.
Every ranking below is a default, not a law. It shifts with context and with who executes it, so re-rank before recommending a rung:
Monitoring is not optional; which approach delivers it is. 16 CFR 255.1(d) and the CMA's brand-side duty both require it, and no rung below discharges that duty on its own.
Effort in magnitudes:
Self-attestation and spot-checks: near-zero per asset once running.
Automated label scan: about a week to set up and tune.
Pre-publication gate and full-roster review: standing jobs.
Default to the risk-weighted spot-check: newest partners, highest earners, regulated claims, formats that failed before, with self-attestation underneath it as the paper trail.
Promote the pre-publication gate for ephemeral and video content: the FTC's own fallback, because a story vanishes before any after-the-fact review reaches it.
Justify the value tie: a scan reads many assets shallowly (label text only), a spot-check reads few assets fully (placement, prominence, truncation), different routes to a comparable share of real violations.
Read the compliance-cost line as the review triggered and the reversibility spent: a scan needs a platform-terms review before it crawls, and a gate or attestation clause needs a program-terms amendment and partner notice. Reading published content, whether spot-check or full roster, needs neither - which is what ties those two.
Never let self-attestation stand as the monitoring itself. A partner who misunderstood the rule attests in good faith and still fails; the FTC asks for a search of what partners are saying, not a collection of their promises.
What this order starves: the full-roster review, high on value and high on effort, loses every round. Promote it when a regulator has made contact, when the vertical is regulated, or when the same partner fails twice.
Delete the automated label scan when the campaign's disclosures are spoken or on-screen: a text scan cannot see them, rather than leaving it ranked at the bottom.
Effort in magnitudes:
Corrected line in the review reply: near-zero.
Approved wording bank: about an hour to adapt.
Per-format one-pager: about a week of writing and portal work.
Live training: a standing job.
Default to the wording bank: adapt references/disclosure-wording.md into the program's own approved lines, one per format the campaign runs.
Ship the corrected line with every failing finding regardless: the report shape already requires it, and it feeds the bank.
What this order starves: live training, the only rung that catches a partner's misunderstanding before it reaches an asset. Promote it when the roster is small and concentrated, or when the same failure recurs across partners after the bank shipped.
Delete the live-training rung for a self-serve roster that never meets the program team: a session nobody attends is not distribution.
Hand the drafting of terms clauses and brief language to the sibling skills in Reference; this skill only picks the delivery route for rules it already checked.
Curing the violation is mandatory; which rung cures it is the choice. Ranked for one non-compliant live asset.
Effort in magnitudes:
Edit in place: a message and a minute.
Re-publish a corrected version: about an hour, plus the asset's earned reach.
Takedown or payment hold: spends relationship capital and is hard to walk back.
Terminate and replace the partner: about a quarter.
Default to editing in place, and escalate one rung whenever the format's own rule puts the disclosure inside the content.
Justify the value tie: both fully remove the non-compliant version from the audience; re-publishing also keeps the campaign's reach, which is why it wins on efficiency at equal value.
Read the compliance-cost line as the review triggered and the reversibility spent: withholding commission or terminating needs a program-terms clause behind it and counsel's read, a takedown needs the partner's cooperation, and an edit reverses freely.
Never offer a lower rung as a cure the format does not allow: a caption edit cannot fix a video whose spoken and on-screen disclosure is missing; only a re-publish reaches it.
Never let termination stand in for remediation. Removing the partner leaves the undisclosed asset live; pair it with a takedown or the exposure outlives the relationship.
What this order starves: re-recording long-form video, high on value and high on effort, always loses to a caption edit. Promote it whenever the failing layer is per-format placement rather than wording.
Delete the payment-hold rung when the program terms carry no withholding clause: withholding without one is a contract dispute, not a remediation. Attach [COUNSEL] before recommending it.
Order a multi-asset plan by exposure: assets still earning impressions first, then the highest-reach asset, then the rest.
Per asset: a header (asset, format, platform, relationship, jurisdictions, B2B/B2C, pre-publication or live), a check table (requirement | pass/fail | evidence | rule | fix), and an overall verdict: PASS, FAIL, or PASS WITH [COUNSEL] ITEMS. Every failing row carries a rewritten, ready-to-paste fix, not just a critique.
Live content adds a prioritized remediation section. Full positive and negative examples: references/review-report-example.md.
| Failure | Why it fails | Fix |
|---|---|---|
| Disclosure below the fold or behind the "more" cut | FTC: disclosures needing a click on MORE are likely missed; CMA: no scrolling required | Move the label into the first visible line |
| Ambiguous tags: #sp, #spon, #collab, #ambassador, vague "partner", "thanks to [brand]" | Viewers can't decode the commercial relationship; regulators reject them | Replace with "#ad" or "paid partnership with [brand]" |
| Disclosure in bio or profile only | Viewers of one post never open the profile; FTC calls these likely missed | Disclose inside every commercial post itself |
| Gifted product treated as a loophole | Free product is a material connection, same as payment | Disclose the gift: "[brand] sent me this for free" |
| Platform's native label relied on alone | FTC: platform tools are "no guarantee"; CMA accepts them only if clearly visible; labels can vanish in embeds and screenshots | Keep the label and add the partner's own written or spoken disclosure |
| Video disclosure only in the description | FTC: the disclosure belongs in the video, not just the description | On-screen overlay plus a spoken line at the start |
| Livestream disclosed once at the start | Mid-stream joiners never hear it; FTC requires periodic repetition | Repeat verbally at regular intervals and at segment changes |
| Roundup disclosure separated from the links | FTC: readers must see the disclosure and the link at the same time | Put "paid link" or a commission line adjacent to each link block |
Every row is the mandatory correction of one specific failure, not a rung in a ladder: no cheaper variant of any fix passes, and the rows are never traded off against each other. The choices this skill does rank live in Ranked Choices.
Program KPIs:
Review completeness threshold: iterate on the review until all four hold:
[COUNSEL] marker.mbfinotti/partnerships-skills@affiliate-program-terms to write the disclosure obligation into the program terms: this skill only checks content against the rules.mbfinotti/partnerships-skills@influencer-campaign-brief to put disclosure requirements into the campaign brief: this skill checks the content that brief produced.mbfinotti/partnerships-skills@affiliate-onboarding-sequence for where partners first learn the disclosure rules this skill later enforces.mbfinotti/partnerships-skills@affiliate-fraud-detection for traffic and commission fraud: a different problem entirely; a perfectly disclosed post can still carry fraudulent traffic.ba2db8acbec9