---
name: find-creators-promoting-competitor-app
description: "Find the TikTok, YouTube and Instagram creators already selling a competitor mobile app (with the post, code or store link as proof), grade them, reveal contacts and draft outreach through the AffiliateSpy MCP server or REST API. Use when a user asks how to market their app with creators, influencers, affiliates or ambassadors, or who is promoting a rival app."
license: MIT
metadata:
  version: "1.2.0"
  homepage: https://www.affiliatespy.io/skills/find-creators-promoting-competitor-app/SKILL.md
  mcp: https://www.affiliatespy.io/api/mcp
  openapi: https://www.affiliatespy.io/openapi.json
  vendor: AffiliateSpy (Savassi Limited)
---

# Find creators promoting a competitor app

## When to use

The user has a mobile app (App Store or Google Play) and wants creators, affiliates or ambassadors, or asks who is already promoting a competitor app. This skill turns that into a graded, evidenced shortlist and a drafted campaign, using the user's own AffiliateSpy account.

## Golden path

1. `get_account`: confirm the plan is active and read reveals left this month. If `plan` is null, run the no-plan path from Setup (`start_quick_scan`, `get_quick_scan_preview`, `get_checkout_link`) and come back here once `get_account` shows a plan.
2. `list_apps`: find the tracked app. If the user's app is not there, `start_scan` (guarded) on an app added at https://www.affiliatespy.io/dashboard/add-app, or the quick-scan app from the no-plan path is already there. `get_scan_status` shows progress; a full scan takes about 20 minutes.
3. `list_competitors`: show the user the competitor roster counts (proven partners, mentions, creators shared by two or more competitors). Creators shared across competitors convert best.
4. `list_creators` with `proven_partner: true` and `min_score` around 70 first, then widen. Use `platform` to split TikTok, YouTube and Instagram. Present name, platform, followers, score and the evidence summary; do not invent metrics.
5. `get_creator` on the shortlist the user picks: read the grade reasoning, the evidence receipts (the caption, code or link that proves the competitor relationship) and cross-platform profiles. Summarise the receipt in one line each.
6. `save_creator` for the ones the user approves. `set_creator_note` for anything the user says about a creator.
7. `reveal_contact` only for saved creators the user wants to contact, and only up to the reveals left. Say how many credits it will cost before you do it.
8. `create_campaign_draft` from the saved list (or explicit creator ids). Show the user the sequence it drafted. Launching is a guarded action: ask, then `launch_campaign` only if Unrestricted MCP is on and the user said yes; otherwise tell them to launch from https://www.affiliatespy.io/dashboard/campaigns.
9. Follow up later with `list_inbox_threads`, `get_thread`, `list_deals` and `move_deal_stage` as replies arrive. Replies to send are guarded (`send_reply`).

## What to tell the user up front

- The list is built from public evidence of a competitor relationship, not from an opt-in marketplace, so it includes nano creators and organic promoters that marketplaces never show. Rates are negotiated directly; AffiliateSpy does not process creator payments.
- Reveals are the metered resource. Everything else (listing, grades, evidence, drafts) is free within the plan.

## Tools used by this skill

### Account & apps

- `get_account`: Your plan and usage: caps, contact reveals used/left this month, tracked apps used vs cap. Arguments: no arguments.
- `list_apps`: Apps you track, with creator counts and the latest scan status per app. Arguments: no arguments.
- `get_scan_status`: Latest scan run for an app, stages, status, creators found. Arguments: `app_id`?: string (Omit to use your most recently added app.).

### Creators

- `list_creators`: Graded creators for an app, sorted by score. Contact values stay hidden until revealed. Arguments: `app_id`?: string (App to list creators for. Omit to use your most recently added app (see list_apps).); `platform`?: tiktok | youtube | instagram; `min_score`?: number (Minimum quality score, 0-100.); `proven_partner`?: boolean (Only creators with proof of a paid competitor partnership.); `has_contact`?: boolean (Only creators with an email on file (value hidden until revealed).); `saved`?: boolean (Only creators you saved.); `search`?: string (Substring match on handle, name, or bio.); `sort`?: score | followers | avg_views (Default: score.); `limit`?: integer (Default 50, max 100.); `offset`?: integer.
- `get_creator`: Full detail for one creator: grade reasoning, evidence receipts, posts, cross-platform profiles. Arguments: `creator_id`: string (An id from list_creators.).
- `reveal_contact`: Spend one monthly reveal to get a creator's contact. Idempotent, re-revealing is free. Arguments: `creator_id`: string (An id from list_creators.).
- `save_creator`: Add a creator to your saved list (the shortlist campaigns draw from). Arguments: `creator_id`: string.
- `unsave_creator`: Remove a creator from your saved list. Arguments: `creator_id`: string.
- `set_creator_note`: Attach or replace your private note on a creator. Arguments: `creator_id`: string; `note`: string.
- `export_creators_csv`: Export graded creators as CSV. Arguments: `app_id`?: string (App to list creators for. Omit to use your most recently added app (see list_apps).); `platform`?: tiktok | youtube | instagram; `min_score`?: number (Minimum quality score, 0-100.); `proven_partner`?: boolean (Only creators with proof of a paid competitor partnership.); `has_contact`?: boolean (Only creators with an email on file (value hidden until revealed).); `saved`?: boolean (Only creators you saved.); `search`?: string (Substring match on handle, name, or bio.).

### Market intel

- `list_competitors`: Your competitors with roster counts: proven partners, mentions, shared promoters. Arguments: no arguments.

### Campaigns & inbox

