Skip to content
apple-search-ads logo

Apple Search Ads Management

apple-search-ads

Manage Apple Search Ads campaigns, keywords, and reporting. Use when setting up campaigns, adding keywords, checking performance, or optimizing Apple Search Ads for any iOS app. Implements Apple's recommended 4-campaign structure (Brand, Category, Competitor, Discovery).

NeverSight/skills_feed0installs215stars

SKILL.md

Full skill instructions

Apple Search Ads Management

Full management of Apple Search Ads campaigns for iOS apps using the ASA CLI tool.

Capabilities

This skill enables you to:

  • Set up Apple's recommended 4-campaign structure
  • Add keywords with automatic routing (exact → target, broad → discovery, negative → discovery)
  • Block irrelevant search terms with negative keywords
  • Promote winning keywords from Discovery to exact match campaigns
  • Generate performance reports (campaign, keyword, search term level)
  • Audit campaign structure against Apple's best practices
  • Pause/​enable campaigns
  • Automated optimization - analyze search terms and batch promote/​block keywords

Prerequisites

Running with uv (Recommended)

No installation required. Just use uv run:

cd /​path/​to/​apple-search-ads-cli
uv run asa config setup
uv run asa campaigns list

Alternative: pip install

cd /​path/​to/​apple-search-ads-cli
pip install -e .
asa config setup

Configuration

uv run asa config setup

You'll need from Apple Ads dashboard (https://ads.apple.com/):

  • Organization ID
  • Client ID, Team ID, Key ID
  • Private key file (EC key pair)

To generate keys:

openssl ecparam -genkey -name prime256v1 -noout -out private-key.pem
openssl ec -in private-key.pem -pubout -out public-key.pem

Verify Setup

asa config test

Command Reference

Configuration Commands

CommandDescription
asa config setupInteractive credential and app setup
asa config showDisplay current configuration
asa config testTest API connection

Campaign Commands

CommandDescription
asa campaigns listList all campaigns
asa campaigns list --bidsInclude ad group default bids
asa campaigns list --filter "term"Filter campaigns by name
asa campaigns list --status RUNNINGFilter by status (RUNNING, PAUSED)
asa campaigns create <name>Create a new campaign
asa campaigns update <ID>Update campaign name/​budget/​status
asa campaigns auditCheck structure vs Apple recommendations
asa campaigns audit --verboseShow detailed ad group info
asa campaigns setupCreate 4-campaign structure
asa campaigns setup --dry-runPreview without creating
asa campaigns pause <ID>Pause specific campaign
asa campaigns pause --allPause all managed campaigns
asa campaigns enable <ID>Enable specific campaign
asa campaigns enable --allEnable all managed campaigns
asa campaigns delete <ID>Delete specific campaign

Ad Group Commands

CommandDescription
asa adgroups list <campaign_id>List ad groups for a campaign
asa adgroups create <name> -c <campaign_id>Create a new ad group
asa adgroups update <ID> -c <campaign_id>Update ad group settings
asa adgroups pause <ID> -c <campaign_id>Pause an ad group
asa adgroups enable <ID> -c <campaign_id>Enable an ad group
asa adgroups delete <ID> -c <campaign_id>Delete an ad group

Keyword Commands

CommandDescription
asa keywords listList keywords (interactive selection)
asa keywords list --campaign <ID>List keywords for specific campaign
asa keywords list --negativesList negative keywords
asa keywords list --filter "term"Filter keywords containing text
asa keywords list --status ACTIVEFilter by status (ACTIVE, PAUSED)
asa keywords list --match-type EXACTFilter by match type (EXACT, BROAD)
asa keywords add "<kw1>,<kw2>" --type brandAdd brand keywords
asa keywords add "<kw1>,<kw2>" --type categoryAdd category keywords
asa keywords add "<kw1>,<kw2>" --type competitorAdd competitor keywords
asa keywords add-negatives "<kw1>,<kw2>" --allBlock terms in all campaigns
asa keywords add-negatives "<kw1>,<kw2>" --all --forceBlock terms without confirmation
asa keywords promote "<kw1>,<kw2>" --target categoryGraduate from Discovery
asa keywords deleteDelete keywords (interactive)
asa keywords delete --ids "123,456" --forceDelete specific keywords by ID
asa keywords update-bid --bid 2.50Update keyword bid amount
asa keywords pausePause a keyword
asa keywords pause --allPause all active keywords in ad group
asa keywords enableEnable a paused keyword
asa keywords enable --allEnable all paused keywords in ad group

Report Commands

