skills/ads-dna/SKILL.md
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.
npx skillsauth add agricidaniel/claude-ads ads-dnaInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Extracts brand identity from a website and saves it as brand-profile.json
for use by /ads create, /ads generate, and /ads photoshoot.
| Command | What it does |
|---------|-------------|
| /ads dna <url> | Full brand extraction → brand-profile.json |
| /ads dna https://acme.com --quick | Fast extraction (homepage only) |
If the user hasn't provided a URL, ask:
"What website URL should I analyze for brand DNA? (e.g. https://yoursite.com)"
Use the WebFetch tool to retrieve each page. For each URL, use this fetch prompt:
"Return all visible text content, the full contents of any
<style>blocks, inlinestyle=attributes,<meta>tags, Google Fonts@importURLs, and anyog:imagevalues found on this page."
Fetch in this order:
<url>)<url>/about, then <url>/about-us, then <url>/our-story<url>/product, then <url>/products, then <url>/servicesIf --quick flag was provided: fetch the homepage only; skip steps 2 and 3.
If a secondary page returns a 404 or redirect error, continue with fewer pages and note: "Secondary pages unavailable; extraction based on homepage only. Confidence may be lower."
After fetching pages, capture 3 screenshots for comprehensive brand anchoring.
These serve as visual style references during /ads generate; the same approach
Pomelli uses to anchor ad images to the actual brand aesthetic.
Capture the following:
python ~/.claude/skills/ads/scripts/capture_screenshot.py [url]
Saves: ./brand-screenshots/{domain}_homepage.png
python ~/.claude/skills/ads/scripts/capture_screenshot.py [url]/products
Saves: ./brand-screenshots/{domain}_product.png
python ~/.claude/skills/ads/scripts/capture_screenshot.py [url]/about
Saves: ./brand-screenshots/{domain}_about.png
If a page is not found or returns an error, skip it gracefully and continue with the remaining pages.
If --quick flag was provided: skip screenshot capture entirely.
If capture fails (Playwright not installed, network error, JS-heavy SPA that times out):
"Screenshot capture skipped; run: python3 -m playwright install chromium"screenshots field in brand-profile.jsonFrom the fetched HTML, extract:
Colors:
og:image meta tag → analyze dominant colors (note 2-3 prominent hex values)background-color on body, header, .hero, .btn-primarycolor on h1, h2, .btnborder-color or background on .cta, .buttonTypography:
@import url(https://fonts.googleapis.com/...) → extract font names from URL pathfont-family on h1, h2, body, .headlinefamily=Inter:wght@..., heading_font = "Inter"Voice: Analyze hero headline, subheadline, About page intro, and CTA button text. Score each axis 1-10 using these heuristics:
| Signal | Score direction | |--------|----------------| | Uses "you/your" frequently | formal_casual → casual (+2) | | Uses technical jargon | expert_accessible → expert (-2) | | Short punchy sentences (≤8 words) | bold_subtle → bold (+2) | | Data/stats in hero | rational_emotional → rational (-2) | | "Transform", "revolutionize", "disrupt" | traditional_innovative → innovative (+2) | | Customer testimonials lead | rational_emotional → emotional (+2) | | Industry awards, "trusted by X" | traditional_innovative → traditional (-1) |
Each voice axis gets a confidence rating based on signal count:
Also extract structured data when available: schema.org markup, Open Graph tags (og:title, og:description, og:image), Twitter Card metadata.
Imagery style (from og:image and any visible hero image descriptions):
Forbidden elements (infer from brand positioning):
Read ~/.claude/skills/ads/references/brand-dna-template.md for the exact schema.
Construct the JSON object following the schema precisely. Use null for any
field that cannot be confidently extracted; do not guess.
Example of a low-confidence field:
"typography": {
"heading_font": null,
"body_font": "system-ui",
"pairing_descriptor": "system default (Google Fonts not detected)"
}
Write the JSON to ./brand-profile.json in the current working directory
(where the user is running Claude Code).
If screenshots were captured successfully in Step 2b, include a screenshots field:
"screenshots": {
"homepage": "./brand-screenshots/{domain}_homepage.png",
"product": "./brand-screenshots/{domain}_product.png",
"about": "./brand-screenshots/{domain}_about.png"
}
Include only the screenshots that were successfully captured. If a page was not
found or errored, omit that key. Omit the screenshots field entirely if Step 2b
was skipped or all captures failed.
Show the user:
✓ brand-profile.json saved to ./brand-profile.json
Brand DNA Summary:
Brand: [brand_name]
Voice: [descriptor 1], [descriptor 2], [descriptor 3]
Primary Color: [hex]
Typography: [heading_font] / [body_font]
Target: [age_range] [profession]
Screenshots: [N captured (homepage, product, about) in ./brand-screenshots/] OR [skipped]
Run `/ads create` to generate campaign concepts from this profile.
The visual-designer agent uses the most relevant screenshot per concept as a style reference when generating images via banana. For example, a product-focused concept references the product page screenshot, while a brand awareness concept references the homepage or about page screenshot.
{
"schema_version": "1.0",
"brand_name": "string",
"website_url": "string",
"extracted_at": "ISO-8601",
"voice": {
"formal_casual": 1-10,
"rational_emotional": 1-10,
"playful_serious": 1-10,
"bold_subtle": 1-10,
"traditional_innovative": 1-10,
"expert_accessible": 1-10,
"descriptors": ["adjective1", "adjective2", "adjective3"]
},
"colors": {
"primary": "#hexcode or null",
"secondary": ["#hex1", "#hex2"],
"forbidden": ["#hex or color name"],
"background": "#hexcode",
"text": "#hexcode"
},
"typography": {
"heading_font": "Font Name or null",
"body_font": "Font Name or system-ui",
"pairing_descriptor": "brief description"
},
"imagery": {
"style": "professional photography | illustration | flat design | mixed",
"subjects": ["subject1", "subject2"],
"composition": "brief description",
"forbidden": ["element1", "element2"]
},
"aesthetic": {
"mood_keywords": ["keyword1", "keyword2", "keyword3"],
"texture": "minimal | textured | mixed",
"negative_space": "generous | moderate | dense"
},
"brand_values": ["value1", "value2", "value3"],
"target_audience": {
"age_range": "e.g. 25-45",
"profession": "brief description",
"pain_points": ["pain1", "pain2"],
"aspirations": ["aspiration1", "aspiration2"]
}
}
tools
Cross-platform attribution health audit covering AdAttributionKit (iOS view-through 24h post-impression, WWDC 2025 configurable windows), GA4 attribution models (data-driven vs last-click), Consent Mode V2 enforcement, server-side attribution stitching, MMP integration health, and cross-device / cross-platform attribution. Use when user says attribution audit, attribution model, AdAttributionKit, AAK, view-through attribution, GA4 attribution, Consent Mode V2, conversion window, attribution window, MMP audit, AppsFlyer audit, Adjust audit, Branch audit, Singular audit, cross-device attribution, or cross-platform attribution.
testing
Amazon Ads deep analysis covering Sponsored Products, Sponsored Brands (incl. Sponsored Brands Video), Sponsored Display (audiences + contextual), and basic Amazon DSP. Evaluates campaign structure, ACOS/TACOS targets, search-term harvesting, negative keyword discipline, Brand Analytics signals, day-parting, bid management, auto vs manual campaign mix, ASIN targeting, and DSP retargeting. Use when user says Amazon Ads, Amazon advertising, Amazon PPC, Amazon search ads, Sponsored Products, Sponsored Brands, Sponsored Display, Amazon DSP, ACOS, TACOS, retail media audit, Amazon Marketing Services, AMS, or Amazon seller advertising.
development
Full multi-platform paid advertising audit with parallel subagent delegation. Analyzes Google Ads, Meta Ads, LinkedIn Ads, TikTok Ads, Microsoft Ads, and Apple Ads accounts via 6 parallel audit agents. Amazon Ads, cross-platform attribution, and server-side tracking are covered by their standalone sub-skills (ads-amazon, ads-attribution, ads-server-side-tracking) — Wave 3 will add their paired agents so they can dispatch in parallel here. Generates health score per platform and aggregate score (0-100). Use when user says audit, full ad check, analyze my ads, account health check, paid media audit, paid advertising audit, ad spend audit, advertising audit, or PPC audit.
development
Apple Ads (formerly Apple Search Ads) deep analysis for mobile app advertisers. Evaluates campaign structure, bid health, Custom Product Pages (CPPs), AdAttributionKit (view-through attribution 24h post-impression), MMP attribution, budget pacing, TAP coverage (Today/Search/Product Pages), Maximize Conversions bidding, and goal CPA benchmarks by country. Use when user says Apple Ads, Apple Search Ads, ASA, App Store ads, Apple ads, Search Ads, AdAttributionKit, view-through attribution, or is advertising a mobile app on iOS.