- `list_campaigns`: Your outreach campaigns with stats: sent, replies, queued, signed. Arguments: no arguments.
- `get_campaign`: One campaign's settings, sequence templates, enrollments and latest replies. Arguments: `campaign_id`: string.
- `create_campaign_draft`: Create a draft campaign from creator ids or your saved list. Draft only, launch in the dashboard. Arguments: `name`: string; `creator_ids`?: array (Audience creator ids from list_creators. Omit with use_saved=true to use your saved list.); `use_saved`?: boolean (Use your saved creators as the audience.); `offer`?: string (The offer line, e.g. "30% recurring". Default empty.); `followup_gaps_days`?: array (Follow-up day offsets, default [3,7,12].).
- `list_inbox_threads`: Outreach conversation threads with last activity. Arguments: `unread_only`?: boolean; `limit`?: integer (Default 50.).
- `get_thread`: One inbox thread with full message bodies. Arguments: `enrollment_id`: string (An enrollment_id from list_inbox_threads.).

### Pipeline

- `list_deals`: Deals by stage (contacted → negotiating → contract → live → paid) plus replied creators not yet in it. Arguments: no arguments.
- `move_deal_stage`: Move a pipeline deal to a new stage. Arguments: `deal_id`: string (A deal id from list_deals.); `stage`: contacted | negotiating | contract | live | paid.


### Guarded actions

Each call first returns approval_required with a summary and an approval token; the agent shows the summary, the user says yes, and the agent calls again with the token (15-minute expiry, bound to the exact arguments). Accounts can skip approvals with Unrestricted MCP in Settings, API and agents. Every dashboard guardrail applies either way: test-mode redirect, daily send cap, scan credit gates, plan caps.

- `launch_campaign`: Launch a drafted campaign. Arguments: `campaign_id`: string; `approval_token`?: string (Approval token from a previous approval_required response, after the user said yes.).
- `send_reply`: Send a reply in an outreach thread from your connected inbox. Arguments: `enrollment_id`: string (An enrollment_id from list_inbox_threads.); `body`: string (Plain-text reply body.); `approval_token`?: string (Approval token from a previous approval_required response, after the user said yes.).
- `start_scan`: Start a discovery scan for a tracked app. Arguments: `app_id`: string (An app id from list_apps.); `type`: quick | full (quick = fast pass; full = complete scan.); `approval_token`?: string (Approval token from a previous approval_required response, after the user said yes.).

## Setup (once per user)

1. Connect. Clients that support OAuth (Claude, ChatGPT, Claude Code, Cursor, Codex) only need the endpoint URL: the client opens the AffiliateSpy sign-in page (the user signs up there if new) and a consent screen; nothing to copy. Header-only clients use an API key the user creates at https://www.affiliatespy.io/dashboard/settings?tab=api (`asp_live_…`, revocable); keep it in an environment variable, never in chat.
2. No plan yet? `start_quick_scan` with the user's App Store, Google Play or website URL (free, one per unpaid account), poll `get_quick_scan_preview`, show the masked preview, then `get_checkout_link` and hand the user the Stripe URL to pay in their browser. Never enter payment details yourself. Access updates automatically once paid; `get_account` confirms it.
3. Both surfaces expose the same tools:
   - MCP (Streamable HTTP): `https://www.affiliatespy.io/api/mcp` with header `Authorization: Bearer <key>`. Claude Code: `claude mcp add --transport http affiliatespy https://www.affiliatespy.io/api/mcp --header "Authorization: Bearer <key>"`. Cursor, Codex and any url-plus-headers client: same URL and header.
   - REST: `POST https://www.affiliatespy.io/api/v1/tools/<tool_name>` with the same header and a JSON body of arguments. `GET https://www.affiliatespy.io/api/v1/tools` lists tools with schemas; OpenAPI 3.1 at https://www.affiliatespy.io/openapi.json.
4. Rate limit: 60 requests per minute per key. Contact reveals are metered per calendar month (UTC); `get_account` tells you what is left.
5. Dry run first if you are building or testing an agent: a key created with the Sandbox box ticked (https://www.affiliatespy.io/dashboard/settings?tab=api) answers every tool from fixture data, needs no plan, meters nothing and sends nothing. Every sandbox response carries `sandbox: true`; never present sandbox rows to the user as real creators.

## Rules that always apply

- Contact values (emails) are hidden until `reveal_contact` spends one monthly credit. Read `get_creator` first and reveal only creators the user actually wants to contact. Re-revealing the same creator is free.
- Guarded tools (`launch_campaign`, `pause_campaign`, `resume_campaign`, `send_reply`, `start_scan`, `set_autopilot`, `approve_autopilot_action`, `reject_autopilot_action`) first return `{error: "approval_required", summary, approval_token}`. Show the summary to the user verbatim, get an explicit yes in the conversation, then call the tool again with the same arguments plus `approval_token` (15-minute expiry, bound to those exact arguments). Never ask for approval in bulk or reuse a token for a different action. Every dashboard guardrail (send caps, test-mode redirect, plan caps) still applies.
- Never store, forward or repeat revealed emails outside the user's own tools, and never contact creators on the user's behalf through any channel other than AffiliateSpy campaigns.
- Everything is scoped to the account that owns the key; there is no way to read another account's data.

## Pricing (USD, for when the user asks)

- Starter: $99/month ($990/year), 1 app, 150 contact reveals a month, 1 seat.
- Growth: $299/month ($2990/year), 5 apps, 500 contact reveals a month, 3 seats.
- Agency: $799/month ($7990/year), 15 apps, 2,000 contact reveals a month, 10 seats.

Public docs: https://www.affiliatespy.io/docs (every page also available as markdown by appending `.md`). Product overview for agents: https://www.affiliatespy.io/llms.txt
