Not in the top 1,000 by GitHub stars

fourteenwm/ppc-ai-skills

Collection of free PPC AI skills, ready for use with any AI harness, but built for Claude Code originally.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

account-diagnostic/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

ad-copy-generation-framework/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

ad-copy-verification-standard/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

add-account-negative-keywords/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

ads-checker/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

budget-guardian/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

budget-recommendation-calculator/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

change-history-checker/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

client-communication-standards/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

competitor-analysis-v2/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

conversion-tracking-health/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

dgen-automation-disable/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

fair-housing-compliance/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

ga4-campaign-cross-reference/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

ga4-cross-analysis/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

ga4-lead-quality-investigation/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

gaql-query-patterns/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

geo-conflict-analyzer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

google-ads-api-setup/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

google-ads-query/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

google-ads-samples/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

impression-share-diagnostics/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

investigation-methodology/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

lead-quality-pattern-analysis/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

lead-quality-recommendation-prioritization/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

markdown-to-sheets-presenter/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

mcc-hack-audit/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

mutation-safety/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

neg-conflict-finder/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Local scripts → After Local scripts

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Local scripts

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

non-serving-keyword-scanner/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

pmax-asset-automation/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

pmax-builder/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

portfolio-health-prioritization/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

portfolio-pacing-rules/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

rsa-bulk-edit/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

rsa-refresh/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

rsa-single-account/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

shared-budget-updater/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

sqr-classifier/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

sqr-pipeline/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

underspending-investigation/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

youtube-placement-audit/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

90f0e419f2d8 → 90f0e419f2d8

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 90f0e419f2d8

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 90f0e419f2d820789d5e50eee1237ab9fd14dfc6

80GitHub stars
2stars in 7 days
42skills in this repository
0commits in 30 days

Heat

2.4
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 6, 202681

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

account-diagnostic

When your agent uses it

42-point Google Ads account inspection (44 with the local-service preset) — discrete GREEN/YELLOW/RED checks across 14 categories (conversion tracking, pacing, impression share, quality score, search-term waste, keyword health, creative, RSA assets, account settings, PMAX config, negative keywords, placement safety, extensions, video & Demand Gen automation), scored into one overall verdict with estimated monthly waste, then triaged per rules.md. Auto-invoke when user says 'run diagnostic', 'inspect account', '40-point inspection', 'diagnostic for [account]', 'audit [account]', or 'account health check'.

What it loads into context

Frontmatter

143 tokens

Always available to the agent

SKILL.md

2,082 tokens

When the skill is activated

Reference documents

7,031 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Invocation Triggers
  2. How to Run
  3. The Checks
  4. Scoring
  5. Vertical Presets
  6. After the run — operator duties
  7. What this skill deliberately does NOT do
  8. Files in this skill
  9. Output
  10. Prerequisites
  11. Safety

Scripts executed separately

  • scripts/run_diagnostic.py

Files

  • README.mddoc4,677 bytes
  • SKILL.mdcore8,806 bytes
  • SKILL.mdcore8,806 bytes
  • examples.mddoc3,818 bytes
  • references/check-rubric.mddoc11,474 bytes
  • rules.mddoc8,546 bytes
  • scripts/run_diagnostic.pyruns84,982 bytes
Read SKILL.md

# 42-Point Account Diagnostic

Like a mechanic's multi-point vehicle inspection, but for Google Ads
accounts. Every check lands on an explicit GREEN/YELLOW/RED verdict with a
finding, a dollar impact where one can be estimated, and a "do this" action
line — no narrative to interpret.

One operator owns the workflow end to end: run the inspection → present the
scored report → triage the findings (`rules.md`) → route each actionable
finding to its fix skill. The diagnostic itself never changes an account.

*Naming note: 42 checks on a standard run; the local-service preset adds two
for 44. "40-point inspection" survives as a trigger because the instrument
grew from its original 40 core checks.*
View the complete source on GitHub

Skills included

  • account-diagnostic
  • ad-copy-generation-framework
  • ad-copy-verification-standard
  • add-account-negative-keywords
  • ads-checker
  • budget-guardian
  • budget-recommendation-calculator
  • change-history-checker
  • client-communication-standards
  • competitor-analysis-v2
  • conversion-tracking-health
  • dgen-automation-disable
  • fair-housing-compliance
  • ga4-campaign-cross-reference
  • ga4-cross-analysis
  • ga4-lead-quality-investigation
  • gaql-query-patterns
  • geo-conflict-analyzer
  • google-ads-api-setup
  • google-ads-query
  • google-ads-samples
  • impression-share-diagnostics
  • investigation-methodology
  • lead-quality-pattern-analysis
  • lead-quality-recommendation-prioritization
  • markdown-to-sheets-presenter
  • mcc-hack-audit
  • mutation-safety
  • neg-conflict-finder
  • non-serving-keyword-scanner
  • pmax-asset-automation
  • pmax-builder
  • portfolio-health-prioritization
  • portfolio-pacing-rules
  • rsa-bulk-edit
  • rsa-refresh
  • rsa-single-account
  • shared-budget-updater
  • sqr-classifier
  • sqr-pipeline
  • underspending-investigation
  • youtube-placement-audit

Repository facts

License
MIT
Created
Apr 7, 2026
Last pushed
Aug 25, 2026
Forks
11
Open issues
1
Project activity
Slowing

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 5, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 120 notes
  • account-diagnostic/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ad-copy-verification-standard/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ad-copy-verification-standard/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ad-copy-verification-standard/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ad-copy-verification-standard/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ad-copy-verification-standard/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ad-copy-verification-standard/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ad-copy-verification-standard/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ad-copy-verification-standard/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ad-copy-verification-standard/diagrams/run-logic.svg:1 Analysis incomplete: physical or joined line exceeds character limit
  • ad-copy-verification-standard/diagrams/workflow-hero.svg:1 Analysis incomplete: physical or joined line exceeds character limit
  • add-account-negative-keywords/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • add-account-negative-keywords/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • add-account-negative-keywords/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • add-account-negative-keywords/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ads-checker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ads-checker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ads-checker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ads-checker/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • budget-recommendation-calculator/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 1,044 signals by file

account-diagnostic/README.md

  • Network accessline 26
    git clone https://github.com/fourteenwm/ppc-ai-skills.git
  • Network accessline 96
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 98
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

account-diagnostic/SKILL.md

