Not in the top 1,000 by GitHub stars
Hainrixz/claude-ads
Self-updating multi-platform paid advertising audit & optimization skill for Claude Code — Google, Meta, TikTok, LinkedIn, Microsoft, Apple, YouTube. Now with /ads update for last-30-days platform refresh. Maintained by tododeia.com.
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
ads/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-audit/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-budget/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-competitor/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-conciencia/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-create/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-creative/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-dna/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-generate/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-google/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-landing/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-math/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-meta/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-next/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-photoshoot/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-plan/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-publish/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-start/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-test/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-tiktok/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
skills/ads-update/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → a62525be49b4
No earlier version was observed for comparison.
Verified commit a62525be49b44a558b3d5c02751f9227a7490515
git clone --filter=blob:none --no-checkout https://github.com/Hainrixz/claude-ads.git .hotskills/hainrixz-claude-ads && git -C .hotskills/hainrixz-claude-ads checkout --detach a62525be49b44a558b3d5c02751f9227a7490515
# Copy each selected skill directory from .hotskills/hainrixz-claude-ads into .claude/skills/<skill-name>/Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- ads
ads - ads-audit
skills/ads-audit - ads-budget
skills/ads-budget - ads-competitor
skills/ads-competitor - ads-conciencia
skills/ads-conciencia - ads-create
skills/ads-create - ads-creative
skills/ads-creative - ads-dna
skills/ads-dna - ads-generate
skills/ads-generate - ads-google
skills/ads-google - ads-landing
skills/ads-landing - ads-math
skills/ads-math - ads-meta
skills/ads-meta - ads-next
skills/ads-next - ads-photoshoot
skills/ads-photoshoot - ads-plan
skills/ads-plan - ads-publish
skills/ads-publish - ads-start
skills/ads-start - ads-test
skills/ads-test - ads-tiktok
skills/ads-tiktok - ads-update
skills/ads-update
How it works
ads
When your agent uses it
Free-first paid advertising audit and optimization skill, focused on the 3 platforms where 95% of advertiser spend lives: Meta, Google, TikTok. Guided onboarding (/ads start) saves context once and step-by-step OAuth walkthroughs; continuous coach (/ads next) ranks Quick Wins after each audit. ~158 weighted checks with scoring, parallel agents, industry templates, and AI creative generation.
What it loads into context
Frontmatter
143 tokensAlways available to the agent
SKILL.md
4,542 tokensWhen the skill is activated
Reference documents
124,611 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Reference
- First-run behavior
- Context Intake (fallback — only when profile is missing AND user declined `/ads start`)
- Orchestration Logic
- Creative Workflow
- Industry Detection
- Quality Gates
- Reference Files
- Scoring Methodology
- Sub-Skills
- Subagents
Scripts executed separately
../scripts/conciencia.py../scripts/conciencia.py../scripts/conciencia.py../scripts/generate_report.py../scripts/profile.py../scripts/profile.py
Files
../.claude-plugin/marketplace.jsonasset1,448 bytes../.claude-plugin/plugin.jsonasset1,097 bytesSKILL.mdcore19,060 bytesSKILL.mdcore19,060 bytesSKILL.mdcore19,060 bytesSKILL.mdcore19,060 bytesreferences/additional-platforms.mddoc3,664 bytesreferences/audit-history-schema.jsonasset2,609 bytesreferences/audit-methodology.mddoc4,383 bytesreferences/audit-output-schema.jsonasset5,048 bytesreferences/benchmarks-cross.mddoc1,003 bytesreferences/benchmarks-google.mddoc1,640 bytesreferences/benchmarks-social.mddoc2,679 bytesreferences/benchmarks.mddoc929 bytesreferences/bidding-google.mddoc5,291 bytesreferences/bidding-meta.mddoc1,869 bytesreferences/bidding-strategies.mddoc989 bytesreferences/bidding-tiktok.mddoc2,054 bytesreferences/brand-dna-template.mddoc7,033 bytesreferences/budget-allocation.mddoc5,899 bytesreferences/compliance-changes-2025-2026.mddoc2,591 bytesreferences/compliance-platforms.mddoc3,689 bytesreferences/compliance-privacy.mddoc3,168 bytesreferences/compliance.mddoc1,619 bytesreferences/conciencia-schema.jsonasset5,426 bytesreferences/conciencia.mddoc5,351 bytesreferences/conversion-tracking.mddoc1,271 bytesreferences/copy-frameworks.mddoc9,116 bytesreferences/gaql-notes.mddoc2,822 bytesreferences/google-audit-notes.mddoc4,033 bytesreferences/google-audit.mddoc12,813 bytesreferences/google-changelog-30d.mddoc3,668 bytesreferences/google-creative-specs.mddoc3,828 bytesreferences/image-providers.mddoc5,000 bytesreferences/mcp-integration.mddoc5,842 bytesreferences/mcp-meta-integration.mddoc5,962 bytesreferences/meta-audit.mddoc12,677 bytesreferences/meta-changelog-30d.mddoc4,104 bytesreferences/meta-creative-specs.mddoc4,654 bytesreferences/platform-specs-cross.mddoc1,380 bytesreferences/platform-specs.mddoc799 bytesreferences/profile-schema.jsonasset4,607 bytesreferences/scoring-system.mddoc6,240 bytesreferences/setup-google.mddoc7,231 bytesreferences/setup-meta-developers.mddoc4,765 bytesreferences/setup-meta.mddoc7,122 bytesreferences/setup-tiktok.mddoc5,278 bytesreferences/setup-zernio.mddoc4,654 bytesreferences/tiktok-audit.mddoc10,351 bytesreferences/tiktok-changelog-30d.mddoc3,618 bytesreferences/tiktok-creative-specs.mddoc4,896 bytesreferences/tracking-cross.mddoc1,496 bytesreferences/tracking-google.mddoc2,865 bytesreferences/tracking-meta.mddoc2,432 bytesreferences/tracking-tiktok.mddoc1,488 bytesreferences/update-cost-warning.mddoc2,050 bytesreferences/voice-to-style.mddoc3,944 bytesresearch-sources/README.mddoc883 bytesresearch-sources/claude-research.mddoc4,004 bytesresearch-sources/gemini-research.mddoc10,415 bytesresearch-sources/google-audit-checklists.mddoc26,568 bytesresearch-sources/google-optimization-logic.mddoc12,177 bytesresearch-sources/google-platform-specs.mddoc16,965 bytes../scripts/api/README.mddoc6,684 bytes../scripts/conciencia.pyruns25,375 bytes../scripts/conciencia.pyruns25,375 bytes../scripts/conciencia.pyruns25,375 bytes../scripts/generate_report.pyruns28,631 bytes../scripts/profile.pyruns12,881 bytes../scripts/profile.pyruns12,881 bytes../skills/ads-audit/SKILL.mddoc4,717 bytes../skills/ads-budget/SKILL.mddoc8,146 bytes../skills/ads-competitor/SKILL.mddoc9,059 bytes../skills/ads-conciencia/SKILL.mddoc8,378 bytes../skills/ads-create/SKILL.mddoc8,193 bytes../skills/ads-creative/SKILL.mddoc8,129 bytes../skills/ads-dna/SKILL.mddoc9,478 bytes../skills/ads-generate/SKILL.mddoc6,374 bytes../skills/ads-google/SKILL.mddoc9,213 bytes../skills/ads-landing/SKILL.mddoc7,411 bytes../skills/ads-math/SKILL.mddoc6,175 bytes../skills/ads-meta/SKILL.mddoc7,464 bytes../skills/ads-next/SKILL.mddoc10,208 bytes../skills/ads-photoshoot/SKILL.mddoc8,529 bytes../skills/ads-plan/SKILL.mddoc7,459 bytes../skills/ads-plan/assets/agency.mddoc7,382 bytes../skills/ads-plan/assets/ecommerce-creative.mddoc5,735 bytes../skills/ads-plan/assets/ecommerce.mddoc6,495 bytes../skills/ads-plan/assets/finance.mddoc9,030 bytes../skills/ads-plan/assets/generic.mddoc8,042 bytes../skills/ads-plan/assets/healthcare.mddoc8,299 bytes../skills/ads-plan/assets/local-service.mddoc6,809 bytes../skills/ads-plan/assets/real-estate.mddoc7,373 bytes../skills/ads-publish/SKILL.mddoc6,320 bytes../skills/ads-start/SKILL.mddoc12,527 bytes../skills/ads-test/SKILL.mddoc7,173 bytes../skills/ads-tiktok/SKILL.mddoc7,668 bytes../skills/ads-update/SKILL.mddoc8,187 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Ads: Free-first Paid Advertising Audit & Optimization
Focused ad account analysis on the 3 base platforms where most ad spend
lives: **Meta, Google, TikTok**. Orchestrates 20 specialized sub-skills and
7 agents (3 audit + 4 creative). First-run users should type **`/ads start`**
— a guided wizard that captures context, walks them through OAuth setup
step-by-step, and persists everything to `~/.claude-ads/profile.json` so no
future command ever re-asks.
## Quick Reference
| Command | What it does |
|---------|-------------|View the complete source on GitHubads-audit
When your agent uses it
Full multi-platform paid advertising audit with parallel subagent delegation. Analyzes Google Ads, Meta Ads, LinkedIn Ads, TikTok Ads, and Microsoft Ads accounts. Generates health score per platform and aggregate score. Use when user says audit, full ad check, analyze my ads, account health check, or PPC audit.
What it loads into context
Frontmatter
80 tokensAlways available to the agent
SKILL.md
1,188 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Process
- Data Collection
- Scoring
- Output Files
- Report Structure
- Priority Definitions
- Quick Wins Criteria
Scripts executed separately
../../scripts/api/google_fetch.py../../scripts/api/meta_fetch.py../../scripts/api/tiktok_fetch.py
Files
../../scripts/api/google_fetch.pyruns11,526 bytes../../scripts/api/meta_fetch.pyruns10,613 bytes../../scripts/api/tiktok_fetch.pyruns7,581 bytesSKILL.mdcore4,717 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Full Multi-Platform Ads Audit
## Process
1. **Collect account data**: request exports, screenshots, or API access
2. **Validate**: confirm at least one platform's data is available before proceeding
3. **Detect business type**: analyze account signals per ads orchestrator
4. **Identify active platforms**: determine which platforms are in use
5. **Delegate to subagents** (3 parallel deep specialists, one per platform):
- `audit-google`: Conversion tracking, wasted spend, structure, keywords, ads, settings, PMax, AI Max, Demand Gen, CTV, YouTube video campaigns (G01-G74, G-PM*, G-AI*, G-DG*, G-CTV*)
- `audit-meta`: Pixel/CAPI health, creative fatigue, structure, audience, Andromeda, Advantage+ (M01-M40, M-AN*, M-AT*, M-CR*, M-ST*, M-IA*, M-TH*) — MCP-wired
- `audit-tiktok`: Pixel + Events API + ttclid, creative diversity, Smart+, GMV Max, Symphony, learning phase (T01-T25, T-SR*)
6. **Validate**: verify each subagent returned valid scores with required fields before aggregatingView the complete source on GitHubads-budget
When your agent uses it
Budget allocation and bidding strategy review across all ad platforms. Evaluates spend distribution, bidding strategy appropriateness, scaling readiness, and identifies campaigns to kill or scale. Uses 70/20/10 rule, 3x Kill Rule, and 20% scaling rule. Use when user says budget allocation, bidding strategy, ad spend, ROAS target, media budget, or scaling.
What it loads into context
Frontmatter
91 tokensAlways available to the agent
SKILL.md
1,949 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Process
- Budget Allocation Framework
- Bidding Strategy Evaluation
- Bidding Innovations (2025+)
- Scaling Assessment
- Kill List Assessment
- MER (Marketing Efficiency Ratio)
- Output
Files
SKILL.mdcore8,146 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Budget Allocation & Bidding Strategy
## Process
1. Collect budget and performance data across all active platforms
2. Read `ads/references/budget-allocation.md` for allocation framework
3. Read `ads/references/bidding-strategies.md` for strategy decision trees
4. Read `ads/references/benchmarks.md` for CPC/CPA benchmarks
5. Read `ads/references/scoring-system.md` for health score algorithm
6. **Validate**: confirm spend data covers ≥14 days before evaluating kill/scale decisions
7. Evaluate budget allocation, bidding strategy, and scaling readiness
8. **Validate**: verify kill list candidates have sufficient data (≥20 clicks or ≥$100 spend) before recommending pause
9. Generate recommendations with kill list and scale listView the complete source on GitHubads-competitor
When your agent uses it
Competitor ad intelligence analysis across Google, Meta, LinkedIn, TikTok, Microsoft, and Apple Ads. Analyzes competitor ad copy, creative strategy, keyword targeting, estimated spend, and identifies competitive gaps and opportunities. Use when user says competitor ads, ad spy, competitive analysis, competitor PPC, or ad intelligence.
What it loads into context
Frontmatter
81 tokensAlways available to the agent
SKILL.md
1,954 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Process
- Data Sources
- 2025-2026 Platform Updates
- Competitive Analysis Framework
- Gap & Opportunity Identification
- Competitive Response Strategy
- Output
Files
SKILL.mdcore9,059 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Competitor Ad Intelligence
## Process
1. Identify target competitors (from user input or industry analysis)
2. Read `ads/references/benchmarks.md` for industry CPC/CTR/CVR baselines
3. Research competitor ad presence across platforms
4. Analyze ad copy, creative, and messaging themes
5. Estimate competitor spend and keyword strategy
6. Identify gaps and opportunities
7. Generate competitive intelligence report
## Data SourcesView the complete source on GitHubads-conciencia
When your agent uses it
Campaign awareness (conciencia de campaña). Tracks what Claude knows and does NOT know about the real business outcome of lead / WhatsApp / form / call campaigns — results the pixel can't see. Registers campaigns, runs dated check-ins asking the user how many real conversations, qualified leads, closed customers, revenue and junk contacts arrived, cross-references them with platform clicks/messages/spend, and computes the real close rate, cost per closed customer and junk rate. Writes conciencia-de-campana.md. Use when user says conciencia, did it work, closed customers, lead quality, junk leads, ¿me funcionó?, ¿me trajo clientes?, cerré clientes, llegaron mensajes, calidad de leads, leads basura, cuántos cerré.
What it loads into context
Frontmatter
193 tokensAlways available to the agent
SKILL.md
2,195 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Core rules
- Subcommand routing
- Phase 1 — Does awareness apply?
- Phase 2 — Register
- Phase 3 — Check-in
- Phase 4 — Cross-reference and verdict
- Phase 5 — Save state
- Error handling
- Output contract
Scripts executed separately
../../scripts/conciencia.py../../scripts/conciencia.py../../scripts/conciencia.py../../scripts/profile.py../../scripts/profile.py
Files
../../scripts/conciencia.pyruns25,375 bytes../../scripts/conciencia.pyruns25,375 bytes../../scripts/conciencia.pyruns25,375 bytes../../scripts/profile.pyruns12,881 bytes../../scripts/profile.pyruns12,881 bytesSKILL.mdcore8,378 bytesSKILL.mdcore8,378 bytesSKILL.mdcore8,378 bytesSKILL.mdcore8,378 bytesSKILL.mdcore8,378 bytesSKILL.mdcore8,378 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Campaign awareness: what the platform can't see
Platforms count clicks and messages. Whether those messages turned into
customers — or were garbage — only the user knows. `/ads conciencia` makes
Claude **explicitly aware of that gap**: it stores the user's dated answers,
asks again on a schedule, and cross-references them with platform metrics to
compute the campaign's real success rate.
Storage (handled entirely by `scripts/conciencia.py`, never hand-edited):
- Source of truth: `~/.claude-ads/conciencia/<platform>-<campaign_id>.json`
(validates against `ads/references/conciencia-schema.json`).
- Human view: `conciencia-de-campana.md` in the working folder (orView the complete source on GitHubads-create
When your agent uses it
Campaign concept and copy brief generator for paid advertising. Reads brand-profile.json and optional audit results to produce structured campaign concepts, messaging pillars, and copy briefs. Outputs campaign-brief.md to the current directory. Run after /ads dna and before /ads generate. Triggers on: create campaign, campaign brief, ad concepts, write ad copy, campaign strategy, ad messaging, creative brief, generate concepts.
What it loads into context
Frontmatter
95 tokensAlways available to the agent
SKILL.md
1,888 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Reference
- Process
- campaign-brief.md Format Specification
- Quality Gates
- Meta Andromeda Optimization
- Platform Character Limits
Files
SKILL.mdcore8,193 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Ads Create: Campaign Concept & Copy Brief Generator
Generates structured campaign concepts and platform-specific copy from your brand
profile and optional audit data. Outputs `campaign-brief.md` for use by `/ads generate`.
## Quick Reference
| Command | What it does |
|---------|-------------|
| `/ads create` | Full campaign brief → `campaign-brief.md` |
| `/ads create --platforms meta google` | Brief for specific platforms only |
| `/ads create --objective leads` | Brief optimized for lead generation |
View the complete source on GitHubads-creative
When your agent uses it
Cross-platform creative quality audit covering ad copy, video, image, and format diversity across all platforms. Detects creative fatigue, evaluates platform-native compliance, and provides production priorities. Use when user says creative audit, ad creative, creative fatigue, ad copy, ad design, or creative review.
What it loads into context
Frontmatter
73 tokensAlways available to the agent
SKILL.md
1,956 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Process
- Per-Platform Assessment
- Creative Fatigue Detection
- Format Diversity Matrix
- Andromeda Creative Similarity Score (Meta)
- Symphony Automation Awareness (TikTok, 2025)
- Creative Health Scoring Weights
- Creative Check IDs
- Universal Creative Best Practices
- Output
Files
SKILL.mdcore8,129 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Cross-Platform Creative Quality Audit
## Process
1. Collect creative assets or performance data from active platforms
2. Read `ads/references/platform-specs.md` for creative specifications
3. Read `ads/references/benchmarks.md` for CTR/engagement benchmarks
4. Read `ads/references/scoring-system.md` for weighted scoring algorithm
5. **Validate**: confirm at least one platform has creative data (assets or performance metrics) before proceeding
6. Evaluate creative quality per platform
7. Assess cross-platform creative consistency
8. **Validate**: verify fatigue signals reference actual performance trends, not assumptions
9. Generate production priority recommendationsView the complete source on GitHubads-dna
When your agent uses it
Brand DNA extractor for paid advertising. Scans a website URL to extract visual identity, tone of voice, color palette, typography, and imagery style. Outputs brand-profile.json to the current directory. Run before /ads create or /ads generate for brand-consistent creative. Triggers on: brand DNA, brand profile, extract brand, brand identity, brand colors, what is the brand voice, analyze brand, brand style guide.
What it loads into context
Frontmatter
101 tokensAlways available to the agent
SKILL.md
2,388 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Reference
- Process
- Visual Designer Integration
- Limitations
- brand-profile.json Schema
Scripts executed separately
../../scripts/capture_screenshot.py
Files
../../scripts/capture_screenshot.pyruns3,937 bytesSKILL.mdcore9,478 bytesSKILL.mdcore9,478 bytesSKILL.mdcore9,478 bytesSKILL.mdcore9,478 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Ads DNA: Brand DNA Extractor
Extracts brand identity from a website and saves it as `brand-profile.json`
for use by `/ads create`, `/ads generate`, and `/ads photoshoot`.
## Quick Reference
| Command | What it does |
|---------|-------------|
| `/ads dna <url>` | Full brand extraction → `brand-profile.json` |
| `/ads dna https://acme.com --quick` | Fast extraction (homepage only) |
## ProcessView the complete source on GitHubads-generate
When your agent uses it
AI image generation for paid ad creatives. Reads campaign-brief.md and brand-profile.json to produce platform-sized ad images using banana-claude. Requires banana-claude (v1.4.1+) with nanobanana-mcp configured. Triggers on: generate ads, create images, make ad creatives, generate visuals, create ad images, generate campaign images, make the images, generate from brief.
What it loads into context
Frontmatter
98 tokensAlways available to the agent
SKILL.md
1,603 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Reference
- Environment Setup
- Process
- Cost Transparency
- Standalone Mode (No campaign-brief.md)
- Reference Files
Scripts executed separately
../../scripts/generate_image.py
Files
../../scripts/generate_image.pyruns21,770 bytesSKILL.mdcore6,374 bytesSKILL.mdcore6,374 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Ads Generate: AI Ad Image Generator
Generates platform-sized ad creative images from your campaign brief and brand
profile. Uses banana-claude as the image generation provider.
## Quick Reference
| Command | What it does |
|---------|-------------|
| `/ads generate` | Generate all images from campaign-brief.md |
| `/ads generate --platform meta` | Generate Meta assets only |
| `/ads generate --prompt "text" --ratio 9:16` | Standalone generation without brief |
View the complete source on GitHubads-google
When your agent uses it
Google Ads deep analysis covering Search, Performance Max, Display, YouTube, and Demand Gen campaigns. Evaluates 80 checks across conversion tracking, wasted spend, account structure, keywords, ads, and settings. Use when user says Google Ads, Google PPC, search ads, PMax, Performance Max, or Google campaign.
What it loads into context
Frontmatter
79 tokensAlways available to the agent
SKILL.md
2,117 tokensWhen the skill is activated
Reference documents
1,654 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Data Collection (3-tier free-first)
- What to Analyze
- GAQL & Data Accuracy
- Google Ads MCP Integration (Optional)
- PMax Deep Dive
- AI Max for Search (2026)
- Demand Gen Campaigns
- Key Thresholds
- Output
Scripts executed separately
../../scripts/api/google_fetch.py
Files
../../scripts/api/README.mddoc6,684 bytes../../scripts/api/google_fetch.pyruns11,526 bytesSKILL.mdcore9,213 bytesSKILL.mdcore9,213 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Google Ads Deep Analysis
## Data Collection (3-tier free-first)
- **Capa 1 — MCP** (preferred): `cohnen/mcp-google-ads` for GAQL access. Pull Search Terms Report, keyword data, conversion actions, campaign structure automatically. See `mcp-integration.md` for setup.
- **Capa 2 — Direct API** (free; OAuth + developer-token setup): if `google-data.json` is present in cwd, read it. The user generates it with:
```bash
python3 scripts/api/google_fetch.py --account-id <customer_id> -o google-data.json
```
Full setup (developer token application takes 1-3 business days) in `scripts/api/README.md`.
- **Capa 3 — Manual fallback**: Google Ads account export including Change History and Search Terms Report.
- **Validate** before evaluating: data covers ≥30 days AND includes the Search Terms Report. If not, stop and request a fresh export.
View the complete source on GitHubads-landing
When your agent uses it
Landing page quality assessment for paid advertising campaigns. Evaluates message match, page speed, mobile experience, trust signals, form optimization, and conversion rate potential. Use when user says landing page, post-click experience, landing page audit, conversion rate, or landing page optimization.
What it loads into context
Frontmatter
69 tokensAlways available to the agent
SKILL.md
1,807 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Process
- Message Match Assessment
- Page Speed Assessment
- Mobile Experience
- Trust Signals
- Form Optimization
- Landing Page Health Score Algorithm
- Consent Banner Impact
- Quick Wins
- Ad-Specific Landing Page Elements
- Landing Page Quality by Platform
- Output
Files
SKILL.mdcore7,411 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Landing Page Quality for Ad Campaigns
## Process
1. Collect landing page URLs from active ad campaigns
2. Read `ads/references/benchmarks.md` for conversion rate benchmarks
3. Read `ads/references/conversion-tracking.md` for pixel/tag verification
4. Assess each landing page for ad-specific quality factors
5. Score landing pages and identify improvement opportunities
6. Generate recommendations prioritized by conversion impact
## Message Match Assessment
View the complete source on GitHubads-math
When your agent uses it
PPC financial calculator and modeling tool. CPA, ROAS, CPL calculations, break-even analysis, impression share opportunity sizing, budget forecasting, LTV:CAC ratio analysis, and MER (Marketing Efficiency Ratio) assessment. Requires zero API access. Works with pasted data from exports. Use when user says PPC math, ad calculator, break-even, budget forecast, ROAS calculator, CPA calculator, impression share, LTV CAC, or MER.
What it loads into context
Frontmatter
104 tokensAlways available to the agent
SKILL.md
1,504 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Process
- Calculators
- Quick Formulas Reference
- Output Format
- Data to Request
Files
SKILL.mdcore6,175 bytesSKILL.mdcore6,175 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# PPC Financial Calculator & Modeling
> Concept adapted from `itallstartedwithaidea/google-ads-skills` (PPC math).
## Process
1. Ask the user what calculation they need (or detect from context)
2. Collect required inputs (from pasted data, exports, or verbal description)
3. Perform calculations with clear formulas shown
4. Present results with interpretation and recommendations
5. Flag any concerning metrics or benchmarks
## CalculatorsView the complete source on GitHubads-meta
When your agent uses it
Meta Ads deep analysis covering Facebook and Instagram advertising. Evaluates 50 checks across Pixel/CAPI health, creative diversity and fatigue, account structure, and audience targeting. Includes Advantage+ assessment. Use when user says Meta Ads, Facebook Ads, Instagram Ads, Advantage+, or Meta campaign.
What it loads into context
Frontmatter
71 tokensAlways available to the agent
SKILL.md
1,910 tokensWhen the skill is activated
Reference documents
1,654 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Andromeda AI Engine
- Data Collection (3-tier free-first)
- What to Analyze
- Advantage+ Assessment
- Special Ad Categories
- EMQ Optimization Guide
- Key Thresholds
- Output
- Threads Placement
Scripts executed separately
../../scripts/api/meta_fetch.py../../scripts/api/meta_fetch.py
Files
../../scripts/api/README.mddoc6,684 bytes../../scripts/api/meta_fetch.pyruns10,613 bytes../../scripts/api/meta_fetch.pyruns10,613 bytesSKILL.mdcore7,464 bytesSKILL.mdcore7,464 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Meta Ads Deep Analysis
## Andromeda AI Engine
Meta's Andromeda AI engine (Oct 2025) filters ads using 10,000x more complex models.
Creative diversity is now the #1 performance lever. Ads with Similarity Score >60%
get retrieval suppression. The algorithm clusters near-identical creatives and limits
their delivery. 100 minor variations perform no better than 10. Prioritize genuinely
distinct concepts, angles, and formats over volume of similar variants.
## Data Collection (3-tier free-first)
- **Capa 1 — MCP** (preferred when available): if the user supplies an `ad_account_id` (format `act_<digits>`) and the claude.ai Facebook MCP is connected, call the Meta MCP tools listed in `ads/references/mcp-meta-integration.md`. Most M01-M40 checks become live data lookups.View the complete source on GitHubads-next
When your agent uses it
Continuous coach. Reads the most recent <platform>-audit-results.json files (cwd + ~/.claude-ads/history/), ranks Quick Wins and Critical Issues by impact × ease using the user's saved spend mix, surfaces the top 3 next actions, and optionally walks the user through fixing the #1 right now. Detects regressions vs the previous audit (score drops, new failures) and flags them as Priority 0. Use when user says next, what should I do, recommend, fix, suggest, what's next, qué sigue, recomienda, próximo paso.
What it loads into context
Frontmatter
152 tokensAlways available to the agent
SKILL.md
2,678 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Subcommand routing
- Core rules
- Phase 1 — Discover audit JSON
- Phase 2 — Persist any new audits to history
- Phase 3 — Rank items by impact × ease
- Phase 4 — Regression detection (Priority 0)
- Phase 5 — Output the top 3
- Phase 6 — Walk-through (default and `walk` subcommands)
- Phase 7 — Save state
- Compare mode (`/ads next compare`)
- Error handling
- Output contract
Scripts executed separately
../../scripts/conciencia.py../../scripts/conciencia.py../../scripts/conciencia.py../../scripts/profile.py../../scripts/profile.py
Files
../../scripts/conciencia.pyruns25,375 bytes../../scripts/conciencia.pyruns25,375 bytes../../scripts/conciencia.pyruns25,375 bytes../../scripts/profile.pyruns12,881 bytes../../scripts/profile.pyruns12,881 bytesSKILL.mdcore10,208 bytesSKILL.mdcore10,208 bytesSKILL.mdcore10,208 bytesSKILL.mdcore10,208 bytesSKILL.mdcore10,208 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Continuous coaching: what to fix next
`/ads next` turns audits into a stream of small, ordered, verified actions.
It's the second half of the seguimiento loop: `/ads start` connects, `/ads
audit` measures, `/ads next` coaches.
## Subcommand routing
| Arg | Behavior |
|-----|----------|
| (none) | Default — Discover → Rank → Top 3 → offer to walk through #1. |
| `show` | Discover → Rank → print top 10 → exit (no walk-through prompt — good for client reports). |
| `compare` | Print full delta between the two most-recent audits per platform via `python3 scripts/profile.py compare <p>`. |View the complete source on GitHubads-photoshoot
When your agent uses it
Product photography enhancement for ad creatives using banana-claude image generation. Takes a product image and generates 5 professional photography styles for ad use: Studio, Floating, Ingredient, In Use, and Lifestyle. Requires banana-claude (v1.4.1+) with nanobanana-mcp. Triggers on: product photo, product photography, photoshoot, enhance product image, product shoot, product photos for ads, generate product photos, studio shot, lifestyle photo.
What it loads into context
Frontmatter
112 tokensAlways available to the agent
SKILL.md
2,091 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Reference
- Environment Setup
- Process
- Cost Estimate
- Platform Recommendations
- Reference Files
Files
SKILL.mdcore8,529 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Ads Photoshoot: AI Product Photography
Transforms a product image or description into professional ad-ready photography
in 5 distinct visual styles. Each style generates at two sizes: 1:1 (Meta/LinkedIn)
and 9:16 (TikTok/Reels/Stories).
## Quick Reference
| Command | What it does |
|---------|-------------|
| `/ads photoshoot` | Interactive: ask for product + styles |
| `/ads photoshoot --styles studio floating` | Generate only selected styles |
| `/ads photoshoot --product shoe.jpg` | Start with a product image file |View the complete source on GitHubads-plan
When your agent uses it
Strategic paid advertising planning with industry-specific templates. Covers platform selection, campaign architecture, budget planning, creative strategy, and phased implementation roadmap. Use when user says ad plan, ad strategy, campaign planning, media plan, PPC strategy, or advertising plan.
What it loads into context
Frontmatter
65 tokensAlways available to the agent
SKILL.md
1,860 tokensWhen the skill is activated
Reference documents
14,345 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Process
- Industry Templates
- Output
Files
SKILL.mdcore7,459 bytesassets/agency.mddoc7,382 bytesassets/ecommerce-creative.mddoc5,735 bytesassets/ecommerce.mddoc6,495 bytesassets/finance.mddoc9,030 bytesassets/generic.mddoc8,042 bytesassets/healthcare.mddoc8,299 bytesassets/local-service.mddoc6,809 bytesassets/real-estate.mddoc7,373 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Strategic Paid Advertising Plan
## Process
### 1. Discovery
- Business type, products/services, target audience
- Current advertising status (active platforms, spend, performance)
- Goals: brand awareness, lead generation, e-commerce sales, app installs
- Budget range (monthly/quarterly)
- Timeline and urgency
- In-house team capacity vs agency needs
### 2. Competitive AnalysisView the complete source on GitHubads-publish
When your agent uses it
Publish generated ad creatives to 14+ social networks via the Zernio API. Optional paid layer that closes the loop after /ads generate or /ads photoshoot. Use when user says publish, schedule, post, ship, Zernio, distribute, send to socials, push to Instagram/Facebook/LinkedIn/TikTok/Twitter, or auto-publish.
What it loads into context
Frontmatter
126 tokensAlways available to the agent
SKILL.md
1,616 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use this
- Process
- Auth setup
- Pricing tiers
- Without Zernio (alternative for 3+ accounts)
- Asset-to-platform matching
- Caption extraction from brief
- Output
- Quality gates
Scripts executed separately
../../scripts/zernio_publish.py
Files
../../scripts/zernio_publish.pyruns10,461 bytesSKILL.mdcore6,320 bytesSKILL.mdcore6,320 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# `/ads publish` — Push creatives to socials via Zernio
> **Pricing:** Zernio is **free for the first 2 connected social accounts** (no
> credit card). Solo users posting to Instagram + Facebook = $0/mo forever.
> Agencies pay $1–$6/mo per additional account (see "Pricing tiers" below).
> X/Twitter API costs are metered pass-through even on the free tier; all
> other 13 networks are fully included up to your account quota.
## When to use this
After `/ads generate` (image ad creatives) or `/ads photoshoot` (product
photography) produces an `ad-assets/` directory, `/ads publish` takes those
files and schedules them as posts on every social network you've connectedView the complete source on GitHubads-start
When your agent uses it
Guided first-run wizard. Walks the user from cold install to a working audit pipeline: business-context capture, per-platform connection choice (MCP / direct API / manual) with step-by-step OAuth verification, optional Zernio + Meta Developers account walkthroughs, profile persistence to ~/.claude-ads/profile.json. Re-runnable to edit settings (`/ads start edit`), reset (`/ads start reset`), or check status (`/ads start status`). Use when user says start, setup, init, onboard, first time, get started, walkthrough, connect my accounts, conectar mis cuentas, empezar.
What it loads into context
Frontmatter
163 tokensAlways available to the agent
SKILL.md
3,269 tokensWhen the skill is activated
Reference documents
1,654 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Core rules
- Subcommand routing
- Phase A — Detect first-run vs re-entry
- Phase B — Business context (first-run or `edit context`)
- Phase C — Per-platform connection wizard
- Phase D — Optional account-creation walkthroughs
- Phase E — First-action recommendation
- Status mode (`/ads start status`)
- Error handling
- Output contract
Scripts executed separately
../../scripts/api/google_fetch.py../../scripts/api/google_fetch.py../../scripts/api/meta_fetch.py../../scripts/api/meta_fetch.py../../scripts/api/tiktok_fetch.py../../scripts/api/tiktok_fetch.py../../scripts/profile.py../../scripts/profile.py
Files
../../scripts/api/README.mddoc6,684 bytes../../scripts/api/google_fetch.pyruns11,526 bytes../../scripts/api/google_fetch.pyruns11,526 bytes../../scripts/api/meta_fetch.pyruns10,613 bytes../../scripts/api/meta_fetch.pyruns10,613 bytes../../scripts/api/tiktok_fetch.pyruns7,581 bytes../../scripts/api/tiktok_fetch.pyruns7,581 bytes../../scripts/profile.pyruns12,881 bytes../../scripts/profile.pyruns12,881 bytesSKILL.mdcore12,527 bytesSKILL.mdcore12,527 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# Guided onboarding wizard
You are running the first-run / re-entry wizard that produces and maintains
`~/.claude-ads/profile.json`. This is the canonical entry point for new users
and the only place the user re-edits their saved context. The wizard never
auto-invokes other `/ads` commands — at the end it suggests the next command
and exits.
## Core rules
1. **One question at a time.** Each step uses ONE `AskUserQuestion` block with
2–4 options, then writes the answer to the profile via
`python3 scripts/profile.py set <dot.path> <value>` BEFORE asking the nextView the complete source on GitHubads-test
When your agent uses it
A/B test design and experiment planning for paid advertising. Structured hypothesis framework, statistical significance calculator, test duration estimator, sample size calculator, and platform-specific experiment setup guides (Meta Experiments, Google Experiments, LinkedIn A/B). Use when user says A/B test, split test, experiment design, test hypothesis, statistical significance, sample size, or test duration.
What it loads into context
Frontmatter
88 tokensAlways available to the agent
SKILL.md
1,857 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Process
- Hypothesis Framework
- Statistical Significance Calculator
- Test Duration Estimator
- Platform-Specific Test Setup
- What to Test (Priority Order)
- Common Testing Mistakes to Avoid
- Output Format
Files
SKILL.mdcore7,173 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# A/B Test Design & Experiment Planning
> Concept adapted from `OpenClaudia/openclaudia-skills` (ab-test-setup).
## Process
1. Understand what the user wants to test (creative, audience, bidding, landing page)
2. Build structured hypothesis using the framework below
3. Calculate required sample size and estimated duration
4. Recommend platform-specific test setup
5. Define success criteria and measurement plan
## Hypothesis FrameworkView the complete source on GitHubads-tiktok
When your agent uses it
TikTok Ads deep analysis covering creative quality, tracking, bidding, campaign structure, and TikTok Shop. Evaluates 28 checks with emphasis on creative-first strategy, safe zone compliance, and Smart+ campaigns. Use when user says TikTok Ads, TikTok marketing, TikTok Shop, Spark Ads, Smart+, or TikTok campaign.
What it loads into context
Frontmatter
83 tokensAlways available to the agent
SKILL.md
1,994 tokensWhen the skill is activated
Reference documents
1,654 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Data Collection (3-tier free-first)
- What to Analyze
- Creative-First Strategy
- Safe Zone
- TikTok Shop Assessment
- Smart+ Campaigns
- GMV Max (Shop Ads)
- Symphony Automation
- TikTok Context
- Key Thresholds
- Output
Scripts executed separately
../../scripts/api/tiktok_fetch.py
Files
../../scripts/api/README.mddoc6,684 bytes../../scripts/api/tiktok_fetch.pyruns7,581 bytesSKILL.mdcore7,668 bytesSKILL.mdcore7,668 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# TikTok Ads Deep Analysis
## Data Collection (3-tier free-first)
- **Capa 1 — MCP**: `AdsMCP/tiktok-ads-mcp-server` (community, free) provides campaign/adgroup/ad data. See `mcp-integration.md` for setup.
- **Capa 2 — Direct API** (free; ~30 min OAuth setup): if `tiktok-data.json` is present in cwd, read it. The user generates it with:
```bash
python3 scripts/api/tiktok_fetch.py --account-id <advertiser_id> -o tiktok-data.json
```
Full setup in `scripts/api/README.md`.
- **Capa 3 — Manual fallback**: TikTok Ads Manager export plus Pixel/Events API status from the Events Manager.
- Also read `platform-specs.md` for 9:16 vertical and safe-zone requirements before evaluating creative checks.
View the complete source on GitHubads-update
When your agent uses it
Refresh per-platform references (meta, google, tiktok) with the last 30 days of platform changes — features, deprecations, policy updates. COSTLY; gates on confirmation.
What it loads into context
Frontmatter
86 tokensAlways available to the agent
SKILL.md
2,129 tokensWhen the skill is activated
Reference documents
494 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 0 — MANDATORY: Cost confirmation gate
- Step 1 — Argument parsing
- Step 2 — Load source set for the platform
- Step 3 — Fetch sources
- Step 4 — Score and dedupe (optional but recommended)
- Step 5 — Render the digest
- Step 6 — Append to existing platform audit
- Step 7 — Confirm to the user
- Failure modes
Scripts executed separately
../../scripts/ads_sources.py
Files
../../scripts/ads_sources.pyruns5,301 bytes../../scripts/lib/THIRD_PARTY_NOTICES.mddoc2,101 bytesSKILL.mdcore8,187 bytesSKILL.mdcore8,187 bytesSKILL.mdcore8,187 bytesSKILL.mdcore8,187 bytesSKILL.mdcore8,187 bytesSKILL.mdcore8,187 bytesSKILL.mdcore8,187 bytesSKILL.mdcore8,187 bytes
Read SKILL.md
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-fd4fa55b -->
# `/ads update <platform|all>` — Self-Refreshing Platform References
This skill regenerates per-platform reference files with what has actually changed in the last 30 days across each ad platform. Sources include Reddit, Hacker News, official platform changelogs, and the open web.
**Powered by an adapted version of [last30days-skill](https://github.com/mvanhorn/last30days-skill) (MIT, by Matt Van Horn). See `scripts/lib/THIRD_PARTY_NOTICES.md` for full attribution.**
---
## Step 0 — MANDATORY: Cost confirmation gate
**Before doing anything else**, you MUST:
1. Read the contents of `ads/references/update-cost-warning.md` and print it verbatim to the user.View the complete source on GitHubSkills included
- ads
- ads-audit
- ads-budget
- ads-competitor
- ads-conciencia
- ads-create
- ads-creative
- ads-dna
- ads-generate
- ads-google
- ads-landing
- ads-math
- ads-meta
- ads-next
- ads-photoshoot
- ads-plan
- ads-publish
- ads-start
- ads-test
- ads-tiktok
- ads-update
Repository facts
- License
- MIT
- Created
- Apr 29, 2026
- Last pushed
- Oct 27, 2026
- Forks
- 21
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 43 notes
ads/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedads/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedads/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedscripts/conciencia.py:1Analysis incomplete: Referenced executable target unavailable; not analyzedscripts/conciencia.py:1Analysis incomplete: Referenced executable target unavailable; not analyzedscripts/profile.py:1Analysis incomplete: Referenced executable target unavailable; not analyzedscripts/conciencia.py:1Analysis incomplete: Referenced executable target unavailable; not analyzedscripts/conciencia.py:1Analysis incomplete: Referenced executable target unavailable; not analyzedscripts/profile.py:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-conciencia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-conciencia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-conciencia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-conciencia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-conciencia/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-dna/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-dna/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-dna/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-generate/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-google/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/ads-math/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- 10 broad permissionsin 5 files: skills/ads-conciencia/SKILL.md:1 skills/ads-next/SKILL.md:1 skills/ads-publish/SKILL.md:1 and 2 more
- No dangerous shell commands
- 342 network referencesin 31 files: scripts/api/google_fetch.py:12 scripts/api/meta_fetch.py:12 scripts/api/README.md:53 and 28 more
- 1 obfuscation signalin 1 file: scripts/generate_image.py:280
- No instruction overrides
- 35 executable scriptsin 10 files: scripts/conciencia.py:1 scripts/profile.py:1 scripts/api/meta_fetch.py:1 and 7 more
- 216 references to secretsin 21 files: scripts/api/google_fetch.py:17 scripts/api/README.md:58 scripts/generate_image.py:28 and 18 more
- No requests to vote in Hot
Show all 604 signals by file
.claude-plugin/marketplace.json
- Network accessline 17
"name": "tododeia" }, "homepage": "https://tododeia.com", - Network accessline 18
}, "homepage": "https://tododeia.com", "repository": "https://github.com/Hainrixz/claude-ads", - Network accessline 19
"homepage": "https://tododeia.com", - Network accessline 20
"repository": "https://github.com/Hainrixz/claude-ads",
.claude-plugin/plugin.json
- Network accessline 5
"author": { "name": "tododeia", "url": "https://tododeia.com" - Network accessline 6
"name": "tododeia", "url": "https://tododeia.com" }, - Network accessline 7
"url": "https://tododeia.com" - Network accessline 8
}, "homepage": "https://tododeia.com", "repository": "https://github.com/Hainrixz/claude-ads", - Network accessline 9
"homepage": "https://tododeia.com", - Network accessline 10
"repository": "https://github.com/Hainrixz/claude-ads",
ads/SKILL.md
ads/references/audit-history-schema.json
ads/references/audit-output-schema.json
ads/references/brand-dna-template.md
- Network accessline 17
"schema_version": "1.0", "brand_name": "string", "website_url": "string (full URL including https://)", - Network accessline 18
"brand_name": "string", "website_url": "string (full URL including https://)", "extracted_at": "ISO-8601 timestamp (e.g. 2026-03-12T14:30:00Z)", - Network accessline 19
"website_url": "string (full URL including https://)",
ads/references/compliance-privacy.md
- Access to secretsline 19
[Credential-related source omitted]
ads/references/conciencia-schema.json
ads/references/google-changelog-30d.md
- Network accessline 9
- [Google Ads AI Max — General Availability](https://blog.google/products/ads-commerce/dsa-upgrade-to-ai-max-2026/) — 2026-04-15 — Google — AI Max reached GA on April 15, 2026 after exiting beta in May 2025. Average +7% conversions or conve - Network accessline 10
- [Dynamic Search Ads upgrading to AI Max](https://business.google.com/us/accelerate/announcements/dsa-upgrade-to-ai-max-2026/) — 2026-04 — Google for Business — Starting in September 2026, campaigns using DSA, automatically created assets - Network accessline 11
- [Google Ads product announcements feed](https://business.google.com/us/accelerate/announcements/) — Ongoing — Live changelog of all Google Ads product launches. - Network accessline 12
- [Performance Max — Asset experiments](https://support.google.com/google-ads/answer/16756291) — 2026-04-20 — Google — Asset experiments are launching for Performance Max alongside other experiments-framework updates. - Network accessline 16
- [Google Replacing Dynamic Search Ads With 'AI Max'](https://www.mediapost.com/publications/article/414317/google-replacing-dynamic-search-ads-with-ai-max.html) — 2026-04-15 — MediaPost — Coverage of the DSA → AI Max sunset path. - Network accessline 17
- [Google AI Max GA: DSA Sunset Playbook for Agencies](https://www.digitalapplied.com/blog/google-ai-max-ga-dsa-sunset-agency-playbook-2026) — 2026-04 — Digital Applied — Migration playbook for agencies running large DSA portfolios. - Network accessline 18
- [Google Demand Gen April 2026 Update: Commerce Media Suite and View-Through Conversion Optimization](https://almcorp.com/blog/google-demand-gen-april-2026-update/) — 2026-04 — ALM Corp — Two headline additions: Commerce Media Suite suppor - Network accessline 19
- [Google Ads Editor 2.12: Every New Feature Explained](https://almcorp.com/blog/google-ads-editor-2-12-new-features-2026/) — 2026 — ALM Corp — PMax + Demand Gen + Total Budgets + more. - Network accessline 20
- [Google Ads 2025 Year-in-Review](https://almcorp.com/blog/google-ads-2025-year-in-review-updates-explained-and-2026-predictions/) — 2026 — ALM Corp — Catalog and forward-look. - Network accessline 24
- [Google Demand Gen Strategy Guide for 2026 (w/ Thomas Eccel)](https://www.lunio.ai/blog/google-demand-gen-strategy-guide) — 2026 — Lunio — Practitioner strategy guide reflecting the April changes.
ads/references/image-providers.md
ads/references/mcp-integration.md
- Network accessline 23
**Repo:** https://github.com/cohnen/mcp-google-ads - Access to secretsline 39
[Credential-related source omitted] - Network accessline 83
**Docs:** https://www.adspirer.com/blog/connect-claude-meta-ads - Network accessline 92
**Community MCP:** [`AdsMCP/tiktok-ads-mcp-server`](https://github.com/AdsMCP/tiktok-ads-mcp-server) provides campaign / adgroup / ad / report data access (free, open-source).
ads/references/meta-changelog-30d.md
- Network accessline 9
- [Marketing API v25.0 — ASC and AAC API deprecation](https://developers.facebook.com/docs/marketing-api/changelog) — 2026-04 — Advantage Shopping Campaigns (ASC) and Advantage App Campaign (AAC) APIs deprecated in MAPI v25.0. Migration to - Network accessline 10
- [Advantage+ Audience replaces Lookalikes](https://www.facebook.com/business/news) — 2026-04 — Lookalike audiences are being phased out in favor of Advantage+ audience targeting. Manual lookalike workflows still work but are flagged as leg - Network accessline 11
- [Advantage+ default for Sales/Leads/App Promotion](https://www.facebook.com/business/news) — 2026 — Advantage+ campaigns are now the default setup for Sales, Leads, and App Promotion objectives in Ads Manager. - Network accessline 15
- [Meta Ads Changes 2026 — Attribution, AI & New Rules](https://gezar.dk/en/blog/meta-ads-changes-2026) — 2026-04 — Gezar — Comprehensive changelog of attribution-window changes, conversion-modeling updates, and new policy rules under Andro - Network accessline 16
- [How Meta's AI push is changing ad creation](https://www.marketingbrew.com/stories/2026/04/07/meta-ai-ad-creation) — 2026-04-07 — Marketing Brew — Coverage of Meta's expanded generative-creative tooling and the practitioner reaction. - Network accessline 17
- [Facebook Ad Algorithm Changes for 2026: What Marketers Need to Know](https://www.socialmediaexaminer.com/facebook-ad-algorithm-changes-for-2026-what-marketers-need-to-know/) — 2026-04 — Social Media Examiner — Practical guide to adapting - Network accessline 18
- [Every Meta Ads Change in 2025-2026: The Complete Changelog](https://www.dataslayer.ai/blog/meta-ads-changes-2025-83-updates-that-changed-facebook-advertising-forever) — 2026 — Dataslayer — Catalog of 83 updates with implementation notes. - Network accessline 22
- [Meta Andromeda 2026: Complete Guide to Facebook Ads AI [April Update]](https://www.1clickreport.com/blog/meta-andromeda-update-2025-guide) — 2026-04 — 1ClickReport — Walkthrough of how Andromeda changes ad delivery and what advertisers s - Network accessline 23
- [What Is the Meta Andromeda Update and Why Is It Destroying Ad Performance?](https://medium.com/write-a-catalyst/what-is-the-meta-andromeda-update-and-why-is-it-destroying-ad-performance-a3959e1c5a1b) — 2026-04 — Adam Saad / Medium — Crit - Network accessline 24
- [It's Not Andromeda: Inside Meta's AI Ad Stack And Why Nothing is Working](https://www.triplewhale.com/blog/meta-ads-ai-system) — 2026 — Triple Whale — Counter-narrative arguing the perceived performance issues stem from broader Meta AI s
ads/references/profile-schema.json
- Network accessline 1
{ "$schema": "http://json-schema.org/draft-07/schema#", - Network accessline 2
"$schema": "http://json-schema.org/draft-07/schema#", - Network accessline 3
"$id": "https://github.com/Hainrixz/claude-ads/blob/main/ads/references/profile-schema.json", - Access to secretsline 68
[Credential-related source omitted]
ads/references/setup-google.md
- Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 39
[Credential-related source omitted] - Network accessline 74
→ **API Center** → fill the application. Start at **Test access level** (instant; only works against test accounts). Apply for **Basic** for real data. URL: https://ads.google.com/aw/apicenter - Network accessline 75
(instant; only works against test accounts). Apply for **Basic** for real data. URL: https://ads.google.com/aw/apicenter - **Expect to see**: developer token displayed (string like `aBcD-1234...`). - Network accessline 76
data. URL: https://ads.google.com/aw/apicenter - Network accessline 77
- **Expect to see**: developer token displayed (string like `aBcD-1234...`). - **On error**: "You must be on an MCC" → create an MCC at https://ads.google.com/home/tools/manager-accounts/ and link the operating - Network accessline 78
- **On error**: "You must be on an MCC" → create an MCC at https://ads.google.com/home/tools/manager-accounts/ and link the operating account to it. - Network accessline 79
https://ads.google.com/home/tools/manager-accounts/ and link the operating - Network accessline 82
### STEP B2 — Create OAuth 2.0 client - **Goal**: a client_id + client_secret to exchange for tokens. - **Do this**: https://console.cloud.google.com → **APIs & Services** → - Network accessline 83
[Credential-related source omitted] - Access to secretsline 83
[Credential-related source omitted] - Network accessline 84
- **Do this**: https://console.cloud.google.com → **APIs & Services** → - Access to secretsline 87
[Credential-related source omitted] - Network accessline 98
### STEP B4 — Generate a refresh token - **Goal**: long-lived token that the script can refresh automatically. - **Do this**: easiest path is the [OAuth 2.0 Playground](https://developers.google.com/oauthplayground/): - Network accessline 99
- **Goal**: long-lived token that the script can refresh automatically. - **Do this**: easiest path is the [OAuth 2.0 Playground](https://developers.google.com/oauthplayground/): gear icon → tick **Use your own OAuth credentials** → paste - Network accessline 100
- **Do this**: easiest path is the [OAuth 2.0 Playground](https://developers.google.com/oauthplayground/): - Network accessline 101
gear icon → tick **Use your own OAuth credentials** → paste client_id/ secret → scope `https://www.googleapis.com/auth/adwords` → Authorize APIs → Sign in → **Exchange authorization code for tokens** → copy - Network accessline 102
secret → scope `https://www.googleapis.com/auth/adwords` → Authorize APIs - Network accessline 105
- **Expect to see**: a string starting with `1//...`. - **On error**: `redirect_uri_mismatch` → in GCP Credentials, add `https://developers.google.com/oauthplayground` as an authorized redirect - Network accessline 106
- **On error**: `redirect_uri_mismatch` → in GCP Credentials, add `https://developers.google.com/oauthplayground` as an authorized redirect URI. - Network accessline 107
`https://developers.google.com/oauthplayground` as an authorized redirect - Access to secretsline 121
[Credential-related source omitted] - Access to secretsline 123
[Credential-related source omitted] - Access to secretsline 124
[Credential-related source omitted]
ads/references/setup-meta-developers.md
- Network accessline 14
## STEP 1 — Go to the developer portal - **Goal**: open the right onboarding page. - **Do this**: https://developers.facebook.com → **Get Started** (top right) - Network accessline 15
- **Goal**: open the right onboarding page. - **Do this**: https://developers.facebook.com → **Get Started** (top right) → **Continue as <Facebook user>** (uses the user's existing Facebook - Network accessline 16
- **Do this**: https://developers.facebook.com → **Get Started** (top right)
ads/references/setup-meta.md
- Network accessline 17
### STEP A1 — Enable the Facebook connector on claude.ai - **Goal**: turn on the official Meta MCP in the user's Claude session. - **Do this**: open https://claude.ai → top-right avatar → **Connectors** → - Network accessline 18
- **Goal**: turn on the official Meta MCP in the user's Claude session. - **Do this**: open https://claude.ai → top-right avatar → **Connectors** → find **Facebook (Meta Ads)** → click **Connect** → log in with Facebook → - Network accessline 19
- **Do this**: open https://claude.ai → top-right avatar → **Connectors** → - Network accessline 80
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Access to secretsline 85
[Credential-related source omitted] - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 104
[Credential-related source omitted]
ads/references/setup-tiktok.md
- Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 32
[Credential-related source omitted] - Network accessline 58
### STEP B1 — Sign up for TikTok for Business - **Goal**: have a Business Center account. - **Do this**: https://business.tiktok.com → sign up → create a Business - Network accessline 59
- **Goal**: have a Business Center account. - **Do this**: https://business.tiktok.com → sign up → create a Business Center (BC). - Network accessline 60
- **Do this**: https://business.tiktok.com → sign up → create a Business - Network accessline 66
### STEP B2 — Create a developer app - **Do this**: https://business-api.tiktok.com → **My Apps** → Create. Fill - Network accessline 67
- **Do this**: https://business-api.tiktok.com → **My Apps** → Create. Fill - Network accessline 68
app name, callback URL (use `http://localhost:8080` for testing), advertiser - Network accessline 78
more advertiser_ids → callback returns `auth_code` in the URL. - **Expect to see**: a URL like `http://localhost:8080/?auth_code=xxx&state=...`. Copy `auth_code`. - Network accessline 79
- **Expect to see**: a URL like `http://localhost:8080/?auth_code=xxx&state=...`. Copy `auth_code`. - **On error**: `app under review` → some scopes need TikTok approval; start - Network accessline 80
`http://localhost:8080/?auth_code=xxx&state=...`. Copy `auth_code`. - Access to secretsline 84
[Credential-related source omitted] - Network accessline 87
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 91
[Credential-related source omitted] - Access to secretsline 103
[Credential-related source omitted]
ads/references/setup-zernio.md
- Network accessline 14
## STEP 1 — Create the Zernio account - **Goal**: have a Zernio dashboard the user can log into. - **Do this**: open https://zernio.com → **Sign up** → email + password (or - Network accessline 15
- **Goal**: have a Zernio dashboard the user can log into. - **Do this**: open https://zernio.com → **Sign up** → email + password (or Google SSO). - Network accessline 16
- **Do this**: open https://zernio.com → **Sign up** → email + password (or - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 57
[Credential-related source omitted] - Access to secretsline 60
[Credential-related source omitted] - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Access to secretsline 112
[Credential-related source omitted]
ads/references/tiktok-changelog-30d.md
- Network accessline 9
- [TikTok Announces New Automation Updates for Advertisers: Smarter Ads, More Control, and Measurable Impact](https://newsroom.tiktok.com/tiktok-announces-new-automation-updates-for-advertisers?lang=en) — 2026-04 — TikTok Newsroom — Manual - Network accessline 10
- [Smart+ Upgraded Experience](https://ads.tiktok.com/help/article/about-updates-to-smart-plus?lang=en) — 2026-04 — TikTok Ads Help — Reference doc for the unified flow. Module-by-module toggling of targeting / budget / creative automation. - Network accessline 11
- [TikTok API for Business — recent posts](https://business-api.tiktok.com/portal/blog/detail/7531992556561760257) — 2026 — TikTok Business API blog — Latest API release notes including the GMV Max Campaign Creation API and GMV Max Reportin - Network accessline 12
- [About GMV Max migration for TikTok Shop Ads](https://ads.tiktok.com/help/article/gmv-max-migration-tiktok-shop-ads) — 2026 — TikTok Ads Help — As of July 2026, GMV Max becomes the default and only supported campaign type for TikTok Shop - Network accessline 16
- [TikTok Smart+ Ads Update 2026 — AdBeacon](https://www.adbeacon.com/tiktok-smart-ads-api-integration-gmv-max-reporting-now-live-in-adbeacon/) — 2026-04 — AdBeacon — Coverage of GMV Max reporting now flowing into third-party analytics tool - Network accessline 17
- [TikTok Outlines Updates To In-Stream Shopping Ads and Options](https://www.socialmediatoday.com/news/tiktok-smart-plus-ecommerce-in-stream-sales-services/743513/) — 2026 — Social Media Today — Smart+ + e-commerce + in-stream sales rollou - Network accessline 18
- [TikTok Ads updates (Supermetrics)](https://docs.supermetrics.com/docs/tiktok-ads-updates) — Ongoing — Supermetrics — Tracker of API changes affecting third-party reporting integrations. - Network accessline 22
- [How to Scale TikTok Ads in 2026 (Without Killing Your CPA)](https://admanage.ai/blog/how-to-scale-tiktok-ads) — 2026 — AdManage — Practitioner playbook adapted to the unified Smart+ flow. - Network accessline 23
- [TikTok Marketing Source — Integrate TikTok GMV Max Campaign Data into TikTok Marketing Connector](https://github.com/airbytehq/airbyte/discussions/55817) — 2026 — Airbyte / GitHub — Open-source community thread on building GMV Max API in
ads/research-sources/gemini-research.md
- Access to secretsline 24
[Credential-related source omitted]
scripts/ads_sources.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 48
subreddits=["FacebookAds", "PPC", "MarketingAutomation", "advertising"], changelog_urls=[ "https://developers.facebook.com/docs/graph-api/changelog", - Network accessline 49
changelog_urls=[ "https://developers.facebook.com/docs/graph-api/changelog", "https://developers.facebook.com/docs/marketing-api/changelog", - Network accessline 50
"https://developers.facebook.com/docs/graph-api/changelog", - Network accessline 51
"https://developers.facebook.com/docs/marketing-api/changelog", - Network accessline 52
"https://www.facebook.com/business/news", - Network accessline 66
subreddits=["GoogleAds", "PPC", "bigseo", "googleads"], changelog_urls=[ "https://support.google.com/google-ads/answer/2375475", # What's new in Google Ads - Network accessline 67
changelog_urls=[ "https://support.google.com/google-ads/answer/2375475", # What's new in Google Ads "https://developers.google.com/google-ads/api/docs/release-notes", - Network accessline 68
"https://support.google.com/google-ads/answer/2375475", # What's new in Google Ads - Network accessline 69
"https://developers.google.com/google-ads/api/docs/release-notes", - Network accessline 70
"https://blog.google/products/ads-commerce/", - Network accessline 84
subreddits=["TikTokAds", "marketing", "PPC"], changelog_urls=[ "https://business-api.tiktok.com/portal/docs?id=1740626878662658", - Network accessline 85
changelog_urls=[ "https://business-api.tiktok.com/portal/docs?id=1740626878662658", "https://www.tiktok.com/business/en/blog", - Network accessline 86
"https://business-api.tiktok.com/portal/docs?id=1740626878662658", - Network accessline 87
"https://www.tiktok.com/business/en/blog",
scripts/api/README.md
- Network accessline 53
1. Go to [developers.facebook.com](https://developers.facebook.com) → My Apps → create a Business app. - Network accessline 53
1. Go to [developers.facebook.com](https://developers.facebook.com) → My Apps → create a Business app. - Network accessline 53
1. Go to [developers.facebook.com](https://developers.facebook.com) → My Apps → create a Business app. - Network accessline 53
1. Go to [developers.facebook.com](https://developers.facebook.com) → My Apps → create a Business app. - Network accessline 53
1. Go to [developers.facebook.com](https://developers.facebook.com) → My Apps → create a Business app. - Network accessline 58
[Credential-related source omitted] - Network accessline 58
[Credential-related source omitted] - Network accessline 58
[Credential-related source omitted] - Network accessline 58
[Credential-related source omitted] - Network accessline 58
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 58
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Access to secretsline 61
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Network accessline 77
1. Create or use a Google Ads MCC (manager) account. 2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; reques - Network accessline 77
1. Create or use a Google Ads MCC (manager) account. 2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; reques - Network accessline 77
1. Create or use a Google Ads MCC (manager) account. 2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; reques - Network accessline 77
1. Create or use a Google Ads MCC (manager) account. 2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; reques - Network accessline 77
1. Create or use a Google Ads MCC (manager) account. 2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; reques - Network accessline 78
2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; request Basic/Standard for production). - Network accessline 78
2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; request Basic/Standard for production). - Network accessline 78
2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; request Basic/Standard for production). - Network accessline 78
2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; request Basic/Standard for production). - Network accessline 78
2. Apply for API access at [developers.google.com/google-ads/api](https://developers.google.com/google-ads/api/docs/access-levels) → get a **developer token** (start at Test level; request Basic/Standard for production). - Network accessline 79
[Credential-related source omitted] - Network accessline 79
[Credential-related source omitted] - Network accessline 79
[Credential-related source omitted] - Network accessline 79
[Credential-related source omitted] - Network accessline 79
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Network accessline 80
4. Generate a refresh token via OAuth Playground or the [google-ads-python](https://github.com/googleads/google-ads-python/blob/main/examples/authentication/generate_user_credentials.py) helper. Scope: `https://www.googleapis.com/auth/adwor - Network accessline 80
4. Generate a refresh token via OAuth Playground or the [google-ads-python](https://github.com/googleads/google-ads-python/blob/main/examples/authentication/generate_user_credentials.py) helper. Scope: `https://www.googleapis.com/auth/adwor - Network accessline 80
4. Generate a refresh token via OAuth Playground or the [google-ads-python](https://github.com/googleads/google-ads-python/blob/main/examples/authentication/generate_user_credentials.py) helper. Scope: `https://www.googleapis.com/auth/adwor - Network accessline 80
4. Generate a refresh token via OAuth Playground or the [google-ads-python](https://github.com/googleads/google-ads-python/blob/main/examples/authentication/generate_user_credentials.py) helper. Scope: `https://www.googleapis.com/auth/adwor - Network accessline 80
4. Generate a refresh token via OAuth Playground or the [google-ads-python](https://github.com/googleads/google-ads-python/blob/main/examples/authentication/generate_user_credentials.py) helper. Scope: `https://www.googleapis.com/auth/adwor - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Network accessline 96
1. Apply for the [TikTok for Business API](https://business-api.tiktok.com/portal/docs?id=1738455508553729) (Business Center account required). - Network accessline 96
1. Apply for the [TikTok for Business API](https://business-api.tiktok.com/portal/docs?id=1738455508553729) (Business Center account required). - Network accessline 96
1. Apply for the [TikTok for Business API](https://business-api.tiktok.com/portal/docs?id=1738455508553729) (Business Center account required). - Network accessline 96
1. Apply for the [TikTok for Business API](https://business-api.tiktok.com/portal/docs?id=1738455508553729) (Business Center account required). - Network accessline 96
1. Apply for the [TikTok for Business API](https://business-api.tiktok.com/portal/docs?id=1738455508553729) (Business Center account required). - Network accessline 98
[Credential-related source omitted] - Network accessline 98
[Credential-related source omitted] - Network accessline 98
[Credential-related source omitted] - Network accessline 98
[Credential-related source omitted] - Network accessline 98
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 98
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted]
scripts/api/google_fetch.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Network accessline 12
1. Create or use an existing Google Ads MCC (manager) account. 2. Apply for API access: https://developers.google.com/google-ads/api/docs/access-levels#access-level - Network accessline 12
1. Create or use an existing Google Ads MCC (manager) account. 2. Apply for API access: https://developers.google.com/google-ads/api/docs/access-levels#access-level - Network accessline 12
1. Create or use an existing Google Ads MCC (manager) account. 2. Apply for API access: https://developers.google.com/google-ads/api/docs/access-levels#access-level - Network accessline 13
2. Apply for API access: https://developers.google.com/google-ads/api/docs/access-levels#access-level You'll get a **developer token** (initial level: Test → request Basic/Standard). - Network accessline 13
2. Apply for API access: https://developers.google.com/google-ads/api/docs/access-levels#access-level You'll get a **developer token** (initial level: Test → request Basic/Standard). - Network accessline 13
2. Apply for API access: https://developers.google.com/google-ads/api/docs/access-levels#access-level You'll get a **developer token** (initial level: Test → request Basic/Standard). - Network accessline 14
https://developers.google.com/google-ads/api/docs/access-levels#access-level - Network accessline 14
https://developers.google.com/google-ads/api/docs/access-levels#access-level - Network accessline 14
https://developers.google.com/google-ads/api/docs/access-levels#access-level - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Network accessline 18
4. Generate a **refresh_token** using the OAuth Playground or the ``google-ads-python`` ``generate_user_credentials.py`` script. Scope: ``https://www.googleapis.com/auth/adwords``. - Network accessline 18
4. Generate a **refresh_token** using the OAuth Playground or the ``google-ads-python`` ``generate_user_credentials.py`` script. Scope: ``https://www.googleapis.com/auth/adwords``. - Network accessline 18
4. Generate a **refresh_token** using the OAuth Playground or the ``google-ads-python`` ``generate_user_credentials.py`` script. Scope: ``https://www.googleapis.com/auth/adwords``. - Network accessline 19
``google-ads-python`` ``generate_user_credentials.py`` script. Scope: ``https://www.googleapis.com/auth/adwords``. 5. Find your **customer_id** (the 10-digit number under the MCC, or directly - Network accessline 19
``google-ads-python`` ``generate_user_credentials.py`` script. Scope: ``https://www.googleapis.com/auth/adwords``. 5. Find your **customer_id** (the 10-digit number under the MCC, or directly - Network accessline 19
``google-ads-python`` ``generate_user_credentials.py`` script. Scope: ``https://www.googleapis.com/auth/adwords``. 5. Find your **customer_id** (the 10-digit number under the MCC, or directly - Network accessline 20
``https://www.googleapis.com/auth/adwords``. - Network accessline 20
``https://www.googleapis.com/auth/adwords``. - Network accessline 20
``https://www.googleapis.com/auth/adwords``. - Access to secretsline 29
[Credential-related source omitted] - Access to secretsline 29
[Credential-related source omitted] - Access to secretsline 29
[Credential-related source omitted] - Network accessline 58
DEFAULT_API_VERSION = "v18" OAUTH_TOKEN_URL = "https://oauth2.googleapis.com/token" - Network accessline 58
DEFAULT_API_VERSION = "v18" OAUTH_TOKEN_URL = "https://oauth2.googleapis.com/token" - Network accessline 58
DEFAULT_API_VERSION = "v18" OAUTH_TOKEN_URL = "https://oauth2.googleapis.com/token" - Network accessline 59
OAUTH_TOKEN_URL = "https://oauth2.googleapis.com/token" - Network accessline 59
OAUTH_TOKEN_URL = "https://oauth2.googleapis.com/token" - Network accessline 59
OAUTH_TOKEN_URL = "https://oauth2.googleapis.com/token" - Network accessline 60
ADS_API_BASE = "https://googleads.googleapis.com" - Network accessline 60
ADS_API_BASE = "https://googleads.googleapis.com" - Network accessline 60
ADS_API_BASE = "https://googleads.googleapis.com" - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 147
[Credential-related source omitted] - Access to secretsline 147
[Credential-related source omitted] - Access to secretsline 147
[Credential-related source omitted] - Access to secretsline 150
[Credential-related source omitted] - Access to secretsline 150
[Credential-related source omitted] - Access to secretsline 150
[Credential-related source omitted] - Network accessline 152
"grant_type": "refresh_token", }).encode("utf-8") req = urllib.request.Request( - Network accessline 152
"grant_type": "refresh_token", }).encode("utf-8") req = urllib.request.Request( - Network accessline 152
"grant_type": "refresh_token", }).encode("utf-8") req = urllib.request.Request( - Network accessline 153
}).encode("utf-8") req = urllib.request.Request( OAUTH_TOKEN_URL, - Network accessline 153
}).encode("utf-8") req = urllib.request.Request( OAUTH_TOKEN_URL, - Network accessline 153
}).encode("utf-8") req = urllib.request.Request( OAUTH_TOKEN_URL, - Network accessline 154
req = urllib.request.Request( - Network accessline 154
req = urllib.request.Request( - Network accessline 154
req = urllib.request.Request( - Network accessline 159
) try: with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 159
) try: with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 159
) try: with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 160
try: with urllib.request.urlopen(req, timeout=30) as resp: payload = json.loads(resp.read().decode("utf-8")) - Network accessline 160
try: with urllib.request.urlopen(req, timeout=30) as resp: payload = json.loads(resp.read().decode("utf-8")) - Network accessline 160
try: with urllib.request.urlopen(req, timeout=30) as resp: payload = json.loads(resp.read().decode("utf-8")) - Network accessline 161
with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 161
with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 161
with urllib.request.urlopen(req, timeout=30) as resp: - Access to secretsline 163
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Network accessline 170
def _run_query(api: str, customer_id: str, query: str, headers: dict[str, str]) -> dict: url = f"{ADS_API_BASE}/{api}/customers/{customer_id}/googleAds:search" req = urllib.request.Request( - Network accessline 170
def _run_query(api: str, customer_id: str, query: str, headers: dict[str, str]) -> dict: url = f"{ADS_API_BASE}/{api}/customers/{customer_id}/googleAds:search" req = urllib.request.Request( - Network accessline 170
def _run_query(api: str, customer_id: str, query: str, headers: dict[str, str]) -> dict: url = f"{ADS_API_BASE}/{api}/customers/{customer_id}/googleAds:search" req = urllib.request.Request( - Network accessline 171
url = f"{ADS_API_BASE}/{api}/customers/{customer_id}/googleAds:search" req = urllib.request.Request( url, - Network accessline 171
url = f"{ADS_API_BASE}/{api}/customers/{customer_id}/googleAds:search" req = urllib.request.Request( url, - Network accessline 171
url = f"{ADS_API_BASE}/{api}/customers/{customer_id}/googleAds:search" req = urllib.request.Request( url, - Network accessline 172
req = urllib.request.Request( - Network accessline 172
req = urllib.request.Request( - Network accessline 172
req = urllib.request.Request( - Network accessline 177
) try: with urllib.request.urlopen(req, timeout=60) as resp: - Network accessline 177
) try: with urllib.request.urlopen(req, timeout=60) as resp: - Network accessline 177
) try: with urllib.request.urlopen(req, timeout=60) as resp: - Network accessline 178
try: with urllib.request.urlopen(req, timeout=60) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 178
try: with urllib.request.urlopen(req, timeout=60) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 178
try: with urllib.request.urlopen(req, timeout=60) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 179
with urllib.request.urlopen(req, timeout=60) as resp: - Network accessline 179
with urllib.request.urlopen(req, timeout=60) as resp: - Network accessline 179
with urllib.request.urlopen(req, timeout=60) as resp: - Access to secretsline 206
[Credential-related source omitted] - Access to secretsline 206
[Credential-related source omitted] - Access to secretsline 206
[Credential-related source omitted] - Access to secretsline 207
[Credential-related source omitted] - Access to secretsline 207
[Credential-related source omitted] - Access to secretsline 207
[Credential-related source omitted] - Access to secretsline 213
[Credential-related source omitted] - Access to secretsline 213
[Credential-related source omitted] - Access to secretsline 213
[Credential-related source omitted] - Access to secretsline 214
[Credential-related source omitted] - Access to secretsline 214
[Credential-related source omitted] - Access to secretsline 214
[Credential-related source omitted] - Access to secretsline 215
[Credential-related source omitted] - Access to secretsline 215
[Credential-related source omitted] - Access to secretsline 215
[Credential-related source omitted] - Access to secretsline 216
[Credential-related source omitted] - Access to secretsline 216
[Credential-related source omitted] - Access to secretsline 216
[Credential-related source omitted] - Access to secretsline 217
[Credential-related source omitted] - Access to secretsline 217
[Credential-related source omitted] - Access to secretsline 217
[Credential-related source omitted] - Access to secretsline 224
[Credential-related source omitted] - Access to secretsline 224
[Credential-related source omitted] - Access to secretsline 224
[Credential-related source omitted] - Access to secretsline 225
[Credential-related source omitted] - Access to secretsline 225
[Credential-related source omitted] - Access to secretsline 225
[Credential-related source omitted] - Access to secretsline 227
[Credential-related source omitted] - Access to secretsline 227
[Credential-related source omitted] - Access to secretsline 227
[Credential-related source omitted]
scripts/api/meta_fetch.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Network accessline 12
1. Open https://developers.facebook.com → My Apps → create a Business app. - Network accessline 12
1. Open https://developers.facebook.com → My Apps → create a Business app. - Network accessline 12
1. Open https://developers.facebook.com → My Apps → create a Business app. - Network accessline 15
[Credential-related source omitted] - Network accessline 15
[Credential-related source omitted] - Network accessline 15
[Credential-related source omitted] - Network accessline 16
[Credential-related source omitted] - Network accessline 16
[Credential-related source omitted] - Network accessline 16
[Credential-related source omitted] - Network accessline 17
[Credential-related source omitted] - Network accessline 17
[Credential-related source omitted] - Network accessline 17
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Network accessline 59
DEFAULT_API_VERSION = "v22.0" GRAPH_BASE = "https://graph.facebook.com" - Network accessline 59
DEFAULT_API_VERSION = "v22.0" GRAPH_BASE = "https://graph.facebook.com" - Network accessline 59
DEFAULT_API_VERSION = "v22.0" GRAPH_BASE = "https://graph.facebook.com" - Network accessline 60
GRAPH_BASE = "https://graph.facebook.com" - Network accessline 60
GRAPH_BASE = "https://graph.facebook.com" - Network accessline 60
GRAPH_BASE = "https://graph.facebook.com" - Network accessline 81
[Credential-related source omitted] - Network accessline 81
[Credential-related source omitted] - Network accessline 81
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Network accessline 82
url = f"{GRAPH_BASE}/{path.lstrip('/')}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={"Accept": "application/json"}) try: - Network accessline 82
url = f"{GRAPH_BASE}/{path.lstrip('/')}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={"Accept": "application/json"}) try: - Network accessline 82
url = f"{GRAPH_BASE}/{path.lstrip('/')}?{urllib.parse.urlencode(params)}" req = urllib.request.Request(url, headers={"Accept": "application/json"}) try: - Network accessline 83
req = urllib.request.Request(url, headers={"Accept": "application/json"}) - Network accessline 83
req = urllib.request.Request(url, headers={"Accept": "application/json"}) - Network accessline 83
req = urllib.request.Request(url, headers={"Accept": "application/json"}) - Network accessline 84
try: with urllib.request.urlopen(req, timeout=30) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 84
try: with urllib.request.urlopen(req, timeout=30) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 84
try: with urllib.request.urlopen(req, timeout=30) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 85
with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 85
with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 85
with urllib.request.urlopen(req, timeout=30) as resp: - Access to secretsline 107
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Network accessline 108
req = urllib.request.Request(next_url, headers={"Accept": "application/json"}) - Network accessline 108
req = urllib.request.Request(next_url, headers={"Accept": "application/json"}) - Network accessline 108
req = urllib.request.Request(next_url, headers={"Accept": "application/json"}) - Network accessline 109
try: with urllib.request.urlopen(req, timeout=30) as r: resp = json.loads(r.read().decode("utf-8")) - Network accessline 109
try: with urllib.request.urlopen(req, timeout=30) as r: resp = json.loads(r.read().decode("utf-8")) - Network accessline 109
try: with urllib.request.urlopen(req, timeout=30) as r: resp = json.loads(r.read().decode("utf-8")) - Network accessline 110
with urllib.request.urlopen(req, timeout=30) as r: - Network accessline 110
with urllib.request.urlopen(req, timeout=30) as r: - Network accessline 110
with urllib.request.urlopen(req, timeout=30) as r: - Access to secretsline 186
[Credential-related source omitted] - Access to secretsline 186
[Credential-related source omitted] - Access to secretsline 186
[Credential-related source omitted] - Access to secretsline 188
[Credential-related source omitted] - Access to secretsline 188
[Credential-related source omitted] - Access to secretsline 188
[Credential-related source omitted] - Access to secretsline 192
[Credential-related source omitted] - Access to secretsline 192
[Credential-related source omitted] - Access to secretsline 192
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted]
scripts/api/tiktok_fetch.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 12
1. Apply for TikTok for Business API access at https://business-api.tiktok.com/portal/docs?id=1738455508553729 - Network accessline 12
1. Apply for TikTok for Business API access at https://business-api.tiktok.com/portal/docs?id=1738455508553729 - Network accessline 12
1. Apply for TikTok for Business API access at https://business-api.tiktok.com/portal/docs?id=1738455508553729 - Network accessline 13
https://business-api.tiktok.com/portal/docs?id=1738455508553729 - Network accessline 13
https://business-api.tiktok.com/portal/docs?id=1738455508553729 - Network accessline 13
https://business-api.tiktok.com/portal/docs?id=1738455508553729 - Network accessline 16
**App Secret**. 3. Generate a long-lived access token via the OAuth flow: https://business-api.tiktok.com/portal/docs?id=1739965703387137 - Network accessline 16
**App Secret**. 3. Generate a long-lived access token via the OAuth flow: https://business-api.tiktok.com/portal/docs?id=1739965703387137 - Network accessline 16
**App Secret**. 3. Generate a long-lived access token via the OAuth flow: https://business-api.tiktok.com/portal/docs?id=1739965703387137 - Network accessline 17
3. Generate a long-lived access token via the OAuth flow: https://business-api.tiktok.com/portal/docs?id=1739965703387137 The OAuth response gives you ``access_token`` and ``advertiser_ids`` - Network accessline 17
3. Generate a long-lived access token via the OAuth flow: https://business-api.tiktok.com/portal/docs?id=1739965703387137 The OAuth response gives you ``access_token`` and ``advertiser_ids`` - Network accessline 17
3. Generate a long-lived access token via the OAuth flow: https://business-api.tiktok.com/portal/docs?id=1739965703387137 The OAuth response gives you ``access_token`` and ``advertiser_ids`` - Network accessline 18
https://business-api.tiktok.com/portal/docs?id=1739965703387137 - Network accessline 18
https://business-api.tiktok.com/portal/docs?id=1739965703387137 - Network accessline 18
https://business-api.tiktok.com/portal/docs?id=1739965703387137 - Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 19
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Network accessline 44
DEFAULT_API_VERSION = "v1.3" API_BASE = "https://business-api.tiktok.com/open_api" - Network accessline 44
DEFAULT_API_VERSION = "v1.3" API_BASE = "https://business-api.tiktok.com/open_api" - Network accessline 44
DEFAULT_API_VERSION = "v1.3" API_BASE = "https://business-api.tiktok.com/open_api" - Network accessline 45
API_BASE = "https://business-api.tiktok.com/open_api" - Network accessline 45
API_BASE = "https://business-api.tiktok.com/open_api" - Network accessline 45
API_BASE = "https://business-api.tiktok.com/open_api" - Network accessline 54
encoded[k] = json.dumps(v) if isinstance(v, (dict, list)) else str(v) url += "?" + urllib.parse.urlencode(encoded) req = urllib.request.Request(url, headers={ - Network accessline 54
encoded[k] = json.dumps(v) if isinstance(v, (dict, list)) else str(v) url += "?" + urllib.parse.urlencode(encoded) req = urllib.request.Request(url, headers={ - Network accessline 54
encoded[k] = json.dumps(v) if isinstance(v, (dict, list)) else str(v) url += "?" + urllib.parse.urlencode(encoded) req = urllib.request.Request(url, headers={ - Network accessline 55
[Credential-related source omitted] - Network accessline 55
[Credential-related source omitted] - Network accessline 55
[Credential-related source omitted] - Network accessline 56
req = urllib.request.Request(url, headers={ - Network accessline 56
req = urllib.request.Request(url, headers={ - Network accessline 56
req = urllib.request.Request(url, headers={ - Network accessline 59
}) try: with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 59
}) try: with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 59
}) try: with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 60
try: with urllib.request.urlopen(req, timeout=30) as resp: payload = json.loads(resp.read().decode("utf-8")) - Network accessline 60
try: with urllib.request.urlopen(req, timeout=30) as resp: payload = json.loads(resp.read().decode("utf-8")) - Network accessline 60
try: with urllib.request.urlopen(req, timeout=30) as resp: payload = json.loads(resp.read().decode("utf-8")) - Network accessline 61
with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 61
with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 61
with urllib.request.urlopen(req, timeout=30) as resp: - Access to secretsline 139
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted]
scripts/capture_screenshot.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
Usage: python capture_screenshot.py https://example.com/landing - Network accessline 9
python capture_screenshot.py https://example.com/landing - Network accessline 10
python capture_screenshot.py https://example.com/landing --mobile - Network accessline 11
python capture_screenshot.py https://example.com/landing --all
scripts/conciencia.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
Executable file; content unavailable - Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted]
scripts/generate_image.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 29
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 128
[Credential-related source omitted] - Access to secretsline 129
[Credential-related source omitted] - Access to secretsline 130
[Credential-related source omitted] - Access to secretsline 142
[Credential-related source omitted] - Access to secretsline 177
[Credential-related source omitted] - Access to secretsline 205
[Credential-related source omitted] - Access to secretsline 251
[Credential-related source omitted] - Access to secretsline 263
[Credential-related source omitted] - Possible obfuscationline 280
return base64.b64decode(response.data[0].b64_json) - Access to secretsline 283
[Credential-related source omitted] - Network accessline 291
url = "https://api.stability.ai/v2beta/stable-image/generate/sd3" - Access to secretsline 293
[Credential-related source omitted] - Network accessline 300
"output_format": "png", } resp = requests.post(url, headers=headers, files={"none": ""}, data=data, timeout=120) - Network accessline 301
} resp = requests.post(url, headers=headers, files={"none": ""}, data=data, timeout=120) if resp.status_code == 200: - Network accessline 302
resp = requests.post(url, headers=headers, files={"none": ""}, data=data, timeout=120) - Access to secretsline 323
[Credential-related source omitted] - Access to secretsline 336
[Credential-related source omitted] - Network accessline 348
if urlparse(url).scheme != "https": raise RuntimeError(f"Replicate returned non-HTTPS URL: {url[:100]}") resp = requests.get(url, timeout=120) - Network accessline 349
raise RuntimeError(f"Replicate returned non-HTTPS URL: {url[:100]}") resp = requests.get(url, timeout=120) resp.raise_for_status() - Network accessline 350
resp = requests.get(url, timeout=120) - Access to secretsline 360
[Credential-related source omitted] - Access to secretsline 374
[Credential-related source omitted] - Access to secretsline 385
[Credential-related source omitted] - Access to secretsline 390
[Credential-related source omitted] - Access to secretsline 393
[Credential-related source omitted] - Access to secretsline 396
[Credential-related source omitted] - Access to secretsline 399
[Credential-related source omitted] - Access to secretsline 413
[Credential-related source omitted] - Access to secretsline 457
[Credential-related source omitted] - Access to secretsline 546
[Credential-related source omitted] - Access to secretsline 547
[Credential-related source omitted] - Access to secretsline 551
[Credential-related source omitted] - Access to secretsline 563
[Credential-related source omitted]
scripts/generate_report.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 623
elements.append(Paragraph( "Report generated by claude-ads v2.0 | " "https://github.com/Hainrixz/claude-ads", - Network accessline 624
"Report generated by claude-ads v2.0 | " "https://github.com/Hainrixz/claude-ads", styles["RFooter"], - Network accessline 625
"https://github.com/Hainrixz/claude-ads",
scripts/lib/THIRD_PARTY_NOTICES.md
- Network accessline 9
The file `dates.py` (verbatim) is derived from [last30days-skill](https://github.com/mvanhorn/last30days-skill) by Matt Van Horn. `signals.py`, `dedupe.py`, and `story.py` were also vendored on 2026-04-28 but were never wired into the audit - Network accessline 11
**Original repository:** https://github.com/mvanhorn/last30days-skill
scripts/profile.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
Executable file; content unavailable - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted]
scripts/zernio_publish.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 33
For the typical solo user / single-brand case (Instagram + Facebook = 2 accounts), `/ads publish` is **$0/mo forever**. Agencies managing 3+ client social accounts hit the paid tiers. See https://zernio.com/pricing - Network accessline 34
2 accounts), `/ads publish` is **$0/mo forever**. Agencies managing 3+ client social accounts hit the paid tiers. See https://zernio.com/pricing for the live calculator. - Network accessline 35
client social accounts hit the paid tiers. See https://zernio.com/pricing - Network accessline 40
1. Sign up at https://zernio.com and pick a plan. - Access to secretsline 46
[Credential-related source omitted] - Network accessline 87
ZERNIO_API_BASE = "https://api.zernio.com/v1" - Network accessline 152
[Credential-related source omitted] - Network accessline 153
url = f"{ZERNIO_API_BASE}/{path.lstrip('/')}" req = urllib.request.Request( url, - Network accessline 154
req = urllib.request.Request( - Network accessline 163
) try: with urllib.request.urlopen(req, timeout=30) as resp: - Network accessline 164
try: with urllib.request.urlopen(req, timeout=30) as resp: return json.loads(resp.read().decode("utf-8")) - Network accessline 165
with urllib.request.urlopen(req, timeout=30) as resp: - Access to secretsline 197
[Credential-related source omitted] - Access to secretsline 199
[Credential-related source omitted]
skills/ads-conciencia/SKILL.md
skills/ads-dna/SKILL.md
- Network accessline 16
|---------|-------------| | `/ads dna <url>` | Full brand extraction → `brand-profile.json` | | `/ads dna https://acme.com --quick` | Fast extraction (homepage only) | - Network accessline 16
|---------|-------------| | `/ads dna <url>` | Full brand extraction → `brand-profile.json` | | `/ads dna https://acme.com --quick` | Fast extraction (homepage only) | - Network accessline 18
| `/ads dna https://acme.com --quick` | Fast extraction (homepage only) | - Network accessline 18
| `/ads dna https://acme.com --quick` | Fast extraction (homepage only) | - Network accessline 24
If the user hasn't provided a URL, ask: > "What website URL should I analyze for brand DNA? (e.g. https://yoursite.com)" - Network accessline 24
If the user hasn't provided a URL, ask: > "What website URL should I analyze for brand DNA? (e.g. https://yoursite.com)" - Network accessline 25
> "What website URL should I analyze for brand DNA? (e.g. https://yoursite.com)" - Network accessline 25
> "What website URL should I analyze for brand DNA? (e.g. https://yoursite.com)" - Network accessline 91
**Typography:** - `@import url(https://fonts.googleapis.com/...)` → extract font names from URL path - Network accessline 91
**Typography:** - `@import url(https://fonts.googleapis.com/...)` → extract font names from URL path - Network accessline 92
- `@import url(https://fonts.googleapis.com/...)` → extract font names from URL path - Network accessline 92
- `@import url(https://fonts.googleapis.com/...)` → extract font names from URL path
skills/ads-google/SKILL.md
skills/ads-meta/SKILL.md
skills/ads-next/SKILL.md
skills/ads-publish/SKILL.md
- Broad permissionsline 1
Bash, Read, Write, AskUserQuestion - Broad permissionsline 1
Bash, Read, Write, AskUserQuestion - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Network accessline 40
1. Sign up at https://zernio.com — **first 2 accounts are always free, no credit card**. Confirm at https://zernio.com/pricing. - Network accessline 40
1. Sign up at https://zernio.com — **first 2 accounts are always free, no credit card**. Confirm at https://zernio.com/pricing. - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted]
skills/ads-start/SKILL.md
- Broad permissionsline 1
Bash, Read, Write, AskUserQuestion - Broad permissionsline 1
Bash, Read, Write, AskUserQuestion - Access to secretsline 244
[Credential-related source omitted] - Access to secretsline 244
[Credential-related source omitted] - Access to secretsline 245
[Credential-related source omitted] - Access to secretsline 245
[Credential-related source omitted]
skills/ads-update/SKILL.md
- Broad permissionsline 1
Bash, Read, Write, Edit, WebFetch, WebSearch, AskUserQuestion - Broad permissionsline 1
Bash, Read, Write, Edit, WebFetch, WebSearch, AskUserQuestion - Network accessline 14
**Powered by an adapted version of [last30days-skill](https://github.com/mvanhorn/last30days-skill) (MIT, by Matt Van Horn). See `scripts/lib/THIRD_PARTY_NOTICES.md` for full attribution.** - Network accessline 14
**Powered by an adapted version of [last30days-skill](https://github.com/mvanhorn/last30days-skill) (MIT, by Matt Van Horn). See `scripts/lib/THIRD_PARTY_NOTICES.md` for full attribution.** - Network accessline 85
curl -s "https://www.reddit.com/r/<sub>/new.json?limit=25" -H "User-Agent: claude-ads/2.0" - Network accessline 85
curl -s "https://www.reddit.com/r/<sub>/new.json?limit=25" -H "User-Agent: claude-ads/2.0" - Network accessline 95
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=<keyword>&numericFilters=created_at_i>$(date -u -v-30d +%s)&hitsPerPage=10" - Network accessline 95
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=<keyword>&numericFilters=created_at_i>$(date -u -v-30d +%s)&hitsPerPage=10"
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.
Declared and executed: 10 facts
- Contacts developers.facebook.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/ads_sources.py:50High confidence
- Contacts www.facebook.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/ads_sources.py:52High confidence
- Contacts support.google.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/ads_sources.py:68High confidence
- Contacts developers.google.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/ads_sources.py:69High confidence
- Contacts blog.google, which SKILL.md, the README and the plugin manifest do not mentionscripts/ads_sources.py:70High confidence
- Contacts business-api.tiktok.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/ads_sources.py:86High confidence
- Contacts www.tiktok.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/ads_sources.py:87High confidence
- Contacts graph.facebook.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/api/meta_fetch.py:60High confidence
- Contacts business-api.tiktok.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/api/tiktok_fetch.py:45High confidence
- Contacts api.stability.ai, which SKILL.md, the README and the plugin manifest do not mentionscripts/generate_image.py:291High confidence
Signal confidence: 490 facts
- Access to secrets in prose of the SKILL.mdads/SKILL.md:129Low confidence
- Network access in prose of the SKILL.mdads/SKILL.md:273Low confidence
- Network access in code of documentationads/references/brand-dna-template.md:17Low confidence
- Network access in code of documentationads/references/brand-dna-template.md:18Low confidence
- Network access in code of documentationads/references/brand-dna-template.md:19Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueads/references/compliance-privacy.md:19Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:9Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:10Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:11Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:12Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:16Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:17Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:18Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:19Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:20Low confidence
- Network access in prose of documentationads/references/google-changelog-30d.md:24Low confidence
- Access to secrets in prose of documentationads/references/image-providers.md:14Low confidence
- Access to secrets in prose of documentationads/references/image-providers.md:102Low confidence
- Access to secrets in prose of documentationads/references/image-providers.md:107Low confidence
- Access to secrets in prose of documentationads/references/image-providers.md:112Low confidence
- Network access in prose of documentationads/references/mcp-integration.md:23Low confidence
- Access to secrets in code of documentationads/references/mcp-integration.md:39Low confidence
- Network access in prose of documentationads/references/mcp-integration.md:83Low confidence
- Network access in prose of documentationads/references/mcp-integration.md:92Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:9Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:10Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:11Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:15Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:16Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:17Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:18Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:22Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:23Low confidence
- Network access in prose of documentationads/references/meta-changelog-30d.md:24Low confidence
- Access to secrets in prose of documentationads/references/setup-google.md:37Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valueads/references/setup-google.md:39Low confidence
- Network access in prose of documentationads/references/setup-google.md:74Low confidence
- Network access in prose of documentationads/references/setup-google.md:75Low confidence
- Network access in prose of documentationads/references/setup-google.md:76Low confidence
- Network access in prose of documentationads/references/setup-google.md:77Low confidence
- Network access in prose of documentationads/references/setup-google.md:78Low confidence
- Network access in prose of documentationads/references/setup-google.md:79Low confidence
- Network access in prose of documentationads/references/setup-google.md:82Low confidence
- Network access in prose of documentationads/references/setup-google.md:83Low confidence
- Access to secrets in prose of documentationads/references/setup-google.md:83Low confidence
- Network access in prose of documentationads/references/setup-google.md:84Low confidence
- Access to secrets in prose of documentationads/references/setup-google.md:87Low confidence
- Network access in prose of documentationads/references/setup-google.md:98Low confidence
- Network access in prose of documentationads/references/setup-google.md:99Low confidence
- Network access in prose of documentationads/references/setup-google.md:100Low confidence
and 440 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md ads/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md ads/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md ads/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md ads/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md ads/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.