{"id":"a6ede1d0-839a-4d39-b4c0-b2346c7a91aa","entityType":"agent","slug":"clawhub-affitor-affiliate-skills","name":"Affiliate Program Search","canonicalUrl":"https://www.xpersona.co/agent/clawhub-affitor-affiliate-skills","canonicalPath":"/agent/clawhub-affitor-affiliate-skills","generatedAt":"2026-10-10T21:49:50.490Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T19:21:45.544Z","emptyReason":null},"description":"Find and evaluate the best affiliate programs to promote from openaffiliate.dev Skill: Affiliate Program Search Owner: affitor Summary: Find and evaluate the best affiliate programs to promote from openaffiliate.dev Tags: latest:1.0.1 Version history: v1.0.1 | 2026-09-04T21:38:03.839Z | user Republished under the Affitor publisher as one clean skill (affiliate-program-search). The full 52-skill bundle installs with: npx skills add Affitor/affiliate-skills v1.0.0 | 2026-03-17T23:02:23.126Z | auto","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17fhgb0y2qw4fawnydq6cckjx8drvce:affiliate-skills","sourceUrl":"https://clawhub.ai/affitor/affiliate-skills","homepage":"https://clawhub.ai/affitor/skills/affiliate-skills","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/affitor/affiliate-skills","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/affitor/skills/affiliate-skills","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Find and evaluate the best affiliate programs to promote from openaffiliate.dev Skill: Affiliate Program Search Owner: affitor Summary: Find and evaluate the be"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T19:21:45.544Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T19:21:45.544Z","emptyReason":null},"stars":null,"forks":null,"downloads":1281,"packageName":null,"latestVersion":"1.0.1","tractionLabel":"1.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T19:21:45.531Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T19:21:45.544Z","lastCrawledAt":"2026-10-10T19:21:45.531Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T19:21:45.531Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.1","createdAt":"2026-09-04T21:38:03.839Z","changelog":"Republished under the Affitor publisher as one clean skill (affiliate-program-search). The full 52-skill bundle installs with: npx skills add Affitor/affiliate-skills","fileCount":8,"zipByteSize":12591},{"version":"1.0.0","createdAt":"2026-03-17T23:02:23.126Z","changelog":"Initial release: Live search and comparison for affiliate programs with caching and daemon support. - Query, search, and compare affiliate programs in real-time from list.affitor.com. - Persistent server daemon with instant response after first call and 5-minute data cache. - Supports advanced search filters, sorting, and side-by-side program comparison. - API key integration for unlimited results, with fallback to free tier. - Easy setup instructions and self-check for binary existence. - Server auto-manages uptime, state, and auto-shutdown on inactivity.","fileCount":151,"zipByteSize":405175}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17fhgb0y2qw4fawnydq6cckjx8drvce:affiliate-skills","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T21:49:50.486Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-affitor-affiliate-skills/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T19:21:45.544Z","emptyReason":null},"readme":"Skill: Affiliate Program Search\n\nOwner: affitor\n\nSummary: Find and evaluate the best affiliate programs to promote from openaffiliate.dev\n\nTags: latest:1.0.1\n\nVersion history:\n\nv1.0.1 | 2026-09-04T21:38:03.839Z | user\n\nRepublished under the Affitor publisher as one clean skill (affiliate-program-search). The full 52-skill bundle installs with: npx skills add Affitor/affiliate-skills\n\nv1.0.0 | 2026-03-17T23:02:23.126Z | auto\n\nInitial release: Live search and comparison for affiliate programs with caching and daemon support.\n\n- Query, search, and compare affiliate programs in real-time from list.affitor.com.\n- Persistent server daemon with instant response after first call and 5-minute data cache.\n- Supports advanced search filters, sorting, and side-by-side program comparison.\n- API key integration for unlimited results, with fallback to free tier.\n- Easy setup instructions and self-check for binary existence.\n- Server auto-manages uptime, state, and auto-shutdown on inactivity.\n\nArchive index:\n\nArchive v1.0.1: 8 files, 12591 bytes\n\nFiles: agents/openai.yaml (298b), LICENSE.txt (1064b), references/openaffiliate-api.md (3730b), references/platform-rules.md (2828b), references/scoring-criteria.md (5256b), skill-card.md (2617b), SKILL.md (9572b), _meta.json (135b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: affiliate-program-search\ndescription: >\n  Research and evaluate affiliate programs to find the best ones to promote.\n  Use this skill when the user asks anything about finding affiliate programs,\n  comparing commission rates, evaluating affiliate opportunities, searching for\n  products to promote, picking a niche, or mentions openaffiliate.dev.\n  Also trigger for: \"which SaaS should I promote\", \"best affiliate programs for X\",\n  \"high commission programs\", \"recurring commission affiliate\", \"compare these\n  affiliate programs\", \"is X affiliate program worth it\", \"find me something to promote\",\n  \"what pays the most\", \"affiliate programs with long cookie duration\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"research\", \"niche-analysis\", \"program-discovery\", \"saas\", \"commission\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S1-Research\n---\n\n# Affiliate Program Search\n\nHelp affiliate marketers research, evaluate, and pick winning programs to promote.\nData source: [openaffiliate.dev](https://openaffiliate.dev) — open affiliate program directory. Public API, no key required.\n\n## Stage\n\nThis skill belongs to Stage S1: Research\n\n## When to Use\n\n- User wants to find affiliate programs to promote\n- User wants to compare two or more affiliate programs\n- User asks about commission rates, cookie duration, or earning potential\n- User mentions openaffiliate.dev\n- User is new to affiliate marketing and needs a starting point\n\n## Input Schema\n\n```\n{\n  niche: string             # (optional, default: \"AI/SaaS tools\") Category or niche interest\n  commission_pref: string   # (optional, default: \"recurring, 20%+\") Commission preference\n  audience: string          # (optional, default: \"content creators\") Target audience type\n  platform: string          # (optional, default: \"any\") Platform they'll promote on\n  compare: string[]         # (optional) Specific programs to compare head-to-head\n}\n```\n\n## Workflow\n\n### Step 1: Understand What the User Wants\n\nAsk (if not clear from context):\n- Niche/category interest? (AI tools, SEO, video, writing, automation...)\n- Commission preference? (recurring vs one-time, minimum %)\n- Audience type? (developers, marketers, beginners, enterprise...)\n- Platform they'll promote on? (blog, LinkedIn, YouTube, X...)\n\nIf user says \"just find me something good\" → default to: AI/SaaS tools, recurring commission, 20%+, content creator audience.\n\n### Step 2: Search openaffiliate.dev\n\nSee `references/openaffiliate-api.md` for integration methods.\n\nTwo methods available:\n- **API (preferred):** `GET https://openaffiliate.dev/api/programs?q=<term>` — public, no auth needed, structured data\n- **Web fetch (fallback):** `web_search \"site:openaffiliate.dev [category]\"` then `web_fetch` the page\n\nExtract for each program: `name`, `reward_value`, `reward_type`, `cookie_days`, `stars_count`, `tags`, `description`.\n\n### Step 3: Score Programs\n\nApply the scoring framework from `references/scoring-criteria.md`.\n\nScore each program on 5 dimensions (1-10 scale):\n1. **Earning Potential** (30%) — commission %, recurring vs one-time, product price\n2. **Content Potential** (25%) — visual demo, free tier, content angles\n3. **Market Demand** (20%) — search volume, trend direction, market size\n4. **Competition Level** (15%) — fewer affiliates promoting = higher score\n5. **Trust Factor** (10%) — product quality, reputation, stars on openaffiliate.dev\n\nOverall = weighted average. Verdict: 7.5+ \"Strong Pick\" / 5.5-7.4 \"Worth Testing\" / <5.5 \"Skip\".\n\nFor dimensions that require external data (Market Demand, Competition Level), use `web_search` to check Google results count for \"[product] review\" and \"[product] affiliate\" queries.\n\n### Step 4: Present Recommendation\n\n### Step 5: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] All scored programs have `reward_value` from API data, not hallucinated\n- [ ] `cookie_days` is numeric and from API response\n- [ ] Top Pick verdict matches score threshold (≥7.5 = Strong Pick, ≥6 = Worth Considering)\n- [ ] Market Demand and Competition scores cite the search query used\n- [ ] Stale data (>6 months) is flagged with warning\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\nOther skills (viral-post-writer, affiliate-blog-builder, etc.) consume these fields from conversation context:\n\n```\n{\n  output_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\n  recommended_program: {\n    name: string              # \"HeyGen\"\n    slug: string              # \"heygen\"\n    reward_value: string      # \"30%\"\n    reward_type: string       # \"cps_recurring\"\n    reward_duration: string   # \"12 months\"\n    cookie_days: number       # 60\n    description: string       # Short product description\n    tags: string[]            # [\"ai\", \"video\"]\n    url: string               # Product website\n  }\n  score: {\n    overall: number           # 8.2\n    verdict: string           # \"Strong Pick\"\n    reasoning: string         # Why this is the top pick\n  }\n  runner_up: Program | null   # Same structure, second choice\n  all_scored: ProgramScore[]  # Full list of scored programs\n}\n```\n\n## Output Format\n\n```\n## Programs Found\n\n| Program | Commission | Type | Cookie | Stars | Score |\n|---------|-----------|------|--------|-------|-------|\n| HeyGen  | 30%       | Recurring | 60d | ⭐ 42 | 8.2/10 |\n| ...     | ...       | ...  | ...    | ...   | .../10 |\n\n## Top Pick: [Program Name]\n\n**Why:** [2-3 sentences explaining why this is the best fit]\n\n| Dimension | Score | Note |\n|-----------|-------|------|\n| Earning Potential | 8/10 | 30% recurring on $24-48/mo |\n| Content Potential | 9/10 | Visual AI video, easy to demo |\n| Market Demand | 8/10 | AI video trending, high search volume |\n| Competition | 6/10 | Growing number of affiliates |\n| Trust Factor | 8/10 | Strong brand, 42 stars on openaffiliate.dev |\n| **Overall** | **8.2/10** | **Strong Pick** |\n\n## Runner-up: [Program Name]\n\n**Why:** [1-2 sentences]\n\n## Next Steps\n\n1. Sign up for [Program] affiliate program → [search for signup page]\n2. Run `viral-post-writer` to create content for this product\n3. Run `affiliate-blog-builder` to write a review post\n```\n\n## Error Handling\n\n- **API unavailable:** Fall back to web_fetch method (see `references/openaffiliate-api.md` Method 2)\n- **No programs match criteria:** Broaden search (remove strictest filter first), explain to user what was relaxed\n- **Stale data (program updated_at > 6 months):** Flag with \"Data may be outdated, verify on product website\"\n- **User gives no criteria:** Use defaults (AI/SaaS, recurring, 20%+, content creator audience)\n- **Program not on openaffiliate.dev:** Use `web_search` to find program details directly, still apply scoring framework\n\n## Examples\n\n**Example 1:**\nUser: \"I want to promote AI video tools, commission recurring, at least 20%\"\n→ Search openaffiliate.dev for programs tagged \"ai\" or \"video\": `GET /api/programs?q=ai+video`\n→ Filter: reward_type = cps_recurring, reward_value ≥ 20%\n→ Score and rank: HeyGen, Synthesia, ElevenLabs, InVideo AI...\n→ Recommend top pick with full scorecard\n\n**Example 2:**\nUser: \"Compare HeyGen vs Synthesia for my LinkedIn audience\"\n→ Fetch both from openaffiliate.dev: `GET /api/programs/heygen` and `GET /api/programs/synthesia`\n→ Score both, emphasize Content Potential for LinkedIn\n→ Side-by-side comparison table + recommendation\n→ Note: LinkedIn audience = B2B, weight higher-price products\n\n**Example 3:**\nUser: \"I'm a beginner, what should I promote first?\"\n→ Default criteria: AI/SaaS, recurring, easy-to-demo products\n→ Weight beginner-friendly factors: free tier, low payout threshold, strong brand\n→ Recommend program with easiest path to first commission\n\n## References\n\n- `references/scoring-criteria.md` — the 5-dimension scoring framework with rubrics\n- `references/openaffiliate-api.md` — how to fetch data from openaffiliate.dev (API + fallback)\n- `references/platform-rules.md` — platform-specific considerations when recommending programs\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `viral-post-writer` (S2) — `recommended_program` product data for social content\n- `twitter-thread-writer` (S2) — `recommended_program` for Twitter threads\n- `reddit-post-writer` (S2) — `recommended_program` for Reddit posts\n- `content-pillar-atomizer` (S2) — `recommended_program` for content creation\n- `affiliate-blog-builder` (S3) — `recommended_program` for blog articles\n- `landing-page-creator` (S4) — `recommended_program` for landing pages\n- `grand-slam-offer` (S4) — `recommended_program` for offer design\n- `bonus-stack-builder` (S4) — product data for bonus design\n\n### Fed By\n- `conversion-tracker` (S6) — top converting niches → search for more programs in winning niches\n- `performance-report` (S6) — performance data showing which program types convert best\n\n### Feedback Loop\n- Conversion data from S6 reveals which program characteristics (commission type, cookie length, niche) correlate with highest earnings → refine search criteria on next run\n\n```yaml\nchain_metadata:\n  skill_slug: \"affiliate-program-search\"\n  stage: \"research\"\n  timestamp: string\n  suggested_next:\n    - \"purple-cow-audit\"\n    - \"viral-post-writer\"\n    - \"landing-page-creator\"\n    - \"grand-slam-offer\"\n```\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn71mqyggkns7fdrdy0kfcx25x82smjn\",\n  \"slug\": \"affiliate-skills\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1788557883839\n}\n\nFile v1.0.1:references/openaffiliate-api.md\n\n> **DEPRECATED**: This file previously documented the list.affitor.com API, which has been retired.\n> The data source is now **openaffiliate.dev**. All references below have been updated accordingly.\n\n# openaffiliate.dev Data Access\n\n## Overview\n\nopenaffiliate.dev is a public, open API — no API key, no authentication, no rate limits, no free-tier restrictions.\n\nBase URL: `https://openaffiliate.dev/api`\n\n## Method 1: API (preferred)\n\n### GET /api/programs\n\nLists affiliate programs. Supports search and filtering via query params.\n\nQuery params:\n```\nq=search_term     Search name + description\nsort=relevance    Sort: relevance (default) | other supported sort values\nlimit=30          Results per page\n```\n\nExample request:\n```\nGET https://openaffiliate.dev/api/programs?q=ai+video&sort=relevance&limit=10\n```\n\nResponse format:\n```json\n{\n  \"programs\": [\n    {\n      \"slug\": \"heygen\",\n      \"name\": \"HeyGen\",\n      \"url\": \"https://heygen.com\",\n      \"logo\": \"https://...\",\n      \"category\": \"ai\",\n      \"commission\": {\n        \"type\": \"cps_recurring\",\n        \"rate\": \"30%\",\n        \"currency\": \"USD\",\n        \"duration\": \"12 months\",\n        \"conditions\": \"\"\n      },\n      \"cookieDays\": 60,\n      \"payout\": {\n        \"minimum\": 50,\n        \"currency\": \"USD\",\n        \"frequency\": \"monthly\",\n        \"methods\": [\"paypal\"]\n      },\n      \"description\": \"AI video generation platform...\",\n      \"shortDescription\": \"Create AI videos at scale\",\n      \"tags\": [\"ai\", \"video\"],\n      \"stars\": 42,\n      \"verified\": true,\n      \"agentPrompt\": \"\"\n    }\n  ],\n  \"total\": 1,\n  \"filters\": {}\n}\n```\n\nThe response key is `programs` (array). The raw API uses **camelCase** fields.\n\n### GET /api/programs/:slug\n\nReturns a single program by its slug. No auth required.\n\nExample:\n```\nGET https://openaffiliate.dev/api/programs/heygen\n```\n\nReturns the program object directly (same shape as a single item in `programs[]` above).\n\n## Raw API field reference\n\n| Raw API field | Notes |\n|---|---|\n| `slug` | URL-safe identifier (replaces old UUID-based id) |\n| `name` | Program display name |\n| `url` | Product website |\n| `logo` | Logo image URL |\n| `category` | Category string |\n| `commission.type` | Commission type (cps_recurring, cps_one_time, cpl, etc.) |\n| `commission.rate` | Commission rate (e.g., \"30%\") |\n| `commission.currency` | Currency code |\n| `commission.duration` | Duration (e.g., \"12 months\", \"lifetime\") |\n| `cookieDays` | Cookie window in days |\n| `payout.minimum` | Minimum payout threshold |\n| `payout.frequency` | Payment frequency |\n| `stars` | Community star count |\n| `verified` | Whether the program is verified |\n\n## Normalized skill-facing fields\n\nThe CLI adapter (`tools/src/api.ts`) maps the raw camelCase fields above to the\nnormalized snake_case model used by skills:\n\n| Skill field | Source |\n|---|---|\n| `reward_value` | `commission.rate` |\n| `reward_type` | `commission.type` |\n| `cookie_days` | `cookieDays` |\n| `stars_count` | `stars` |\n| `reward_duration` | `commission.duration` |\n\nSkills always consume normalized fields. Only update raw-API examples when the API contract changes.\n\n## Method 2: Web Fetch (fallback)\n\nUse this if the API returns errors or you want to browse programs.\n\n1. `web_search`: `site:openaffiliate.dev [user's category/keyword]`\n2. `web_fetch`: the relevant openaffiliate.dev URL\n3. Parse the page content to extract program data:\n   - Program name\n   - Commission rate and type (look for patterns like \"30% recurring\")\n   - Cookie days\n   - Stars count\n   - Description text\n\nProgram pages: `openaffiliate.dev/programs/[slug]`\n\n## Caching\n\n- Cache results within a conversation — do not re-fetch for the same query\n- Prefer the API (structured data, fewer tokens consumed)\n\nFile v1.0.1:references/platform-rules.md\n\n# Platform-Specific Affiliate Rules\n\nWhen recommending programs, consider where the user will promote. Different platforms favor different product types and content strategies.\n\n## LinkedIn\n\n- **Audience:** B2B, professionals, marketing managers, founders\n- **Best fit:** Enterprise tools, productivity SaaS, business tools, high-ticket products\n- **Commission sweet spot:** High price point (even if lower %) — LinkedIn audience has purchasing authority\n- **Content:** Thought leadership, case studies, \"I tested X for 30 days\" stories\n- **Link placement:** First comment (LinkedIn suppresses posts with external links in the body)\n- **Tip:** Products that save teams money or time sell best here\n\n## X (Twitter)\n\n- **Audience:** Tech-savvy, early adopters, developers, indie hackers\n- **Best fit:** Dev tools, AI tools, startup tools, productivity hacks\n- **Commission sweet spot:** Products with visual/viral demo potential\n- **Content:** Threads (5-10 tweets), hot takes, before/after, quick tips\n- **Link placement:** Last tweet in thread or reply to own tweet\n- **Tip:** \"I replaced $X/month tool with this $Y tool\" performs extremely well\n\n## Reddit\n\n- **Audience:** Niche communities, skeptical, value authenticity over polish\n- **Best fit:** Products that solve specific problems discussed in subreddits\n- **Commission sweet spot:** Products with free tiers (Reddit hates hard sells)\n- **Content:** Genuine recommendations within helpful answers, \"I use X for Y\" comments\n- **Link placement:** Within helpful content, NEVER standalone link drops\n- **Warning:** Many subreddits ban affiliate links outright. Always check r/[subreddit] rules first. Accounts under 30 days or with low karma get flagged.\n- **Tip:** Build karma by being genuinely helpful first. Recommendations feel natural only after you've earned trust.\n\n## YouTube\n\n- **Audience:** Visual learners, \"how to\" searchers, comparison shoppers\n- **Best fit:** Products you can demo on screen (video tools, design tools, SaaS dashboards)\n- **Commission sweet spot:** High commission + visual product = highest ROI\n- **Content:** Reviews, tutorials, comparisons, \"best tools for X\" listicles\n- **Link placement:** Description box + pinned comment\n- **Tip:** \"[Product] review\" and \"[Product A] vs [Product B]\" have the highest buyer intent\n\n## Blog / SEO\n\n- **Audience:** High-intent searchers (already looking to buy)\n- **Best fit:** Any product with search volume for \"[product] review\" or \"best [category]\"\n- **Commission sweet spot:** Recurring commission on popular products\n- **Content:** Reviews, comparisons (\"X vs Y\"), listicles (\"Best X for Y in 2026\"), how-to guides\n- **Link placement:** In-content CTAs, comparison tables, \"Try [Product]\" buttons\n- **Tip:** Blog affiliate content has the longest lifespan — one good review can earn for years\n\nFile v1.0.1:references/scoring-criteria.md\n\n# Program Scoring Framework\n\nScore each program on 5 dimensions, 1-10 scale.\n\n## 1. Earning Potential (weight: 30%)\n\nFactors:\n- Commission percentage (`reward_value` — higher = better)\n- Recurring vs one-time (`reward_type`: `cps_recurring`/`cps_lifetime` scores 2+ points higher than `cps_one_time`)\n- Product price point (higher price = higher absolute earnings per sale)\n- Commission duration (`reward_duration`: lifetime > 12 months > one-time)\n- Payout threshold (lower = better, especially for beginners)\n\nScoring guide:\n- 9-10: 30%+ recurring on $50+/mo product, lifetime duration\n- 7-8: 20-30% recurring on $20-50/mo, 12+ months\n- 5-6: 15-20% recurring or $100+ one-time\n- 3-4: 10-15% or low-price products\n- 1-2: <10%, one-time, low-price\n\n## 2. Content Potential (weight: 25%)\n\nHow easy is it to create compelling content about this product?\n\nFactors:\n- Does the product have a visual \"wow\" demo? (AI video, design tools = high)\n- Can you show before/after results?\n- Is there a free tier or free trial for audience to try?\n- Are there multiple content angles? (tutorial, comparison, review, use case)\n- Does content about this product tend to get engagement?\n\nScoring guide:\n- 9-10: Visual product, free tier, 5+ content angles, viral potential\n- 7-8: Good demo potential, free trial, 3+ content angles\n- 5-6: Decent content angles but not visually exciting\n- 3-4: Hard to demo, abstract product, limited angles\n- 1-2: Boring product, no free tier, only 1 content angle\n\n## 3. Market Demand (weight: 20%)\n\nIs there active demand for this type of product?\n\nTo assess: `web_search` for \"[product category] tools\" and note the result count and recency.\n\nFactors:\n- Search volume for product category keywords\n- Trend direction (growing, stable, declining)\n- Market size (how many potential buyers exist)\n- Urgency of need (must-have vs nice-to-have)\n\nScoring guide (use `web_search \"[category] tools\"` result count as primary signal):\n- 9-10: >100M results, multiple recent articles (<30 days), trending on Google Trends ↑20%+ YoY\n- 7-8: 10M-100M results, recent articles (<90 days), stable or growing trend\n- 5-6: 1M-10M results, some articles in last 6 months, stable trend\n- 3-4: 100K-1M results, few recent articles, flat or declining trend\n- 1-2: <100K results, no recent coverage, clearly declining\n\n**Evidence format**: Always show: `\"Market Demand X/10 — '[search query]' → [N] results, Trends [↑/↓/→]X% YoY\"`\n**Confidence**: 🟢 HIGH (Google Trends data available) | 🟡 MEDIUM (result count only) | 🔴 LOW (no reliable signal)\n\n## 4. Competition Level (weight: 15%)\n\nHow many other affiliates are promoting this? INVERSE scoring: less competition = higher score.\n\nTo assess: `web_search` for \"[product] review\" — count results and check who ranks in top 10.\n\nFactors:\n- Number of existing review articles ranking on Google\n- How many YouTubers/creators already cover this product\n- Are there dominant affiliates with huge audiences?\n- Is the affiliate program new or established?\n\nScoring guide (use `web_search \"[product name] review\"` result count + top 10 analysis):\n- 9-10: <50K results for \"[product] review\", top 10 has no major publishers (Forbes, Wirecutter, etc.)\n- 7-8: 50K-500K results, top 10 has 1-2 major publishers but indie sites also rank\n- 5-6: 500K-5M results, top 10 is mix of major and indie, differentiation needed\n- 3-4: 5M-50M results, top 10 dominated by authority sites, hard to rank\n- 1-2: >50M results, top 10 is all Forbes/Wirecutter/CNET, near-impossible to rank\n\n**Evidence format**: Always show: `\"Competition X/10 — '[product] review' → [N] results, top 10: [brief who ranks]\"`\n**Confidence**: 🟢 HIGH (reviewed top 10 results) | 🟡 MEDIUM (result count only) | 🔴 LOW (no search performed)\n\n## 5. Trust Factor (weight: 10%)\n\nIs this a quality product you can recommend with integrity?\n\nFactors:\n- Product reviews and reputation (G2, Capterra, Trustpilot)\n- Company track record and funding\n- User retention (do people actually keep using it?)\n- Stars on openaffiliate.dev (`stars_count` — community signal)\n- Red flags? (layoffs, pivot, quality decline, data breaches)\n\nScoring guide (use G2/Capterra rating as primary signal when available):\n- 9-10: G2/Capterra ≥4.5/5, `stars_count` ≥20, funded company, no red flags\n- 7-8: G2/Capterra 4.0-4.4/5, `stars_count` ≥10, generally positive sentiment\n- 5-6: G2/Capterra 3.5-3.9/5, `stars_count` ≥5, some known limitations\n- 3-4: G2/Capterra 3.0-3.4/5, `stars_count` <5, mixed reviews or concerning signals\n- 1-2: G2/Capterra <3.0/5 or no reviews, red flags (data breach, mass layoffs, pivot)\n\n**Evidence format**: Always show: `\"Trust X/10 — G2: [rating]/5 ([N] reviews), stars_count: [N], [any flags]\"`\n**Confidence**: 🟢 HIGH (G2/Capterra data found) | 🟡 MEDIUM (only stars_count or Trustpilot) | 🔴 LOW (no review data)\n\n## Overall Score Calculation\n\n```\noverall = (earning × 0.30) + (content × 0.25) + (demand × 0.20)\n        + (competition × 0.15) + (trust × 0.10)\n```\n\n## Verdict\n\n- **7.5+: \"Strong Pick\"** — recommend promoting, high confidence\n- **5.5-7.4: \"Worth Testing\"** — try with small content investment, see results\n- **<5.5: \"Skip\"** — better options available, don't waste effort\n\nFile v1.0.1:skill-card.md\n\n## Description:\n\nFind and evaluate the best affiliate programs to promote from openaffiliate.dev.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[affitor](https://clawhub.ai/user/affitor)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nAffiliate marketers, content creators, and growth teams use this skill to discover, compare, score, and choose affiliate programs by niche, commission model, audience, and promotion platform.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill may use external web or API lookups when researching affiliate programs, which can expose private strategy details through search terms or requests.\n\nMitigation: Avoid providing confidential business strategy, unpublished campaign plans, or sensitive audience data unless those lookups are acceptable.\n\nRisk: Affiliate program terms, commission rates, cookie windows, and product reputation can change after the directory data is fetched.\n\nMitigation: Verify commission, cookie, payout, and eligibility terms on the program's official site before making business decisions or publishing recommendations.\n\nRisk: Broad activation wording may cause the skill to run on general promotion, niche, or product-selection questions.\n\nMitigation: Use explicit prompts when affiliate-program research is intended, and review recommendations before acting on them.\n\n## Reference(s):\n\n- [Affiliate Program Search on ClawHub](https://clawhub.ai/affitor/skills/affiliate-skills)\n- [openaffiliate.dev](https://openaffiliate.dev)\n- [openaffiliate.dev API](https://openaffiliate.dev/api)\n- [openaffiliate.dev Data Access](references/openaffiliate-api.md)\n- [Program Scoring Framework](references/scoring-criteria.md)\n- [Platform-Specific Affiliate Rules](references/platform-rules.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, json, guidance]\n\n**Output Format:** [Markdown recommendations with comparison tables, scorecards, next steps, and optional structured JSON fields for downstream agent use]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Scores programs across earning potential, content potential, market demand, competition, and trust factor; recommendations may depend on live external search and API results.]\n\n## Skill Version(s):\n\n1.0.1 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.1:agents/openai.yaml\n\ninterface:\n  display_name: \"Affiliate Program Search\"\n  short_description: \"Find and evaluate the best affiliate programs to promote from openaffiliate.dev\"\n  default_prompt: \"Find me the best AI video affiliate programs with recurring commission of at least 20%\"\n  allow_implicit_invocation: true\n\nFile v1.0.1:LICENSE.txt\n\nMIT License\n\nCopyright (c) 2026 Affitor\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v1.0.0: 151 files, 405175 bytes\n\nFiles: API.md (8829b), CLAUDE.md (4315b), CONTRIBUTING.md (4347b), docs/affiliate-funnel-overview.md (3213b), docs/distribution-strategy.md (14045b), docs/launch-content/devto-article.md (2623b), docs/launch-content/linkedin-post.md (1132b), docs/launch-content/reddit-claudeai.md (1390b), docs/launch-content/show-hn.md (1247b), docs/launch-content/twitter-thread.md (1620b), docs/pr-templates/awesome-list-pr-body.md (818b), docs/pr-templates/list-entries.md (1684b), docs/sdd-review-prompt.md (12599b), docs/skill-roadmap.md (7000b), evals/evals.json (30225b), package.json (359b), platforms/chatgpt.md (3193b), platforms/cursor.md (2916b), platforms/gemini.md (3442b), platforms/openclaw.md (4714b), prompts/bootstrap.md (5966b), QUICKSTART.md (5196b), README.md (14512b), registry.json (37319b), scripts/distribute.sh (17615b), scripts/fix-frontmatter.js (5952b), scripts/generate-registry.js (4239b), scripts/run-evals.sh (6832b), shared/references/affiliate-glossary.md (3050b), shared/references/affitor-branding.md (1026b), shared/references/case-studies.md (4216b), shared/references/flywheel-connections.md (6431b), shared/references/ftc-compliance.md (2711b), shared/references/offer-frameworks.md (5058b), shared/references/platform-rules.md (2828b), shared/references/sample-api-response.json (4466b), shared/references/seo-strategy.md (5530b), skill-card.md (3109b), SKILL.md (3364b), skills/analytics/ab-test-generator/LICENSE.txt (1064b), skills/analytics/ab-test-generator/SKILL.md (8779b), skills/analytics/conversion-tracker/agents/openai.yaml (143b), skills/analytics/conversion-tracker/LICENSE.txt (1064b), skills/analytics/conversion-tracker/references/tracking-templates.md (2485b), skills/analytics/conversion-tracker/SKILL.md (8463b), skills/analytics/internal-linking-optimizer/SKILL.md (7999b), skills/analytics/performance-report/agents/openai.yaml (138b), skills/analytics/performance-report/LICENSE.txt (1064b), skills/analytics/performance-report/references/benchmarks.md (2857b), skills/analytics/performance-report/SKILL.md (10064b), skills/analytics/seo-audit/LICENSE.txt (1064b), skills/analytics/seo-audit/SKILL.md (9852b), skills/automation/content-repurposer/LICENSE.txt (1064b), skills/automation/content-repurposer/SKILL.md (9043b), skills/automation/email-automation-builder/LICENSE.txt (1064b), skills/automation/email-automation-builder/SKILL.md (10163b), skills/automation/multi-program-manager/LICENSE.txt (1064b), skills/automation/multi-program-manager/SKILL.md (9447b), skills/automation/paid-ad-copy-writer/LICENSE.txt (1064b), skills/automation/paid-ad-copy-writer/SKILL.md (10753b), skills/automation/proprietary-data-generator/SKILL.md (9758b), skills/blog/affiliate-blog-builder/agents/openai.yaml (265b), skills/blog/affiliate-blog-builder/LICENSE.txt (1064b), skills/blog/affiliate-blog-builder/references/blog-templates.md (8011b), skills/blog/affiliate-blog-builder/references/seo-checklist.md (5434b), skills/blog/affiliate-blog-builder/references/wordpress-deploy.md (5394b), skills/blog/affiliate-blog-builder/SKILL.md (16986b), skills/blog/comparison-post-writer/LICENSE.txt (1064b), skills/blog/comparison-post-writer/SKILL.md (14346b), skills/blog/content-decay-detector/SKILL.md (8224b), skills/blog/content-moat-calculator/SKILL.md (9011b), skills/blog/how-to-tutorial-writer/LICENSE.txt (1064b), skills/blog/how-to-tutorial-writer/SKILL.md (14559b), skills/blog/keyword-cluster-architect/SKILL.md (9576b), skills/blog/listicle-generator/LICENSE.txt (1064b), skills/blog/listicle-generator/SKILL.md (14042b), skills/content/content-pillar-atomizer/SKILL.md (9559b), skills/content/reddit-post-writer/LICENSE.txt (1064b), skills/content/reddit-post-writer/SKILL.md (15080b), skills/content/tiktok-script-writer/LICENSE.txt (1064b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: affiliate-check\nversion: 1.0.0\ndescription: |\n  Live affiliate program data from list.affitor.com. Search programs, compare commissions,\n  check cookie days, find top performers. Use when researching affiliate programs,\n  comparing options, or checking program details. Persistent daemon with cache — first call\n  starts server (~2s), subsequent calls ~100ms.\nallowed-tools:\n  - Bash\n  - Read\n---\n\n# affiliate-check: Live Affiliate Program Data\n\nQuery affiliate program data from list.affitor.com in real-time. Persistent daemon\nwith in-memory cache — first call auto-starts the server, every subsequent call is instant.\n\n## SETUP (run this check BEFORE any affiliate-check command)\n\nBefore using any command, find the skill and check if the binary exists:\n\n```bash\n# Check project-level first, then user-level\nif test -x .claude/skills/affiliate-skills/tools/dist/affiliate-check; then\n  A=.claude/skills/affiliate-skills/tools/dist/affiliate-check\nelif test -x ~/.claude/skills/affiliate-skills/tools/dist/affiliate-check; then\n  A=~/.claude/skills/affiliate-skills/tools/dist/affiliate-check\nelse\n  echo \"NEEDS_SETUP\"\nfi\n```\n\nSet `A` to whichever path exists and use it for all commands.\n\nIf `NEEDS_SETUP`:\n1. Tell the user: \"affiliate-check needs a one-time build (~10 seconds). OK to proceed?\"\n2. If approved, run: `cd <SKILL_DIR> && ./setup`\n3. If `bun` is not installed: `curl -fsSL https://bun.sh/install | bash`\n\n## Quick Reference\n\n```bash\nA=~/.claude/skills/affiliate-skills/tools/dist/affiliate-check\n\n# Search programs\n$A search \"AI video tools\"\n$A search --recurring --tags ai\n\n# Top programs\n$A top\n$A top --sort trending\n\n# Program details\n$A info heygen\n\n# Compare programs side-by-side\n$A compare heygen synthesia\n\n# Server management\n$A status\n$A stop\n```\n\n## Commands\n\n### Search\n```\naffiliate-check search <query>                    Search by name/keyword\naffiliate-check search --recurring                Filter recurring commissions\naffiliate-check search --tags ai,video            Filter by tags\naffiliate-check search --min-cookie 30            Min cookie days\naffiliate-check search --sort new                 Sort: trending | new | top\naffiliate-check search --limit 20                 Result limit\n```\n\n### Discovery\n```\naffiliate-check top                               Top programs by stars\naffiliate-check top --sort trending               Trending programs\naffiliate-check top --sort new                    Newest programs\n```\n\n### Details\n```\naffiliate-check info <name>                       Detailed program card\naffiliate-check compare <name1> <name2> [name3]   Side-by-side comparison\n```\n\n### Server\n```\naffiliate-check status                            Uptime, cache, API key status\naffiliate-check stop                              Shutdown daemon\naffiliate-check help                              Full help\n```\n\n## Environment\n\n```\nAFFITOR_API_KEY    Optional. API key from list.affitor.com\n                   Without: free tier (max 5 results per query)\n                   With: unlimited access\n                   Get one: list.affitor.com/settings → API Keys (free)\n```\n\n## Architecture\n\n- Persistent Bun daemon on localhost (port 9500-9510)\n- In-memory cache with 5-minute TTL\n- State file: `/tmp/affiliate-check.json`\n- Auto-shutdown after 30 min idle\n- Server crash → auto-restarts on next command\n\nFile v1.0.0:skills/analytics/ab-test-generator/SKILL.md\n\n---\nname: ab-test-generator\ndescription: >\n  Generate A/B test variants for affiliate content. Triggers on:\n  \"create A/B test\", \"test my headline\", \"optimize my CTA\", \"generate variants\",\n  \"split test ideas\", \"improve click-through rate\", \"test my landing page copy\",\n  \"headline alternatives\", \"CTA variations\", \"which version is better\",\n  \"optimize conversions\", \"test my email subject line\", \"compare approaches\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"analytics\", \"optimization\", \"tracking\", \"ab-testing\", \"experiments\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S6-Analytics\n---\n\n# A/B Test Generator\n\nGenerate A/B test variants for affiliate content — headlines, CTAs, landing page sections, email subject lines, and social post hooks. Each variant includes a hypothesis explaining why it might outperform the original. Output is a Markdown document with the original, variants, hypotheses, and a test plan.\n\n## Stage\n\nS6: Analytics — Small changes in headlines and CTAs can swing conversion rates by 20-50%. A/B testing is how professional affiliates systematically find what converts best. This skill removes the guesswork by generating theory-driven variants using proven copywriting frameworks.\n\n## When to Use\n\n- User wants to improve conversion rates on existing content\n- User has a headline, CTA, or email subject line and wants alternatives\n- User says \"test my headline\", \"optimize my CTA\", \"A/B test ideas\"\n- User has a landing page section that isn't converting\n- User wants to compare different messaging approaches\n- Chaining from S2-S5: take any content output and generate test variants\n\n## Input Schema\n\n```yaml\noriginal: string               # REQUIRED — the content to test (headline, CTA, paragraph,\n                               # email subject line, or full social post)\n\ncontent_type: string           # REQUIRED — \"headline\" | \"cta\" | \"landing_section\"\n                               # | \"email_subject\" | \"social_hook\"\n\ngoal: string                   # OPTIONAL — \"clicks\" | \"signups\" | \"purchases\"\n                               # Default: \"clicks\"\n\nnum_variants: number           # OPTIONAL — number of variants to generate (2-5)\n                               # Default: 3\n\naudience: string               # OPTIONAL — who sees this content\n                               # (e.g., \"SaaS founders\", \"content creators\")\n\nproduct: string                # OPTIONAL — product being promoted\n```\n\n**Chaining context**: If S2-S5 content exists in conversation, the user can reference it: \"test the headline from my blog post\" or \"generate CTA variants for my landing page.\"\n\n## Workflow\n\n### Step 1: Analyze Original Content\n\nBreak down the original into components:\n- **Emotional angle**: What emotion does it trigger? (curiosity, fear, desire, urgency)\n- **Specificity**: How specific vs vague?\n- **Structure**: Question, statement, command, statistic?\n- **Framework**: Which copywriting framework does it follow? (PAS, AIDA, 4U, BAB)\n\n### Step 2: Identify Testable Elements\n\nDetermine what to vary:\n- Emotional angle (switch from curiosity to urgency)\n- Specificity (add numbers, remove vagueness)\n- Structure (question vs statement)\n- Length (shorter vs longer)\n- Power words (swap key words for stronger alternatives)\n- Social proof (add or remove)\n\n### Step 3: Generate Variants\n\nCreate `num_variants` alternatives, each using a different approach:\n- **Variant A**: Different emotional angle\n- **Variant B**: Different structure/format\n- **Variant C**: Different specificity level\n- Additional variants explore social proof, urgency, or contrarian angles\n\nEach variant must:\n- Preserve the core message and product reference\n- Preserve any FTC disclosure from the original\n- Be a realistic alternative (not just a word swap)\n\n### Step 4: Write Hypotheses\n\nFor each variant, explain:\n- What was changed and why\n- Which copywriting principle supports the change\n- What behavior change is expected (e.g., \"Higher CTR because questions create open loops\")\n\n### Step 5: Suggest Test Plan\n\nRecommend:\n- Sample size needed (minimum 100 impressions per variant for social, 500 for landing pages)\n- Test duration (7-14 days minimum)\n- What metric to track (CTR, conversion rate, revenue per visitor)\n- When to declare a winner (95% statistical significance or practical significance threshold)\n\n### Step 6: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] 3-5 distinct variants generated (not just word swaps)\n- [ ] Each hypothesis grounded in a copywriting principle or framework\n- [ ] Sample size calculation is present and realistic\n- [ ] Test duration is ≥7 days minimum\n- [ ] Winner criteria defined with statistical significance threshold\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\ntest:\n  original: string\n  content_type: string\n  goal: string\n\nvariants:\n  - label: string              # \"Variant A\", \"Variant B\", etc.\n    content: string            # the variant text\n    change: string             # what was changed\n    framework: string          # copywriting principle used\n    hypothesis: string         # why this might win\n\ntest_plan:\n  sample_size: number          # per variant\n  duration: string             # recommended test period\n  metric: string               # what to measure\n  winner_criteria: string      # when to pick a winner\n```\n\n## Output Format\n\n1. **Original** — the current content being tested\n2. **Variants** — each variant with its content, change description, and hypothesis\n3. **Test Plan** — sample size, duration, metric, winner criteria\n4. **Quick Win** — if one variant is clearly stronger based on copywriting principles, call it out\n\n## Error Handling\n\n- **Original too short (1-2 words)**: \"I need more context. Paste the full headline, CTA, or email subject line you want to test.\"\n- **Content type unclear**: \"Is this a headline, CTA button text, email subject line, or social post hook? Knowing the format helps me generate better variants.\"\n- **Too many variants requested (>5)**: \"I'll generate 5 high-quality variants. More than 5 makes testing impractical — you'd need a very large audience to reach statistical significance.\"\n\n## Examples\n\n### Example 1: Blog headline test\n\n**User**: \"Test this headline: 'HeyGen Review: Is It Worth It in 2026?'\"\n**Action**: Generate 3 variants. Variant A: \"I Tested HeyGen for 30 Days — Here's What Happened\" (curiosity + personal experience). Variant B: \"HeyGen vs Synthesia: Which AI Video Tool Wins?\" (comparison + specificity). Variant C: \"The AI Video Tool That Cut My Production Time by 80%\" (result + specificity). Each with hypothesis.\n\n### Example 2: CTA button test\n\n**User**: \"Optimize this CTA: 'Start Free Trial'\"\n**Action**: Variant A: \"Try HeyGen Free — No Card Required\" (reduces friction). Variant B: \"Create Your First AI Video in 2 Minutes\" (outcome-focused). Variant C: \"Get Started Free →\" (shorter, action-oriented). Test plan: minimum 500 clicks per variant, track conversion rate.\n\n### Example 3: Email subject line test\n\n**User**: \"I'm sending an email about Semrush. Test this subject: 'Check out Semrush — it's great for SEO'\"\n**Action**: Identify weakness (vague, no hook). Variant A: \"The SEO tool I use to rank #1 (not kidding)\" (social proof + curiosity). Variant B: \"Your competitors are using this — are you?\" (FOMO). Variant C: \"3 Semrush features that doubled my organic traffic\" (specificity + result). Each preserves FTC compliance.\n\n## References\n\n- `shared/references/ftc-compliance.md` — Ensure variants preserve FTC disclosure from original. Referenced in Step 3.\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `purple-cow-audit` (S1) — winning variants reveal what resonates = what's remarkable\n- `performance-report` (S6) — test results for reporting\n\n### Fed By\n- `viral-post-writer` (S2) — posts to test variations of\n- `twitter-thread-writer` (S2) — thread hooks to test\n- `landing-page-creator` (S4) — landing page elements to test\n- `content-pillar-atomizer` (S2) — volume mode variants for testing\n\n### Feedback Loop\n- Test results directly improve all content-producing skills → winning headlines, CTAs, and angles feed into next content creation cycle\n\n```yaml\nchain_metadata:\n  skill_slug: \"ab-test-generator\"\n  stage: \"analytics\"\n  timestamp: string\n  suggested_next:\n    - \"performance-report\"\n    - \"viral-post-writer\"\n    - \"landing-page-creator\"\n```\n\nFile v1.0.0:skills/analytics/conversion-tracker/SKILL.md\n\n---\nname: conversion-tracker\ndescription: >\n  Set up affiliate conversion tracking with UTM parameters and link tagging. Triggers on:\n  \"set up tracking\", \"create UTM links\", \"track my affiliate links\", \"tracking pixels\",\n  \"click attribution\", \"organize my links\", \"UTM parameters\", \"tag my links\",\n  \"campaign tracking\", \"link tracking setup\", \"prepare for launch\",\n  \"debug attribution\", \"tracking spreadsheet\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"analytics\", \"optimization\", \"tracking\", \"conversion\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S6-Analytics\n---\n\n# Conversion Tracker\n\nSet up affiliate conversion tracking — generate UTM-tagged links, create link naming conventions, configure tracking pixel setup instructions, and build a tracking spreadsheet. Output is a Markdown tracking guide with a table of tagged links ready to deploy.\n\n## Stage\n\nS6: Analytics — The difference between amateur and professional affiliates. You can't optimize what you don't measure. After deploying content (S5), you need UTM-tagged links for every platform and content piece to know exactly which channel drives conversions.\n\n## When to Use\n\n- User is about to launch a campaign and needs tracking links\n- User wants UTM-tagged links for different platforms\n- User says \"set up tracking\", \"create UTM links\", \"organize my affiliate links\"\n- User wants to track which content drives the most clicks and conversions\n- User is preparing to run ads and needs consistent link tagging\n- Chaining from S1 (product selected) → generate tracking links before creating content in S2-S5\n\n## Input Schema\n\n```yaml\nproduct:\n  name: string                 # REQUIRED — product name (e.g., \"HeyGen\")\n  affiliate_url: string        # REQUIRED — base affiliate link\n\nplatforms:                     # OPTIONAL — where content will be published\n  - string                     # e.g., [\"linkedin\", \"twitter\", \"blog\", \"email\", \"reddit\"]\n                               # Default: [\"blog\", \"twitter\", \"linkedin\"]\n\ncampaign_name: string          # OPTIONAL — campaign identifier (e.g., \"q1-2026-ai-tools\")\n                               # Default: auto-generated from product name + date\n\ntracking_tool: string          # OPTIONAL — \"google_analytics\" | \"voluum\" | \"clickmagick\"\n                               # | \"manual_utm\". Default: \"manual_utm\"\n\ncontent_types:                 # OPTIONAL — types of content being created\n  - string                     # e.g., [\"blog_review\", \"social_post\", \"email\", \"landing_page\"]\n```\n\n**Chaining context**: If S1 was run, pull `recommended_program.affiliate_url` and `recommended_program.name`. If S2-S5 outputs exist, use them to determine platforms and content types automatically.\n\n## Workflow\n\n### Step 1: Gather Product and Platform Info\n\nCollect product name, affiliate URL, and target platforms. If not provided, default to blog + twitter + linkedin (the three most common affiliate channels).\n\n### Step 2: Generate UTM-Tagged Links\n\nFor each platform × content-type combination, create a UTM-tagged URL:\n- `utm_source`: platform name (e.g., `linkedin`, `twitter`, `blog`)\n- `utm_medium`: content type (e.g., `social`, `article`, `email`)\n- `utm_campaign`: campaign name (e.g., `heygen-q1-2026`)\n- `utm_content`: specific content identifier (e.g., `review-post`, `cta-button`, `bio-link`)\n\nAppend UTM parameters to the affiliate URL. Handle URLs that already have query parameters (use `&` not `?`).\n\n### Step 3: Create Link Naming Convention\n\nEstablish a consistent naming scheme:\n```\n{product}-{platform}-{content_type}-{variant}\n```\nExample: `heygen-linkedin-review-v1`\n\n### Step 4: Build Tracking Setup Guide\n\nBased on `tracking_tool`:\n- **Google Analytics**: Event tracking setup, goal configuration, UTM report location\n- **Voluum / ClickMagick**: Postback URL setup, conversion pixel placement\n- **Manual UTM**: Google Sheets tracking template with columns for link, platform, clicks, conversions\n\n### Step 5: Output Tracking Sheet\n\nPresent all links in a structured table with:\n- Link name\n- Platform\n- Content type\n- Full tagged URL\n- Notes\n\n### Step 6: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] UTM parameters correctly appended to all affiliate URLs\n- [ ] No URL encoding errors in generated links\n- [ ] Naming convention is consistent across all links\n- [ ] All links are under URL length limits\n- [ ] Setup guide steps match the recommended tracking tool\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\ntracking:\n  product: string\n  campaign: string\n  total_links: number\n\nlinks:\n  - name: string               # e.g., \"heygen-linkedin-review-v1\"\n    platform: string\n    content_type: string\n    url: string                # full UTM-tagged URL\n    utm_source: string\n    utm_medium: string\n    utm_campaign: string\n    utm_content: string\n\nnaming_convention:\n  pattern: string              # e.g., \"{product}-{platform}-{type}-{variant}\"\n  examples: string[]\n\nsetup_guide:\n  tool: string\n  steps: string[]\n```\n\n## Output Format\n\n1. **Tracking Links Table** — Markdown table with all tagged links\n2. **Naming Convention** — pattern + examples for consistency\n3. **Setup Guide** — step-by-step instructions for the chosen tracking tool\n4. **Next Steps** — what to do with these links (plug into S2-S5 content)\n\n## Error Handling\n\n- **No affiliate URL provided**: \"I'll create the UTM structure and naming convention now. Replace `[YOUR_AFFILIATE_LINK]` with your actual affiliate URL when you have it.\"\n- **URL already has UTM parameters**: \"Your affiliate URL already has UTM parameters. I'll append additional tracking parameters without overwriting the existing ones.\"\n- **Too many platform × content combinations (>20)**: \"That's a lot of links. I'll generate the most important ones (one per platform) and provide the naming convention so you can create the rest.\"\n\n## Examples\n\n### Example 1: Simple blog + social setup\n\n**User**: \"Set up tracking for my HeyGen affiliate link (heygen.com/ref/abc123) on my blog and Twitter\"\n**Action**: Generate 4 links: blog-review, blog-comparison, twitter-post, twitter-thread. Each with proper UTM tags. Include Google Sheets tracking template.\n\n### Example 2: Multi-platform campaign\n\n**User**: \"I'm launching a campaign for Semrush across LinkedIn, Twitter, Reddit, my blog, and email newsletter. Create all my tracking links.\"\n**Action**: Generate 10+ links across all platforms and content types. Establish naming convention. Suggest Google Analytics goal setup for conversion tracking.\n\n### Example 3: Chained from S1\n\n**Context**: S1 found HeyGen with affiliate URL heygen.com/ref/abc123.\n**User**: \"Set up tracking for this before I start creating content.\"\n**Action**: Pull product info from S1 output. Generate links for the user's likely content types (infer from S1 context). Prepare tracking sheet that S6.3 (performance-report) can use later.\n\n## References\n\n- `references/tracking-templates.md` — Google Sheets template, UTM parameter reference, platform-specific tracking notes, S6 feedback loop\n- `shared/references/affiliate-glossary.md` — Definitions for tracking terms (EPC, CTR, conversion). Referenced in setup guide.\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `affiliate-program-search` (S1) — top converting niches → search for more programs in winning niches\n- `performance-report` (S6) — conversion data for reports\n- `ab-test-generator` (S6) — conversion baselines for test evaluation\n\n### Fed By\n- `bio-link-deployer` (S5) — deployed link URLs to track\n- `email-drip-sequence` (S5) — email links to track\n- `landing-page-creator` (S4) — landing page conversions to track\n- `github-pages-deployer` (S5) — deployed site to track\n\n### Feedback Loop\n- Conversion data feeds back to S1 Research (which programs convert best) and S4 Landing (which page elements convert) — closing the flywheel loop\n\n```yaml\nchain_metadata:\n  skill_slug: \"conversion-tracker\"\n  stage: \"analytics\"\n  timestamp: string\n  suggested_next:\n    - \"performance-report\"\n    - \"ab-test-generator\"\n    - \"affiliate-program-search\"\n```\n\nFile v1.0.0:skills/analytics/internal-linking-optimizer/SKILL.md\n\n---\nname: internal-linking-optimizer\ndescription: >\n  Analyze site's internal link structure and optimize for hub-and-spoke SEO architecture.\n  Triggers on: \"optimize internal links\", \"internal linking\", \"link structure\",\n  \"hub and spoke links\", \"orphan pages\", \"link equity\", \"internal link audit\",\n  \"fix my internal links\", \"link architecture\", \"site structure optimization\",\n  \"internal linking strategy\", \"link flow\", \"improve site structure\",\n  \"find orphan pages\", \"maximize link equity\", \"internal link map\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"analytics\", \"optimization\", \"tracking\", \"internal-links\", \"site-structure\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S6-Analytics\n---\n\n# Internal Linking Optimizer\n\nAnalyze your site's internal link structure and generate an optimized hub-and-spoke linking plan. Finds orphan pages (no internal links pointing to them), identifies link equity bottlenecks, and creates specific linking instructions to maximize SEO impact.\n\n## Stage\n\nS6: Analytics & Optimization — This is analytics/audit work on existing content. Internal linking is the most underutilized SEO lever — it's 100% in your control and costs nothing.\n\n## When to Use\n\n- User wants to improve their site's SEO through better internal linking\n- User asks about \"orphan pages\", \"link structure\", \"hub and spoke\"\n- User says \"internal linking\", \"link audit\", \"link equity\"\n- After publishing new content — new pages need internal links within 48 hours\n- After `keyword-cluster-architect` — cluster structure defines the ideal link architecture\n- Monthly maintenance task alongside `content-decay-detector`\n\n## Input Schema\n\n```yaml\nsite_url: string              # REQUIRED — site to analyze\n                              # e.g., \"myblog.com\"\n\npages: object[]               # OPTIONAL — known pages with their topics\n  - url: string\n    title: string\n    topic_cluster: string     # Which topical cluster it belongs to\n    is_hub: boolean           # Is this a hub page?\n\nhub_pages: string[]           # OPTIONAL — URLs of your hub/pillar pages\n                              # Default: auto-detected\n\nnew_pages: string[]           # OPTIONAL — recently published pages needing links\n                              # Default: none\n```\n\n**Chaining from S3 keyword-cluster-architect**: Use `keyword_clusters.hub` and `keyword_clusters.clusters` to define ideal link architecture.\n\n## Workflow\n\n### Step 1: Discover Site Structure\n\n1. `web_search`: `site:[site_url]` — discover indexed pages\n2. Map pages to topic clusters (if not provided)\n3. Identify current hub pages (pages that link to many others)\n4. Note orphan pages (pages with few/no internal links pointing to them)\n\n### Step 2: Analyze Current Link Structure\n\nRead `shared/references/seo-strategy.md` for internal linking rules.\n\nFor each page group:\n- Count internal links TO this page (inlinks)\n- Count internal links FROM this page (outlinks)\n- Check link depth from homepage (should be ≤ 3 clicks)\n- Identify the anchor text used\n\n### Step 3: Identify Issues\n\nFlag:\n1. **Orphan pages** — no or few internal links pointing to them\n2. **Hub pages with weak linking** — hub should link to ALL spokes in its cluster\n3. **Missing spoke-to-spoke links** — related spokes should link to each other\n4. **Broken contextual flow** — pages that should link to each other but don't\n5. **Over-linked pages** — too many outlinks dilute link equity\n6. **Missing reverse links** — spoke links to hub but hub doesn't link back\n\n### Step 4: Generate Linking Instructions\n\nFor each issue, provide specific instructions:\n\n```\nPage: [URL]\nAction: Add internal link to [target URL]\nAnchor text: \"[suggested anchor]\"\nLocation: [where in the content to add it]\nPriority: [P0/P1/P2]\nReason: [why this link matters]\n```\n\n### Step 5: Self-Validation\n\n- [ ] Instructions are specific (exact URLs, anchor text, location)\n- [ ] Hub-and-spoke architecture is logical\n- [ ] Anchor text is natural and keyword-relevant\n- [ ] No recommendations to over-link (max 3-5 internal links per 1000 words)\n- [ ] New pages have at least 2-3 internal links pointing to them\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"\ninternal_links:\n  site: string\n  pages_analyzed: number\n  issues_found: number\n  links_to_add: number\n\n  orphan_pages: string[]        # Pages with zero/few inlinks\n  hub_pages: string[]           # Identified hub pages\n\n  link_actions:\n    - source_url: string        # Page to add the link ON\n      target_url: string        # Page to link TO\n      anchor_text: string       # Suggested anchor text\n      location: string          # Where in the content\n      priority: string          # \"P0\" | \"P1\" | \"P2\"\n      reason: string\n\n  link_structure:               # Current state summary\n    total_pages: number\n    avg_inlinks: number\n    avg_outlinks: number\n    max_depth: number\n\nchain_metadata:\n  skill_slug: \"internal-linking-optimizer\"\n  stage: \"analytics\"\n  timestamp: string\n  suggested_next:\n    - \"seo-audit\"\n    - \"content-decay-detector\"\n    - \"affiliate-blog-builder\"\n```\n\n## Output Format\n\n```\n## Internal Link Audit: [Site]\n\n### Structure Overview\n- **Pages analyzed:** XX\n- **Orphan pages:** XX (need links urgently)\n- **Hub pages:** XX\n- **Links to add:** XX\n- **Average inlinks per page:** X.X\n\n### Orphan Pages (P0 — fix immediately)\nThese pages have no/few internal links and are invisible to Google:\n1. [URL] — [title] — 0 inlinks\n2. [URL] — [title] — 1 inlink\n\n### Link Actions\n\n#### P0 — Critical\n| Source Page | → | Target Page | Anchor Text | Location |\n|---|---|---|---|---|\n| [source] | → | [target] | \"[anchor]\" | After paragraph about [topic] |\n\n#### P1 — High\n[same table]\n\n#### P2 — Maintenance\n[same table]\n\n### Hub-and-Spoke Health\n| Hub Page | Expected Spokes | Linked Spokes | Missing Links |\n|---|---|---|---|\n| [hub] | XX | XX | [list missing] |\n\n### Quick Wins\n1. [Easiest high-impact link to add]\n2. [Second easiest]\n3. [Third]\n```\n\n## Error Handling\n\n- **No site URL**: \"I need your site URL to analyze internal links.\"\n- **Site not indexed**: \"This site doesn't appear to be indexed. Check robots.txt and sitemap.\"\n- **Too few pages**: \"With only [X] pages, focus on creating more content first. Internal linking becomes powerful at 10+ pages.\"\n- **No hub pages identifiable**: \"I can't identify clear hub pages. Run `keyword-cluster-architect` first to define your topic structure.\"\n\n## Examples\n\n**Example 1:** \"Audit my blog's internal links\"\n→ Discover pages, map structure, find orphan pages, generate specific linking instructions with anchor text and placement.\n\n**Example 2:** \"I just published a new article, what should I link to it?\"\n→ Identify 3-5 existing pages that should link to the new article, with specific anchor text and paragraph locations.\n\n**Example 3:** \"Optimize internal links based on my keyword clusters\" (after keyword-cluster-architect)\n→ Use cluster structure to define ideal hub-spoke links. Compare current vs ideal. Generate gap-filling instructions.\n\n## Flywheel Connections\n\n### Feeds Into\n- `content-decay-detector` (S3) — pages with weak link structure may be decaying\n- `seo-audit` (S6) — link structure is a key SEO factor\n- `affiliate-blog-builder` (S3) — new articles need immediate internal links\n\n### Fed By\n- `keyword-cluster-architect` (S3) — cluster structure defines ideal link architecture\n- `affiliate-blog-builder` (S3) — new content that needs linking\n- `seo-audit` (S6) — identifies pages with link structure issues\n\n### Feedback Loop\n- `seo-audit` (S6) tracks ranking changes after link optimization → measure impact of internal linking changes\n\n## References\n\n- `shared/references/seo-strategy.md` — Hub-and-spoke linking rules, anchor text rules, link equity flow\n- `shared/references/flywheel-connections.md` — Master connection map\n\nFile v1.0.0:skills/analytics/performance-report/SKILL.md\n\n---\nname: performance-report\ndescription: >\n  Generate affiliate performance reports with KPIs and recommendations. Triggers on:\n  \"show my affiliate report\", \"how are my programs doing\", \"performance review\",\n  \"earnings report\", \"monthly affiliate report\", \"weekly report\",\n  \"analyze my affiliate earnings\", \"which program is best\", \"EPC report\",\n  \"conversion rate analysis\", \"revenue breakdown\", \"campaign performance\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"analytics\", \"optimization\", \"tracking\", \"reporting\", \"kpi\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S6-Analytics\n---\n\n# Performance Report\n\nGenerate weekly or monthly affiliate performance reports — earnings, clicks, conversions, EPC, top performers, underperformers, and trend analysis. Output is a Markdown report with KPI dashboard, program rankings, and actionable recommendations.\n\n## Stage\n\nS6: Analytics — Data without analysis is just noise. This skill transforms raw affiliate numbers into insights — which programs are worth your time, which are dragging your portfolio down, and where to focus next. Professional affiliates review performance weekly.\n\n## When to Use\n\n- User wants to review their affiliate earnings for a period\n- User asks \"how are my programs doing?\" or \"show me my affiliate report\"\n- User has click/conversion/revenue data and wants analysis\n- User wants to compare performance across multiple programs\n- User says \"weekly report\", \"monthly report\", \"earnings breakdown\"\n- Chaining from S6.1 (conversion-tracker) — analyze the data those links collected\n\n## Input Schema\n\n```yaml\nprograms:\n  - name: string               # REQUIRED — program name (e.g., \"HeyGen\")\n    clicks: number             # OPTIONAL — total clicks this period\n    conversions: number        # OPTIONAL — total conversions\n    revenue: number            # OPTIONAL — total commission earned ($)\n    commission: number         # OPTIONAL — commission per sale ($)\n    spend: number              # OPTIONAL — money spent on ads/promotion ($)\n\nperiod: string                 # OPTIONAL — \"week\" | \"month\" | \"quarter\"\n                               # Default: \"month\"\n\ngoals:\n  revenue_target: number       # OPTIONAL — target revenue for the period ($)\n  conversion_target: number    # OPTIONAL — target conversions\n\nprevious_period:               # OPTIONAL — last period's data for trend analysis\n  - name: string\n    clicks: number\n    conversions: number\n    revenue: number\n\nnotes: string                  # OPTIONAL — context about the period\n                               # (e.g., \"launched new blog post week 2\")\n```\n\n**Chaining context**: If S1 program data or S6.1 tracking data exists in conversation, pull program names and any available metrics.\n\n## Workflow\n\n### Step 1: Collect Program Data\n\nGather data from user input. If data is incomplete, work with what's available and note gaps:\n- \"You provided revenue but not clicks — I can calculate revenue per program but not EPC or conversion rate.\"\n\n### Step 2: Calculate KPIs\n\nFor each program:\n- **EPC** (Earnings Per Click): revenue / clicks\n- **Conversion Rate**: conversions / clicks × 100\n- **Revenue Share**: program revenue / total revenue × 100\n- **CPA** (Cost Per Acquisition): spend / conversions (if spend provided)\n- **ROAS** (Return on Ad Spend): revenue / spend (if spend provided)\n- **Commission Per Sale**: revenue / conversions\n\nPortfolio-level:\n- **Total Revenue**: sum of all program revenue\n- **Blended EPC**: total revenue / total clicks\n- **Blended Conversion Rate**: total conversions / total clicks × 100\n- **Top Performer**: highest EPC program\n- **Underperformer**: lowest EPC program\n\n### Step 3: Rank Programs\n\nSort programs by ROI efficiency:\n1. EPC (primary sort)\n2. Total revenue (secondary)\n3. Conversion rate (tertiary)\n\nAssign labels:\n- **Star**: High EPC + high volume → double down\n- **Cash Cow**: Moderate EPC + high volume → maintain\n- **Question Mark**: High EPC + low volume → scale up\n- **Dog**: Low EPC + low volume → consider dropping\n\n### Step 4: Identify Trends\n\nIf `previous_period` data is provided:\n- Revenue trend: up/down/flat (with percentage)\n- Click trend: up/down/flat\n- Conversion trend: up/down/flat\n- Per-program trends\n\n### Step 5: Generate Recommendations\n\nBased on data:\n- **Double down**: Programs with high EPC that need more traffic\n- **Optimize**: Programs with high traffic but low conversion (content issue)\n- **Phase out**: Programs with low EPC and low volume\n- **Investigate**: Programs with unusual patterns (sudden drops)\n\n### Step 6: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] EPC calculation correct: revenue ÷ clicks\n- [ ] Conversion rate percentages are accurate\n- [ ] Revenue shares across programs sum to ~100%\n- [ ] Labels match metrics: Star (high EPC + growth), Cash Cow (high revenue + stable), Question Mark (low data), Dog (declining)\n- [ ] Recommendations are specific and reference concrete next steps\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\nreport:\n  period: string\n  total_revenue: number\n  total_clicks: number\n  total_conversions: number\n  blended_epc: number\n  blended_conversion_rate: number\n  goal_progress: string        # \"on_track\" | \"behind\" | \"ahead\" | \"no_goal\"\n\nprograms:\n  - name: string\n    clicks: number\n    conversions: number\n    revenue: number\n    epc: number\n    conversion_rate: number\n    revenue_share: number      # percentage of total\n    label: string              # \"star\" | \"cash_cow\" | \"question_mark\" | \"dog\"\n    trend: string              # \"up\" | \"down\" | \"flat\" | \"new\"\n\nrecommendations:\n  - program: string\n    action: string             # \"double_down\" | \"optimize\" | \"phase_out\" | \"investigate\"\n    reason: string\n    next_step: string          # specific action to take\n```\n\n## Output Format\n\n1. **KPI Dashboard** — summary table with total revenue, clicks, conversions, blended EPC\n2. **Program Rankings** — table sorted by EPC with labels (Star/Cash Cow/Question Mark/Dog)\n3. **Trend Analysis** — period-over-period comparison (if previous data provided)\n4. **Recommendations** — prioritized list of actions per program\n5. **Goal Progress** — progress toward targets (if goals provided)\n\n## Error Handling\n\n- **No data provided**: \"I need your affiliate numbers to generate a report. At minimum, provide: program names and revenue. Ideally also clicks and conversions. You can get these from your affiliate dashboard or tracking tool.\"\n- **Only one program**: Generate the report for one program. Note: \"With only one program, I can't do comparative analysis. Consider adding more programs to diversify. Use S1 (affiliate-program-search) to find complementary programs.\"\n- **Missing clicks (revenue only)**: \"Without click data, I can rank programs by revenue but can't calculate EPC or conversion rate. EPC is the most important affiliate metric — consider setting up tracking with S6.1 (conversion-tracker).\"\n\n## Examples\n\n### Example 1: Monthly multi-program report\n\n**User**: \"Monthly report: HeyGen — 500 clicks, 15 conversions, $450. Semrush — 1200 clicks, 8 conversions, $320. Notion — 300 clicks, 25 conversions, $125.\"\n**Action**: Calculate KPIs. HeyGen: EPC $0.90, CR 3.0% (Star). Semrush: EPC $0.27, CR 0.7% (Question Mark — high traffic, low conversion). Notion: EPC $0.42, CR 8.3% (Cash Cow — high conversion, low revenue per sale). Recommend: Scale HeyGen traffic, optimize Semrush content (CTAs, landing page), maintain Notion.\n\n### Example 2: Week-over-week comparison\n\n**User**: \"This week vs last week: HeyGen clicks went from 100 to 150, but conversions dropped from 5 to 3.\"\n**Action**: Flag conversion rate drop (5% → 2%). Diagnose: more traffic but lower quality? New traffic source? Landing page change? Recommend: Check traffic sources, run S6.4 (seo-audit) on landing page, test CTAs with S6.2 (ab-test-generator).\n\n### Example 3: Revenue-only report\n\n**User**: \"My programs last month: HeyGen $450, Semrush $320, Notion $125, Canva $80.\"\n**Action**: Revenue-only analysis. Total $975. Revenue share: HeyGen 46%, Semrush 33%, Notion 13%, Canva 8%. Note concentration risk (79% from 2 programs). Recommend: Set up click tracking (S6.1) for deeper analysis, consider diversifying with S1 research.\n\n## References\n\n- `references/benchmarks.md` — KPI benchmarks by channel, program label thresholds, conversion rate benchmarks, timeline expectations, S1 scoring feedback loop\n- `shared/references/affiliate-glossary.md` — KPI definitions (EPC, CTR, ROAS). Referenced in Step 2.\n- `shared/references/case-studies.md` — Real-world case studies with conversion rates and timelines. Use as context for setting realistic expectations.\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `niche-opportunity-finder` (S1) — performance data identifies best-performing niches\n- `affiliate-program-search` (S1) — which program types convert best\n- `content-moat-calculator` (S3) — content performance metrics for moat progress\n- `content-decay-detector` (S3) — traffic decline data for decay detection\n\n### Fed By\n- `conversion-tracker` (S6) — conversion data for reports\n- `social-media-scheduler` (S5) — scheduled posts to measure\n- `ab-test-generator` (S6) — test results to include\n\n### Feedback Loop\n- Performance insights feed back to S1 Research (which niches/programs to pursue) and S2-S4 (which content types and formats perform best) — the analytics-to-research flywheel\n\n```yaml\nchain_metadata:\n  skill_slug: \"performance-report\"\n  stage: \"analytics\"\n  timestamp: string\n  suggested_next:\n    - \"affiliate-program-search\"\n    - \"niche-opportunity-finder\"\n    - \"content-decay-detector\"\n```\n\nFile v1.0.0:skills/analytics/seo-audit/SKILL.md\n\n---\nname: seo-audit\ndescription: >\n  Audit affiliate blog posts and landing pages for SEO issues. Triggers on:\n  \"audit my blog post for SEO\", \"check my SEO\", \"SEO review\", \"improve my rankings\",\n  \"SEO checklist\", \"on-page SEO audit\", \"keyword optimization check\",\n  \"why isn't my page ranking\", \"SEO score\", \"content quality audit\",\n  \"check my meta tags\", \"internal linking audit\", \"quick SEO wins\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"analytics\", \"optimization\", \"tracking\", \"seo\", \"technical-seo\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S6-Analytics\n---\n\n# SEO Audit\n\nAudit affiliate blog posts and landing pages for SEO issues — on-page optimization, keyword usage, meta tags, content quality signals, affiliate link attributes, and internal linking. Output is a 10-dimension SEO scorecard with a prioritized fix-it checklist.\n\n## Stage\n\nS6: Analytics — 53% of all website traffic comes from organic search. For affiliate bloggers, SEO is the most sustainable traffic source — but most affiliate content has basic SEO mistakes that tank rankings. This skill catches those mistakes and provides quick wins.\n\n## When to Use\n\n- User has a blog post or landing page and wants an SEO review\n- User asks \"why isn't my page ranking?\" or \"check my SEO\"\n- User wants to improve search rankings for affiliate content\n- User says \"SEO audit\", \"SEO checklist\", \"on-page optimization\"\n- User wants to check affiliate link attributes (nofollow, sponsored)\n- Chaining from S3 (blog) or S4 (landing): audit content before or after publishing\n\n## Input Schema\n\n```yaml\ncontent: string                # REQUIRED — the content to audit (markdown, HTML, or URL)\n                               # If URL, will attempt to fetch and analyze\n\ntarget_keyword: string         # REQUIRED — primary keyword to optimize for\n                               # (e.g., \"best AI video tools\", \"HeyGen review\")\n\ncontent_type: string           # OPTIONAL — \"blog_post\" | \"landing_page\"\n                               # Default: \"blog_post\"\n\ncompetitor_urls:               # OPTIONAL — competitor pages to compare against\n  - string                     # e.g., [\"competitor.com/heygen-review\"]\n\nsecondary_keywords:            # OPTIONAL — additional keywords to check\n  - string                     # e.g., [\"AI video generator\", \"HeyGen pricing\"]\n```\n\n**Chaining context**: If S3 (blog) or S4 (landing page) was run in the same conversation, pull the generated content directly for audit. The user should not have to paste content just generated.\n\n## Workflow\n\n### Step 1: Analyze Content Structure\n\nCheck:\n- **Word count**: Is it competitive? (blog: 1500+ words, landing: varies)\n- **Heading structure**: H1 present and unique? H2/H3 hierarchy logical?\n- **Paragraph length**: Short paragraphs for readability?\n- **Content depth**: Does it cover the topic comprehensively?\n\n### Step 2: Check Keyword Usage\n\nAnalyze:\n- **Title tag**: Contains target keyword? Under 60 characters?\n- **H1**: Contains target keyword?\n- **First 100 words**: Keyword appears naturally?\n- **Keyword density**: 1-2% optimal (not stuffing, not absent)\n- **Keyword in subheadings**: At least one H2 contains keyword or variant?\n- **LSI keywords**: Related terms present for topical depth?\n\n### Step 3: Evaluate Meta Tags\n\nCheck:\n- **Title tag length**: 50-60 characters optimal\n- **Meta description**: Present? 150-160 characters? Contains keyword? Compelling?\n- **OG tags**: Open Graph tags for social sharing\n- **Canonical URL**: Present and correct?\n\n### Step 4: Check E-E-A-T Signals\n\nEvaluate:\n- **Experience**: First-person experience with the product?\n- **Expertise**: Author credentials or demonstrated knowledge?\n- **Authoritativeness**: Citing sources, linking to official pages?\n- **Trustworthiness**: Transparent disclosure, balanced (pros AND cons)?\n\n### Step 5: Check Affiliate Link Attributes\n\nVerify:\n- All affiliate links have `rel=\"nofollow sponsored\"` (Google requirement)\n- Links are not cloaked in a way that violates search guidelines\n- FTC disclosure is present and above the fold\n- Links open in new tab (`target=\"_blank\"`) for UX\n\n### Step 6: Check Internal Linking\n\nEvaluate:\n- Links to related content on the same site?\n- Anchor text is descriptive (not \"click here\")?\n- Table of contents for long content?\n\n### Step 7: Score on 10 Dimensions\n\nRate each 1-10:\n1. Keyword optimization\n2. Content depth and quality\n3. Title tag and meta description\n4. Heading structure\n5. E-E-A-T signals\n6. Affiliate link compliance\n7. Internal linking\n8. Readability and formatting\n9. Mobile friendliness indicators\n10. Technical SEO basics\n\n### Step 8: Generate Fix-It Checklist\n\nPrioritize fixes by impact:\n- **Quick wins**: Fix in 5 minutes, big impact (meta tags, keyword in H1)\n- **Medium effort**: Fix in 30 minutes (add sections, improve depth)\n- **Major revision**: Fix in 2+ hours (restructure content, add original research)\n\n### Step 9: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] All 10 SEO dimensions scored (1-10 each)\n- [ ] Overall score is weighted sum of dimension scores\n- [ ] Issues prioritized: quick_win → medium → major\n- [ ] Each fix is specific and actionable (not generic advice)\n- [ ] Keyword density recommendation is 1-2% (not higher)\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\naudit:\n  url_or_title: string\n  target_keyword: string\n  overall_score: number        # out of 100 (sum of 10 dimensions × 10)\n  word_count: number\n\nscores:\n  - dimension: string\n    score: number              # 1-10\n    status: string             # \"good\" | \"needs_work\" | \"critical\"\n    notes: string\n\nissues:\n  - priority: string           # \"quick_win\" | \"medium\" | \"major\"\n    dimension: string\n    issue: string\n    fix: string                # specific action to take\n    impact: string             # \"high\" | \"medium\" | \"low\"\n\nchecklist:\n  - task: string\n    priority: string\n    done: boolean              # always false (user checks off)\n```\n\n## Output Format\n\n1. **SEO Scorecard** — table with 10 dimensions, scores, and status\n2. **Overall Score** — X/100 with assessment (Excellent >80, Good 60-80, Needs Work 40-60, Critical <40)\n3. **Quick Wins** — fixes that take <5 minutes and have high impact\n4. **Full Fix-It Checklist** — all issues ordered by priority with specific actions\n5. **Competitor Comparison** — brief notes if competitor URLs were provided\n\n## Error Handling\n\n- **No content provided**: \"Paste the content of your blog post or landing page. I'll audit it for SEO issues and give you a prioritized fix-it list.\"\n- **No target keyword**: \"What keyword are you trying to rank for? (e.g., 'HeyGen review', 'best AI video tools'). This helps me check keyword usage and optimization.\"\n- **Content is too short (<300 words)**: \"This content is quite short (X words). For competitive keywords, aim for 1,500+ words. I'll audit what's here, but content depth is likely your biggest SEO issue.\"\n- **URL provided but cannot be fetched**: \"I couldn't fetch that URL. Paste the page content directly and I'll audit it.\"\n\n## Examples\n\n### Example 1: Blog post with common issues\n\n**User**: \"Audit this blog post for 'best AI video tools': [pastes 2000-word blog post]\"\n**Action**: Score each dimension. Common findings: keyword not in H1 (fix: add to title), affiliate links missing `rel=\"nofollow sponsored\"` (fix: add attributes), no meta description (fix: write one), thin intro section (fix: expand first paragraph). Overall score: 62/100. Quick wins: meta description, H1 keyword, link attributes.\n\n### Example 2: Landing page audit\n\n**User**: \"Check the SEO on my HeyGen landing page\" [content from S4 in conversation]\n**Action**: Pull landing page content from S4 output. Note: landing pages are typically not SEO-optimized (they're conversion-focused). Score accordingly — different expectations for landing pages vs blog posts. Focus on: title tag, meta description, canonical, affiliate link compliance.\n\n### Example 3: Competitive comparison\n\n**User**: \"Audit my Semrush review and compare to these competitor pages: [competitor URLs]\"\n**Action**: Audit user's content first. Then use `web_search` or `web_browse` to analyze competitor content structure (word count, headings, topics covered). Identify content gaps — topics competitors cover that the user doesn't. Recommend additions to improve competitiveness.\n\n## References\n\n- `shared/references/ftc-compliance.md` — FTC disclosure requirements for affiliate content. Checked in Step 5.\n- `shared/references/affiliate-glossary.md` — SEO and affiliate terminology. Referenced throughout.\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `monopoly-niche-finder` (S1) — ranking data reveals niches you're already winning in\n- `keyword-cluster-architect` (S3) — ranking gaps reveal keyword opportunities\n- `content-decay-detector` (S3) — declining pages to investigate\n- `internal-linking-optimizer` (S6) — link structure issues to fix\n\n### Fed By\n- `github-pages-deployer` (S5) — deployed site URL to audit\n- `affiliate-blog-builder` (S3) — published articles to audit\n\n### Feedback Loop\n- SEO audit results feed back to S3 Blog (content improvements) and S1 Research (niche opportunities from ranking data) — closing the SEO flywheel\n\n```yaml\nchain_metadata:\n  skill_slug: \"seo-audit\"\n  stage: \"analytics\"\n  timestamp: string\n  suggested_next:\n    - \"content-decay-detector\"\n    - \"internal-linking-optimizer\"\n    - \"keyword-cluster-architect\"\n```\n\nFile v1.0.0:skills/automation/content-repurposer/SKILL.md\n\n---\nname: content-repurposer\ndescription: >\n  Repurpose one piece of affiliate content into multiple formats. Triggers on:\n  \"repurpose my content\", \"turn my blog into tweets\", \"cross-post this\",\n  \"content recycling\", \"convert to newsletter\", \"make a tweet thread from this\",\n  \"adapt for TikTok\", \"omnichannel content\", \"scale my content\",\n  \"turn this into a LinkedIn post\", \"repurpose for email\", \"content multiplication\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"automation\", \"scaling\", \"workflow\", \"repurposing\", \"multi-format\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S7-Automation\n---\n\n# Content Repurposer\n\nRepurpose one piece of affiliate content into multiple formats — blog post to tweets, landing page to email, video script to blog, social post to newsletter. Each output is adapted to the target platform's rules, tone, length, and FTC requirements. Output is a set of ready-to-post content blocks.\n\n## Stage\n\nS7: Automation — Creating content from scratch is expensive. The fastest way to scale is to repurpose what already works. One blog post can become 5 tweets, 1 LinkedIn post, 1 Reddit post, and 2 emails — multiplying your reach without multiplying your effort.\n\n## When to Use\n\n- User has existing content and wants it on more platforms\n- User says \"turn my blog into tweets\" or \"repurpose this for LinkedIn\"\n- User wants to scale content distribution without writing from scratch\n- User says \"cross-post\", \"content recycling\", \"omnichannel\"\n- User has a winning piece and wants to maximize its ROI\n- Chaining from S2-S5: take any content output and adapt it for additional platforms\n\n## Input Schema\n\n```yaml\nsource_content: string         # REQUIRED — the original content (full text, or from conversation)\n\nsource_type: string            # REQUIRED — \"blog\" | \"social\" | \"landing\" | \"email\"\n                               # | \"video_script\" | \"newsletter\"\n\ntarget_formats:                # REQUIRED — formats to repurpose into\n  - string                     # \"tweet_thread\" | \"linkedin_post\" | \"tiktok_script\"\n                               # | \"newsletter\" | \"reddit_post\" | \"email\"\n                               # | \"blog_summary\" | \"pinterest_pin\"\n\nproduct:\n  name: string                 # OPTIONAL — product being promoted\n  affiliate_url: string        # OPTIONAL — affiliate link to include in each format\n```\n\n**Chaining context**: If S2-S5 content was generated in the same conversation, reference it directly: \"repurpose my blog post for Twitter and LinkedIn.\"\n\n## Workflow\n\n### Step 1: Analyze Source Content\n\nExtract from the source:\n- **Core value proposition**: The main benefit or insight\n- **Key hooks**: Attention-grabbing statements or data points\n- **Proof points**: Statistics, testimonials, personal experience\n- **CTA**: The action the reader should take\n- **Affiliate link**: The link to preserve in all formats\n\n### Step 2: Map to Target Formats\n\nFor each target format, define constraints:\n- **Tweet thread**: 5-10 tweets, 280 chars each, hook in tweet 1, CTA + link in last tweet\n- **LinkedIn post**: 1,300 chars max for full visibility, professional tone, no link in body (comments)\n- **TikTok script**: 30-60 seconds, spoken word, hook in first 3 seconds, CTA at end\n- **Newsletter**: 500-800 words, subject line + preview, value-first structure\n- **Reddit post**: Authentic tone, value-first, disclosure at bottom, suggest subreddit\n- **Email**: Subject + preview + body + CTA, 200-300 words\n- **Blog summary**: 300-500 words condensed version with key points\n- **Pinterest pin**: Title (40 chars), description (500 chars), image text suggestion\n\n### Step 3: Adapt Content\n\nFor each target format:\n1. Select the most relevant hooks and proof points\n2. Rewrite in the platform's native voice and format\n3. Adjust length to platform norms\n4. Place affiliate link according to platform best practices\n5. Add platform-appropriate FTC disclosure\n\n### Step 4: Add Platform-Specific Posting Guides\n\nFor each output, include:\n- Best time to post (general guidance)\n- Hashtag strategy (if applicable)\n- Engagement tips specific to the platform\n- Link placement rules\n\n### Step 5: Output All Variants\n\nPresent each format as a separate, clearly labeled block ready to copy and paste.\n\n### Step 6: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] Each format is adapted to its platform (not copy-pasted across formats)\n- [ ] Character counts are within platform limits\n- [ ] FTC disclosure present in every variant that contains affiliate link\n- [ ] Core value proposition preserved across all repurposed formats\n- [ ] Affiliate link placement follows platform-specific rules\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\nrepurposed:\n  source_type: string\n  source_summary: string       # one-sentence summary of original\n  formats_generated: number\n\noutputs:\n  - format: string             # target format name\n    content: string            # the repurposed content (ready to post)\n    platform: string           # which platform this is for\n    character_count: number\n    affiliate_link_placement: string  # where the link goes\n    disclosure: string         # FTC disclosure used\n    posting_guide:\n      best_time: string\n      hashtags: string[]\n      tips: string[]\n```\n\n## Output Format\n\n1. **Source Summary** — one paragraph describing the original content\n2. **Repurposed Content** — each format as a separate block with clear headers\n3. **Posting Guide** — per-format tips for best results\n4. **Affiliate Link Summary** — which formats include the link and where\n\n## Error Handling\n\n- **Source content too short (<100 words)**: \"The source content is quite short. I'll work with what's here, but longer source content produces better repurposed variants. Consider using the full blog post rather than just the intro.\"\n- **No affiliate link**: \"I'll repurpose the content without an affiliate link. Add `[YOUR_AFFILIATE_LINK]` where I've marked the CTA before posting.\"\n- **Incompatible format**: \"Converting a tweet to a blog post is more like 'expanding' than 'repurposing.' Use S3 (affiliate-blog-builder) to write a full blog post around this topic instead.\"\n\n## Examples\n\n### Example 1: Blog to social media\n\n**User**: \"Turn my HeyGen review blog post into a tweet thread and LinkedIn post\"\n**Action**: Extract key points from the blog (top 5 features, pricing, verdict). Tweet thread: Hook tweet → 5 feature tweets with mini-takes → verdict tweet → CTA tweet with link + #ad. LinkedIn post: Professional angle (time savings, ROI), personal experience tone, link in first comment, #ad disclosure.\n\n### Example 2: Landing page to email\n\n**User**: \"Repurpose my Semrush landing page into a 3-email sequence\"\n**Action**: Extract value proposition, benefits, social proof, CTA from landing page. Email 1: Problem awareness (pain point from landing page). Email 2: Solution introduction (benefits). Email 3: CTA (affiliate link + urgency from landing page). Each email under 300 words.\n\n### Example 3: Social post to newsletter\n\n**User**: \"My LinkedIn post about AI tools got 500 likes. Turn it into a newsletter.\"\n**Action**: Expand the LinkedIn post's hook into a newsletter intro. Add depth: examples, data, personal experience that couldn't fit in 1,300 chars. Structure: Hook → context → 3 insights → recommendation → CTA. Include FTC disclosure and affiliate link.\n\n## References\n\n- `shared/references/ftc-compliance.md` — Per-platform FTC disclosure rules. Read in Step 3.\n- `shared/references/affitor-branding.md` — Branding guidelines for page outputs. Referenced in Step 3.\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `content-pillar-atomizer` (S2) — repurposed content to atomize further\n- `social-media-scheduler` (S5) — repurposed content to schedule\n\n### Fed By\n- `affiliate-blog-builder` (S3) — blog articles to repurpose\n- `landing-page-creator` (S4) — landing page copy to repurpose into emails\n- `performance-report` (S6) — identifies top-performing content worth repurposing\n\n### Feedback Loop\n- `performance-report` (S6) shows which repurposed formats perform best → prioritize those formats\n\n## Quality Gate\n\nBefore delivering output, verify:\n\n1. Would I share this on MY personal social?\n2. Contains specific, surprising detail? (not generic)\n3. Respects reader's intelligence?\n4. Remarkable enough to share? (Purple Cow test)\n5. Irresistible offer framing? (if S4 offer skills ran)\n\nAny NO → rewrite before delivering.\n\n```yaml\nchain_metadata:\n  skill_slug: \"content-repurposer\"\n  stage: \"automation\"\n  timestamp: string\n  suggested_next:\n    - \"content-pillar-atomizer\"\n    - \"social-media-scheduler\"\n```\n\nFile v1.0.0:skills/automation/email-automation-builder/SKILL.md\n\n---\nname: email-automation-builder\ndescription: >\n  Build multi-sequence email automation flows with branching logic. Triggers on:\n  \"build email automation\", \"create email funnel\", \"email automation flow\",\n  \"welcome series with branches\", \"conditional email sequence\", \"set up automation\",\n  \"email workflow builder\", \"segmented email flow\", \"advanced email sequence\",\n  \"nurture funnel\", \"cart abandonment sequence\", \"win-back email flow\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"automation\", \"scaling\", \"workflow\", \"email\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S7-Automation\n---\n\n# Email Automation Builder\n\nBuild multi-sequence email automation flows with branching logic, segmentation, triggers, and tool-specific setup. More advanced than S5 email-drip-sequence: this skill creates conditional flows that respond to subscriber behavior (opened, clicked, purchased). Output includes ASCII flow diagrams, email content, and platform setup instructions.\n\n## Stage\n\nS7: Automation — S5's email-drip-sequence is a linear 7-email series. Real email marketing uses branching flows: if they opened → send X, if they didn't → send Y, if they clicked the affiliate link → move to a different sequence. This skill builds the automation system, not just the emails.\n\n## When to Use\n\n- User needs email flows with conditional logic (if/then branches)\n- User wants welcome series, nurture flows, win-back campaigns, or cart abandonment\n- User says \"email automation\", \"branching email\", \"conditional sequence\"\n- User wants to set up flows in ConvertKit, Mailchimp, ActiveCampaign, or Beehiiv\n- User already has an S5 drip sequence and wants to upgrade it to a full automation\n- Chaining: upgrade S5 `email-drip-sequence` output to a branching automation\n\n## Input Schema\n\n```yaml\nproduct:\n  name: string                 # REQUIRED — product being promoted\n  affiliate_url: string        # REQUIRED — affiliate link\n  reward_value: string         # OPTIONAL — commission info (e.g., \"30% recurring\")\n\naudience:\n  description: string          # REQUIRED — who the subscribers are\n  segments:                    # OPTIONAL — audience segments for branching\n    - string                   # e.g., [\"cold_leads\", \"warm_leads\", \"buyers\"]\n\nflow_type: string              # OPTIONAL — \"welcome\" | \"nurture\" | \"winback\"\n                               # | \"reengagement\" | \"cart_abandon\"\n                               # Default: \"welcome\"\n\nemail_tool: string             # OPTIONAL — \"convertkit\" | \"mailchimp\"\n                               # | \"activecampaign\" | \"beehiiv\"\n                               # Default: generic (works with any ESP)\n\nnum_emails: number             # OPTIONAL — total emails in the flow (5-12)\n                               # Default: 7\n\nlead_magnet: string            # OPTIONAL — what they opted in for\n```\n\n**Chaining context**: If S5 email-drip-sequence was run earlier, offer to upgrade it: \"I see you have a 7-email drip sequence. Want me to upgrade it with branching logic and segments?\"\n\n## Workflow\n\n### Step 1: Map Flow Type to Template\n\nSelect automation template based on `flow_type`:\n\n**Welcome Flow**: Trigger → Welcome email → Wait 1 day → Value email → Branch (opened? → Soft sell / didn't open? → Re-engagement) → Continue selling to openers, re-engage non-openers\n\n**Nurture Flow**: Trigger → Educational series → Branch (clicked affiliate link? → Move to sales sequence / didn't click? → Continue nurturing) → Post-purchase thank you for converters\n\n**Win-back Flow**: Trigger (inactive 30+ days) → \"We miss you\" → Wait 3 days → Value reminder → Branch (re-engaged? → Move to nurture / still inactive? → Last chance) → Sunset after no response\n\n### Step 2: Define Triggers and Entry Conditions\n\nFor each flow, specify:\n- **Entry trigger**: What starts the flow (new subscriber, tag added, purchase, inactivity)\n- **Exit conditions**: What removes someone (purchase, unsubscribe, entered different flow)\n- **Branch conditions**: Opens, clicks, purchases, time-based\n\n### Step 3: Design Branching Logic\n\nCreate decision points:\n- After email N: Did they open? (Branch A: opened, Branch B: not opened)\n- After email N: Did they click affiliate link? (Branch A: clicked, Branch B: didn't)\n- After email N: Did they purchase? (Branch A: buyer → thank you, Branch B: non-buyer → continue)\n\n### Step 4: Write Each Email\n\nFor each email in each branch, write:\n- Subject line (40-60 chars)\n- Preview text (80-100 chars)\n- Body copy (200-400 words)\n- CTA (single, clear)\n- FTC disclosure (for emails with affiliate links)\n\n### Step 5: Add Wait Times\n\nBetween emails:\n- Welcome flow: 0, 1, 2, 3, 5, 7, 10 days\n- Nurture flow: 2, 4, 7, 10, 14 days\n- Win-back flow: 0, 3, 7, 14 days\n- Adjust based on audience engagement patterns\n\n### Step 6: Output Flow + Setup\n\nPresent:\n- ASCII flow diagram showing the full automation\n- Each email's content\n- Tool-specific setup instructions (if email_tool specified)\n\n### Step 7: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] Every branch path leads to a valid next step (no dead ends)\n- [ ] All emails are complete in each branch (subject, body, CTA)\n- [ ] Wait times between emails sum correctly to total flow duration\n- [ ] FTC disclosure present on all emails containing affiliate links\n- [ ] Branch conditions are clear boolean logic (opened/clicked/didn't)\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\nautomation:\n  flow_type: string\n  product: string\n  total_emails: number\n  total_branches: number\n  estimated_days: number       # total span of the flow\n\nflow:\n  - step: number\n    type: string               # \"email\" | \"wait\" | \"branch\" | \"exit\"\n    email:                     # present if type is \"email\"\n      subject: string\n      preview: string\n      body: string\n      cta: string\n      has_affiliate_link: boolean\n    wait_days: number          # present if type is \"wait\"\n    branch:                    # present if type is \"branch\"\n      condition: string        # e.g., \"opened previous email?\"\n      yes_path: number         # step number for yes\n      no_path: number          # step number for no\n\nsetup:\n  tool: string\n  steps: string[]              # tool-specific setup instructions\n  tags: string[]               # recommended tags to apply\n  segments: string[]           # recommended segments\n```\n\n## Output Format\n\n1. **Flow Overview** — flow type, total emails, total days, branch count\n2. **ASCII Flow Diagram** — visual representation of the automation with branches\n3. **Email Content** — each email with subject, preview, body, CTA (grouped by branch)\n4. **Setup Instructions** — tool-specific steps to build this automation\n5. **Tags & Segments** — recommended tagging strategy for tracking\n\n## Error Handling\n\n- **No product info**: \"What affiliate product are you promoting? I need the product name and your affiliate link to write the email content.\"\n- **Unknown email tool**: \"I don't have specific setup instructions for [tool]. I'll provide generic automation logic that works with any ESP — just map the triggers, waits, and branches to your tool's interface.\"\n- **Too many emails requested (>12)**: \"12+ emails in one flow is usually too many. I'll create a 7-email flow with branches. For longer nurture, consider chaining two separate flows.\"\n- **Upgrading from S5**: \"I see your existing 7-email drip. I'll keep the email content and add branching logic: opened/not-opened splits after emails 2 and 4, and a purchase detection branch after email 5.\"\n\n## Examples\n\n### Example 1: Welcome flow with branches\n\n**User**: \"Build a welcome email automation for HeyGen (affiliate link: heygen.com/ref/abc123) for content creators who downloaded my AI tools guide.\"\n**Action**: 7-email welcome flow. Email 1: Deliver guide. Email 2: Value (AI video tip). Branch: Did they open email 2? Yes → Email 3 (soft sell HeyGen). No → Email 3b (re-engagement with different subject). Continue branching through to email 7. ASCII diagram + all email content + ConvertKit setup.\n\n### Example 2: Upgrade existing S5 drip\n\n**User**: \"Take my email drip sequence from earlier and add automation logic.\"\n**Action**: Keep the 7 emails from S5 output. Add branches: After email 2 (opened → continue / not opened → resend with new subject). After email 4 (clicked affiliate link → skip to email 5 hard sell / didn't click → add extra value email). After email 5 (purchased → exit + thank you / didn't purchase → continue to email 6-7).\n\n### Example 3: Win-back flow\n\n**User**: \"Create a win-back sequence for subscribers who haven't opened emails in 30 days. I promote Semrush.\"\n**Action**: 4-email win-back flow. Trigger: 30 days no opens. Email 1: \"Still interested in SEO?\" (curiosity). Wait 3 days. Email 2: Value piece (SEO tip). Branch: Opened? Yes → Move to nurture flow. No → Email 3: \"Last chance\" (urgency). No response after 7 days → Sunset (remove from list).\n\n## References\n\n- `shared/references/ftc-compliance.md` — FTC disclosure for emails with affiliate links. Read in Step 4.\n- `shared/references/affitor-branding.md` — Branding guidelines for email footers. Referenced in Step 4.\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `conversion-tracker` (S6) — automated email links to track\n\n### Fed By\n- `email-drip-sequence` (S5) — drip sequence to upgrade with automation logic\n- `conversion-tracker` (S6) — conversion data for branch conditions\n\n### Feedback Loop\n- `conversion-tracker` (S6) provides email conversion data → optimize branch conditions and timing\n\n```yaml\nchain_metadata:\n  skill_slug: \"email-automation-builder\"\n  stage: \"automation\"\n  timestamp: string\n  suggested_next:\n    - \"conversion-tracker\"\n    - \"performance-report\"\n```\n\nFile v1.0.0:skills/automation/multi-program-manager/SKILL.md\n\n---\nname: multi-program-manager\ndescription: >\n  Manage and compare multiple affiliate programs as a portfolio. Triggers on:\n  \"manage my affiliate programs\", \"compare my programs\", \"portfolio overview\",\n  \"which program should I focus on\", \"diversify my affiliate income\",\n  \"program switching\", \"affiliate portfolio\", \"program comparison\",\n  \"revenue allocation\", \"which programs to drop\", \"add new programs\",\n  \"affiliate program strategy\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"automation\", \"scaling\", \"workflow\", \"portfolio\", \"multi-program\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S7-Automation\n---\n\n# Multi-Program Manager\n\nManage and compare multiple affiliate programs as a portfolio — overview, performance comparison, diversification strategy, program switching decisions, and revenue allocation. Output is a portfolio dashboard with strategic recommendations and a weekly action plan.\n\n## Stage\n\nS7: Automation — Most affiliates either promote too few programs (concentration risk) or too many (effort dilution). This skill applies portfolio thinking to affiliate marketing: analyze your programs like investments, identify which to double down on, maintain, or drop, and allocate your limited time for maximum ROI.\n\n## When to Use\n\n- User manages multiple affiliate programs and wants a strategic overview\n- User asks \"which program should I focus on?\" or \"should I drop this program?\"\n- User wants to diversify their affiliate income\n- User says \"compare my programs\", \"portfolio review\", \"program strategy\"\n- User is deciding whether to add or remove programs\n- Chaining from S6.3 (performance-report): take performance data and make strategic decisions\n\n## Input Schema\n\n```yaml\nprograms:\n  - name: string               # REQUIRED — program name\n    affiliate_url: string      # OPTIONAL — affiliate link\n    reward_value: string       # OPTIONAL — commission (e.g., \"30% recurring\")\n    reward_type: string        # OPTIONAL — \"cps_recurring\" | \"cps_one_time\" | \"cpl\" | \"cpc\"\n    monthly_revenue: number    # OPTIONAL — avg monthly revenue ($)\n    monthly_clicks: number     # OPTIONAL — avg monthly clicks\n    niche: string              # OPTIONAL — product category\n    status: string             # OPTIONAL — \"active\" | \"paused\" | \"new\" | \"considering\"\n\ngoal: string                   # OPTIONAL — \"maximize_revenue\" | \"diversify\"\n                               # | \"reduce_risk\" | \"find_gaps\"\n                               # Default: \"maximize_revenue\"\n\nbudget_hours: number           # OPTIONAL — weekly hours available for content\n                               # Default: 10\n```\n\n**Chaining context**: If S1 program research or S6.3 performance data exists in conversation, pull program details and metrics automatically.\n\n## Workflow\n\n### Step 1: Build Portfolio Overview\n\nCompile all programs into a dashboard:\n- Program name, niche, commission type, commission value\n- Monthly revenue, clicks, EPC\n- Status (active/paused/new)\n- Revenue share (% of total)\n\n### Step 2: Calculate Per-Program Metrics\n\nFor each program with data:\n- **EPC**: revenue / clicks\n- **Revenue Share**: program revenue / total revenue × 100\n- **Effort-to-Revenue Ratio**: estimated hours spent / revenue generated\n- **Commission Quality Score**: recurring > one-time > per-lead > per-click\n\n### Step 3: Apply Portfolio Analysis\n\n**Concentration Risk**:\n- If top program > 50% of revenue → HIGH RISK\n- If top 2 programs > 80% → MODERATE RISK\n- If no program > 30% → WELL DIVERSIFIED\n\n**Niche Overlap**:\n- Multiple programs in same niche → competing for same audience\n- Different niches → healthy diversification\n\n**Revenue Stability**:\n- Recurring commissions → stable\n- One-time commissions → volatile (need constant new traffic)\n\n### Step 4: Generate Recommendations\n\nFor each program, assign an action:\n- **Double Down**: High EPC, room to grow → create more content, scale traffic\n- **Maintain**: Solid performer, no changes needed → keep existing content fresh\n- **Optimize**: High traffic but low conversion → improve CTAs, landing pages, test variants\n- **Phase Out**: Low EPC, low growth potential → redirect effort to better programs\n- **Add**: Gap identified → research new programs with S1\n\n### Step 5: Create Action Plan\n\nBased on `budget_hours`, allocate weekly time:\n- Double-down programs get 50% of time\n- Maintain programs get 20%\n- Optimize programs get 20%\n- New program research gets 10%\n\nProvide specific weekly tasks tied to Affitor skills.\n\n### Step 6: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] Revenue share percentages sum to ~100%\n- [ ] EPC calculations correct (revenue ÷ clicks per program)\n- [ ] Concentration risk accurate (flag if top program >50% of revenue)\n- [ ] Actions match performance: double_down (Star), maintain (Cash Cow), optimize (Question Mark), phase_out (Dog)\n- [ ] Weekly time allocation sums to user's stated hours budget\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\nportfolio:\n  total_programs: number\n  active_programs: number\n  total_monthly_revenue: number\n  concentration_risk: string   # \"high\" | \"moderate\" | \"low\"\n  niche_diversification: string # \"good\" | \"overlapping\" | \"single_niche\"\n  revenue_stability: string    # \"stable\" | \"moderate\" | \"volatile\"\n\nprograms:\n  - name: string\n    niche: string\n    reward_type: string\n    monthly_revenue: number\n    epc: number\n    revenue_share: number\n    action: string             # \"double_down\" | \"maintain\" | \"optimize\" | \"phase_out\"\n    reason: string\n\nrecommendations:\n  - action: string\n    program: string\n    skill: string              # which Affitor skill to use\n    task: string               # specific task\n    priority: number           # 1 = highest\n\nweekly_plan:\n  total_hours: number\n  allocation:\n    - program: string\n      hours: number\n      tasks: string[]\n```\n\n## Output Format\n\n1. **Portfolio Dashboard** — table with all programs, revenue, EPC, revenue share\n2. **Portfolio Health** — concentration risk, diversification, stability assessment\n3. **Program Scorecards** — per-program action (double down / maintain / optimize / phase out) with reason\n4. **Strategic Recommendations** — prioritized list of actions with Affitor skill references\n5. **Weekly Action Plan** — hour-by-hour allocation with specific tasks\n\n## Error Handling\n\n- **Only one program**: \"You have a single program. That's 100% concentration risk. I'll analyze it and recommend 2-3 complementary programs using S1 (affiliate-program-search).\"\n- **No revenue data**: \"Without revenue data, I'll analyze based on commission structure and niche overlap. For deeper analysis, run S6.3 (performance-report) first to get your numbers.\"\n- **All programs in same niche**: \"All your programs are in [niche]. You're diversified by product but not by market. If [niche] declines, all your income is at risk. Consider adding programs in adjacent niches.\"\n\n## Examples\n\n### Example 1: Portfolio with clear winner\n\n**User**: \"I promote HeyGen ($450/mo), Semrush ($320/mo), Notion ($125/mo), Canva ($80/mo). Which should I focus on?\"\n**Action**: HeyGen is the star (46% revenue, likely highest EPC). Recommend: Double down on HeyGen (more blog content, S7 content-repurposer). Maintain Semrush. Optimize Notion (high conversion rate potential). Evaluate Canva (low revenue, is it worth the effort?). Weekly plan: 5h HeyGen, 2h Semrush, 2h Notion, 1h research.\n\n### Example 2: Diversification analysis\n\n**User**: \"I make $2K/month from 3 SaaS tools. How do I reduce risk?\"\n**Action**: All income from one niche (SaaS) = moderate risk. Recommend: Add 1-2 programs in adjacent niches (e.g., online courses, hosting). Check commission types — if all one-time, recommend adding recurring programs. Use S1 to research programs in new niches.\n\n### Example 3: Program switching decision\n\n**User**: \"Should I drop Canva ($80/mo, 500 clicks) and replace it with Jasper?\"\n**Action**: Canva EPC = $0.16 (low). Calculate opportunity cost: 500 clicks redirected to a $0.50+ EPC program = $250/mo potential. Research Jasper commission (likely $100+ per sale). Recommend: Yes, switch. Use S1 to evaluate Jasper, then S3 for a comparison blog post.\n\n## References\n\n- `shared/references/affiliate-glossary.md` — Portfolio and commission terminology. Referenced in Step 2.\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `commission-calculator` (S1) — managed programs for portfolio calculation\n- `funnel-planner` (S8) — portfolio data for funnel planning\n\n### Fed By\n- `affiliate-program-search` (S1) — new programs to add to portfolio\n- `conversion-tracker` (S6) — performance data per program\n- `performance-report` (S6) — portfolio performance trends\n\n### Feedback Loop\n- `performance-report` (S6) reveals underperforming programs → recommend swaps or investment reallocation\n\n```yaml\nchain_metadata:\n  skill_slug: \"multi-program-manager\"\n  stage: \"automation\"\n  timestamp: string\n  suggested_next:\n    - \"commission-calculator\"\n    - \"performance-report\"\n    - \"affiliate-program-search\"\n```\n\nFile v1.0.0:skills/automation/paid-ad-copy-writer/SKILL.md\n\n---\nname: paid-ad-copy-writer\ndescription: >\n  Write paid ad copy for affiliate offers across ad platforms. Triggers on:\n  \"write ad copy\", \"Facebook ad for affiliate\", \"Google Ads copy\",\n  \"TikTok ad script\", \"Pinterest ad\", \"paid traffic to affiliate\",\n  \"create ad campaign\", \"ad headlines\", \"ad descriptions\",\n  \"scale with paid ads\", \"run ads for my affiliate link\",\n  \"write Facebook ad\", \"Google Search ad copy\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"automation\", \"scaling\", \"workflow\", \"ads\", \"ppc\", \"copywriting\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S7-Automation\n---\n\n# Paid Ad Copy Writer\n\nWrite paid ad copy for affiliate offers — Facebook Ads, Google Search Ads, Google Display Ads, TikTok Ads, and Pinterest Ads. Each output includes multiple ad variants, targeting suggestions, compliance notes, and campaign setup guidance. Output is platform-formatted ad copy ready to deploy.\n\n## Stage\n\nS7: Automation — When organic content proves profitable, paid ads let you scale 10x faster. But affiliate ad copy has unique constraints: platform policies around affiliate links, FTC disclosure requirements, and the need to drive clicks to a landing page (not direct-link). This skill writes compliant, high-converting ad copy for each platform.\n\n## When to Use\n\n- User wants to run paid traffic to affiliate offers\n- User says \"write ad copy\", \"Facebook ad\", \"Google Ads\", \"TikTok ad\"\n- User wants to scale a profitable organic campaign with paid media\n- User has a landing page (from S4) and wants ads driving traffic to it\n- User wants multiple ad variants for testing\n- Chaining from S4 (landing page) → write ads pointing to the landing page\n\n## Input Schema\n\n```yaml\nproduct:\n  name: string                 # REQUIRED — product name\n  description: string          # OPTIONAL — one-line product description\n  reward_value: string         # OPTIONAL — commission info\n  url: string                  # OPTIONAL — product URL (for research)\n  key_benefits: string[]       # OPTIONAL — top 3 benefits\n\nplatform: string               # REQUIRED — \"facebook\" | \"google_search\" | \"google_display\"\n                               # | \"tiktok\" | \"pinterest\"\n\naudience:\n  description: string          # REQUIRED — target audience\n  pain_points: string[]        # OPTIONAL — problems the audience has\n  demographics: string         # OPTIONAL — age, gender, interests\n\nbudget: string                 # OPTIONAL — daily/monthly budget (e.g., \"$20/day\")\n\nlanding_url: string            # OPTIONAL — destination URL (from S4 or a bridge page)\n                               # Note: most platforms don't allow direct affiliate links\n```\n\n**Chaining context**: If S1 product data exists, pull name, benefits, commission. If S4 landing page was created, use its URL as `landing_url`.\n\n## Workflow\n\n### Step 1: Analyze Product and Audience\n\nGather product info and audience details. If `key_benefits` is not provided, infer from product name and description using training knowledge.\n\nIdentify:\n- Primary value proposition\n- Emotional triggers for the audience\n- Competitive angle (what makes this product different)\n\n### Step 2: Select Ad Format\n\nEach platform has specific formats:\n\n**Facebook Ads**:\n- Primary text (125 chars above fold, 500+ total)\n- Headline (40 chars)\n- Description (30 chars)\n- CTA button (from predefined list)\n\n**Google Search Ads**:\n- Headlines (3 × 30 chars)\n- Descriptions (2 × 90 chars)\n- Sitelink extensions (4 × 25 chars + 35 char descriptions)\n\n**Google Display Ads**:\n- Short headline (30 chars)\n- Long headline (90 chars)\n- Description (90 chars)\n- Business name\n\n**TikTok Ads**:\n- Video script (15-30 seconds)\n- Hook (first 3 seconds)\n- CTA overlay text\n- Ad text (100 chars)\n\n**Pinterest Ads**:\n- Pin title (100 chars)\n- Pin description (500 chars)\n- Image text suggestions\n\n### Step 3: Write Ad Variants\n\nCreate 3-5 variants per platform, each testing a different angle:\n- **Pain Point**: Lead with the problem\n- **Benefit**: Lead with the outcome\n- **Social Proof**: Lead with results/numbers\n- **Curiosity**: Lead with an intriguing question or statement\n- **Urgency**: Lead with a time-sensitive offer (only if real)\n\n### Step 4: Add Compliance Notes\n\nPer platform:\n- **Facebook**: \"Paid Partnership\" label if required. No misleading claims. Landing page must match ad claims. Affiliate links may be flagged — use a bridge/landing page.\n- **Google**: Ad must match landing page content. No superlative claims without proof. Affiliate disclaimer on landing page required. Follow Google Ads affiliate policies.\n- **TikTok**: #ad or Paid Partnership toggle. No medical/financial advice. Must feel native to platform.\n- **Pinterest**: Disclosures in pin description. Must link to content page, not direct affiliate link.\n\n### Step 5: Suggest Targeting\n\nRecommend targeting parameters:\n- Interest-based audiences\n- Lookalike audiences (if pixel data exists)\n- Keyword targeting (Google)\n- Demographic filters\n\n### Step 6: Budget Allocation\n\nIf budget is provided, suggest:\n- Daily spend per variant (for A/B testing phase)\n- When to kill underperformers (after 500+ impressions with <0.5% CTR)\n- When to scale winners (after 3+ days of profitable ROAS)\n\n### Step 7: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] 3-5 ad variants generated per platform\n- [ ] Character counts within platform limits (Google: 30/90 headline/description, Facebook: 40/125/27000)\n- [ ] No prohibited claims (income guarantees, before/after without evidence)\n- [ ] CTA uses platform-native action verbs\n- [ ] Test budget recommendation is realistic ($5-20/day per variant)\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\ncampaign:\n  product: string\n  platform: string\n  num_variants: number\n  landing_url: string\n\nvariants:\n  - label: string              # \"Variant A: Pain Point\", etc.\n    angle: string              # the approach used\n    copy:\n      headline: string         # or headlines[] for Google\n      description: string      # or descriptions[] for Google\n      primary_text: string     # Facebook only\n      cta: string\n      video_script: string     # TikTok only\n    character_counts: object   # per field\n\ncompliance:\n  notes: string[]              # platform-specific requirements\n  warnings: string[]           # things that might get the ad rejected\n\ntargeting:\n  interests: string[]\n  demographics: string\n  keywords: string[]           # Google only\n\nbudget_suggestion:\n  test_phase: string           # e.g., \"$10/day per variant for 5 days\"\n  scale_phase: string          # e.g., \"Increase winning variant to $50/day\"\n  kill_criteria: string        # when to stop a variant\n```\n\n## Output Format\n\n1. **Campaign Overview** — product, platform, landing URL\n2. **Ad Variants** — each variant with full copy in platform format\n3. **Compliance Checklist** — platform-specific requirements and warnings\n4. **Targeting Suggestions** — interests, demographics, keywords\n5. **Budget Guide** — test and scale strategy\n\n## Error Handling\n\n- **No landing URL**: \"Most ad platforms don't allow direct affiliate links. I recommend creating a landing page first with S4 (landing-page-creator) and using that as your ad destination.\"\n- **Unknown platform**: \"I support Facebook, Google Search, Google Display, TikTok, and Pinterest ads. Which platform would you like ad copy for?\"\n- **Product with strict ad policies (supplements, finance)**: \"This product category has strict advertising policies on [platform]. I'll write compliant copy, but review your ad account's specific restrictions before publishing. Avoid health/income claims.\"\n\n## Examples\n\n### Example 1: Facebook ad for SaaS product\n\n**User**: \"Write Facebook ads for HeyGen targeting content creators. My landing page is example.com/heygen-review\"\n**Action**: 3 variants. Variant A (pain point): \"Spending hours editing videos? HeyGen creates professional AI videos in minutes.\" Variant B (benefit): \"Create studio-quality videos without a camera. 50+ AI avatars, any language.\" Variant C (social proof): \"10,000+ creators switched to HeyGen. Here's why.\" Each with headline, description, CTA. Include Facebook compliance notes.\n\n### Example 2: Google Search ads\n\n**User**: \"Google Search ads for Semrush targeting 'best SEO tools'\"\n**Action**: 5 headline + 2 description combinations. H1: \"Best SEO Tool for 2026\" (30 chars). H2: \"Try Semrush Free Today\" (22 chars). H3: \"Trusted by 10M+ Marketers\" (25 chars). D1: \"Complete SEO toolkit: keyword research, site audit, backlink analysis. Start your free trial.\" D2: \"Outrank your competitors with data-driven SEO. 7-day free trial, no card required.\" Plus sitelink extensions.\n\n### Example 3: TikTok ad script\n\n**User**: \"Write a TikTok ad for Notion targeting college students\"\n**Action**: 30-second script. Hook (0-3s): \"POV: You just discovered the app that replaced 5 other apps.\" Middle (3-20s): Show use cases (notes, calendar, to-do, project tracker). CTA (20-30s): \"Link in bio for the student discount.\" #ad disclosure. Include compliance notes about TikTok's policies on educational content promotions.\n\n## References\n\n- `shared/references/ftc-compliance.md` — FTC disclosure requirements for paid advertising. Read in Step 4.\n- `shared/references/affiliate-glossary.md` — Ad terminology (ROAS, CTR, CPC). Referenced in budget guide.\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `conversion-tracker` (S6) — ad links to track conversions\n- `ab-test-generator` (S6) — ad copy variants for testing\n\n### Fed By\n- `affiliate-program-search` (S1) — product data for ad copy\n- `grand-slam-offer` (S4) — offer framing for ad messaging\n- `landing-page-creator` (S4) — landing page URL as ad destination\n\n### Feedback Loop\n- `conversion-tracker` (S6) measures ad ROAS → optimize ad copy, targeting, and budget allocation\n\n## Quality Gate\n\nBefore delivering output, verify:\n\n1. Would I share this on MY personal social?\n2. Contains specific, surprising detail? (not generic)\n3. Respects reader's intelligence?\n4. Remarkable enough to share? (Purple Cow test)\n5. Irresistible offer framing? (if S4 offer skills ran)\n\nAny NO → rewrite before delivering.\n\n```yaml\nchain_metadata:\n  skill_slug: \"paid-ad-copy-writer\"\n  stage: \"automation\"\n  timestamp: string\n  suggested_next:\n    - \"conversion-tracker\"\n    - \"ab-test-generator\"\n    - \"landing-page-creator\"\n```\n\nFile v1.0.0:skills/automation/proprietary-data-generator/SKILL.md\n\n---\nname: proprietary-data-generator\ndescription: >\n  Create original surveys, benchmarks, and aggregated data nobody else has. Automate data collection\n  for content moats.\n  Triggers on: \"create original data\", \"proprietary data\", \"survey design\", \"benchmark study\",\n  \"original research\", \"data-driven content\", \"create a survey\", \"industry benchmark\",\n  \"aggregated data\", \"unique data\", \"first-party data\", \"data moat\",\n  \"generate research data\", \"create a study\", \"original statistics\",\n  \"data nobody else has\", \"competitive data advantage\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"automation\", \"scaling\", \"workflow\", \"data\", \"original-research\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S7-Automation\n---\n\n# Proprietary Data Generator\n\nCreate original surveys, benchmarks, and aggregated data that nobody else has. Proprietary data is the ultimate content moat — competitors can copy your writing style but they can't copy YOUR data. Automates the design and execution framework for data collection that feeds unique content angles.\n\n## Stage\n\nS7: Automation & Scale — Generating data at scale requires automation. This skill designs the collection system, not just one data point. Creates repeatable data assets that compound over time.\n\n## When to Use\n\n- User wants to create content that can't be replicated by competitors\n- User asks about \"original research\", \"surveys\", \"benchmarks\", \"proprietary data\"\n- User says \"data moat\", \"unique data\", \"first-party data\", \"original statistics\"\n- After `content-moat-calculator` identifies the need for differentiated content\n- User wants to build authority through data-driven content\n- User wants to create linkable assets that earn backlinks naturally\n\n## Input Schema\n\n```yaml\nniche: string                 # REQUIRED — topic area for data collection\n                              # e.g., \"AI video tools\", \"affiliate marketing\"\n\ndata_type: string             # OPTIONAL — \"survey\" | \"benchmark\" | \"aggregation\" | \"case_study\"\n                              # Default: recommend based on niche and resources\n\naudience_access: string       # OPTIONAL — how you can reach respondents\n                              # e.g., \"email list of 500\", \"Reddit community\", \"Twitter followers\"\n                              # Default: suggest options\n\nbudget: string                # OPTIONAL — \"zero\" | \"low\" ($0-100) | \"medium\" ($100-500) | \"high\" ($500+)\n                              # Default: \"zero\"\n\ngoal: string                  # OPTIONAL — \"content_moat\" | \"backlink_magnet\" | \"authority\" | \"lead_gen\"\n                              # Default: \"content_moat\"\n```\n\n**Chaining from S3 content-moat-calculator**: Use `competitive_advantages` to identify data moat opportunities.\n\n## Workflow\n\n### Step 1: Identify Data Opportunity\n\nAnalyze the niche for data gaps:\n1. `web_search`: `\"[niche] statistics 2025\" OR \"[niche] survey\" OR \"[niche] benchmark\"` — what data already exists?\n2. Identify gaps: what questions does the industry ask that nobody has answered with data?\n3. `web_search`: `\"[niche] reddit\" \"I wish I knew\" OR \"does anyone know\"` — find unmet data needs\n\n### Step 2: Design Data Collection\n\nBased on `data_type` (or recommend the best fit):\n\n**Survey Design:**\n- 8-12 questions (shorter = higher completion)\n- Mix: 70% multiple choice, 20% scale (1-5), 10% open-ended\n- One \"surprising\" question that will generate headline-worthy data\n- Target sample size: 100+ for credibility\n- Distribution plan: where and how to reach respondents\n\n**Benchmark Study:**\n- Define metrics to measure (3-5)\n- Data sources: public data, API calls, manual collection\n- Collection methodology: how often, what tools\n- Comparison framework: how to present findings\n\n**Data Aggregation:**\n- Sources to aggregate from (public databases, APIs, web scraping targets)\n- Aggregation logic: how to combine and normalize\n- Update frequency: one-time or recurring\n- Visualization plan\n\n**Case Study Collection:**\n- Template for collecting stories (5-7 structured questions)\n- Outreach template for requesting case studies\n- Anonymization rules\n- Minimum viable sample: 10+ cases\n\n### Step 3: Create Collection Assets\n\nProduce ready-to-use assets:\n1. **Survey questions** (if survey) — complete question list with answer options\n2. **Collection template** — spreadsheet structure or form layout\n3. **Outreach template** — email/message to recruit respondents\n4. **Data analysis plan** — how to turn raw data into insights\n5. **Content plan** — how to present findings (blog post, infographic, report)\n\n### Step 4: Design Automation\n\nCreate a repeatable system:\n- Schedule: when to collect data (monthly, quarterly, annually)\n- Tools: recommended platforms (Google Forms, Typeform, Airtable)\n- Automation: how to automate collection and reporting\n- Update process: how to refresh and republish with new data\n\n### Step 5: Self-Validation\n\n- [ ] Data gap is real (verified by search — nobody else has this data)\n- [ ] Sample size is realistic given audience access\n- [ ] Questions are unbiased and well-structured\n- [ ] Collection method is feasible with stated budget\n- [ ] Output content plan is specific (not just \"write a blog post\")\n- [ ] Data is ethically collected (no scraping private data, survey has consent)\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"\nproprietary_data:\n  niche: string\n  data_type: string\n  data_gap: string              # What data doesn't exist yet\n  headline_potential: string    # The \"surprising finding\" angle\n\n  collection:\n    method: string\n    sample_target: number\n    tools: string[]\n    timeline: string\n    budget_needed: string\n\n  assets:\n    survey_questions: object[]  # If survey type\n    collection_template: string # Template description\n    outreach_template: string   # Recruitment message\n    analysis_plan: string\n\n  content_outputs:              # Content to create from the data\n    - type: string              # \"blog\" | \"infographic\" | \"report\" | \"social\"\n      title: string\n      skill_to_use: string     # Which skill creates this content\n\n  data_assets: string[]        # Moat strengtheners for chaining\n\nchain_metadata:\n  skill_slug: \"proprietary-data-generator\"\n  stage: \"automation\"\n  timestamp: string\n  suggested_next:\n    - \"affiliate-blog-builder\"\n    - \"content-pillar-atomizer\"\n    - \"content-moat-calculator\"\n```\n\n## Output Format\n\n```\n## Proprietary Data Plan: [Niche]\n\n### The Data Gap\n**Nobody has answered:** [the question]\n**Why it matters:** [why people care]\n**Headline potential:** \"[Surprising finding template]\"\n\n### Collection Design\n\n**Type:** [Survey / Benchmark / Aggregation / Case Study]\n**Target sample:** XX responses\n**Timeline:** X weeks\n**Budget:** $XX\n**Tools:** [tools list]\n\n### Survey Questions (or Collection Template)\n1. [Question] — [answer type] — [why this question]\n2. [Question] — [answer type] — [why this question]\n...\n\n### Outreach Template\nSubject: [subject line]\n[email/message body]\n\n### Content Plan (what to publish from this data)\n1. **Blog post:** \"[Title]\" → build with `affiliate-blog-builder`\n2. **Social thread:** Key findings → atomize with `content-pillar-atomizer`\n3. **Lead magnet:** Full report PDF → distribute with `squeeze-page-builder`\n\n### Automation Schedule\n- **Collection:** [frequency]\n- **Analysis:** [when after collection]\n- **Publication:** [when after analysis]\n- **Update:** [when to re-run with fresh data]\n```\n\n## Error Handling\n\n- **No niche provided**: \"Tell me your niche and I'll find data gaps nobody else is filling.\"\n- **No audience access**: Suggest free distribution channels: Reddit, Twitter, niche forums, ProductHunt. \"You don't need an email list — Reddit alone can drive 100+ survey responses.\"\n- **Zero budget**: Design everything with free tools (Google Forms, Google Sheets, manual aggregation). \"The best proprietary data costs $0 — just your time and curiosity.\"\n- **Niche already well-researched**: Dig deeper. \"The broad stats exist, but nobody has [specific angle]. Let's own that.\"\n\n## Examples\n\n**Example 1:** \"I want original data about AI video tools\"\n→ Design survey: \"AI Video Tools Usage Survey 2025\" — 10 questions about which tools, satisfaction, spend, use cases. Distribute on Reddit r/aivideo, Twitter, LinkedIn. Target 150 responses. Content plan: \"State of AI Video 2025\" blog post + infographic.\n\n**Example 2:** \"Create a benchmark for affiliate marketing earnings\"\n→ Aggregate public data from case studies, combine with original survey. Monthly recurring data collection. \"Affiliate Marketing Earnings Benchmark Q1 2025.\"\n\n**Example 3:** \"Data moat for my content strategy\" (after content-moat-calculator)\n→ Identify that competitors have generic content but NO original data. Design case study collection: \"How 50 Affiliate Marketers Made Their First $1,000.\" Instant authority.\n\n## Flywheel Connections\n\n### Feeds Into\n- `affiliate-blog-builder` (S3) — unique data angles for articles nobody else can write\n- `content-pillar-atomizer` (S2) — data findings to atomize across platforms\n- `content-moat-calculator` (S3) — proprietary data IS a moat strengthener\n\n### Fed By\n- `content-moat-calculator` (S3) — identifies need for differentiated content\n- `performance-report` (S6) — performance data to aggregate\n\n### Feedback Loop\n- Track backlinks and citations of your data → identify which data points get referenced most → double down on those angles in next collection\n\n## References\n\n- `shared/references/case-studies.md` — Real data-driven success examples\n- `shared/references/flywheel-connections.md` — Master connection map\n\nFile v1.0.0:skills/blog/affiliate-blog-builder/SKILL.md\n\n---\nname: affiliate-blog-builder\ndescription: >\n  Write SEO-optimized affiliate blog articles, product reviews, comparison posts, listicles,\n  and how-to guides. Triggers on: \"write a blog post about\", \"review of [product]\",\n  \"best [category] article\", \"comparison blog\", \"affiliate blog\", \"SEO article\",\n  \"write a review\", \"product roundup\", \"blog content for affiliate\", \"how to use [product] blog post\",\n  \"listicle about [category]\", \"[product] vs [product] blog\", \"content for my affiliate site\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"blogging\", \"seo\", \"content-writing\", \"blog\", \"wordpress\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S3-Blog\n---\n\n# Affiliate Blog Builder\n\nWrite full SEO-optimized blog articles that rank on Google and drive passive affiliate revenue. Supports four formats: product review, head-to-head comparison, best-of listicle, and how-to guide. Each article includes keyword strategy, structured headings, comparison tables, CTAs, FAQ schema, and FTC-compliant disclosure.\n\n## Stage\n\nS3: Blog — The highest-value content type in the affiliate funnel. Blog articles rank on Google, drive organic traffic for months/years, and convert at higher rates than social posts because readers have high purchase intent.\n\n## When to Use\n\n- User wants to write a blog post reviewing an affiliate product\n- User wants a comparison article (Product A vs Product B)\n- User wants a \"best of\" listicle for a product category\n- User wants a how-to tutorial that naturally promotes an affiliate product\n- User has a product from S1 (affiliate-program-search) and wants to create long-form content\n- User says anything like \"write a blog\", \"SEO article\", \"product review post\", \"roundup post\"\n\n## Input Schema\n\n```yaml\nproduct:                    # REQUIRED — the affiliate product to feature\n  name: string              # Product name (e.g., \"HeyGen\")\n  description: string       # What it does\n  reward_value: string      # Commission (e.g., \"30% recurring\")\n  url: string               # Affiliate link URL\n  reward_type: string       # \"recurring\" | \"one-time\" | \"tiered\"\n  cookie_days: number       # Cookie duration\n  tags: string[]            # e.g., [\"ai\", \"video\", \"saas\"]\n\nformat: string              # OPTIONAL — \"review\" | \"comparison\" | \"listicle\" | \"how-to\"\n                            # Default: \"listicle\" (highest traffic potential)\n\ncompare_with: object[]      # OPTIONAL — competitors for comparison/listicle formats\n  - name: string            # Competitor name\n    description: string     # Brief description\n    url: string             # URL (non-affiliate OK)\n    pricing: string         # Starting price\n\ntarget_keyword: string      # OPTIONAL — primary SEO keyword to target\n                            # Default: auto-generated from product name + category\n\nblog_platform: string       # OPTIONAL — \"wordpress\" | \"ghost\" | \"hugo\" | \"astro\" | \"webflow\" | \"markdown\"\n                            # Default: \"markdown\" (universal)\n\ntone: string                # OPTIONAL — \"professional\" | \"conversational\" | \"technical\"\n                            # Default: \"conversational\"\n\nword_count_target: number   # OPTIONAL — override default word count for the format\n```\n\n**Chaining from S1**: If `affiliate-program-search` was run earlier in the conversation, automatically pick up `recommended_program` from its output as the `product` input. The field mapping:\n- `recommended_program.name` → `product.name`\n- `recommended_program.description` → `product.description`\n- `recommended_program.reward_value` → `product.reward_value`\n- `recommended_program.url` → `product.url`\n- `recommended_program.reward_type` → `product.reward_type`\n- `recommended_program.cookie_days` → `product.cookie_days`\n- `recommended_program.tags` → `product.tags`\n\nIf the user says \"now write a blog about it\" after running S1 — use the recommended program. No need to ask again.\n\n## Workflow\n\n### Step 1: Determine Format\n\nChoose the article format based on user request or defaults:\n\n| Signal | Format |\n|---|---|\n| User says \"review\", \"my experience with\" | `review` |\n| User mentions two+ products, \"vs\", \"compare\" | `comparison` |\n| User says \"best\", \"top\", \"roundup\", numbers | `listicle` |\n| User says \"how to\", \"tutorial\", \"guide\", \"step by step\" | `how-to` |\n| No clear signal | `listicle` (default — highest traffic potential) |\n\nIf `format = comparison` and `compare_with` is empty or has only 1 product:\n- Use `web_search` to find 2-3 top competitors in the same category\n- Search query: `\"best alternatives to [product.name]\" OR \"[product.name] vs\" site:g2.com OR site:capterra.com`\n\nIf `format = listicle` and `compare_with` is empty:\n- Use `web_search` to find 4-6 products in the same category\n- Search query: `\"best [product category] tools [year]\"`\n\n### Step 2: SEO Framework\n\nRead `references/seo-checklist.md` for the complete SEO guidelines. Then:\n\n1. **Generate target keyword** (if not provided):\n   - Review format: `[product name] review`\n   - Comparison: `[product A] vs [product B]`\n   - Listicle: `best [category] tools`\n   - How-to: `how to [goal] with [product/category]`\n\n2. **Generate secondary keywords** (3-5):\n   - Use `web_search` for: `\"[target keyword]\" related searches` and \"People Also Ask\"\n   - Include: `[product] pricing`, `[product] alternatives`, `[product] pros and cons`, `is [product] worth it`\n\n3. **Build title** using the formula from seo-checklist.md matching the format\n\n4. **Write meta description** (150-160 chars) following the checklist format\n\n5. **Plan heading structure**:\n   - Map out all H2/H3 headings before writing\n   - Ensure target keyword appears in at least 2 H2s\n   - Ensure secondary keywords appear in H3s\n   - Follow the heading hierarchy from seo-checklist.md\n\n6. **Generate slug** from target keyword (lowercase, hyphens, no stop words)\n\n### Step 3: Write Article\n\nRead `references/blog-templates.md` and use the template matching the chosen format. Then write the full article following these rules:\n\n**Content Rules:**\n- Follow the exact template structure for the chosen format\n- Write in the specified `tone` (default: conversational)\n- Hit the word count target for the format (review: 2-3.5K, comparison: 2.5-3.5K, listicle: 3-5K, how-to: 2-3K)\n- Use short paragraphs (2-4 sentences max)\n- Include bullet points and numbered lists for scannability\n- Write like a real person who has used the product — specific details, not generic fluff\n\n**Required Sections (all formats):**\n- FTC disclosure near the top — read `shared/references/ftc-compliance.md` and use the **medium** format\n- Comparison table (at least one, even in reviews — compare to alternatives)\n- Pros and cons for every recommended product\n- \"Who is this best for?\" audience targeting\n- Pricing information with affiliate CTA\n- FAQ section (3-5 questions)\n- Final verdict with clear recommendation and affiliate CTA\n\n**Affiliate CTA Placement (2-4 per article):**\n1. After the pricing section\n2. After a key feature demonstration\n3. In the final verdict\n4. Optionally: in a callout box after the \"who is this for\" section\n\n**CTA Formats:**\n- Soft: `[Try [Product] free →]([affiliate_url])`\n- Medium: `**Ready to get started?** [Sign up for [Product] →]([affiliate_url])`\n- Strong (verdict only): `**Our recommendation**: [Get [Product] here]([affiliate_url]) — [brief value prop].`\n\n**Things to AVOID:**\n- No Affitor branding in the article body (this is the user's blog, not ours)\n- No \"AI-generated\" disclaimers (the user will edit and personalize)\n- No placeholder text like \"[insert your experience here]\" — write complete content. If personal experience is needed, write realistic example scenarios clearly marked as examples\n- No keyword stuffing — natural language only\n- No false claims about products\n\n### Step 4: Format Output\n\nProduce the final output in this exact structure:\n\n**Part 1: SEO Metadata Block**\n```\n---\nSEO METADATA\n---\nTitle: [SEO title]\nSlug: [url-slug]\nMeta Description: [150-160 chars]\nTarget Keyword: [primary keyword]\nSecondary Keywords: [comma-separated list]\nWord Count: [actual count]\nFormat: [review/comparison/listicle/how-to]\n---\n```\n\n**Part 2: Full Article**\nThe complete markdown article ready to paste into any blogging platform.\n\n**Part 3: Supplementary Data**\n```\n---\nSUPPLEMENTARY\n---\nFAQ Questions (for schema markup):\n1. [Question] → [Answer]\n2. [Question] → [Answer]\n...\n\nImage Suggestions:\n1. [Description] — alt: \"[alt text]\"\n2. [Description] — alt: \"[alt text]\"\n...\n\nProducts Featured:\n- [Product 1]: [affiliate URL] (featured/mentioned)\n- [Product 2]: [affiliate URL] (compared/mentioned)\n...\n\nNext Steps:\n- Personalize: Add your own experience, screenshots, and results\n- Images: Take product screenshots and add them at suggested locations\n- Links: Replace affiliate URLs with your own tracking links\n- Publish: See references/wordpress-deploy.md for WordPress setup guide\n- Promote: Run viral-post-writer to create social posts promoting this article\n---\n```\n\n### Step 5: Self-Validation\n\nBefore presenting output, verify:\n\n- [ ] Word count meets format target (review: 2-3.5K, comparison: 2.5-3.5K, listicle: 3-5K, how-to: 2-3K)\n- [ ] FTC disclosure near top of article, medium format\n- [ ] 2-4 CTAs placed at: after pricing, feature demo, verdict, optional callout box\n- [ ] Meta description is 150-160 characters\n- [ ] Target keyword appears naturally in first 100 words\n- [ ] No placeholder text, no AI-generated disclaimers\n\nIf any check fails, fix the output before delivering. Do not flag the checklist to the user — just ensure the output passes.\n\n## Output Schema\n\n```yaml\noutput_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\narticle:\n  title: string             # SEO-optimized title\n  slug: string              # URL-friendly slug\n  meta_description: string  # 150-160 character meta description\n  target_keyword: string    # Primary keyword targeted\n  format: string            # review | comparison | listicle | how-to\n  content: string           # Full markdown article\n  word_count: number        # Actual word count\n  headings:                 # Article structure\n    - level: number         # 2 for H2, 3 for H3\n      text: string          # Heading text\n\nseo:\n  secondary_keywords: string[]    # 3-5 secondary keywords used\n  faq_questions:                  # For FAQ schema markup\n    - question: string\n      answer: string\n  image_suggestions:              # Recommended images\n    - description: string         # What to screenshot/create\n      alt_text: string            # SEO alt text\n      placement: string           # After which section\n\nproducts_featured:                # All products mentioned\n  - name: string\n    url: string                   # Affiliate URL\n    role: string                  # \"primary\" | \"compared\" | \"mentioned\"\n    reward_value: string          # Commission info\n    pricing: string | null        # Starting price (e.g., \"$49/mo\") — for S4 landing page chaining\n```\n\n## Output Format\n\nPresent the output as a single markdown document with three clearly separated sections:\n1. **SEO Metadata** — fenced block with all SEO settings for easy copy into WordPress/Yoast\n2. **Article** — the full blog post in markdown, ready to paste\n3. **Supplementary** — FAQ for schema markup, image suggestions, products list, and next steps\n\nThe article should be **immediately publishable** — not a draft or outline. The user should be able to copy-paste it into their blog editor, add their own screenshots and personal touches, and publish.\n\n## Error Handling\n\n- **No product provided**: \"I need a product to write about. Run `/affiliate-program-search` first to find one, or tell me the product name and I'll research it.\"\n- **Comparison with only 1 product**: Auto-search for 2-3 competitors using `web_search`. Search: `\"best alternatives to [product]\"` on G2/Capterra.\n- **No compare_with for listicle**: Auto-search for 4-6 products in the category. Inform user: \"I found these products to include — let me know if you want to swap any.\"\n- **Unknown blog platform**: Default to markdown output. Add note: \"This is universal markdown — works with WordPress, Ghost, Hugo, Astro, and most platforms.\"\n- **Product has no public info**: Use `web_search` to research the product. If still insufficient: \"I couldn't find enough information about [product] to write a credible article. Can you provide more details about features, pricing, and your experience?\"\n- **Controversial or questionable product**: Include balanced pros/cons. Add note: \"This product has mixed reviews — make sure you've personally verified these claims before publishing.\"\n\n## Examples\n\n### Example 1: Product Review (chained from S1)\n**User**: \"Now write a detailed review of HeyGen for my blog\"\n**Context**: S1 previously returned HeyGen as recommended_program\n**Action**: Auto-detect format=review, pick up HeyGen product data from S1 output, generate full review article targeting \"heygen review\" keyword.\n\n### Example 2: Comparison Article\n**User**: \"Write a comparison blog post: HeyGen vs Synthesia vs Colossyan for AI video creation\"\n**Action**: Format=comparison, primary product=HeyGen (if from S1, else first mentioned), compare_with=[Synthesia, Colossyan], target keyword=\"heygen vs synthesia vs colossyan\".\n\n### Example 3: Listicle (Default Format)\n**User**: \"Write a blog post about the best AI video tools\"\n**Action**: Format=listicle (matches \"best\"), web_search for top AI video tools, target keyword=\"best ai video tools\", write 3-5K word roundup with 5-7 products.\n\n### Example 4: How-To Guide\n**User**: \"Write a tutorial blog post on how to create AI-generated videos for YouTube with HeyGen\"\n**Action**: Format=how-to (matches \"tutorial\", \"how to\"), target keyword=\"how to create ai videos for youtube\", write step-by-step guide featuring HeyGen with affiliate CTAs.\n\n### Example 5: Minimal Input\n**User**: \"Blog post about Semrush\"\n**Action**: No format specified → default to listicle? No — single product implies review. Use format=review, web_search Semrush for features/pricing/reviews, target keyword=\"semrush review\", generate full article.\n\n**Format detection logic for ambiguous cases**: If only one product is mentioned with no format keyword, default to `review`. If a category is mentioned with no specific product, default to `listicle`.\n\n## References\n\n- `references/seo-checklist.md` — Title formulas, meta description rules, heading hierarchy, keyword density, content depth guidelines. Read in Step 2.\n- `references/blog-templates.md` — Four article format templates (review, comparison, listicle, how-to) with exact structure. Read in Step 3.\n- `references/wordpress-deploy.md` — WordPress publishing guide, Yoast SEO setup, Pretty Links, FAQ schema implementation. Reference in Step 4 next steps.\n- `shared/references/ftc-compliance.md` — FTC disclosure requirements and format templates. Read in Step 3 for disclosure text.\n- `shared/references/affitor-branding.md` — Affitor brand guidelines. Note: NO Affitor branding in article body (user's blog). Only in tool output metadata.\n- `shared/references/affiliate-glossary.md` — Affiliate marketing terminology reference.\n- `shared/references/flywheel-connections.md` — master flywheel connection map\n\n## Flywheel Connections\n\n### Feeds Into\n- `landing-page-creator` (S4) — `products_featured` for comparison landing pages\n- `content-pillar-atomizer` (S2) — blog article as pillar content to atomize into social\n- `bonus-stack-builder` (S4) — products featured inform bonus design\n- `internal-linking-optimizer` (S6) — new article needs internal links within 48 hours\n\n### Fed By\n- `affiliate-program-search` (S1) — `recommended_program` product data\n- `keyword-cluster-architect` (S3) — target keywords and cluster topics\n- `proprietary-data-generator` (S7) — unique data for differentiated articles\n- `internal-linking-optimizer` (S6) — link suggestions for existing articles\n- `content-decay-detector` (S3) — refresh instructions for decaying articles\n\n### Feedback Loop\n- `seo-audit` (S6) and `performance-report` (S6) track article rankings and traffic → identify which article formats and topics perform best → optimize content strategy\n\n## Quality Gate\n\nBefore delivering output, verify:\n\n1. Would I share this on MY personal social?\n2. Contains specific, surprising detail? (not generic)\n3. Respects reader's intelligence?\n4. Remarkable enough to share? (Purple Cow test)\n5. Irresistible offer framing? (if S4 offer skills ran)\n\nAny NO → rewrite before delivering.\n\n```yaml\nchain_metadata:\n  skill_slug: \"affiliate-blog-builder\"\n  stage: \"blog\"\n  timestamp: string\n  suggested_next:\n    - \"content-pillar-atomizer\"\n    - \"landing-page-creator\"\n    - \"internal-linking-optimizer\"\n    - \"seo-audit\"\n```","readmeExcerpt":"Skill: Affiliate Program Search Owner: affitor Summary: Find and evaluate the best affiliate programs to promote from openaffiliate.dev Tags: latest:1.0.1 Version history: v1.0.1 | 2026-09-04T21:38:03.839Z | user Republished under the Affitor publisher as one clean skill (affiliate-program-search). The full 52-skill bundle installs with: npx skills add Affitor/affiliate-skills v1.0.0 | 2026-03-17T23:02:23.126Z | auto","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"{\n  niche: string             # (optional, default: \"AI/SaaS tools\") Category or niche interest\n  commission_pref: string   # (optional, default: \"recurring, 20%+\") Commission preference\n  audience: string          # (optional, default: \"content creators\") Target audience type\n  platform: string          # (optional, default: \"any\") Platform they'll promote on\n  compare: string[]         # (optional) Specific programs to compare head-to-head\n}"},{"language":"text","snippet":"{\n  output_schema_version: \"1.0.0\"  # Semver — bump major on breaking changes\n  recommended_program: {\n    name: string              # \"HeyGen\"\n    slug: string              # \"heygen\"\n    reward_value: string      # \"30%\"\n    reward_type: string       # \"cps_recurring\"\n    reward_duration: string   # \"12 months\"\n    cookie_days: number       # 60\n    description: string       # Short product description\n    tags: string[]            # [\"ai\", \"video\"]\n    url: string               # Product website\n  }\n  score: {\n    overall: number           # 8.2\n    verdict: string           # \"Strong Pick\"\n    reasoning: string         # Why this is the top pick\n  }\n  runner_up: Program | null   # Same structure, second choice\n  all_scored: ProgramScore[]  # Full list of scored programs\n}"},{"language":"text","snippet":"## Programs Found\n\n| Program | Commission | Type | Cookie | Stars | Score |\n|---------|-----------|------|--------|-------|-------|\n| HeyGen  | 30%       | Recurring | 60d | ⭐ 42 | 8.2/10 |\n| ...     | ...       | ...  | ...    | ...   | .../10 |\n\n## Top Pick: [Program Name]\n\n**Why:** [2-3 sentences explaining why this is the best fit]\n\n| Dimension | Score | Note |\n|-----------|-------|------|\n| Earning Potential | 8/10 | 30% recurring on $24-48/mo |\n| Content Potential | 9/10 | Visual AI video, easy to demo |\n| Market Demand | 8/10 | AI video trending, high search volume |\n| Competition | 6/10 | Growing number of affiliates |\n| Trust Factor | 8/10 | Strong brand, 42 stars on openaffiliate.dev |\n| **Overall** | **8.2/10** | **Strong Pick** |\n\n## Runner-up: [Program Name]\n\n**Why:** [1-2 sentences]\n\n## Next Steps\n\n1. Sign up for [Program] affiliate program → [search for signup page]\n2. Run `viral-post-writer` to create content for this product\n3. Run `affiliate-blog-builder` to write a review post"},{"language":"yaml","snippet":"chain_metadata:\n  skill_slug: \"affiliate-program-search\"\n  stage: \"research\"\n  timestamp: string\n  suggested_next:\n    - \"purple-cow-audit\"\n    - \"viral-post-writer\"\n    - \"landing-page-creator\"\n    - \"grand-slam-offer\""},{"language":"text","snippet":"q=search_term     Search name + description\nsort=relevance    Sort: relevance (default) | other supported sort values\nlimit=30          Results per page"},{"language":"text","snippet":"GET https://openaffiliate.dev/api/programs?q=ai+video&sort=relevance&limit=10"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: affiliate-program-search\ndescription: >\n  Research and evaluate affiliate programs to find the best ones to promote.\n  Use this skill when the user asks anything about finding affiliate programs,\n  comparing commission rates, evaluating affiliate opportunities, searching for\n  products to promote, picking a niche, or mentions openaffiliate.dev.\n  Also trigger for: \"which SaaS should I promote\", \"best affiliate programs for X\",\n  \"high commission programs\", \"recurring commission affiliate\", \"compare these\n  affiliate programs\", \"is X affiliate program worth it\", \"find me something to promote\",\n  \"what pays the most\", \"affiliate programs with long cookie duration\".\nlicense: MIT\nversion: \"1.0.0\"\ntags: [\"affiliate-marketing\", \"research\", \"niche-analysis\", \"program-discovery\", \"saas\", \"commission\"]\ncompatibility: \"Claude Code, ChatGPT, Gemini CLI, Cursor, Windsurf, OpenClaw, any AI agent\"\nmetadata:\n  author: affitor\n  version: \"1.0\"\n  stage: S1-Research\n---\n\n# Affiliate Program Search\n\nHelp affiliate marketers research, evaluate, and pick winning programs to promote.\nData source: [openaffiliate.dev](https://openaffiliate.dev) — open affiliate program directory. Public API, no key required.\n\n## Stage\n\nThis skill belongs to Stage S1: Research\n\n## When to Use\n\n- User wants to find affiliate programs to promote\n- User wants to compare two or more affiliate programs\n- User asks about commission rates, cookie duration, or earning potential\n- User mentions openaffiliate.dev\n- User is new to affiliate marketing and needs a starting point\n\n## Input Schema\n\n```\n{\n  niche: string             # (optional, default: \"AI/SaaS tools\") Category or niche interest\n  commission_pref: string   # (optional, default: \"recurring, 20%+\") Commission preference\n  audience: string          # (optional, default: \"content creators\") Target audience type\n  platform: string          # (optional, default: \"any\") Platform they'll promote on\n  compare: string[]         # (optional) Specific programs to compare head-to-head\n}\n```\n\n## Workflow\n\n### Step 1: Understand What the User Wants\n\nAsk (if not clear from context):\n- Niche/category interest? (AI tools, SEO, video, writing, automation...)\n- Commission preference? (recurring vs one-time, minimum %)\n- Audience type? (developers, marketers, beginners, enterprise...)\n- Platform they'll promote on? (blog, LinkedIn, YouTube, X...)\n\nIf user says \"just find me something good\" → default to: AI/SaaS tools, recurring commission, 20%+, content creator audience.\n\n### Step 2: Search openaffiliate.dev\n\nSee `references/openaffiliate-api.md` for integration methods.\n\nTwo methods available:\n- **API (preferred):** `GET https://openaffiliate.dev/api/programs?q=<term>` — public, no auth needed, structured data\n- **Web fetch (fallback):** `web_search \"site:openaffiliate.dev [category]\"` then `web_fetch` the page\n\nExtract for each program: `name`, `reward_value`, `reward_type`, `cookie_days`, `stars_count`, `tags`, `description`.\n\n### Step 3: Sco"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn71mqyggkns7fdrdy0kfcx25x82smjn\",\n  \"slug\": \"affiliate-skills\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1788557883839\n}"},{"path":"references/openaffiliate-api.md","content":"> **DEPRECATED**: This file previously documented the list.affitor.com API, which has been retired.\n> The data source is now **openaffiliate.dev**. All references below have been updated accordingly.\n\n# openaffiliate.dev Data Access\n\n## Overview\n\nopenaffiliate.dev is a public, open API — no API key, no authentication, no rate limits, no free-tier restrictions.\n\nBase URL: `https://openaffiliate.dev/api`\n\n## Method 1: API (preferred)\n\n### GET /api/programs\n\nLists affiliate programs. Supports search and filtering via query params.\n\nQuery params:\n```\nq=search_term     Search name + description\nsort=relevance    Sort: relevance (default) | other supported sort values\nlimit=30          Results per page\n```\n\nExample request:\n```\nGET https://openaffiliate.dev/api/programs?q=ai+video&sort=relevance&limit=10\n```\n\nResponse format:\n```json\n{\n  \"programs\": [\n    {\n      \"slug\": \"heygen\",\n      \"name\": \"HeyGen\",\n      \"url\": \"https://heygen.com\",\n      \"logo\": \"https://...\",\n      \"category\": \"ai\",\n      \"commission\": {\n        \"type\": \"cps_recurring\",\n        \"rate\": \"30%\",\n        \"currency\": \"USD\",\n        \"duration\": \"12 months\",\n        \"conditions\": \"\"\n      },\n      \"cookieDays\": 60,\n      \"payout\": {\n        \"minimum\": 50,\n        \"currency\": \"USD\",\n        \"frequency\": \"monthly\",\n        \"methods\": [\"paypal\"]\n      },\n      \"description\": \"AI video generation platform...\",\n      \"shortDescription\": \"Create AI videos at scale\",\n      \"tags\": [\"ai\", \"video\"],\n      \"stars\": 42,\n      \"verified\": true,\n      \"agentPrompt\": \"\"\n    }\n  ],\n  \"total\": 1,\n  \"filters\": {}\n}\n```\n\nThe response key is `programs` (array). The raw API uses **camelCase** fields.\n\n### GET /api/programs/:slug\n\nReturns a single program by its slug. No auth required.\n\nExample:\n```\nGET https://openaffiliate.dev/api/programs/heygen\n```\n\nReturns the program object directly (same shape as a single item in `programs[]` above).\n\n## Raw API field reference\n\n| Raw API field | Notes |\n|---|---|\n| `slug` | URL-safe identifier (replaces old UUID-based id) |\n| `name` | Program display name |\n| `url` | Product website |\n| `logo` | Logo image URL |\n| `category` | Category string |\n| `commission.type` | Commission type (cps_recurring, cps_one_time, cpl, etc.) |\n| `commission.rate` | Commission rate (e.g., \"30%\") |\n| `commission.currency` | Currency code |\n| `commission.duration` | Duration (e.g., \"12 months\", \"lifetime\") |\n| `cookieDays` | Cookie window in days |\n| `payout.minimum` | Minimum payout threshold |\n| `payout.frequency` | Payment frequency |\n| `stars` | Community star count |\n| `verified` | Whether the program is verified |\n\n## Normalized skill-facing fields\n\nThe CLI adapter (`tools/src/api.ts`) maps the raw camelCase fields above to the\nnormalized snake_case model used by skills:\n\n| Skill field | Source |\n|---|---|\n| `reward_value` | `commission.rate` |\n| `reward_type` | `commission.type` |\n| `cookie_days` | `cookieDays` |\n| `stars_count` | `stars` |\n| `reward_duration` | `commission.durat"},{"path":"references/platform-rules.md","content":"# Platform-Specific Affiliate Rules\n\nWhen recommending programs, consider where the user will promote. Different platforms favor different product types and content strategies.\n\n## LinkedIn\n\n- **Audience:** B2B, professionals, marketing managers, founders\n- **Best fit:** Enterprise tools, productivity SaaS, business tools, high-ticket products\n- **Commission sweet spot:** High price point (even if lower %) — LinkedIn audience has purchasing authority\n- **Content:** Thought leadership, case studies, \"I tested X for 30 days\" stories\n- **Link placement:** First comment (LinkedIn suppresses posts with external links in the body)\n- **Tip:** Products that save teams money or time sell best here\n\n## X (Twitter)\n\n- **Audience:** Tech-savvy, early adopters, developers, indie hackers\n- **Best fit:** Dev tools, AI tools, startup tools, productivity hacks\n- **Commission sweet spot:** Products with visual/viral demo potential\n- **Content:** Threads (5-10 tweets), hot takes, before/after, quick tips\n- **Link placement:** Last tweet in thread or reply to own tweet\n- **Tip:** \"I replaced $X/month tool with this $Y tool\" performs extremely well\n\n## Reddit\n\n- **Audience:** Niche communities, skeptical, value authenticity over polish\n- **Best fit:** Products that solve specific problems discussed in subreddits\n- **Commission sweet spot:** Products with free tiers (Reddit hates hard sells)\n- **Content:** Genuine recommendations within helpful answers, \"I use X for Y\" comments\n- **Link placement:** Within helpful content, NEVER standalone link drops\n- **Warning:** Many subreddits ban affiliate links outright. Always check r/[subreddit] rules first. Accounts under 30 days or with low karma get flagged.\n- **Tip:** Build karma by being genuinely helpful first. Recommendations feel natural only after you've earned trust.\n\n## YouTube\n\n- **Audience:** Visual learners, \"how to\" searchers, comparison shoppers\n- **Best fit:** Products you can demo on screen (video tools, design tools, SaaS dashboards)\n- **Commission sweet spot:** High commission + visual product = highest ROI\n- **Content:** Reviews, tutorials, comparisons, \"best tools for X\" listicles\n- **Link placement:** Description box + pinned comment\n- **Tip:** \"[Product] review\" and \"[Product A] vs [Product B]\" have the highest buyer intent\n\n## Blog / SEO\n\n- **Audience:** High-intent searchers (already looking to buy)\n- **Best fit:** Any product with search volume for \"[product] review\" or \"best [category]\"\n- **Commission sweet spot:** Recurring commission on popular products\n- **Content:** Reviews, comparisons (\"X vs Y\"), listicles (\"Best X for Y in 2026\"), how-to guides\n- **Link placement:** In-content CTAs, comparison tables, \"Try [Product]\" buttons\n- **Tip:** Blog affiliate content has the longest lifespan — one good review can earn for years"},{"path":"references/scoring-criteria.md","content":"# Program Scoring Framework\n\nScore each program on 5 dimensions, 1-10 scale.\n\n## 1. Earning Potential (weight: 30%)\n\nFactors:\n- Commission percentage (`reward_value` — higher = better)\n- Recurring vs one-time (`reward_type`: `cps_recurring`/`cps_lifetime` scores 2+ points higher than `cps_one_time`)\n- Product price point (higher price = higher absolute earnings per sale)\n- Commission duration (`reward_duration`: lifetime > 12 months > one-time)\n- Payout threshold (lower = better, especially for beginners)\n\nScoring guide:\n- 9-10: 30%+ recurring on $50+/mo product, lifetime duration\n- 7-8: 20-30% recurring on $20-50/mo, 12+ months\n- 5-6: 15-20% recurring or $100+ one-time\n- 3-4: 10-15% or low-price products\n- 1-2: <10%, one-time, low-price\n\n## 2. Content Potential (weight: 25%)\n\nHow easy is it to create compelling content about this product?\n\nFactors:\n- Does the product have a visual \"wow\" demo? (AI video, design tools = high)\n- Can you show before/after results?\n- Is there a free tier or free trial for audience to try?\n- Are there multiple content angles? (tutorial, comparison, review, use case)\n- Does content about this product tend to get engagement?\n\nScoring guide:\n- 9-10: Visual product, free tier, 5+ content angles, viral potential\n- 7-8: Good demo potential, free trial, 3+ content angles\n- 5-6: Decent content angles but not visually exciting\n- 3-4: Hard to demo, abstract product, limited angles\n- 1-2: Boring product, no free tier, only 1 content angle\n\n## 3. Market Demand (weight: 20%)\n\nIs there active demand for this type of product?\n\nTo assess: `web_search` for \"[product category] tools\" and note the result count and recency.\n\nFactors:\n- Search volume for product category keywords\n- Trend direction (growing, stable, declining)\n- Market size (how many potential buyers exist)\n- Urgency of need (must-have vs nice-to-have)\n\nScoring guide (use `web_search \"[category] tools\"` result count as primary signal):\n- 9-10: >100M results, multiple recent articles (<30 days), trending on Google Trends ↑20%+ YoY\n- 7-8: 10M-100M results, recent articles (<90 days), stable or growing trend\n- 5-6: 1M-10M results, some articles in last 6 months, stable trend\n- 3-4: 100K-1M results, few recent articles, flat or declining trend\n- 1-2: <100K results, no recent coverage, clearly declining\n\n**Evidence format**: Always show: `\"Market Demand X/10 — '[search query]' → [N] results, Trends [↑/↓/→]X% YoY\"`\n**Confidence**: 🟢 HIGH (Google Trends data available) | 🟡 MEDIUM (result count only) | 🔴 LOW (no reliable signal)\n\n## 4. Competition Level (weight: 15%)\n\nHow many other affiliates are promoting this? INVERSE scoring: less competition = higher score.\n\nTo assess: `web_search` for \"[product] review\" — count results and check who ranks in top 10.\n\nFactors:\n- Number of existing review articles ranking on Google\n- How many YouTubers/creators already cover this product\n- Are there dominant affiliates with huge audiences?\n- Is the affiliate program new or established?\n\nSco"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Find and evaluate the best affiliate programs to promote from openaffiliate.dev Skill: Affiliate Program Search Owner: affitor Summary: Find and evaluate the best affiliate programs to promote from openaffiliate.dev Tags: latest:1.0.1 Version history: v1.0.1 | 2026-09-04T21:38:03.839Z | user Republished under the Affitor publisher as one clean skill (affiliate-program-search). The full 52-skill bundle installs with: npx skills add Affitor/affiliate-skills v1.0.0 | 2026-03-17T23:02:23.126Z | auto","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1851,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T19:21:45.544Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T19:21:45.544Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T21:49:50.490Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}