From toprank
Manages Google Ads: performance analysis, keywords, bids, budgets, negatives, campaigns, ads, search terms, QS, location targeting, bulk operations.
npx claudepluginhub nowork-studio/toprank --plugin toprankThis skill uses the workspace's default tool permissions.
Read and follow `../shared/preamble.md` — it handles MCP detection, token, and account selection. If config is already cached, this is instant.
evals/evals.jsonreferences/analysis-heuristics.mdreferences/bid-strategy-decision-tree.mdreferences/campaign-structure-guide.mdreferences/change-tracking.mdreferences/industry-benchmarks.mdreferences/quality-score-framework.mdreferences/search-term-analysis-guide.mdreferences/session-checks.mdreferences/workflow-playbooks.mdCreates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Read and follow ../shared/preamble.md — it handles MCP detection, token, and account selection. If config is already cached, this is instant.
This skill handles two very different request types. Recognizing which one you're in avoids unnecessary work.
Direct action (fast path):
User: "pause the keyword 'dog grooming' in the Seattle campaign"
- Confirm: "I'll pause 'dog grooming' in Pet Daycare - Seattle. Go ahead?"
- On approval: call
pauseKeyword, log perreferences/change-tracking.md- Done. No session checks, no performance analysis.
Change impact review:
User: "check my changes" / "did my changes work?" / "review my changes"
- Read
references/session-checks.mdand run the change review checks- If no pending changes: tell the user no recent changes are logged
- If changes exist but review window hasn't passed: show maturation message (see
references/session-checks.md)- If ready for review: pull before/after metrics, compute deltas, show results
Analysis request:
User: "how are my ads doing?"
- Read
references/session-checks.mdand run those checks (pending reviews, anomalies)- Pull data following the Performance Summary playbook in
references/workflow-playbooks.md- Read
references/analysis-heuristics.mdfor thresholds- Deliver report using the template in
references/workflow-playbooks.md
getAccountInfo and listCampaigns to orient yourself.references/change-tracking.md.For simple operations (pause, rename, single bid change), you typically don't need reference files. For analysis, pick the right one:
| Situation | Read |
|---|---|
| Performance analysis, keyword evaluation, waste calculation | references/analysis-heuristics.md (start here — routes to deeper files) |
| Step-by-step playbooks, report template | references/workflow-playbooks.md |
| QS diagnostics, component-level fixes | references/quality-score-framework.md |
| Bid strategy selection, migration, Smart Bidding | references/bid-strategy-decision-tree.md |
| Industry CPA/CTR/CPC benchmarks, seasonal adjustments | references/industry-benchmarks.md |
| Search term scoring, n-gram analysis, negative strategy | references/search-term-analysis-guide.md |
| Campaign/ad group structure, naming, restructuring | references/campaign-structure-guide.md |
| GAQL query patterns, adaptive fetching by account size | ../shared/gaql-cookbook.md |
../shared/gaql-cookbook.md)changeIds for undoAll write tools return a changeId for undo within 7 days.
references/bid-strategy-decision-tree.mdchangeIdMaintain {data_dir}/account-baseline.json for anomaly detection. Update at the END of any session where you pulled campaign data — no extra API calls needed.
{
"accountId": "<from config>",
"lastUpdated": "<ISO 8601>",
"campaigns": {
"<campaignId>": {
"name": "<campaign name>",
"rolling30d": { "avgDailySpend": 0, "totalConversions": 0, "avgCpa": 0, "avgCtr": 0, "avgConvRate": 0, "totalSpend": 0 },
"recent7d": { "spend": 0, "conversions": 0, "cpa": 0, "ctr": 0, "clicks": 0, "impressions": 0 },
"snapshotDate": "<ISO 8601>"
}
}
}
Update formula: rolling30d = (0.7 x previous_rolling30d) + (0.3 x recent_7d x (30/7)). The (30/7) factor projects 7-day values to 30-day equivalents. New campaigns: initialize rolling30d from recent7d directly. Cap at 50 campaigns (spend > $0 in last 30 days only).
After analysis, proactively offer relevant skills:
/ads-copybusiness-context.json or >90 days old): suggest /ads-audit first/ads-landing/ads-compete