CommandDescription
asa reports summaryPerformance summary (last 30 days)
asa reports summary --days 7Custom date range
asa reports keywordsKeyword performance
asa reports keywords --sort cpaSort by CPA
asa reports adgroups --allAd group performance for all campaigns
asa reports adgroups --campaign <ID>Ad group performance for specific campaign
asa reports impression-share --allImpression share / Share of Voice report
asa reports impression-share --min-impressions 50Filter by minimum impressions
asa reports search-termsAll search terms
asa reports search-terms --winnersTerms to promote (good CPA)
asa reports search-terms --negativesTerms to block (spend, no installs)

Optimization Commands

CommandDescription
asa optimizeRun automated optimization workflow
asa optimize --dry-runPreview changes without applying
asa optimize --days 7Analyze last 7 days (default: 14)
asa optimize --cpa-threshold 3.00Max CPA for winners (default: $5.00)
asa optimize --min-installs 3Min installs to promote (default: 2)
asa optimize --min-spend 2.00Min spend to block (default: $1.00)
asa optimize --min-impressions 100Min impressions to consider a term
asa optimize --exclude "term1,term2"Exclude specific terms from analysis
asa optimize --target brandTarget campaign type (default: category)
asa optimize --auto-approveSkip confirmation prompts
asa optimize --jsonOutput results as JSON (implies --dry-run)

Campaign Structure

Apple's recommended 4-campaign structure:

CampaignPurposeMatch TypeSearch Match
BrandApp/​company nameExactOFF
CategoryApp functionalityExactOFF
CompetitorCompetitor appsExactOFF
DiscoveryKeyword miningBroad + Search MatchON

Keyword Routing

When you add keywords with --type brand/​category/​competitor:

  1. EXACT match → Target campaign
  2. BROAD match → Discovery (for mining related terms)
  3. NEGATIVE → Discovery (prevents double-paying)

Common Workflows

Initial Setup

# 1. Configure (no installation required with uv)
cd /​path/​to/​apple-search-ads-cli
uv run asa config setup
# Enter: Org ID, Client ID, Team ID, Key ID, private key path
# Enter: App ID, App name, Countries, Default bid

# 2. Test connection
uv run asa config test

# 3. Audit existing campaigns
uv run asa campaigns audit

# 4. Create 4-campaign structure (preview first)
uv run asa campaigns setup --countries US --budget 50 --dry-run
uv run asa campaigns setup --countries US --budget 50

Adding Initial Keywords

# Brand keywords (your app name)
asa keywords add "myapp,myapp app,my app" --type brand

# Category keywords (what your app does)
asa keywords add "photo editor,image filter,picture effects" --type category

# Competitor keywords (other apps)
asa keywords add "vsco,snapseed,lightroom" --type competitor

Weekly Optimization

Option 1: Automated (Recommended)

# Preview what will change
asa optimize --dry-run

# Run optimization with confirmation
asa optimize

# Or run automatically without prompts
asa optimize --auto-approve

The asa optimize command automatically:

  1. Analyzes Discovery search terms (last 14 days)
  2. Identifies winners (≥2 installs, CPA ≤ $5)
  3. Identifies losers (≥$1 spend, 0 installs)
  4. Promotes winners to target campaign (adds as exact + negative in Discovery)
  5. Blocks losers across all managed campaigns

Option 2: Manual

# 1. Check overall performance
asa reports summary --days 7

# 2. Find winning search terms
asa reports search-terms --winners

# 3. Promote winners to exact match
asa keywords promote "best photo app,picture editor free" --target category

# 4. Find wasted spend
asa reports search-terms --negatives

# 5. Block wasteful terms
asa keywords add-negatives "auto clicker,signal app,testflight,crypto trading" --all

Troubleshooting

# Check campaign structure issues
asa campaigns audit --verbose

# List all campaigns including non-managed
asa campaigns list --all

# Check specific campaign keywords
asa keywords list --campaign 12345

# Check negative keywords
asa keywords list --negatives --campaign 12345

Campaign Naming

The CLI identifies campaign types by looking for these keywords in the campaign name (case-insensitive):

KeywordCampaign Type
brandBrand campaign
categoryCategory campaign
competitorCompetitor campaign
discoveryDiscovery campaign

Examples of valid names:

  • Brand (simple)
  • My Brand Campaign
  • MyApp Category
  • competitor-us

Example Keywords

Brand Keywords (your app/​company name)

[appname], [appname] app, [company] invest

Category Keywords (what your app does)

photo editor, image filter, picture effects, camera app

Competitor Keywords (competing apps)

[competitor1] app, [competitor2], [competitor3]

Common Negative Keywords (block these)

auto clicker, signal app, testflight, crypto trading, forex trading, stock trading, day trading