account-diagnostic/scripts/run_diagnostic.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 1726
    with the Sheets API enabled, download its JSON key to that path, and     share the target sheet with the service account's client_email as an     editor. See: https://docs.gspread.org/en/latest/oauth2.html
  • Network accessline 1727
    share the target sheet with the service account's client_email as an     editor. See: https://docs.gspread.org/en/latest/oauth2.html     """
  • Network accessline 1728
    editor. See: https://docs.gspread.org/en/latest/oauth2.html
  • Network accessline 1784
    requests.append({
  • Network accessline 1799
    requests.append({
  • Network accessline 1812
    requests.append({
  • Network accessline 1826
    row_idx = i + 3  # offset for banner + headers         bg = color_map.get(c.status, WHITE)         requests.append({
  • Network accessline 1827
    bg = color_map.get(c.status, WHITE)         requests.append({             'repeatCell': {
  • Network accessline 1828
    requests.append({
  • Network accessline 1841
    requests.append({
  • Network accessline 1853
    requests.append({

ad-copy-generation-framework/README.md

  • Network accessline 24
    mkdir -p .claude/skills/ad-copy-generation-framework curl -o .claude/skills/ad-copy-generation-framework/SKILL.md \
  • Network accessline 25
    curl -o .claude/skills/ad-copy-generation-framework/SKILL.md \
  • Network accessline 26
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ad-copy-generation-framework/SKILL.md
  • Network accessline 37
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 39
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

ad-copy-verification-standard/README.md

  • Network accessline 41
    The `.mmd` sources for both diagrams live in `diagrams/` — they're [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 42
    [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 62
    mkdir -p .claude/skills/ad-copy-verification-standard curl -o .claude/skills/ad-copy-verification-standard/SKILL.md \
  • Network accessline 63
    curl -o .claude/skills/ad-copy-verification-standard/SKILL.md \
  • Network accessline 64
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ad-copy-verification-standard/SKILL.md
  • Network accessline 94
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills. This standard exists because I got tired of manually deleting AI-hallucinated claims from live ads.
  • Network accessline 96
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

ad-copy-verification-standard/SKILL.md

  • Network accessline 498
    Built by [Kurt Henninger](https://fourteenwebmedia.com). More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

ad-copy-verification-standard/diagrams/README.md

  • Network accessline 3
    Diagram-as-code: the `.mmd` files are the source of truth; the SVGs are rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)
  • Network accessline 4
    rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)

ad-copy-verification-standard/diagrams/run-logic.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1512.92px; background-color: rgb(10, 10, 15);" viewBox="0 0 1512.9217529296875 965.875" role="gr

ad-copy-verification-standard/diagrams/workflow-hero.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 838px; background-color: rgb(10, 10, 15);" viewBox="-50 -10 838 665" role="graphics-document document" aria-rolede

add-account-negative-keywords/README.md

  • Network accessline 29
    for f in SKILL.md README.md rules.md examples.md references/mutation-contract.md \          scripts/add_account_negative_keywords.py scripts/sample_baseline_keywords.txt; do   curl -o ".claude/skills/add-account-negative-keywords/$f" \
  • Network accessline 30
    scripts/add_account_negative_keywords.py scripts/sample_baseline_keywords.txt; do   curl -o ".claude/skills/add-account-negative-keywords/$f" \     "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/add-account-negative-keywor
  • Network accessline 31
    curl -o ".claude/skills/add-account-negative-keywords/$f" \
  • Network accessline 32
    "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/add-account-negative-keywords/$f"
  • Network accessline 60
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 62
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

add-account-negative-keywords/SKILL.md

  • Broad permissionsline 1
    Bash
  • Network accessline 192
    sample; curate per `rules.md`, replace with your own) 5. **For `--log-sheet-id`:** the refresh token in `google-ads.yaml` must include the    `https://www.googleapis.com/auth/spreadsheets` scope
  • Network accessline 194
    `https://www.googleapis.com/auth/spreadsheets` scope
  • Network accessline 201
    for f in SKILL.md README.md rules.md examples.md references/mutation-contract.md \          scripts/add_account_negative_keywords.py scripts/sample_baseline_keywords.txt; do   curl -o ".claude/skills/add-account-negative-keywords/$f" \
  • Network accessline 202
    scripts/add_account_negative_keywords.py scripts/sample_baseline_keywords.txt; do   curl -o ".claude/skills/add-account-negative-keywords/$f" \     "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/add-account-negative-keywor
  • Network accessline 203
    curl -o ".claude/skills/add-account-negative-keywords/$f" \
  • Network accessline 204
    "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/add-account-negative-keywords/$f"

add-account-negative-keywords/scripts/add_account_negative_keywords.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 383
    [Credential-related source omitted]
  • Network accessline 384
    [Credential-related source omitted]
  • Network accessline 385
    token_uri='https://oauth2.googleapis.com/token',
  • Network accessline 386
    [Credential-related source omitted]
  • Network accessline 387
    [Credential-related source omitted]
  • Access to secretsline 387
    [Credential-related source omitted]
  • Network accessline 388
    scopes=['https://www.googleapis.com/auth/spreadsheets'],
  • Network accessline 741
    print(f"  Local log:                     {log_dir / 'account_negs_mutations.jsonl'}")     if args.log_sheet_id:         print(f"  Sheet log:                     https://docs.google.com/spreadsheets/d/{args.log_sheet_id}")
  • Network accessline 742
    if args.log_sheet_id:         print(f"  Sheet log:                     https://docs.google.com/spreadsheets/d/{args.log_sheet_id}")     print("=" * 80)
  • Network accessline 743
    print(f"  Sheet log:                     https://docs.google.com/spreadsheets/d/{args.log_sheet_id}")

ads-checker/README.md

  • Network accessline 26
    mkdir -p .claude/skills/ads-checker/scripts .claude/skills/ads-checker/references curl -o .claude/skills/ads-checker/SKILL.md \
  • Network accessline 27
    curl -o .claude/skills/ads-checker/SKILL.md \
  • Network accessline 28
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/SKILL.md curl -o .claude/skills/ads-checker/README.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/README.md
  • Network accessline 29
    curl -o .claude/skills/ads-checker/README.md \
  • Network accessline 30
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/README.md curl -o .claude/skills/ads-checker/rules.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/rules.md
  • Network accessline 31
    curl -o .claude/skills/ads-checker/rules.md \
  • Network accessline 32
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/rules.md curl -o .claude/skills/ads-checker/examples.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/examples.md
  • Network accessline 33
    curl -o .claude/skills/ads-checker/examples.md \
  • Network accessline 34
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/examples.md curl -o .claude/skills/ads-checker/references/check-rubric.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/references
  • Network accessline 35
    curl -o .claude/skills/ads-checker/references/check-rubric.md \
  • Network accessline 36
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/references/check-rubric.md curl -o .claude/skills/ads-checker/scripts/ads_checker_audit.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-c
  • Network accessline 37
    curl -o .claude/skills/ads-checker/scripts/ads_checker_audit.py \
  • Network accessline 38
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/scripts/ads_checker_audit.py curl -o .claude/skills/ads-checker/scripts/read_latest_ads_checker.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/ma
  • Network accessline 39
    curl -o .claude/skills/ads-checker/scripts/read_latest_ads_checker.py \
  • Network accessline 40
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ads-checker/scripts/read_latest_ads_checker.py
  • Network accessline 138
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 140
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

ads-checker/SKILL.md

ads-checker/scripts/ads_checker_audit.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 388
    [Credential-related source omitted]
  • Network accessline 389
    [Credential-related source omitted]
  • Network accessline 390
    token_uri="https://oauth2.googleapis.com/token",
  • Network accessline 392
    [Credential-related source omitted]
  • Access to secretsline 392
    [Credential-related source omitted]
  • Network accessline 393
    scopes=[             "https://www.googleapis.com/auth/spreadsheets",             "https://www.googleapis.com/auth/drive.readonly",
  • Network accessline 394
    "https://www.googleapis.com/auth/spreadsheets",
  • Network accessline 395
    "https://www.googleapis.com/auth/drive.readonly",
  • Network accessline 621
    def check_url(url):         try:             resp = requests.head(url, timeout=5, allow_redirects=True)
  • Network accessline 622
    try:             resp = requests.head(url, timeout=5, allow_redirects=True)             if resp.status_code >= 400:
  • Network accessline 623
    resp = requests.head(url, timeout=5, allow_redirects=True)

ads-checker/scripts/read_latest_ads_checker.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 64
    [Credential-related source omitted]
  • Network accessline 65
    [Credential-related source omitted]
  • Network accessline 66
    token_uri='https://oauth2.googleapis.com/token',
  • Network accessline 67
    [Credential-related source omitted]
  • Network accessline 68
    [Credential-related source omitted]
  • Access to secretsline 68
    [Credential-related source omitted]
  • Network accessline 69
    scopes=['https://www.googleapis.com/auth/spreadsheets']

budget-guardian/.github/workflows/budget-guardian.yml

  • Dangerous shell operationline 43
    run: rm -f /tmp/sheets-token.json /tmp/google-ads.yaml

budget-guardian/README.md

  • Network accessline 43
    - Apply for a developer token on your MCC ([instructions](https://developers.google.com/google-ads/api/docs/get-started/dev-token))
  • Access to secretsline 51
    [Credential-related source omitted]
  • Network accessline 66
    2. Enable the Google Sheets API 3. Create an OAuth client (Desktop type) 4. Run the [Google OAuth playground](https://developers.google.com/oauthplayground/) with scope `https://www.googleapis.com/auth/spreadsheets`
  • Network accessline 67
    3. Create an OAuth client (Desktop type) 4. Run the [Google OAuth playground](https://developers.google.com/oauthplayground/) with scope `https://www.googleapis.com/auth/spreadsheets` 5. Exchange the auth code for a refresh token and save t
  • Network accessline 68
    4. Run the [Google OAuth playground](https://developers.google.com/oauthplayground/) with scope `https://www.googleapis.com/auth/spreadsheets`
  • Network accessline 75
    [Credential-related source omitted]
  • Network accessline 76
    [Credential-related source omitted]
  • Network accessline 77
    "token_uri": "https://oauth2.googleapis.com/token",
  • Network accessline 78
    [Credential-related source omitted]
  • Network accessline 79
    [Credential-related source omitted]
  • Access to secretsline 79
    [Credential-related source omitted]
  • Network accessline 80
    "scopes": ["https://www.googleapis.com/auth/spreadsheets"]
  • Network accessline 103
    Grab the sheet ID from the URL: `https://docs.google.com/spreadsheets/d/<THIS_IS_THE_ID>/edit`
  • Network accessline 111
    1. Go to `https://slack.com/get-started` → **Create a Workspace**
  • Network accessline 119
    1. Go to `https://api.slack.com/apps` → **Create New App** → **From scratch**
  • Network accessline 121
    3. In the left sidebar: **Incoming Webhooks** → toggle **Activate Incoming Webhooks** to On 4. Scroll down → click **Add New Webhook to Workspace** → pick the alerts channel → **Allow** 5. Copy the webhook URL (starts with `https://hooks.sl
  • Network accessline 123
    5. Copy the webhook URL (starts with `https://hooks.slack.com/services/...`) — you'll paste this into a GitHub secret in Step 5
  • Network accessline 128
    curl -X POST -H 'Content-Type: application/json' \
  • Network accessline 168
    1. Go to `https://github.com` → **Sign up**
  • Network accessline 341
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 343
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

budget-guardian/SKILL.md

budget-guardian/workflows/__init__.py

  • Executable scriptline 1
    Executable file

budget-guardian/workflows/_shared/__init__.py

  • Executable scriptline 1
    Executable file

budget-guardian/workflows/_shared/google_ads_auth.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 10
    [Credential-related source omitted]
  • Network accessline 21
    TOKEN_URI = "https://oauth2.googleapis.com/token"
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 52
    [Credential-related source omitted]

budget-guardian/workflows/_shared/google_auth.py

  • Executable scriptline 1
    Executable file
  • Network accessline 13
    SCOPES = ["https://www.googleapis.com/auth/spreadsheets"]
  • Access to secretsline 18
    [Credential-related source omitted]

budget-guardian/workflows/_shared/sheets_retry.py

  • Executable scriptline 1
    Executable file

budget-guardian/workflows/budget_guardian/__init__.py

  • Executable scriptline 1
    Executable file

budget-guardian/workflows/budget_guardian/ads_api.py

  • Executable scriptline 1
    Executable file
  • Network accessline 15
    ADS_API_VERSION = "v23" ADS_BASE_URL = f"https://googleads.googleapis.com/{ADS_API_VERSION}"
  • Network accessline 16
    ADS_BASE_URL = f"https://googleads.googleapis.com/{ADS_API_VERSION}"
  • Access to secretsline 19
    [Credential-related source omitted]
  • Access to secretsline 21
    [Credential-related source omitted]
  • Network accessline 30
    url = f"{ADS_BASE_URL}/customers/{cid}/googleAds:search"     body = {"query": query}     resp = requests.post(url, json=body, headers=headers, timeout=60)
  • Network accessline 31
    body = {"query": query}     resp = requests.post(url, json=body, headers=headers, timeout=60)     if resp.status_code != 200:
  • Network accessline 32
    resp = requests.post(url, json=body, headers=headers, timeout=60)
  • Access to secretsline 44
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]

budget-guardian/workflows/budget_guardian/main.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 59
    [Credential-related source omitted]

budget-guardian/workflows/budget_guardian/setup_tabs.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 24
    [Credential-related source omitted]

budget-guardian/workflows/budget_guardian/sheets_io.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 25
    [Credential-related source omitted]

budget-guardian/workflows/budget_guardian/slack.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 18
    [Credential-related source omitted]
  • Network accessline 23
    payload = {"text": text, "blocks": blocks}     resp = requests.post(
  • Network accessline 24
    resp = requests.post(

budget-recommendation-calculator/README.md

  • Network accessline 67
    mkdir -p .claude/skills/budget-recommendation-calculator curl -o .claude/skills/budget-recommendation-calculator/SKILL.md \
  • Network accessline 68
    curl -o .claude/skills/budget-recommendation-calculator/SKILL.md \
  • Network accessline 69
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/budget-recommendation-calculator/SKILL.md
  • Network accessline 101
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 103
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

budget-recommendation-calculator/SKILL.md

  • Network accessline 450
    Built by [Kurt Henninger](https://fourteenwebmedia.com). More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

change-history-checker/README.md

  • Network accessline 37
    mkdir -p .claude/skills/change-history-checker/scripts .claude/skills/change-history-checker/references for f in SKILL.md rules.md examples.md; do   curl -o .claude/skills/change-history-checker/$f \
  • Network accessline 38
    for f in SKILL.md rules.md examples.md; do   curl -o .claude/skills/change-history-checker/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/change-history-checker/$f
  • Network accessline 39
    curl -o .claude/skills/change-history-checker/$f \
  • Network accessline 40
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/change-history-checker/$f done curl -o .claude/skills/change-history-checker/references/history-windows.md \
  • Network accessline 41
    done curl -o .claude/skills/change-history-checker/references/history-windows.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/change-history-checker/references/history-windows.md
  • Network accessline 42
    curl -o .claude/skills/change-history-checker/references/history-windows.md \
  • Network accessline 43
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/change-history-checker/references/history-windows.md curl -o .claude/skills/change-history-checker/scripts/check_change_history.py \   https://raw.githubusercontent.com/fourtee
  • Network accessline 44
    curl -o .claude/skills/change-history-checker/scripts/check_change_history.py \
  • Network accessline 45
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/change-history-checker/scripts/check_change_history.py
  • Network accessline 59
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 61
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

change-history-checker/SKILL.md

change-history-checker/scripts/check_change_history.py

  • Executable scriptline 1
    #!/usr/bin/env python3

client-communication-standards/README.md

  • Network accessline 24
    mkdir -p .claude/skills/client-communication-standards curl -o .claude/skills/client-communication-standards/SKILL.md \
  • Network accessline 25
    curl -o .claude/skills/client-communication-standards/SKILL.md \
  • Network accessline 26
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/client-communication-standards/SKILL.md
  • Network accessline 37
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 39
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

competitor-analysis-v2/README.md

  • Network accessline 37
    templates/ads-angle-brief.md templates/template.css \          sales/service-page-copy.md; do   curl -o ".claude/skills/competitor-analysis-v2/$f" \
  • Network accessline 38
    sales/service-page-copy.md; do   curl -o ".claude/skills/competitor-analysis-v2/$f" \     "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/competitor-analysis-v2/$f"
  • Network accessline 39
    curl -o ".claude/skills/competitor-analysis-v2/$f" \
  • Network accessline 40
    "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/competitor-analysis-v2/$f"
  • Network accessline 54
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 56
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

competitor-analysis-v2/SKILL.md

  • Broad permissionsline 1
    Bash
  • Network accessline 69
    node .claude/skills/competitor-analysis-v2/scripts/screenshot.cjs \   https://client.com \
  • Network accessline 70
    https://client.com \
  • Network accessline 71
    https://competitor1.com https://competitor2.com https://competitor3.com \
  • Network accessline 72
    https://competitor4.com https://competitor5.com \
  • Network accessline 234
    templates/ads-angle-brief.md templates/template.css \          sales/service-page-copy.md; do   curl -o ".claude/skills/competitor-analysis-v2/$f" \
  • Network accessline 235
    sales/service-page-copy.md; do   curl -o ".claude/skills/competitor-analysis-v2/$f" \     "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/competitor-analysis-v2/$f"
  • Network accessline 236
    curl -o ".claude/skills/competitor-analysis-v2/$f" \
  • Network accessline 237
    "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/competitor-analysis-v2/$f"

competitor-analysis-v2/examples.md

  • Network accessline 32
    node .claude/skills/competitor-analysis-v2/scripts/screenshot.cjs \   https://gearline.example.com https://redline.example.com https://summit.example.com \
  • Network accessline 33
    https://gearline.example.com https://redline.example.com https://summit.example.com \
  • Network accessline 34
    https://ironwood.example.com https://beacon.example.com https://milepost.example.com \
  • Network accessline 42
    [1] Navigating to: https://gearline.example.com
  • Network accessline 43
    [1] Saved: deliverables/gearline/screenshots/1-gearline-example-com.png [2] Navigating to: https://redline.example.com [2] Saved: deliverables/gearline/screenshots/2-redline-example-com.png
  • Network accessline 44
    [2] Navigating to: https://redline.example.com
  • Network accessline 45
    [2] Saved: deliverables/gearline/screenshots/2-redline-example-com.png [3] Navigating to: https://summit.example.com [3] Saved: deliverables/gearline/screenshots/3-summit-example-com.png
  • Network accessline 46
    [3] Navigating to: https://summit.example.com
  • Network accessline 47
    [3] Saved: deliverables/gearline/screenshots/3-summit-example-com.png [4] Navigating to: https://ironwood.example.com [4] Error capturing https://ironwood.example.com: page.goto: Timeout 30000ms exceeded.
  • Network accessline 48
    [4] Navigating to: https://ironwood.example.com
  • Network accessline 49
    [4] Error capturing https://ironwood.example.com: page.goto: Timeout 30000ms exceeded.
  • Network accessline 50
    [5] Navigating to: https://beacon.example.com
  • Network accessline 51
    [5] Saved: deliverables/gearline/screenshots/5-beacon-example-com.png [6] Navigating to: https://milepost.example.com [6] Saved: deliverables/gearline/screenshots/6-milepost-example-com.png
  • Network accessline 52
    [6] Navigating to: https://milepost.example.com
  • Network accessline 55
    Retrying 1 failed URL(s) with bot evasion... [4] Navigating to: https://ironwood.example.com (retry with evasion)
  • Network accessline 56
    [4] Navigating to: https://ironwood.example.com (retry with evasion)

competitor-analysis-v2/rules.md

  • Network accessline 106
    |---|---|---| | Screenshot run "succeeded" (exit 0) | Partial failure — exit 0 covers 3/6 | The `Screenshots captured: X/Y` line + `screenshots.json` | | 5 screenshots from a 6-URL command, no error | A schemeless URL silently dropped by th
  • Network accessline 107
    | Screenshot run "succeeded" (exit 0) | Partial failure — exit 0 covers 3/6 | The `Screenshots captured: X/Y` line + `screenshots.json` | | 5 screenshots from a 6-URL command, no error | A schemeless URL silently dropped by the http-prefix 
  • Network accessline 108
    | 5 screenshots from a 6-URL command, no error | A schemeless URL silently dropped by the http-prefix filter | Every URL starts with `https://` |

competitor-analysis-v2/scripts/screenshot.cjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 144
    console.error('   or: node screenshot.cjs --urls-file <file.txt> --output <folder>');         console.error('\nExample:');         console.error('  node screenshot.cjs https://client.com https://competitor1.com https://competitor2.com --out
  • Network accessline 145
    console.error('\nExample:');         console.error('  node screenshot.cjs https://client.com https://competitor1.com https://competitor2.com --output /tmp/screenshots');         process.exit(1);
  • Network accessline 146
    console.error('  node screenshot.cjs https://client.com https://competitor1.com https://competitor2.com --output /tmp/screenshots');

conversion-tracking-health/README.md

  • Network accessline 24
    mkdir -p .claude/skills/conversion-tracking-health/scripts .claude/skills/conversion-tracking-health/references for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/conversion-tracking-health/$f \
  • Network accessline 25
    for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/conversion-tracking-health/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/conversion-tracking-health/$f
  • Network accessline 26
    curl -o .claude/skills/conversion-tracking-health/$f \
  • Network accessline 27
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/conversion-tracking-health/$f done curl -o .claude/skills/conversion-tracking-health/references/audit-contract.md \
  • Network accessline 28
    done curl -o .claude/skills/conversion-tracking-health/references/audit-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/conversion-tracking-health/references/audit-contract.md
  • Network accessline 29
    curl -o .claude/skills/conversion-tracking-health/references/audit-contract.md \
  • Network accessline 30
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/conversion-tracking-health/references/audit-contract.md curl -o .claude/skills/conversion-tracking-health/scripts/portfolio_conversion_audit.py \   https://raw.githubuserconten
  • Network accessline 31
    curl -o .claude/skills/conversion-tracking-health/scripts/portfolio_conversion_audit.py \
  • Network accessline 32
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/conversion-tracking-health/scripts/portfolio_conversion_audit.py curl -o .claude/skills/conversion-tracking-health/scripts/last_conversion_dates_by_action.py \   https://raw.gi
  • Network accessline 33
    curl -o .claude/skills/conversion-tracking-health/scripts/last_conversion_dates_by_action.py \
  • Network accessline 34
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/conversion-tracking-health/scripts/last_conversion_dates_by_action.py
  • Network accessline 47
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 49
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

conversion-tracking-health/SKILL.md

conversion-tracking-health/scripts/last_conversion_dates_by_action.py

  • Executable scriptline 1
    Executable file

conversion-tracking-health/scripts/portfolio_conversion_audit.py

  • Executable scriptline 1
    #!/usr/bin/env python3

dgen-automation-disable/README.md

  • Network accessline 25
    mkdir -p .claude/skills/dgen-automation-disable/scripts .claude/skills/dgen-automation-disable/references for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/dgen-automation-disable/$f \
  • Network accessline 26
    for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/dgen-automation-disable/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/$f
  • Network accessline 27
    curl -o .claude/skills/dgen-automation-disable/$f \
  • Network accessline 28
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/$f done curl -o .claude/skills/dgen-automation-disable/references/mutation-contract.md \
  • Network accessline 29
    done curl -o .claude/skills/dgen-automation-disable/references/mutation-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/references/mutation-contract.md
  • Network accessline 30
    curl -o .claude/skills/dgen-automation-disable/references/mutation-contract.md \
  • Network accessline 31
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/references/mutation-contract.md curl -o .claude/skills/dgen-automation-disable/scripts/fix_dgen_ad_automation.py \   https://raw.githubusercontent.com/f
  • Network accessline 32
    curl -o .claude/skills/dgen-automation-disable/scripts/fix_dgen_ad_automation.py \
  • Network accessline 33
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/scripts/fix_dgen_ad_automation.py
  • Network accessline 47
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 49
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

dgen-automation-disable/SKILL.md

  • Broad permissionsline 1
    Bash
  • Network accessline 143
    mkdir -p .claude/skills/dgen-automation-disable/scripts .claude/skills/dgen-automation-disable/references for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/dgen-automation-disable/$f \
  • Network accessline 144
    for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/dgen-automation-disable/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/$f
  • Network accessline 145
    curl -o .claude/skills/dgen-automation-disable/$f \
  • Network accessline 146
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/$f done curl -o .claude/skills/dgen-automation-disable/references/mutation-contract.md \
  • Network accessline 147
    done curl -o .claude/skills/dgen-automation-disable/references/mutation-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/references/mutation-contract.md
  • Network accessline 148
    curl -o .claude/skills/dgen-automation-disable/references/mutation-contract.md \
  • Network accessline 149
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/references/mutation-contract.md curl -o .claude/skills/dgen-automation-disable/scripts/fix_dgen_ad_automation.py \   https://raw.githubusercontent.com/f
  • Network accessline 150
    curl -o .claude/skills/dgen-automation-disable/scripts/fix_dgen_ad_automation.py \
  • Network accessline 151
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/dgen-automation-disable/scripts/fix_dgen_ad_automation.py

dgen-automation-disable/scripts/fix_dgen_ad_automation.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 173
    [Credential-related source omitted]
  • Network accessline 174
    [Credential-related source omitted]
  • Network accessline 175
    token_uri='https://oauth2.googleapis.com/token',
  • Network accessline 176
    [Credential-related source omitted]
  • Network accessline 177
    [Credential-related source omitted]
  • Access to secretsline 177
    [Credential-related source omitted]
  • Network accessline 178
    scopes=['https://www.googleapis.com/auth/spreadsheets'],
  • Network accessline 644
    print(f"\nLogged to: {mutation_logger.jsonl_log}")     if args.log_sheet_id:         print(f"Sheet log: https://docs.google.com/spreadsheets/d/{args.log_sheet_id}")
  • Network accessline 645
    if args.log_sheet_id:         print(f"Sheet log: https://docs.google.com/spreadsheets/d/{args.log_sheet_id}")     print("=" * 80)
  • Network accessline 646
    print(f"Sheet log: https://docs.google.com/spreadsheets/d/{args.log_sheet_id}")

fair-housing-compliance/README.md

  • Network accessline 43
    mkdir -p .claude/skills/fair-housing-compliance curl -o .claude/skills/fair-housing-compliance/SKILL.md \
  • Network accessline 44
    curl -o .claude/skills/fair-housing-compliance/SKILL.md \
  • Network accessline 45
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/fair-housing-compliance/SKILL.md
  • Network accessline 75
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 77
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

ga4-campaign-cross-reference/README.md

  • Network accessline 24
    mkdir -p .claude/skills/ga4-campaign-cross-reference curl -o .claude/skills/ga4-campaign-cross-reference/SKILL.md \
  • Network accessline 25
    curl -o .claude/skills/ga4-campaign-cross-reference/SKILL.md \
  • Network accessline 26
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ga4-campaign-cross-reference/SKILL.md
  • Network accessline 37
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 39
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

ga4-cross-analysis/README.md

  • Network accessline 25
    for f in SKILL.md README.md rules.md examples.md references/collection-contract.md \          scripts/query_campaign_settings.py; do   curl -o ".claude/skills/ga4-cross-analysis/$f" \
  • Network accessline 26
    scripts/query_campaign_settings.py; do   curl -o ".claude/skills/ga4-cross-analysis/$f" \     "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ga4-cross-analysis/$f"
  • Network accessline 27
    curl -o ".claude/skills/ga4-cross-analysis/$f" \
  • Network accessline 28
    "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ga4-cross-analysis/$f"
  • Network accessline 61
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 63
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

ga4-cross-analysis/SKILL.md

ga4-cross-analysis/references/collection-contract.md

  • Network accessline 109
    2. Reuse the same OAuth client as the Google Ads API — but note that **scopes are fixed    when a refresh token is minted; you cannot add a scope to an existing token.** Add    `https://www.googleapis.com/auth/analytics.readonly` to the `SC
  • Network accessline 110
    when a refresh token is minted; you cannot add a scope to an existing token.** Add    `https://www.googleapis.com/auth/analytics.readonly` to the `SCOPES` list in the    [google-ads-api-setup](../../google-ads-api-setup/) skill's `generate_
  • Network accessline 111
    `https://www.googleapis.com/auth/analytics.readonly` to the `SCOPES` list in the
  • Network accessline 126
    GA4 Data API reference: https://developers.google.com/analytics/devguides/reporting/data/v1

ga4-cross-analysis/scripts/query_campaign_settings.py

  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file
  • Executable scriptline 1
    Executable file

ga4-lead-quality-investigation/README.md

  • Network accessline 25
    mkdir -p .claude/skills/ga4-lead-quality-investigation curl -o .claude/skills/ga4-lead-quality-investigation/SKILL.md \
  • Network accessline 26
    curl -o .claude/skills/ga4-lead-quality-investigation/SKILL.md \
  • Network accessline 27
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ga4-lead-quality-investigation/SKILL.md curl -o .claude/skills/ga4-lead-quality-investigation/README.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ga4-
  • Network accessline 28
    curl -o .claude/skills/ga4-lead-quality-investigation/README.md \
  • Network accessline 29
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ga4-lead-quality-investigation/README.md
  • Network accessline 37
    client-communication-standards; do   mkdir -p .claude/skills/$skill   curl -o .claude/skills/$skill/SKILL.md \
  • Network accessline 38
    mkdir -p .claude/skills/$skill   curl -o .claude/skills/$skill/SKILL.md \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/$skill/SKILL.md
  • Network accessline 39
    curl -o .claude/skills/$skill/SKILL.md \
  • Network accessline 40
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/$skill/SKILL.md

ga4-lead-quality-investigation/SKILL.md

gaql-query-patterns/README.md

  • Network accessline 57
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 59
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

geo-conflict-analyzer/README.md

  • Network accessline 35
    mkdir -p .claude/skills/geo-conflict-analyzer/scripts .claude/skills/geo-conflict-analyzer/references for f in SKILL.md README.md prompt.md rules.md examples.md; do   curl -o .claude/skills/geo-conflict-analyzer/$f \
  • Network accessline 36
    for f in SKILL.md README.md prompt.md rules.md examples.md; do   curl -o .claude/skills/geo-conflict-analyzer/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/geo-conflict-analyzer/$f
  • Network accessline 37
    curl -o .claude/skills/geo-conflict-analyzer/$f \
  • Network accessline 38
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/geo-conflict-analyzer/$f done curl -o .claude/skills/geo-conflict-analyzer/references/analysis-contract.md \
  • Network accessline 39
    done curl -o .claude/skills/geo-conflict-analyzer/references/analysis-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/geo-conflict-analyzer/references/analysis-contract.md
  • Network accessline 40
    curl -o .claude/skills/geo-conflict-analyzer/references/analysis-contract.md \
  • Network accessline 41
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/geo-conflict-analyzer/references/analysis-contract.md curl -o .claude/skills/geo-conflict-analyzer/scripts/analyze.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-sk
  • Network accessline 42
    curl -o .claude/skills/geo-conflict-analyzer/scripts/analyze.py \
  • Network accessline 43
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/geo-conflict-analyzer/scripts/analyze.py
  • Access to secretsline 55
    [Credential-related source omitted]
  • Network accessline 89
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 91
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

geo-conflict-analyzer/SKILL.md

  • Access to secretsline 63
    [Credential-related source omitted]
  • Access to secretsline 139
    [Credential-related source omitted]

geo-conflict-analyzer/references/analysis-contract.md

  • Access to secretsline 93
    [Credential-related source omitted]

geo-conflict-analyzer/scripts/analyze.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 49
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Network accessline 67
    creds = Credentials.from_authorized_user_file(         str(token_file),         scopes=["https://www.googleapis.com/auth/spreadsheets"]
  • Network accessline 68
    str(token_file),         scopes=["https://www.googleapis.com/auth/spreadsheets"]     )
  • Network accessline 69
    scopes=["https://www.googleapis.com/auth/spreadsheets"]

google-ads-api-setup/README.md

  • Network accessline 25
    - Google Ads account with **MCC (Manager) access** - Google Cloud account (free: [console.cloud.google.com](https://console.cloud.google.com))
  • Network accessline 26
    - Google Cloud account (free: [console.cloud.google.com](https://console.cloud.google.com))
  • Network accessline 34
    - **Use the same Google account everywhere in this guide** — the one that has access to your MCC. Cloud Console, OAuth authorization, all of it. Mixing accounts is the #1 source of "permission denied" errors later. Not sure which account th
  • Access to secretsline 56
    [Credential-related source omitted]
  • Network accessline 58
    The `.mmd` sources for both diagrams live in `diagrams/` — they're [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included theme.
  • Network accessline 64
    1. Go to [console.cloud.google.com](https://console.cloud.google.com)
  • Access to secretsline 135
    [Credential-related source omitted]
  • Network accessline 147
    1. Log into Google Ads at [ads.google.com](https://ads.google.com)
  • Network accessline 148
    2. Navigate to your **MCC account** (the top-level manager account) 3. Click **Admin** (gear icon in the left nav) → **API Center**. (Shortcut: [ads.google.com/aw/apicenter](https://ads.google.com/aw/apicenter). On the older UI: wrench icon
  • Network accessline 149
    3. Click **Admin** (gear icon in the left nav) → **API Center**. (Shortcut: [ads.google.com/aw/apicenter](https://ads.google.com/aw/apicenter). On the older UI: wrench icon "Tools & Settings" → **Setup → API Center**.)
  • Access to secretsline 177
    [Credential-related source omitted]
  • Access to secretsline 208
    [Credential-related source omitted]
  • Access to secretsline 210
    [Credential-related source omitted]
  • Access to secretsline 224
    [Credential-related source omitted]
  • Network accessline 226
    **Where to find your MCC ID:** Log into [ads.google.com](https://ads.google.com) in MCC view — the top-right shows it as `123-456-7890`. Strip the dashes: `1234567890`.
  • Access to secretsline 264
    [Credential-related source omitted]
  • Access to secretsline 298
    [Credential-related source omitted]
  • Network accessline 299
    - Add both to your `.gitignore` - Your refresh token grants full access to your Google Ads accounts — plus, with the scopes from Step 7, read/write access to your Google Sheets and read access to your Drive file listing. Treat it like a pas
  • Network accessline 301
    - If you suspect a token is compromised, revoke it at [myaccount.google.com/permissions](https://myaccount.google.com/permissions)
  • Network accessline 313
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 315
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

google-ads-api-setup/SKILL.md

  • Broad permissionsline 1
    Bash
  • Access to secretsline 65
    [Credential-related source omitted]
  • Access to secretsline 76
    [Credential-related source omitted]
  • Access to secretsline 107
    [Credential-related source omitted]
  • Network accessline 108
    [Credential-related source omitted]
  • Access to secretsline 108
    [Credential-related source omitted]
  • Network accessline 110
    - Revoke compromised tokens at [myaccount.google.com/permissions](https://myaccount.google.com/permissions)
  • Network accessline 127
    git clone https://github.com/fourteenwm/ppc-ai-skills.git

google-ads-api-setup/diagrams/README.md

  • Network accessline 3
    Diagram-as-code: the `.mmd` files are the source of truth; the SVGs are rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)
  • Network accessline 4
    rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)

google-ads-api-setup/diagrams/setup-flow.mmd

  • Access to secretsline 11
    [Credential-related source omitted]
  • Access to secretsline 31
    [Credential-related source omitted]

google-ads-api-setup/diagrams/setup-flow.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1651.46px; background-color: rgb(10, 10, 15);" viewBox="0 0 1651.458984375 1106.125" role="graph

google-ads-api-setup/diagrams/workflow-hero.mmd

  • Access to secretsline 12
    [Credential-related source omitted]

google-ads-api-setup/diagrams/workflow-hero.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 933.5px; background-color: rgb(10, 10, 15);" viewBox="-50 -10 933.5 988" role="graphics-document document" aria-ro

google-ads-api-setup/generate_credentials.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 7
    [Credential-related source omitted]
  • Network accessline 31
    SCOPES = [     "https://www.googleapis.com/auth/adwords",         # Google Ads API
  • Network accessline 32
    "https://www.googleapis.com/auth/adwords",         # Google Ads API
  • Network accessline 33
    "https://www.googleapis.com/auth/spreadsheets",    # read/write report sheets
  • Network accessline 34
    "https://www.googleapis.com/auth/drive.readonly",  # locate sheets (gspread)
  • Access to secretsline 45
    [Credential-related source omitted]
  • Access to secretsline 63
    [Credential-related source omitted]
  • Access to secretsline 75
    [Credential-related source omitted]

google-ads-api-setup/google-ads.example.yaml

  • Access to secretsline 5
    [Credential-related source omitted]
  • Access to secretsline 7
    [Credential-related source omitted]

google-ads-api-setup/test_connection.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 48
    [Credential-related source omitted]
  • Access to secretsline 115
    [Credential-related source omitted]
  • Access to secretsline 120
    [Credential-related source omitted]

google-ads-query/README.md

  • Network accessline 24
    mkdir -p .claude/skills/google-ads-query/scripts .claude/skills/google-ads-query/references for f in SKILL.md rules.md examples.md accounts.example.json; do   curl -o .claude/skills/google-ads-query/$f \
  • Network accessline 25
    for f in SKILL.md rules.md examples.md accounts.example.json; do   curl -o .claude/skills/google-ads-query/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/google-ads-query/$f
  • Network accessline 26
    curl -o .claude/skills/google-ads-query/$f \
  • Network accessline 27
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/google-ads-query/$f done curl -o .claude/skills/google-ads-query/scripts/query.py \
  • Network accessline 28
    done curl -o .claude/skills/google-ads-query/scripts/query.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/google-ads-query/scripts/query.py
  • Network accessline 29
    curl -o .claude/skills/google-ads-query/scripts/query.py \
  • Network accessline 30
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/google-ads-query/scripts/query.py for r in resources.md query-contract.md; do   curl -o .claude/skills/google-ads-query/references/$r \
  • Network accessline 31
    for r in resources.md query-contract.md; do   curl -o .claude/skills/google-ads-query/references/$r \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/google-ads-query/references/$r
  • Network accessline 32
    curl -o .claude/skills/google-ads-query/references/$r \
  • Network accessline 33
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/google-ads-query/references/$r
  • Network accessline 34
    done for t in search-terms campaigns keywords ad-groups conversions budgets assets geo; do   curl -o .claude/skills/google-ads-query/references/$t.gaql \
  • Network accessline 35
    for t in search-terms campaigns keywords ad-groups conversions budgets assets geo; do   curl -o .claude/skills/google-ads-query/references/$t.gaql \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/google-ads-query/refere
  • Network accessline 36
    curl -o .claude/skills/google-ads-query/references/$t.gaql \
  • Network accessline 37
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/google-ads-query/references/$t.gaql
  • Network accessline 63
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 65
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

google-ads-query/SKILL.md

google-ads-query/scripts/query.py

  • Executable scriptline 1
    #!/usr/bin/env python3

google-ads-samples/README.md

  • Network accessline 24
    mkdir -p .claude/skills/google-ads-samples curl -o .claude/skills/google-ads-samples/SKILL.md \
  • Network accessline 25
    curl -o .claude/skills/google-ads-samples/SKILL.md \
  • Network accessline 26
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/google-ads-samples/SKILL.md
  • Network accessline 37
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 39
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

google-ads-samples/SKILL.md

  • Network accessline 31
    git clone https://github.com/googleads/google-ads-python.git
  • Network accessline 336
    - Links to official Google Ads API docs — see [developers.google.com/google-ads/api/docs](https://developers.google.com/google-ads/api/docs)
  • Network accessline 337
    - [google-ads-python/examples/README.md](../../google-ads-python/examples/README.md) - Safety warnings and usage guide - GitHub: https://github.com/googleads/google-ads-python - Samples index: https://developers.google.com/google-ads/api/sa
  • Network accessline 338
    - GitHub: https://github.com/googleads/google-ads-python
  • Network accessline 339
    - Samples index: https://developers.google.com/google-ads/api/samples

impression-share-diagnostics/README.md

  • Network accessline 38
    mkdir -p .claude/skills/impression-share-diagnostics curl -o .claude/skills/impression-share-diagnostics/SKILL.md \
  • Network accessline 39
    curl -o .claude/skills/impression-share-diagnostics/SKILL.md \
  • Network accessline 40
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/impression-share-diagnostics/SKILL.md
  • Network accessline 73
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 75
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

impression-share-diagnostics/SKILL.md

  • Network accessline 477
    Built by [Kurt Henninger](https://fourteenwebmedia.com). More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

investigation-methodology/README.md

  • Network accessline 25
    The `.mmd` sources for both diagrams live in `diagrams/` — they're [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 26
    [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 66
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 68
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

investigation-methodology/diagrams/README.md

  • Network accessline 3
    Diagram-as-code: the `.mmd` files are the source of truth; the SVGs are rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)
  • Network accessline 4
    rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)

investigation-methodology/diagrams/run-logic.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1439.68px; background-color: rgb(10, 10, 15);" viewBox="0 0 1439.6796875 705.1875" role="graphic

investigation-methodology/diagrams/workflow-hero.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 849px; background-color: rgb(10, 10, 15);" viewBox="-50 -10 849 841" role="graphics-document document" aria-rolede

lead-quality-pattern-analysis/README.md

  • Network accessline 59
    mkdir -p .claude/skills/lead-quality-pattern-analysis curl -o .claude/skills/lead-quality-pattern-analysis/SKILL.md \
  • Network accessline 60
    curl -o .claude/skills/lead-quality-pattern-analysis/SKILL.md \
  • Network accessline 61
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/lead-quality-pattern-analysis/SKILL.md
  • Network accessline 92
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 94
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

lead-quality-pattern-analysis/SKILL.md

  • Network accessline 472
    Built by [Kurt Henninger](https://fourteenwebmedia.com). More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

lead-quality-recommendation-prioritization/README.md

  • Network accessline 25
    mkdir -p .claude/skills/lead-quality-recommendation-prioritization curl -o .claude/skills/lead-quality-recommendation-prioritization/SKILL.md \
  • Network accessline 26
    curl -o .claude/skills/lead-quality-recommendation-prioritization/SKILL.md \
  • Network accessline 27
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/lead-quality-recommendation-prioritization/SKILL.md
  • Network accessline 38
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 40
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

markdown-to-sheets-presenter/README.md

  • Network accessline 29
    mkdir -p .claude/skills/markdown-to-sheets-presenter/scripts .claude/skills/markdown-to-sheets-presenter/templates .claude/skills/markdown-to-sheets-presenter/references for f in SKILL.md README.md SETUP.md rules.md examples.md; do   curl -
  • Network accessline 30
    for f in SKILL.md README.md SETUP.md rules.md examples.md; do   curl -o .claude/skills/markdown-to-sheets-presenter/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/markdown-to-sheets-presenter/$f
  • Network accessline 31
    curl -o .claude/skills/markdown-to-sheets-presenter/$f \
  • Network accessline 32
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/markdown-to-sheets-presenter/$f done curl -o .claude/skills/markdown-to-sheets-presenter/references/presentation-contract.md \
  • Network accessline 33
    done curl -o .claude/skills/markdown-to-sheets-presenter/references/presentation-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/markdown-to-sheets-presenter/references/presentation-contract.md
  • Network accessline 34
    curl -o .claude/skills/markdown-to-sheets-presenter/references/presentation-contract.md \
  • Network accessline 35
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/markdown-to-sheets-presenter/references/presentation-contract.md curl -o .claude/skills/markdown-to-sheets-presenter/scripts/create_spreadsheet.py \   https://raw.githubusercon
  • Network accessline 36
    curl -o .claude/skills/markdown-to-sheets-presenter/scripts/create_spreadsheet.py \
  • Network accessline 37
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/markdown-to-sheets-presenter/scripts/create_spreadsheet.py curl -o .claude/skills/markdown-to-sheets-presenter/templates/professional-blue-theme.json \   https://raw.githubuser
  • Network accessline 38
    curl -o .claude/skills/markdown-to-sheets-presenter/templates/professional-blue-theme.json \
  • Network accessline 39
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/markdown-to-sheets-presenter/templates/professional-blue-theme.json
  • Network accessline 52
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 54
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

markdown-to-sheets-presenter/SKILL.md

markdown-to-sheets-presenter/examples.md

  • Network accessline 29
    "id": "<spreadsheet-id>",   "name": "Gearline Auto Group - Competitive Analysis - 2026-07-31",   "webViewLink": "https://docs.google.com/spreadsheets/d/<spreadsheet-id>/edit"
  • Network accessline 30
    "name": "Gearline Auto Group - Competitive Analysis - 2026-07-31",   "webViewLink": "https://docs.google.com/spreadsheets/d/<spreadsheet-id>/edit" }
  • Network accessline 31
    "webViewLink": "https://docs.google.com/spreadsheets/d/<spreadsheet-id>/edit"
  • Network accessline 34
    Sheet URL: https://docs.google.com/spreadsheets/d/<spreadsheet-id>/edit

markdown-to-sheets-presenter/references/presentation-contract.md

  • Access to secretsline 68
    [Credential-related source omitted]

markdown-to-sheets-presenter/scripts/create_spreadsheet.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 60
    [Credential-related source omitted]
  • Network accessline 61
    [Credential-related source omitted]
  • Network accessline 62
    token_uri="https://oauth2.googleapis.com/token",
  • Network accessline 63
    [Credential-related source omitted]
  • Network accessline 64
    [Credential-related source omitted]
  • Access to secretsline 64
    [Credential-related source omitted]
  • Network accessline 65
    scopes=["https://www.googleapis.com/auth/spreadsheets"],

mcc-hack-audit/README.md

  • Network accessline 27
    mkdir -p .claude/skills/mcc-hack-audit/scripts .claude/skills/mcc-hack-audit/references for f in SKILL.md rules.md examples.md; do   curl -o .claude/skills/mcc-hack-audit/$f \
  • Network accessline 28
    for f in SKILL.md rules.md examples.md; do   curl -o .claude/skills/mcc-hack-audit/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/mcc-hack-audit/$f
  • Network accessline 29
    curl -o .claude/skills/mcc-hack-audit/$f \
  • Network accessline 30
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/mcc-hack-audit/$f done curl -o .claude/skills/mcc-hack-audit/references/scan-contract.md \
  • Network accessline 31
    done curl -o .claude/skills/mcc-hack-audit/references/scan-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/mcc-hack-audit/references/scan-contract.md
  • Network accessline 32
    curl -o .claude/skills/mcc-hack-audit/references/scan-contract.md \
  • Network accessline 33
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/mcc-hack-audit/references/scan-contract.md curl -o .claude/skills/mcc-hack-audit/scripts/mcc_hack_audit.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/m
  • Network accessline 34
    curl -o .claude/skills/mcc-hack-audit/scripts/mcc_hack_audit.py \
  • Network accessline 35
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/mcc-hack-audit/scripts/mcc_hack_audit.py
  • Network accessline 83
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 85
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

mcc-hack-audit/SKILL.md

mcc-hack-audit/scripts/mcc_hack_audit.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 293
    print(f"  Done: https://docs.google.com/spreadsheets/d/{sheet_id}")

mutation-safety/README.md

  • Network accessline 45
    The `.mmd` sources for both diagrams live in `diagrams/` — they're [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 46
    [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 91
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 93
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

mutation-safety/diagrams/README.md

  • Network accessline 3
    Diagram-as-code: the `.mmd` files are the source of truth; the SVGs are rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)
  • Network accessline 4
    rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)

mutation-safety/diagrams/run-logic.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1503.07px; background-color: rgb(10, 10, 15);" viewBox="0 0 1503.0653076171875 862.265625" role=

mutation-safety/diagrams/workflow-hero.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 914px; background-color: rgb(10, 10, 15);" viewBox="-50 -10 914 764" role="graphics-document document" aria-rolede

neg-conflict-finder/README.md

  • Network accessline 86
    This script is a derivative of Google's official Negative Keyword Conflict reference script (see Apache 2.0 license header in the source). Modifications by [Kurt Henninger](https://fourteenwebmedia.com):
  • Network accessline 114
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 116
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

neg-conflict-finder/scripts/mcc-neg-keyword-conflict.js

  • Executable scriptline 1
    Executable file
  • Network accessline 4
    *  *  Derivative work by Kurt Henninger / Fourteen Web Media  *  https://fourteenwebmedia.com  ·  https://github.com/fourteenwm/ppc-ai-skills
  • Network accessline 5
    *  Derivative work by Kurt Henninger / Fourteen Web Media  *  https://fourteenwebmedia.com  ·  https://github.com/fourteenwm/ppc-ai-skills  *
  • Network accessline 6
    *  https://fourteenwebmedia.com  ·  https://github.com/fourteenwm/ppc-ai-skills
  • Network accessline 25
    // You may obtain a copy of the License at // //     https://www.apache.org/licenses/LICENSE-2.0
  • Network accessline 26
    // //     https://www.apache.org/licenses/LICENSE-2.0 //
  • Network accessline 27
    //     https://www.apache.org/licenses/LICENSE-2.0

non-serving-keyword-scanner/README.md

  • Network accessline 25
    The `.mmd` sources for both diagrams live in `diagrams/` — they're [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 26
    [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 34
    mkdir -p .claude/skills/non-serving-keyword-scanner/scripts .claude/skills/non-serving-keyword-scanner/references curl -o .claude/skills/non-serving-keyword-scanner/SKILL.md \
  • Network accessline 35
    curl -o .claude/skills/non-serving-keyword-scanner/SKILL.md \
  • Network accessline 36
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/non-serving-keyword-scanner/SKILL.md curl -o .claude/skills/non-serving-keyword-scanner/scripts/non_serving_keyword_scan.py \   https://raw.githubusercontent.com/fourteenwm/ppc
  • Network accessline 37
    curl -o .claude/skills/non-serving-keyword-scanner/scripts/non_serving_keyword_scan.py \
  • Network accessline 38
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/non-serving-keyword-scanner/scripts/non_serving_keyword_scan.py curl -o .claude/skills/non-serving-keyword-scanner/accounts.example.md \   https://raw.githubusercontent.com/fou
  • Network accessline 39
    curl -o .claude/skills/non-serving-keyword-scanner/accounts.example.md \
  • Network accessline 40
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/non-serving-keyword-scanner/accounts.example.md curl -o .claude/skills/non-serving-keyword-scanner/rules.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/
  • Network accessline 41
    curl -o .claude/skills/non-serving-keyword-scanner/rules.md \
  • Network accessline 42
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/non-serving-keyword-scanner/rules.md curl -o .claude/skills/non-serving-keyword-scanner/examples.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/non-serv
  • Network accessline 43
    curl -o .claude/skills/non-serving-keyword-scanner/examples.md \
  • Network accessline 44
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/non-serving-keyword-scanner/examples.md curl -o .claude/skills/non-serving-keyword-scanner/references/scan-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-s
  • Network accessline 45
    curl -o .claude/skills/non-serving-keyword-scanner/references/scan-contract.md \
  • Network accessline 46
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/non-serving-keyword-scanner/references/scan-contract.md
  • Network accessline 68
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 70
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

non-serving-keyword-scanner/SKILL.md

non-serving-keyword-scanner/diagrams/README.md

  • Network accessline 3
    Diagram-as-code: the `.mmd` files are the source of truth; the SVGs are rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)
  • Network accessline 4
    rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)

non-serving-keyword-scanner/diagrams/run-logic.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1586.05px; background-color: rgb(10, 10, 15);" viewBox="0 0 1586.050048828125 762.484375" role="

non-serving-keyword-scanner/diagrams/workflow-hero.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 1196px; background-color: rgb(10, 10, 15);" viewBox="-50 -10 1196 701" role="graphics-document document" aria-role

non-serving-keyword-scanner/scripts/non_serving_keyword_scan.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 162
    Requires the refresh token in google-ads.yaml to include these scopes:         - https://www.googleapis.com/auth/spreadsheets
  • Network accessline 163
    - https://www.googleapis.com/auth/spreadsheets
  • Network accessline 164
    - https://www.googleapis.com/auth/drive.readonly
  • Network accessline 170
    [Credential-related source omitted]
  • Network accessline 171
    [Credential-related source omitted]
  • Network accessline 172
    token_uri="https://oauth2.googleapis.com/token",
  • Network accessline 174
    [Credential-related source omitted]
  • Access to secretsline 174
    [Credential-related source omitted]
  • Network accessline 175
    scopes=[             "https://www.googleapis.com/auth/spreadsheets",             "https://www.googleapis.com/auth/drive.readonly",
  • Network accessline 176
    "https://www.googleapis.com/auth/spreadsheets",
  • Network accessline 177
    "https://www.googleapis.com/auth/drive.readonly",
  • Network accessline 435
    raise         print(f"\nResults written to:")         print(f"https://docs.google.com/spreadsheets/d/{args.sheet_id}/edit")
  • Network accessline 436
    print(f"\nResults written to:")         print(f"https://docs.google.com/spreadsheets/d/{args.sheet_id}/edit")     else:
  • Network accessline 437
    print(f"https://docs.google.com/spreadsheets/d/{args.sheet_id}/edit")

pmax-asset-automation/README.md

  • Network accessline 27
    mkdir -p .claude/skills/pmax-asset-automation/scripts .claude/skills/pmax-asset-automation/references for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/pmax-asset-automation/$f \
  • Network accessline 28
    for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/pmax-asset-automation/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/$f
  • Network accessline 29
    curl -o .claude/skills/pmax-asset-automation/$f \
  • Network accessline 30
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/$f done curl -o .claude/skills/pmax-asset-automation/references/audit-contract.md \
  • Network accessline 31
    done curl -o .claude/skills/pmax-asset-automation/references/audit-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/references/audit-contract.md
  • Network accessline 32
    curl -o .claude/skills/pmax-asset-automation/references/audit-contract.md \
  • Network accessline 33
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/references/audit-contract.md curl -o .claude/skills/pmax-asset-automation/scripts/audit_pmax_asset_automation.py \   https://raw.githubusercontent.com/fou
  • Network accessline 34
    curl -o .claude/skills/pmax-asset-automation/scripts/audit_pmax_asset_automation.py \
  • Network accessline 35
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/scripts/audit_pmax_asset_automation.py
  • Network accessline 49
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 51
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

pmax-asset-automation/SKILL.md

  • Network accessline 134
    mkdir -p .claude/skills/pmax-asset-automation/scripts .claude/skills/pmax-asset-automation/references for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/pmax-asset-automation/$f \
  • Network accessline 135
    for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/pmax-asset-automation/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/$f
  • Network accessline 136
    curl -o .claude/skills/pmax-asset-automation/$f \
  • Network accessline 137
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/$f done curl -o .claude/skills/pmax-asset-automation/references/audit-contract.md \
  • Network accessline 138
    done curl -o .claude/skills/pmax-asset-automation/references/audit-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/references/audit-contract.md
  • Network accessline 139
    curl -o .claude/skills/pmax-asset-automation/references/audit-contract.md \
  • Network accessline 140
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/references/audit-contract.md curl -o .claude/skills/pmax-asset-automation/scripts/audit_pmax_asset_automation.py \   https://raw.githubusercontent.com/fou
  • Network accessline 141
    curl -o .claude/skills/pmax-asset-automation/scripts/audit_pmax_asset_automation.py \
  • Network accessline 142
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-asset-automation/scripts/audit_pmax_asset_automation.py

pmax-asset-automation/scripts/audit_pmax_asset_automation.py

  • Executable scriptline 1
    Executable file

pmax-builder/README.md

  • Network accessline 33
    mkdir -p .claude/skills/pmax-builder/scripts .claude/skills/pmax-builder/templates .claude/skills/pmax-builder/references for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/pmax-builder/$f \
  • Network accessline 34
    for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/pmax-builder/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/$f
  • Network accessline 35
    curl -o .claude/skills/pmax-builder/$f \
  • Network accessline 36
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/$f done curl -o .claude/skills/pmax-builder/references/build-contract.md \
  • Network accessline 37
    done curl -o .claude/skills/pmax-builder/references/build-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/references/build-contract.md
  • Network accessline 38
    curl -o .claude/skills/pmax-builder/references/build-contract.md \
  • Network accessline 39
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/references/build-contract.md curl -o .claude/skills/pmax-builder/scripts/build_pmax_csv.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax
  • Network accessline 40
    curl -o .claude/skills/pmax-builder/scripts/build_pmax_csv.py \
  • Network accessline 41
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/scripts/build_pmax_csv.py curl -o .claude/skills/pmax-builder/scripts/scrape_website_firecrawl.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/ma
  • Network accessline 42
    curl -o .claude/skills/pmax-builder/scripts/scrape_website_firecrawl.py \
  • Network accessline 43
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/scripts/scrape_website_firecrawl.py curl -o .claude/skills/pmax-builder/templates/campaign_settings.json \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-sk
  • Network accessline 44
    curl -o .claude/skills/pmax-builder/templates/campaign_settings.json \
  • Network accessline 45
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/templates/campaign_settings.json curl -o .claude/skills/pmax-builder/templates/search_themes.json \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/ma
  • Network accessline 46
    curl -o .claude/skills/pmax-builder/templates/search_themes.json \
  • Network accessline 47
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/templates/search_themes.json curl -o .claude/skills/pmax-builder/templates/audience_signals.json \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/mai
  • Network accessline 48
    curl -o .claude/skills/pmax-builder/templates/audience_signals.json \
  • Network accessline 49
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/templates/audience_signals.json curl -o .claude/skills/pmax-builder/templates/negative_locations.json \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skill
  • Network accessline 50
    curl -o .claude/skills/pmax-builder/templates/negative_locations.json \
  • Network accessline 51
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/pmax-builder/templates/negative_locations.json
  • Network accessline 65
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 67
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

pmax-builder/SKILL.md

  • Broad permissionsline 1
    Bash
  • Network accessline 170
    https://youtu.be/a8Nr45dNL50 -> a8Nr45dNL50
  • Network accessline 171
    https://youtu.be/GFIOY7vdf4k -> GFIOY7vdf4k
  • Network accessline 200
    python3 .claude/skills/pmax-builder/scripts/build_pmax_csv.py      --campaign-name "Pmax: Acme Plumbing"      --asset-group-name "General"      --business-name "Acme Plumbing"      --final-url "https://www.acmeplumbing.com/"
  • Network accessline 202
    --asset-group-name "General" \     --business-name "Acme Plumbing" \     --final-url "https://www.acmeplumbing.com/" \
  • Network accessline 203
    --business-name "Acme Plumbing" \     --final-url "https://www.acmeplumbing.com/" \     --city "Dallas" --state "TX" \
  • Network accessline 204
    --final-url "https://www.acmeplumbing.com/" \

pmax-builder/examples.md

  • Network accessline 24
    One root, and it isn't the guessed one — `lindenmoor.com` would have built the campaign against a domain Search has never used. `--final-url` will be `https://www.lindenmoorflats.com/`.
  • Network accessline 26
    `https://www.lindenmoorflats.com/`.
  • Network accessline 31
    python3 .claude/skills/pmax-builder/scripts/build_pmax_csv.py      --campaign-name "Pmax: Lindenmoor Flats"      --business-name "Lindenmoor Flats"      --final-url "https://www.lindenmoorflats.com/"
  • Network accessline 33
    --business-name "Lindenmoor Flats" \     --final-url "https://www.lindenmoorflats.com/" \
  • Network accessline 34
    --final-url "https://www.lindenmoorflats.com/" \
  • Network accessline 62
    Asset Group: General   Business: Lindenmoor Flats   URL: https://www.lindenmoorflats.com/
  • Network accessline 63
    Business: Lindenmoor Flats   URL: https://www.lindenmoorflats.com/   Location: Columbus, OH (40mi radius)
  • Network accessline 64
    URL: https://www.lindenmoorflats.com/
  • Network accessline 117
    python3 .claude/skills/pmax-builder/scripts/build_pmax_csv.py      --campaign-name "Pmax: Gearline Auto Repair"      --business-name "Gearline Auto Repair"      --final-url "https://www.gearlineauto.com/"
  • Network accessline 119
    --business-name "Gearline Auto Repair" \     --final-url "https://www.gearlineauto.com/" \
  • Network accessline 120
    --final-url "https://www.gearlineauto.com/" \
  • Network accessline 125
    --long-headlines "Full Service Auto Repair Shop in Mesa|..." \     --descriptions "Family owned auto repair.|..." \     --video-ids "https://youtube.com/shorts/Xy7zAbCdEfg|aB3dEfGhIjk" \
  • Network accessline 126
    --descriptions "Family owned auto repair.|..." \     --video-ids "https://youtube.com/shorts/Xy7zAbCdEfg|aB3dEfGhIjk" \     --remarketing-segments "Gearline Auto Repair;All visitors (AdWords);All Users of 12345 | Gearline - BLP" \
  • Network accessline 127
    --video-ids "https://youtube.com/shorts/Xy7zAbCdEfg|aB3dEfGhIjk" \
  • Network accessline 152
    `/shorts/` URL matches nothing and passes through **verbatim**. The rule-4 spot-check of the asset-group row finds the entire string `https://youtube.com/shorts/Xy7zAbCdEfg` sitting in the Video ID 1 column.
  • Network accessline 153
    spot-check of the asset-group row finds the entire string `https://youtube.com/shorts/Xy7zAbCdEfg` sitting in the Video ID 1 column. Re-run with the bare 11-character ID (`Xy7zAbCdEfg`) — the console looks
  • Network accessline 154
    `https://youtube.com/shorts/Xy7zAbCdEfg` sitting in the Video ID 1 column.

pmax-builder/scripts/build_pmax_csv.py

  • Executable scriptline 1
    Executable file
  • Network accessline 11
    python build_pmax_csv.py          --campaign-name "Pmax: Acme Plumbing"          --business-name "Acme Plumbing"          --final-url "https://www.acmeplumbing.com/"
  • Network accessline 12
    --campaign-name "Pmax: Acme Plumbing" \         --business-name "Acme Plumbing" \         --final-url "https://www.acmeplumbing.com/" \
  • Network accessline 13
    --business-name "Acme Plumbing" \         --final-url "https://www.acmeplumbing.com/" \         --city "Dallas" --state "TX" \
  • Network accessline 14
    --final-url "https://www.acmeplumbing.com/" \
  • Network accessline 23
    python build_pmax_csv.py          --campaign-name "Pmax: Acme Plumbing"          --business-name "Acme Plumbing"          --final-url "https://www.acmeplumbing.com/"
  • Network accessline 24
    --campaign-name "Pmax: Acme Plumbing" \         --business-name "Acme Plumbing" \         --final-url "https://www.acmeplumbing.com/" \
  • Network accessline 25
    --business-name "Acme Plumbing" \         --final-url "https://www.acmeplumbing.com/" \         --city "Dallas" --state "TX" \
  • Network accessline 26
    --final-url "https://www.acmeplumbing.com/" \
  • Network accessline 137
    in google-ads.yaml must include these scopes — the google-ads-api-setup     generator grants them by default:         - https://www.googleapis.com/auth/spreadsheets
  • Network accessline 138
    generator grants them by default:         - https://www.googleapis.com/auth/spreadsheets         - https://www.googleapis.com/auth/drive.readonly
  • Network accessline 139
    - https://www.googleapis.com/auth/spreadsheets
  • Network accessline 140
    - https://www.googleapis.com/auth/drive.readonly
  • Network accessline 155
    [Credential-related source omitted]
  • Network accessline 156
    [Credential-related source omitted]
  • Network accessline 157
    token_uri="https://oauth2.googleapis.com/token",
  • Network accessline 159
    [Credential-related source omitted]
  • Access to secretsline 159
    [Credential-related source omitted]
  • Network accessline 160
    scopes=[             "https://www.googleapis.com/auth/spreadsheets",             "https://www.googleapis.com/auth/drive.readonly",
  • Network accessline 161
    "https://www.googleapis.com/auth/spreadsheets",
  • Network accessline 162
    "https://www.googleapis.com/auth/drive.readonly",

pmax-builder/scripts/scrape_website_firecrawl.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 8
    Usage:     python scrape_website_firecrawl.py --url https://example.com
  • Network accessline 9
    python scrape_website_firecrawl.py --url https://example.com
  • Network accessline 10
    python scrape_website_firecrawl.py --url https://example.com --output scrape.json
  • Network accessline 11
    python scrape_website_firecrawl.py --url https://example.com \
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 55
    [Credential-related source omitted]
  • Access to secretsline 57
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]

portfolio-health-prioritization/README.md

  • Network accessline 25
    The `.mmd` sources for both diagrams live in `diagrams/` — they're [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 26
    [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 34
    mkdir -p .claude/skills/portfolio-health-prioritization curl -o .claude/skills/portfolio-health-prioritization/SKILL.md \
  • Network accessline 35
    curl -o .claude/skills/portfolio-health-prioritization/SKILL.md \
  • Network accessline 36
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/portfolio-health-prioritization/SKILL.md
  • Network accessline 47
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 49
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

portfolio-health-prioritization/diagrams/README.md

  • Network accessline 3
    Diagram-as-code: the `.mmd` files are the source of truth; the SVGs are rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)
  • Network accessline 4
    rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)

portfolio-health-prioritization/diagrams/run-logic.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1969.32px; background-color: rgb(10, 10, 15);" viewBox="0 0 1969.3221435546875 1129.296875" role

portfolio-health-prioritization/diagrams/workflow-hero.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 815.5px; background-color: rgb(10, 10, 15);" viewBox="-51 -10 815.5 639" role="graphics-document document" aria-ro

portfolio-pacing-rules/README.md

  • Network accessline 25
    mkdir -p .claude/skills/portfolio-pacing-rules curl -o .claude/skills/portfolio-pacing-rules/SKILL.md \
  • Network accessline 26
    curl -o .claude/skills/portfolio-pacing-rules/SKILL.md \
  • Network accessline 27
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/portfolio-pacing-rules/SKILL.md
  • Network accessline 38
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 40
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

rsa-bulk-edit/README.md

  • Network accessline 25
    mkdir -p .claude/skills/rsa-bulk-edit/scripts .claude/skills/rsa-bulk-edit/references curl -o .claude/skills/rsa-bulk-edit/SKILL.md \
  • Network accessline 26
    curl -o .claude/skills/rsa-bulk-edit/SKILL.md \
  • Network accessline 27
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-bulk-edit/SKILL.md curl -o .claude/skills/rsa-bulk-edit/rules.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-bulk-edit/rules.md
  • Network accessline 28
    curl -o .claude/skills/rsa-bulk-edit/rules.md \
  • Network accessline 29
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-bulk-edit/rules.md curl -o .claude/skills/rsa-bulk-edit/examples.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-bulk-edit/examples.md
  • Network accessline 30
    curl -o .claude/skills/rsa-bulk-edit/examples.md \
  • Network accessline 31
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-bulk-edit/examples.md curl -o .claude/skills/rsa-bulk-edit/references/edit-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-bulk-edit/ref
  • Network accessline 32
    curl -o .claude/skills/rsa-bulk-edit/references/edit-contract.md \
  • Network accessline 33
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-bulk-edit/references/edit-contract.md curl -o .claude/skills/rsa-bulk-edit/scripts/rsa_bulk_edit.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-
  • Network accessline 34
    curl -o .claude/skills/rsa-bulk-edit/scripts/rsa_bulk_edit.py \
  • Network accessline 35
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-bulk-edit/scripts/rsa_bulk_edit.py
  • Network accessline 57
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 59
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

rsa-bulk-edit/SKILL.md

rsa-bulk-edit/scripts/rsa_bulk_edit.py

  • Executable scriptline 1
    Executable file
  • Network accessline 151
    [Credential-related source omitted]
  • Network accessline 152
    [Credential-related source omitted]
  • Network accessline 153
    token_uri="https://oauth2.googleapis.com/token",
  • Network accessline 154
    [Credential-related source omitted]
  • Network accessline 155
    [Credential-related source omitted]
  • Access to secretsline 155
    [Credential-related source omitted]
  • Network accessline 156
    scopes=["https://www.googleapis.com/auth/spreadsheets"],
  • Network accessline 249
    elif args.sheet_id:         write_to_sheet(rows, args.sheet_id, args.tab_name)         print(f"\nSheet updated: https://docs.google.com/spreadsheets/d/{args.sheet_id}")
  • Network accessline 250
    write_to_sheet(rows, args.sheet_id, args.tab_name)         print(f"\nSheet updated: https://docs.google.com/spreadsheets/d/{args.sheet_id}")     else:
  • Network accessline 251
    print(f"\nSheet updated: https://docs.google.com/spreadsheets/d/{args.sheet_id}")

rsa-refresh/README.md

  • Network accessline 26
    mkdir -p .claude/skills/rsa-refresh/scripts .claude/skills/rsa-refresh/references curl -o .claude/skills/rsa-refresh/SKILL.md \
  • Network accessline 27
    curl -o .claude/skills/rsa-refresh/SKILL.md \
  • Network accessline 28
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/SKILL.md curl -o .claude/skills/rsa-refresh/rules.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/rules.md
  • Network accessline 29
    curl -o .claude/skills/rsa-refresh/rules.md \
  • Network accessline 30
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/rules.md curl -o .claude/skills/rsa-refresh/examples.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/examples.md
  • Network accessline 31
    curl -o .claude/skills/rsa-refresh/examples.md \
  • Network accessline 32
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/examples.md curl -o .claude/skills/rsa-refresh/scripts/rsa_refresh_generator.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/scri
  • Network accessline 33
    curl -o .claude/skills/rsa-refresh/scripts/rsa_refresh_generator.py \
  • Network accessline 34
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/scripts/rsa_refresh_generator.py curl -o .claude/skills/rsa-refresh/scripts/rsa_baseline_snapshot.py \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/
  • Network accessline 35
    curl -o .claude/skills/rsa-refresh/scripts/rsa_baseline_snapshot.py \
  • Network accessline 36
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/scripts/rsa_baseline_snapshot.py curl -o .claude/skills/rsa-refresh/references/refresh-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/ma
  • Network accessline 37
    curl -o .claude/skills/rsa-refresh/references/refresh-contract.md \
  • Network accessline 38
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/references/refresh-contract.md curl -o .claude/skills/rsa-refresh/references/pm-headline-structure.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills
  • Network accessline 39
    curl -o .claude/skills/rsa-refresh/references/pm-headline-structure.md \
  • Network accessline 40
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/references/pm-headline-structure.md curl -o .claude/skills/rsa-refresh/references/description-voice-lifting.md \   https://raw.githubusercontent.com/fourteenwm/ppc-
  • Network accessline 41
    curl -o .claude/skills/rsa-refresh/references/description-voice-lifting.md \
  • Network accessline 42
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/references/description-voice-lifting.md curl -o .claude/skills/rsa-refresh/references/hallucination-filter.md \   https://raw.githubusercontent.com/fourteenwm/ppc-a
  • Network accessline 43
    curl -o .claude/skills/rsa-refresh/references/hallucination-filter.md \
  • Network accessline 44
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-refresh/references/hallucination-filter.md
  • Access to secretsline 55
    [Credential-related source omitted]
  • Network accessline 71
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 73
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

rsa-refresh/SKILL.md

  • Access to secretsline 140
    [Credential-related source omitted]

rsa-refresh/examples.md

  • Network accessline 24
    Querying asset performance labels... ... Scraping property website with Firecrawl: https://www.fernbrook-flats.example.com
  • Network accessline 25
    ... Scraping property website with Firecrawl: https://www.fernbrook-flats.example.com Firecrawl scraped 11482 characters
  • Network accessline 26
    Scraping property website with Firecrawl: https://www.fernbrook-flats.example.com
  • Network accessline 74
    WARNING: All scraping methods failed for https://apply.leasehub.example.com/larkfield-commons - headlines will be generic only

rsa-refresh/references/refresh-contract.md

  • Access to secretsline 120
    [Credential-related source omitted]
  • Access to secretsline 151
    [Credential-related source omitted]

rsa-refresh/scripts/rsa_baseline_snapshot.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 445
    [Credential-related source omitted]
  • Network accessline 446
    [Credential-related source omitted]
  • Network accessline 447
    token_uri="https://oauth2.googleapis.com/token",
  • Network accessline 449
    [Credential-related source omitted]
  • Access to secretsline 449
    [Credential-related source omitted]
  • Network accessline 450
    scopes=[                 "https://www.googleapis.com/auth/spreadsheets",                 "https://www.googleapis.com/auth/drive.readonly",
  • Network accessline 451
    "https://www.googleapis.com/auth/spreadsheets",
  • Network accessline 452
    "https://www.googleapis.com/auth/drive.readonly",
  • Access to secretsline 458
    [Credential-related source omitted]
  • Access to secretsline 460
    [Credential-related source omitted]
  • Access to secretsline 464
    [Credential-related source omitted]
  • Network accessline 467
    [Credential-related source omitted]
  • Access to secretsline 467
    [Credential-related source omitted]
  • Network accessline 468
    [Credential-related source omitted]
  • Network accessline 469
    token_uri=token_data.get('token_uri', "https://oauth2.googleapis.com/token"),
  • Network accessline 470
    [Credential-related source omitted]
  • Network accessline 471
    [Credential-related source omitted]
  • Access to secretsline 471
    [Credential-related source omitted]
  • Network accessline 472
    scopes=token_data.get('scopes', ["https://www.googleapis.com/auth/spreadsheets"]),
  • Network accessline 556
    url = f"https://docs.google.com/spreadsheets/d/{sheet_id}"

rsa-refresh/scripts/rsa_refresh_generator.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 30
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 71
    [Credential-related source omitted]
  • Access to secretsline 88
    [Credential-related source omitted]
  • Access to secretsline 382
    [Credential-related source omitted]
  • Access to secretsline 383
    [Credential-related source omitted]
  • Access to secretsline 387
    [Credential-related source omitted]
  • Network accessline 446
    response = requests.get(url, headers=headers, timeout=30)
  • Network accessline 898
    [Credential-related source omitted]
  • Network accessline 899
    [Credential-related source omitted]
  • Network accessline 900
    token_uri="https://oauth2.googleapis.com/token",
  • Network accessline 902
    [Credential-related source omitted]
  • Access to secretsline 902
    [Credential-related source omitted]
  • Network accessline 903
    scopes=[                 "https://www.googleapis.com/auth/spreadsheets",                 "https://www.googleapis.com/auth/drive.readonly",
  • Network accessline 904
    "https://www.googleapis.com/auth/spreadsheets",
  • Network accessline 905
    "https://www.googleapis.com/auth/drive.readonly",
  • Access to secretsline 911
    [Credential-related source omitted]
  • Access to secretsline 913
    [Credential-related source omitted]
  • Access to secretsline 917
    [Credential-related source omitted]
  • Network accessline 920
    [Credential-related source omitted]
  • Access to secretsline 920
    [Credential-related source omitted]
  • Network accessline 921
    [Credential-related source omitted]
  • Network accessline 922
    token_uri=token_data.get('token_uri', "https://oauth2.googleapis.com/token"),
  • Network accessline 923
    [Credential-related source omitted]
  • Network accessline 924
    [Credential-related source omitted]
  • Access to secretsline 924
    [Credential-related source omitted]
  • Network accessline 925
    scopes=token_data.get('scopes', ["https://www.googleapis.com/auth/spreadsheets"]),
  • Network accessline 1059
    return f"https://docs.google.com/spreadsheets/d/{sheet_id}"

rsa-single-account/README.md

  • Network accessline 26
    mkdir -p .claude/skills/rsa-single-account/scripts .claude/skills/rsa-single-account/references for f in SKILL.md README.md rules.md examples.md; do   curl -o ".claude/skills/rsa-single-account/$f" \
  • Network accessline 27
    for f in SKILL.md README.md rules.md examples.md; do   curl -o ".claude/skills/rsa-single-account/$f" \     "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-single-account/$f"
  • Network accessline 28
    curl -o ".claude/skills/rsa-single-account/$f" \
  • Network accessline 29
    "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-single-account/$f" done curl -o .claude/skills/rsa-single-account/references/pipeline-contract.md \
  • Network accessline 30
    done curl -o .claude/skills/rsa-single-account/references/pipeline-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-single-account/references/pipeline-contract.md
  • Network accessline 31
    curl -o .claude/skills/rsa-single-account/references/pipeline-contract.md \
  • Network accessline 32
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-single-account/references/pipeline-contract.md
  • Network accessline 35
    scrape_website_firecrawl.py get_gmb_reviews.py write_rsa_to_sheet.py \          vertical_configs.json; do   curl -o ".claude/skills/rsa-single-account/scripts/$f" \
  • Network accessline 36
    vertical_configs.json; do   curl -o ".claude/skills/rsa-single-account/scripts/$f" \     "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-single-account/scripts/$f"
  • Network accessline 37
    curl -o ".claude/skills/rsa-single-account/scripts/$f" \
  • Network accessline 38
    "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/rsa-single-account/scripts/$f"
  • Network accessline 41
    # Step 7 invokes two companion skills (both in this repo) — install their operative files: mkdir -p .claude/skills/ad-copy-verification-standard .claude/skills/ad-copy-generation-framework curl -o .claude/skills/ad-copy-verification-standar
  • Network accessline 42
    mkdir -p .claude/skills/ad-copy-verification-standard .claude/skills/ad-copy-generation-framework curl -o .claude/skills/ad-copy-verification-standard/SKILL.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ad-copy-veri
  • Network accessline 43
    curl -o .claude/skills/ad-copy-verification-standard/SKILL.md \
  • Network accessline 44
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ad-copy-verification-standard/SKILL.md for f in SKILL.md framework.md distribution.md technical-specs.md examples.md; do   curl -o ".claude/skills/ad-copy-generation-framework/
  • Network accessline 45
    for f in SKILL.md framework.md distribution.md technical-specs.md examples.md; do   curl -o ".claude/skills/ad-copy-generation-framework/$f" \     "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ad-copy-generation-framework
  • Network accessline 46
    curl -o ".claude/skills/ad-copy-generation-framework/$f" \
  • Network accessline 47
    "https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ad-copy-generation-framework/$f"
  • Access to secretsline 67
    [Credential-related source omitted]
  • Network accessline 131
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 133
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

rsa-single-account/SKILL.md

  • Broad permissionsline 1
    Bash
  • Access to secretsline 49
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 51
    [Credential-related source omitted]
  • Access to secretsline 73
    [Credential-related source omitted]
  • Access to secretsline 81
    [Credential-related source omitted]
  • Access to secretsline 89
    [Credential-related source omitted]

rsa-single-account/references/pipeline-contract.md

  • Network accessline 57
    **unique URL** (`url.split('/')[2]`), and the max prints as `{domain} ({count} ads)` — the label says "ads" but the number is unique URLs on that domain. `Primary website likely: https://{domain}` is a vote over at most 10 ads' URLs,
  • Network accessline 58
    `{domain} ({count} ads)` — the label says "ads" but the number is unique URLs on that domain. `Primary website likely: https://{domain}` is a vote over at most 10 ads' URLs, paused campaigns included — verify it is really the client's site 
  • Network accessline 59
    domain. `Primary website likely: https://{domain}` is a vote over at most 10 ads' URLs,
  • Access to secretsline 110
    [Credential-related source omitted]

rsa-single-account/rules.md

  • Access to secretsline 41
    [Credential-related source omitted]

rsa-single-account/scripts/analyze_competitors_for_rsa.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 25
    [Credential-related source omitted]
  • Access to secretsline 48
    [Credential-related source omitted]
  • Access to secretsline 55
    [Credential-related source omitted]
  • Access to secretsline 56
    [Credential-related source omitted]
  • Access to secretsline 57
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Access to secretsline 61
    [Credential-related source omitted]
  • Access to secretsline 148
    [Credential-related source omitted]
  • Access to secretsline 149
    [Credential-related source omitted]
  • Access to secretsline 159
    [Credential-related source omitted]

rsa-single-account/scripts/check_active_accounts.py

  • Executable scriptline 1
    #!/usr/bin/env python3

rsa-single-account/scripts/get_account_website_url.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 149
    most_common = max(domains.items(), key=lambda x: x[1])                 print(f"  {most_common[0]} ({most_common[1]} ads)")                 print(f"  Primary website likely: https://{most_common[0]}")
  • Network accessline 150
    print(f"  {most_common[0]} ({most_common[1]} ads)")                 print(f"  Primary website likely: https://{most_common[0]}")     except Exception as e:
  • Network accessline 151
    print(f"  Primary website likely: https://{most_common[0]}")

rsa-single-account/scripts/get_gmb_reviews.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 39
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 48
    [Credential-related source omitted]
  • Access to secretsline 49
    [Credential-related source omitted]
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 68
    [Credential-related source omitted]
  • Access to secretsline 70
    [Credential-related source omitted]
  • Access to secretsline 71
    [Credential-related source omitted]
  • Access to secretsline 85
    [Credential-related source omitted]

rsa-single-account/scripts/get_search_campaign_structure.py

  • Executable scriptline 1
    #!/usr/bin/env python3

rsa-single-account/scripts/scrape_website_firecrawl.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 16
    [Credential-related source omitted]
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 43
    [Credential-related source omitted]
  • Access to secretsline 77
    [Credential-related source omitted]
  • Access to secretsline 78
    [Credential-related source omitted]
  • Access to secretsline 79
    [Credential-related source omitted]
  • Access to secretsline 80
    [Credential-related source omitted]
  • Access to secretsline 82
    [Credential-related source omitted]
  • Access to secretsline 193
    [Credential-related source omitted]
  • Access to secretsline 194
    [Credential-related source omitted]
  • Access to secretsline 195
    [Credential-related source omitted]
  • Access to secretsline 196
    [Credential-related source omitted]
  • Access to secretsline 198
    [Credential-related source omitted]

rsa-single-account/scripts/write_rsa_to_sheet.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 16
    Usage:     python write_rsa_to_sheet.py --sheet-id <YOUR_RSA_SHEET_ID> rsa_data.json     python write_rsa_to_sheet.py --sheet-id "https://docs.google.com/spreadsheets/d/<ID>/edit" rsa_data.json
  • Network accessline 18
    python write_rsa_to_sheet.py --sheet-id "https://docs.google.com/spreadsheets/d/<ID>/edit" rsa_data.json
  • Network accessline 57
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
  • Access to secretsline 97
    [Credential-related source omitted]
  • Access to secretsline 98
    [Credential-related source omitted]
  • Access to secretsline 99
    [Credential-related source omitted]
  • Network accessline 103
    [Credential-related source omitted]
  • Network accessline 104
    [Credential-related source omitted]
  • Network accessline 105
    token_uri='https://oauth2.googleapis.com/token',
  • Access to secretsline 107
    [Credential-related source omitted]
  • Network accessline 177
    print(f"[SUCCESS] Successfully wrote to Google Sheet")         return f"https://docs.google.com/spreadsheets/d/{sheet_id}/edit"
  • Network accessline 178
    return f"https://docs.google.com/spreadsheets/d/{sheet_id}/edit"

shared-budget-updater/.github/workflows/shared-budget-updater.yml

  • Dangerous shell operationline 43
    run: rm -f /tmp/sheets-token.json /tmp/google-ads.yaml
  • Network accessline 46
    if: failure()         run: |           curl -s -X POST "$SLACK_WEBHOOK_URL" \
  • Network accessline 47
    run: |           curl -s -X POST "$SLACK_WEBHOOK_URL" \             -H 'Content-Type: application/json' \
  • Network accessline 48
    curl -s -X POST "$SLACK_WEBHOOK_URL" \

shared-budget-updater/README.md

  • Network accessline 35
    The `.mmd` sources for both diagrams live in `diagrams/` — they're [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 36
    [Mermaid](https://mermaid.js.org/) diagram-as-code, rendered with the included
  • Network accessline 53
    - Apply for a developer token on your MCC ([instructions](https://developers.google.com/google-ads/api/docs/get-started/dev-token))
  • Access to secretsline 62
    [Credential-related source omitted]
  • Network accessline 79
    2. Enable the Google Sheets API 3. Create an OAuth client (Desktop type) 4. Run the [Google OAuth playground](https://developers.google.com/oauthplayground/)
  • Network accessline 80
    3. Create an OAuth client (Desktop type) 4. Run the [Google OAuth playground](https://developers.google.com/oauthplayground/)    with scope `https://www.googleapis.com/auth/spreadsheets`
  • Network accessline 81
    4. Run the [Google OAuth playground](https://developers.google.com/oauthplayground/)
  • Network accessline 82
    with scope `https://www.googleapis.com/auth/spreadsheets`
  • Network accessline 89
    [Credential-related source omitted]
  • Network accessline 90
    [Credential-related source omitted]
  • Network accessline 91
    "token_uri": "https://oauth2.googleapis.com/token",
  • Network accessline 92
    [Credential-related source omitted]
  • Network accessline 93
    [Credential-related source omitted]
  • Access to secretsline 93
    [Credential-related source omitted]
  • Network accessline 94
    "scopes": ["https://www.googleapis.com/auth/spreadsheets"]
  • Network accessline 111
    Grab the sheet ID from the URL: `https://docs.google.com/spreadsheets/d/<THIS_IS_THE_ID>/edit`
  • Network accessline 112
    `https://docs.google.com/spreadsheets/d/<THIS_IS_THE_ID>/edit`
  • Network accessline 119
    1. Go to `https://api.slack.com/apps` → **Create New App** → **From scratch**
  • Network accessline 130
    curl -X POST -H 'Content-Type: application/json' \
  • Network accessline 268
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 270
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

shared-budget-updater/SKILL.md

shared-budget-updater/diagrams/README.md

  • Network accessline 3
    Diagram-as-code: the `.mmd` files are the source of truth; the SVGs are rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)
  • Network accessline 4
    rendered from them with [mermaid-cli](https://github.com/mermaid-js/mermaid-cli)

shared-budget-updater/diagrams/run-logic.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1557.9px; background-color: rgb(10, 10, 15);" viewBox="0 0 1557.9033203125 840.703125" role="gra

shared-budget-updater/diagrams/workflow-hero.svg

  • Network accessline 1
    <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 1683px; background-color: rgb(10, 10, 15);" viewBox="-50 -10 1683 749" role="graphics-document document" aria-role

shared-budget-updater/workflows/__init__.py

  • Executable scriptline 1
    Executable file

shared-budget-updater/workflows/_shared/__init__.py

  • Executable scriptline 1
    Executable file

shared-budget-updater/workflows/_shared/google_ads_auth.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 10
    [Credential-related source omitted]
  • Network accessline 21
    TOKEN_URI = "https://oauth2.googleapis.com/token"
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Access to secretsline 52
    [Credential-related source omitted]

shared-budget-updater/workflows/_shared/google_auth.py

  • Executable scriptline 1
    Executable file
  • Network accessline 13
    SCOPES = ["https://www.googleapis.com/auth/spreadsheets"]
  • Access to secretsline 18
    [Credential-related source omitted]

shared-budget-updater/workflows/_shared/mutate_error_hints.py

  • Executable scriptline 1
    Executable file

shared-budget-updater/workflows/_shared/sheets_retry.py

  • Executable scriptline 1
    Executable file

shared-budget-updater/workflows/shared_budget_updater/__init__.py

  • Executable scriptline 1
    Executable file

shared-budget-updater/workflows/shared_budget_updater/ads_api.py

  • Executable scriptline 1
    Executable file
  • Network accessline 10
    ADS_API_VERSION = "v23" ADS_BASE_URL = f"https://googleads.googleapis.com/{ADS_API_VERSION}"
  • Network accessline 11
    ADS_BASE_URL = f"https://googleads.googleapis.com/{ADS_API_VERSION}"
  • Access to secretsline 76
    [Credential-related source omitted]
  • Access to secretsline 88
    [Credential-related source omitted]
  • Network accessline 108
    for attempt in range(1, MAX_RETRIES + 1):         try:             resp = requests.post(url, json=body, headers=headers, timeout=REQUEST_TIMEOUT)
  • Network accessline 109
    try:             resp = requests.post(url, json=body, headers=headers, timeout=REQUEST_TIMEOUT)             last_resp = resp
  • Network accessline 110
    resp = requests.post(url, json=body, headers=headers, timeout=REQUEST_TIMEOUT)

shared-budget-updater/workflows/shared_budget_updater/main.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 60
    [Credential-related source omitted]
  • Access to secretsline 138
    [Credential-related source omitted]

shared-budget-updater/workflows/shared_budget_updater/sheets_io.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 10
    [Credential-related source omitted]
  • Access to secretsline 13
    [Credential-related source omitted]

shared-budget-updater/workflows/shared_budget_updater/slack.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 20
    [Credential-related source omitted]
  • Network accessline 25
    payload = {"text": text, "blocks": blocks}     resp = requests.post(
  • Network accessline 26
    resp = requests.post(

sqr-classifier/README.md

  • Network accessline 90
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 92
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

sqr-pipeline/README.md

  • Network accessline 62
    MCC. See the [`google-ads-api-setup`](../google-ads-api-setup/) skill. 2. **Google Sheets access** — a `token.json` at your project root with the    `https://www.googleapis.com/auth/spreadsheets` scope (the same OAuth flow can
  • Network accessline 63
    2. **Google Sheets access** — a `token.json` at your project root with the    `https://www.googleapis.com/auth/spreadsheets` scope (the same OAuth flow can    mint it), or a `google-ads.yaml` refresh token that already includes that scope.
  • Network accessline 64
    `https://www.googleapis.com/auth/spreadsheets` scope (the same OAuth flow can
  • Network accessline 77
    mkdir -p .claude/skills/sqr-pipeline/scripts .claude/skills/sqr-pipeline/references BASE=https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/sqr-pipeline
  • Network accessline 78
    BASE=https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/sqr-pipeline
  • Network accessline 80
    for f in SKILL.md README.md sheet-template.md; do   curl -o .claude/skills/sqr-pipeline/$f $BASE/$f
  • Network accessline 81
    curl -o .claude/skills/sqr-pipeline/$f $BASE/$f
  • Network accessline 84
    sqr_compare.py sqr_ngram_analysis.py sqr_upload_negatives.py \          sqr_remove_negatives.py; do   curl -o .claude/skills/sqr-pipeline/scripts/$f $BASE/scripts/$f
  • Network accessline 85
    sqr_remove_negatives.py; do   curl -o .claude/skills/sqr-pipeline/scripts/$f $BASE/scripts/$f done
  • Network accessline 86
    curl -o .claude/skills/sqr-pipeline/scripts/$f $BASE/scripts/$f
  • Network accessline 87
    done for f in classify-prompt.md geo-prompt.md offbrand-keywords.txt; do   curl -o .claude/skills/sqr-pipeline/references/$f $BASE/references/$f
  • Network accessline 88
    for f in classify-prompt.md geo-prompt.md offbrand-keywords.txt; do   curl -o .claude/skills/sqr-pipeline/references/$f $BASE/references/$f done
  • Network accessline 89
    curl -o .claude/skills/sqr-pipeline/references/$f $BASE/references/$f
  • Network accessline 108
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 110
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

sqr-pipeline/SKILL.md

sqr-pipeline/scripts/mcc_search_query_report.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 66
    [Credential-related source omitted]
  • Access to secretsline 66
    [Credential-related source omitted]
  • Network accessline 67
    [Credential-related source omitted]
  • Network accessline 68
    token_uri=token_data.get('token_uri', "https://oauth2.googleapis.com/token"),
  • Network accessline 69
    [Credential-related source omitted]
  • Network accessline 70
    [Credential-related source omitted]
  • Access to secretsline 70
    [Credential-related source omitted]
  • Network accessline 71
    scopes=token_data.get('scopes', ["https://www.googleapis.com/auth/spreadsheets"]),
  • Network accessline 77
    [Credential-related source omitted]
  • Network accessline 78
    [Credential-related source omitted]
  • Network accessline 79
    token_uri="https://oauth2.googleapis.com/token",
  • Network accessline 80
    [Credential-related source omitted]
  • Network accessline 81
    [Credential-related source omitted]
  • Access to secretsline 81
    [Credential-related source omitted]
  • Network accessline 82
    scopes=["https://www.googleapis.com/auth/spreadsheets"],

sqr-pipeline/scripts/prep_geo_batches.py

  • Executable scriptline 1
    #!/usr/bin/env python3

sqr-pipeline/scripts/sqr_compare.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 64
    creds = Credentials.from_authorized_user_file(         str(SHEETS_TOKEN_PATH),         scopes=["https://www.googleapis.com/auth/spreadsheets"]
  • Network accessline 65
    str(SHEETS_TOKEN_PATH),         scopes=["https://www.googleapis.com/auth/spreadsheets"]     )
  • Network accessline 66
    scopes=["https://www.googleapis.com/auth/spreadsheets"]
  • Network accessline 462
    print(f"  2-3 Agree: {len(rows_23)} queries (majority NEGATE)")     print(f"  Total:     {len(rows_33) + len(rows_23)} NEGATE candidates")     print(f"\n  Sheet: https://docs.google.com/spreadsheets/d/{args.sheet_id}")
  • Network accessline 463
    print(f"  Total:     {len(rows_33) + len(rows_23)} NEGATE candidates")     print(f"\n  Sheet: https://docs.google.com/spreadsheets/d/{args.sheet_id}")     print(f"\nNEXT STEPS:")
  • Network accessline 464
    print(f"\n  Sheet: https://docs.google.com/spreadsheets/d/{args.sheet_id}")

sqr-pipeline/scripts/sqr_ngram_analysis.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 58
    )     creds = Credentials.from_authorized_user_file(         str(SHEETS_TOKEN_PATH), scopes=["https://www.googleapis.com/auth/spreadsheets"]
  • Network accessline 59
    creds = Credentials.from_authorized_user_file(         str(SHEETS_TOKEN_PATH), scopes=["https://www.googleapis.com/auth/spreadsheets"]     )
  • Network accessline 60
    str(SHEETS_TOKEN_PATH), scopes=["https://www.googleapis.com/auth/spreadsheets"]
  • Network accessline 240
    print(f"  3-NGram: {len(rows_3)} ngrams across {accts_3} accounts")     print(f"  Filter: {args.min_impressions}+ impressions")     print(f"\n  Sheet: https://docs.google.com/spreadsheets/d/{args.sheet_id}")
  • Network accessline 242
    print(f"\n  Sheet: https://docs.google.com/spreadsheets/d/{args.sheet_id}")

sqr-pipeline/scripts/sqr_prep.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 65
    creds = Credentials.from_authorized_user_file(         str(SHEETS_TOKEN_PATH),         scopes=["https://www.googleapis.com/auth/spreadsheets"]
  • Network accessline 66
    str(SHEETS_TOKEN_PATH),         scopes=["https://www.googleapis.com/auth/spreadsheets"]     )
  • Network accessline 67
    scopes=["https://www.googleapis.com/auth/spreadsheets"]

sqr-pipeline/scripts/sqr_remove_negatives.py

  • Executable scriptline 1
    #!/usr/bin/env python3

sqr-pipeline/scripts/sqr_upload_negatives.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 87
    [Credential-related source omitted]
  • Access to secretsline 87
    [Credential-related source omitted]
  • Network accessline 88
    [Credential-related source omitted]
  • Network accessline 89
    token_uri=token_data.get('token_uri', 'https://oauth2.googleapis.com/token'),
  • Network accessline 90
    [Credential-related source omitted]
  • Network accessline 91
    [Credential-related source omitted]
  • Access to secretsline 91
    [Credential-related source omitted]
  • Network accessline 92
    scopes=token_data.get('scopes', ['https://www.googleapis.com/auth/spreadsheets']),
  • Network accessline 99
    [Credential-related source omitted]
  • Network accessline 100
    [Credential-related source omitted]
  • Network accessline 101
    token_uri='https://oauth2.googleapis.com/token',
  • Network accessline 102
    [Credential-related source omitted]
  • Network accessline 103
    [Credential-related source omitted]
  • Access to secretsline 103
    [Credential-related source omitted]
  • Network accessline 104
    scopes=['https://www.googleapis.com/auth/spreadsheets'],

sqr-pipeline/sheet-template.md

  • Network accessline 3
    The pipeline uses one Google Sheet with a few tabs. You build the sheet; the scripts read and write specific tabs by name. Grab the sheet ID from the URL (`https://docs.google.com/spreadsheets/d/<THIS_IS_THE_ID>/edit`) and pass it as
  • Network accessline 4
    scripts read and write specific tabs by name. Grab the sheet ID from the URL (`https://docs.google.com/spreadsheets/d/<THIS_IS_THE_ID>/edit`) and pass it as `--sheet-id` to every script.
  • Network accessline 5
    (`https://docs.google.com/spreadsheets/d/<THIS_IS_THE_ID>/edit`) and pass it as

underspending-investigation/README.md

  • Network accessline 26
    mkdir -p .claude/skills/underspending-investigation/scripts .claude/skills/underspending-investigation/references for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/underspending-investigation/$f \
  • Network accessline 27
    for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/underspending-investigation/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/underspending-investigation/$f
  • Network accessline 28
    curl -o .claude/skills/underspending-investigation/$f \
  • Network accessline 29
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/underspending-investigation/$f done curl -o .claude/skills/underspending-investigation/references/investigation-contract.md \
  • Network accessline 30
    done curl -o .claude/skills/underspending-investigation/references/investigation-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/underspending-investigation/references/investigation-contract.md
  • Network accessline 31
    curl -o .claude/skills/underspending-investigation/references/investigation-contract.md \
  • Network accessline 32
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/underspending-investigation/references/investigation-contract.md curl -o .claude/skills/underspending-investigation/scripts/investigate_underspend.py \   https://raw.githubuser
  • Network accessline 33
    curl -o .claude/skills/underspending-investigation/scripts/investigate_underspend.py \
  • Network accessline 34
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/underspending-investigation/scripts/investigate_underspend.py
  • Network accessline 40
    for skill in portfolio-pacing-rules impression-share-diagnostics budget-recommendation-calculator; do   mkdir -p .claude/skills/$skill   curl -o .claude/skills/$skill/SKILL.md \
  • Network accessline 41
    mkdir -p .claude/skills/$skill   curl -o .claude/skills/$skill/SKILL.md \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/$skill/SKILL.md
  • Network accessline 42
    curl -o .claude/skills/$skill/SKILL.md \
  • Network accessline 43
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/$skill/SKILL.md
  • Network accessline 50
    mkdir -p .claude/skills/gaql-query-patterns curl -o .claude/skills/gaql-query-patterns/SKILL.md \
  • Network accessline 51
    curl -o .claude/skills/gaql-query-patterns/SKILL.md \
  • Network accessline 52
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/gaql-query-patterns/SKILL.md

underspending-investigation/SKILL.md

underspending-investigation/scripts/investigate_underspend.py

  • Executable scriptline 1
    #!/usr/bin/env python3

youtube-placement-audit/README.md

  • Network accessline 28
    mkdir -p .claude/skills/youtube-placement-audit/scripts .claude/skills/youtube-placement-audit/references for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/youtube-placement-audit/$f \
  • Network accessline 29
    for f in SKILL.md README.md rules.md examples.md; do   curl -o .claude/skills/youtube-placement-audit/$f \     https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/youtube-placement-audit/$f
  • Network accessline 30
    curl -o .claude/skills/youtube-placement-audit/$f \
  • Network accessline 31
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/youtube-placement-audit/$f done curl -o .claude/skills/youtube-placement-audit/references/audit-contract.md \
  • Network accessline 32
    done curl -o .claude/skills/youtube-placement-audit/references/audit-contract.md \   https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/youtube-placement-audit/references/audit-contract.md
  • Network accessline 33
    curl -o .claude/skills/youtube-placement-audit/references/audit-contract.md \
  • Network accessline 34
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/youtube-placement-audit/references/audit-contract.md curl -o .claude/skills/youtube-placement-audit/scripts/youtube_placement_audit.py \   https://raw.githubusercontent.com/fou
  • Network accessline 35
    curl -o .claude/skills/youtube-placement-audit/scripts/youtube_placement_audit.py \
  • Network accessline 36
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/youtube-placement-audit/scripts/youtube_placement_audit.py curl -o .claude/skills/youtube-placement-audit/scripts/youtube_channel_extractor.py \   https://raw.githubusercontent
  • Network accessline 37
    curl -o .claude/skills/youtube-placement-audit/scripts/youtube_channel_extractor.py \
  • Network accessline 38
    https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/youtube-placement-audit/scripts/youtube_channel_extractor.py
  • Access to secretsline 55
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]
  • Network accessline 105
    Built by [Kurt Henninger](https://fourteenwebmedia.com) — I manage over 110 Google Ads accounts with 85+ specialized skills.
  • Network accessline 107
    More free skills: [github.com/fourteenwm/ppc-ai-skills](https://github.com/fourteenwm/ppc-ai-skills)

youtube-placement-audit/SKILL.md

  • Access to secretsline 87
    [Credential-related source omitted]
  • Access to secretsline 92
    [Credential-related source omitted]

youtube-placement-audit/examples.md

  • Instruction override signalline 21
    Date Range: Last 30 days Output:     Sheet <SHEET_ID> Mode:       FORCE (skip confirmation)
  • Instruction override signalline 22
    Output:     Sheet <SHEET_ID> Mode:       FORCE (skip confirmation) ======================================================================
  • Instruction override signalline 23
    Mode:       FORCE (skip confirmation)
  • Network accessline 67
    Sheet: https://docs.google.com/spreadsheets/d/<SHEET_ID>

youtube-placement-audit/references/audit-contract.md

  • Access to secretsline 122
    [Credential-related source omitted]

youtube-placement-audit/scripts/youtube_channel_extractor.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 26
    [Credential-related source omitted]
  • Access to secretsline 53
    [Credential-related source omitted]
  • Access to secretsline 55
    [Credential-related source omitted]
  • Access to secretsline 56
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]
  • Access to secretsline 65
    [Credential-related source omitted]
  • Network accessline 77
    [Credential-related source omitted]
  • Network accessline 78
    [Credential-related source omitted]
  • Access to secretsline 78
    [Credential-related source omitted]
  • Network accessline 79
    token_uri='https://oauth2.googleapis.com/token',
  • Network accessline 80
    scopes=['https://www.googleapis.com/auth/spreadsheets']
  • Instruction override signalline 306
    parser.add_argument("--keywords-only", action="store_true", help="Only process keyword tab")     parser.add_argument("--test", action="store_true", help="Preview only")     parser.add_argument("--force", action="store_true", help="Skip conf
  • Instruction override signalline 307
    parser.add_argument("--test", action="store_true", help="Preview only")     parser.add_argument("--force", action="store_true", help="Skip confirmation")     parser.add_argument("--limit", type=int, help="Limit videos to process")
  • Instruction override signalline 308
    parser.add_argument("--force", action="store_true", help="Skip confirmation")
  • Access to secretsline 318
    [Credential-related source omitted]
  • Access to secretsline 319
    [Credential-related source omitted]
  • Network accessline 368
    print(f"\n{'='*60}")     print("DONE")     print(f"Sheet: https://docs.google.com/spreadsheets/d/{args.sheet}")
  • Network accessline 369
    print("DONE")     print(f"Sheet: https://docs.google.com/spreadsheets/d/{args.sheet}")     print(f"{'='*60}")
  • Network accessline 370
    print(f"Sheet: https://docs.google.com/spreadsheets/d/{args.sheet}")

youtube-placement-audit/scripts/youtube_placement_audit.py

  • Executable scriptline 1
    Executable file
  • Network accessline 148
    [Credential-related source omitted]
  • Network accessline 149
    [Credential-related source omitted]
  • Access to secretsline 149
    [Credential-related source omitted]
  • Network accessline 150
    token_uri='https://oauth2.googleapis.com/token',
  • Network accessline 151
    scopes=['https://www.googleapis.com/auth/spreadsheets']
  • Network accessline 343
    write_tab("Bad - YouTube", to_rows(kw_sorted))     write_tab("Bad - YouTube - NEA", to_rows(nea_sorted))     print(f"\nSheet: https://docs.google.com/spreadsheets/d/{sheet_id}")
  • Network accessline 345
    print(f"\nSheet: https://docs.google.com/spreadsheets/d/{sheet_id}")
  • Instruction override signalline 373
    parser.add_argument("--creds", default="google-ads.yaml", help="Path to google-ads.yaml")     parser.add_argument("--test", action="store_true", help="Preview only, no write")     parser.add_argument("--force", action="store_true", help="Sk
  • Instruction override signalline 374
    parser.add_argument("--test", action="store_true", help="Preview only, no write")     parser.add_argument("--force", action="store_true", help="Skip confirmation prompt")     parser.add_argument("--limit", type=int, help="Process only first
  • Instruction override signalline 375
    parser.add_argument("--force", action="store_true", help="Skip confirmation prompt")
  • Instruction override signalline 392
    print("Mode:       TEST (preview only)")     if args.force:         print("Mode:       FORCE (skip confirmation)")
  • Instruction override signalline 393
    if args.force:         print("Mode:       FORCE (skip confirmation)")     print("=" * 70)
  • Instruction override signalline 394
    print("Mode:       FORCE (skip confirmation)")

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 500 facts

and 450 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md account-diagnostic/SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md account-diagnostic/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md account-diagnostic/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md account-diagnostic/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md account-diagnostic/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md account-diagnostic/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.