API Coverage

The CLI covers these Apple Search Ads API operations:

CategoryOperations
Campaignslist, get, create, update, pause, enable, delete
Ad Groupslist, create, update, pause, enable, delete
Keywordslist, add, add negatives, delete, update bid, pause, enable
Reportscampaign, keyword, search terms

Not yet implemented (advanced features):

  • Creative sets
  • Geo-targeting beyond country level
  • Budget orders

API Notes

Bulk Operations: The CLI uses Apple's bulk API endpoints for keyword operations (enable, pause, delete, update bid). These are more efficient than individual requests.

Caching: Apple's API may show stale data after delete operations. If keywords still appear in listings after deletion, the delete was successful but the cache hasn't refreshed. Attempting to modify deleted keywords will return "keyword deleted" errors.

Search Terms Reports: Search term reports require campaigns to have accumulated sufficient data (typically a few days of activity). New campaigns may return empty results.

Error Handling: Keyword add operations (add_keywords, add_negative_keywords) return both successful additions and any errors (e.g., duplicate keywords). The CLI displays both:

  • Successfully added keywords are shown in green
  • Duplicates or other errors are shown with details but don't fail the overall operation

Authentication Retry: The CLI automatically retries requests (up to 2 times) when authentication tokens expire, refreshing the token transparently.


Documentation

More skills from NeverSight

devops-deployer logo
NeverSight/skills_feed

devops-deployer

Comprehensive DevOps and deployment workflow that orchestrates infrastructure automation, CI/CD pipelines, container orchestration, and cloud deployment. Handles everything from infrastructure as code and pipeline setup to monitoring, scaling, and disaster recovery.

215 1
View
avnu logo
NeverSight/skills_feed

avnu

Integrate avnu SDK for Starknet DeFi: token swaps with best-price routing, DCA recurring buys, native staking, gasless transactions via paymaster, and market data. Use when building Starknet trading, DEX aggregation, or DeFi automation features.

215 0
View
post-to-x logo
NeverSight/skills_feed

post-to-x

发布内容和文章到 X (Twitter)。支持带图片的普通推文和 X Articles(长文)。使用真实的 Chrome 和 CDP 来绕过自动化检测。

215 0
View
ralph-prompt-builder logo
NeverSight/skills_feed

ralph-prompt-builder

Master orchestrator for generating Ralph Wiggum-compatible prompts. Analyzes task requirements and routes to appropriate generator (single-task, multi-task, project, or research). Use when you need to create any Ralph loop prompt and want automatic selection of the right generator.

215 0
View
branch-comparison logo
NeverSight/skills_feed

branch-comparison

Use when the user asks to compare branches, analyze git diffs, review changes between branches, update specifications based on code changes, or analyze what changed. Triggers on keywords like "compare branches", "git diff", "what changed", "branch comparison", "code changes", "spec update".

215 0
View
fastapi-development logo
NeverSight/skills_feed

fastapi-development

Build high-performance FastAPI applications with async routes, validation, dependency injection, security, and automatic API documentation. Use when developing modern Python APIs with async support, automatic OpenAPI documentation, and high performance requirements.

215 0
View
zendesk-chat logo
NeverSight/skills_feed

zendesk-chat

Enables Claude to manage Zendesk Chat conversations, support tickets, and customer service operations

215 0
View
forge logo
NeverSight/skills_feed

forge

Mine transcripts for knowledge - decisions, learnings, failures, patterns. Triggers: "forge insights", "mine transcripts", "extract knowledge".

215 0
View
mixpanel logo
NeverSight/skills_feed

mixpanel

Track product analytics and user behavior with Mixpanel's event-based platform.

215 0
View
ocpp logo
NeverSight/skills_feed

ocpp

OCPP protocol reference for EV charging infrastructure development. Covers OCPP 2.0.1 and OCPP 1.6J. Use when working with OCPP messages, charging station code, CSMS/Central System backends, smart charging, transaction handling, or EV charging protocols. Activates on keywords: OCPP, charging stat...

215 0
View
bee-collect logo
NeverSight/skills_feed

bee-collect

Gather scattered ideas into organized GitHub issues. The bee collects pollen from every flower, checks if the hive already has it, and carefully deposits new work in the comb for later. Never edits code—only organizes the work ahead. Use when creating issues from TODOs or planning work.

215 0
View
vercel-react-native-skills logo
NeverSight/skills_feed

vercel-react-native-skills

Comprehensive best practices for React Native and Expo applications. Contains rules across multiple categories covering performance, animations, UI patterns, and platform-specific optimizations.

215 0
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View