Kickoff research for a brand you haven't worked on before — web research, existing-ad analysis from the Meta Ad Library, editorial-grammar profiling, sourced + AI-generated brand assets, hook/CTA libraries, and an ad concept brief. Produces one reusable brand-context pack (brand-summary, visual-identity, competitors, audience, existing-ads, brand-grammar, an asset manifest, and a concept brief) in a single pass. Use when starting on a brand the workspace hasn't touched.
npx skills add https://github.com/gooseworks-ai/goose-skills --skill brand-research
Given a brand (name and/or URL) and a product, produce the full creative-prep package for
it: research the product, analyze the brand's running ads, measure their editorial DNA,
source logos and reference photos, generate brand-anchored product + lifestyle imagery, and
write the brand-context documents a downstream ad/video pipeline consumes.
The output is a brand-context pack — a self-contained set of artifacts:
brand-summary, visual-identity, competitors, audience — the core brand context.existing-ads — what the brand's running ads reveal that web research misses.brand-grammar — the brand's editorial DNA (archetype, pacing, caption style).usage note, plus the binary assets themselves (logos, reference photos, generated stills).
Everything is written into a single brand-pack directory under output_dir.
brand (required) — the brand, used as the pack's folder name, e.g. amex, liquid-death.product (required) — the specific product / SKU / offer to research, e.g. "PlatinumCard", "Sparkling Water". Disambiguates brands with many SKUs.
brand_url (optional) — canonical homepage. Strongly recommended to avoid wrong-entityconfusion (e.g. Apple band vs. Apple Inc.).
output_dir (optional) — directory to write the brand pack into. Defaults to ./<brand>/.Resolve the location from this input; never hardcode a path.
max_existing_ads (optional, default 10) — cap on how many of the brand's running Metaads to pull for analysis.
brand_video_urls (optional) — the brand's own video URLs (launch films, demos). Ifprovided, run build-brand-clip-library afterward to cut them into a reusable clip library.
concept_count (optional, default 6–10) — number of social-ad concepts to draft.skip_generation (optional, default false) — skip image generation and ship research +brief only (useful when no image budget is available).
source-company-existing-ads — download the brand's running ads from the **Meta AdLibrary** (via the Apify FB Ad Library scraper) into a raw/ folder with provenance.
rename-and-index-ads — watch each downloaded ad, semantically rename it, and write anINDEX.md (per-ad strategy + cross-ad patterns).
analyze-reference-grammar — measure each ad's editorial DNA (cut points, pacing curve,archetype, audio mode) into a per-ad grammar-profile.json.
source-brand-assets — scrape logos + reference hero photos from the brand's site / press kit.understand-brand-assets — distill web research + reference photos into the visual-identitycontent (colors, typography, photography style).
analyze-ad-hooks — extract recurring hooks/motifs from the downloaded ads.generate-ad-concepts — produce the concept list for the concept brief.create-product-images-higgsfield-product-photoshoot — 4–6 hero/end-card product stills(Higgsfield product-photoshoot on gpt_image_2).
create-product-images-nanobanana — 8–12 vertical 9:16 lifestyle stills (Nano Banana Pro).yt-dlp + ffmpeg + Whisper), and web search + fetch.
brand + product resolves to one entity. If brand_url ismissing and the name is ambiguous, stop and ask.
<output_dir> — a brand-research/ folder for themarkdown docs, a brand-assets/ folder for the asset manifest + binaries (logos/,
reference-photos/, generated-product-shots/, generated-lifestyle/, songs/), and an
existing-ads/ folder (raw/ + renamed copies + a grammar/ subfolder). Only create
subfolders that will be populated.
(Adweek/AdAge/Campaign) → reputable category reviewers. Capture: product overview,
mechanics/pricing, benefits, target audience, current named campaigns with dates, core
positioning, voice/tone. Record every URL with its access date.
ads misses how the product is actually shown and talked about.
source-company-existing-ads (max_ads=max_existing_ads) to pull the brand's MetaAd Library ads into the existing-ads/raw/ folder. Manual fallback per that atom's docs.
rename-and-index-ads to produce semantically named copies + an INDEX.md (per-adstrategy + cross-ad patterns synthesis).
product mechanics the website doesn't show: how the product is held, used, applied,
opened, paired; in-app UI flows that appear on-screen; physical form factors and
packaging; claims/proof the brand leans on; demographics and contexts of the people
shown; objections the ads pre-empt. These feed existing-ads.md in step 7.
analyze-reference-grammar on each renamed ad. Each runemits a grammar-profile.json carrying the ad's archetype match + confidence,
cuts_per_10s[], mean shot length, payoff-hold ratio, audio mode, and aspect. These
per-ad profiles are the input to brand-grammar.md in step 7 — the brand's editorial
DNA, so a from-scratch ad can inherit the brand's cut rhythm and archetype defaults.
existing-ads.md AND brand-grammar.md ("No live Meta ads found as of <date> — grammar
defaults will be picked at design-brief time") and continue.
source-brand-assets:brand-assets/logos/.brand-assets/reference-photos/. Mark "not licensed for redistribution" in each
manifest entry's description.
brand-assets/songs/.
skip_generation=true):create-product-images-higgsfield-product-photoshoot,grounded on the strongest reference photo so the SKU stays consistent →
brand-assets/generated-product-shots/.
create-product-images-nanobanana (Nano Banana Pro), 2kvertical 9:16, same reference grounding → brand-assets/generated-lifestyle/.
reference photo, generated still, song). Each entry records, at minimum, a stable id, the
asset's path (relative to the brand pack), a kind
(`logo | wordmark | product_photo | lifestyle | video_ref | style_ref | ui_ref | song |
asset), a short name to search by, and a description` of how/when to use it plus any
usage constraint (e.g. "not licensed for redistribution" on scraped photos). A vague
description defeats the file's purpose. Write it as brand-assets/manifest.json.
research — never leave a placeholder marker behind:
brand-summary.md — What the company sells, Who they sell to, `Why people buy(jobs-to-be-done), Brand voice in three words, What to never say`.
visual-identity.md — Primary colors (hex), Typography, Logo usage rules,Photography style, Off-limits styles.
competitors.md — ## Direct (each competitor: one-line positioning, pricing tier,and how <brand> wins / loses vs them) and ## Reference creative (links / vibes to
emulate or avoid).
audience.md — Primary persona, Where they spend time online, `Objections theyraise, Proof points that land`. Include 3–4 distinct ICP segments and verbatim audience
phrasing (Reddit/forums) — these become VO seeds downstream.
existing-ads.md — narrative synthesis of what the brand's running ads (step 4)reveal that web research misses. Headers: Ads watched (count + date range + link to
existing-ads/INDEX.md), How the product actually shows up on screen, `Recurring hooks
and angles, Claims and proof the brand consistently leans on, Who's shown using it`,
Objections the ads pre-empt, Voice & caption treatment, Implications for new ads.
INDEX.md stays the per-ad catalog; this file is the synthesized read.
brand-grammar.md — the editorial DNA synthesized from the per-adgrammar-profile.json files. Headers: Dominant archetype (which creator-grammar
archetype the brand favors — e.g. creator-talking-head, vo-product-demo,
founder-monologue — with the per-ad split), Pacing curve (mean cuts_per_10s across
ads, range, payoff-hold use), Audio mode (music-only / vo+music / speech-only mix),
Caption family (burned karaoke / static lower-thirds / on-screen text bursts / none),
Hook construction (first 1.5s pattern), Defaults for new ads (recommended archetype +
cuts_per_10s target + caption preset a from-scratch ad should inherit). Human-readable
seeding, not a machine contract — pick the archetype from a small fixed vocabulary you
define up front and reuse across brands.
asset-urls.md — every sourced URL with its access date (the provenance trail).ui-references.md — ONLY if the product has notable in-app/product UI worthrecreating; catalog the key screens. Omit the file entirely otherwise.
concept-brief.md with sections: Observed patterns from existing ads (only ifstep 4 ran), Strategic foundation, Concept ideas (concept_count, each with hook + format
+ 15s/30s beat-by-beat + why-it-works + the KPI it serves), Production notes, Open
questions. This is supplementary brand-level seeding.
brand-research/video-research.json — a machine-readable companion that mirrorsthe deep-research findings from existing-ads.md + brand-grammar.md so a host can ingest
them without parsing prose. Shape: `{ competitors:[{name,relationship,notes}],
existingAds:{count,source,recurringHooks[],recurringClaims[],talentProfile,
objectionsPreempted[]}, grammar:{dominantArchetype,cutsPer10s,audioMode,captionFamily,
hookConstruction}, hooks:[{line,archetype,sourceAds[]}], ctas:[{line,intent,sourceAds[]}] }`.
Omit fields you don't have; write the file only when ≥1 ad was analyzed (skip on the "no
live ads" path). The markdown docs stay the human-readable source; this is their structured
echo.
sharing a name.
(gpt_image_2 → nano_banana_2).
asset library.
redistribution" in that asset's description in the manifest.
the research docs + concept brief.
observations — stub existing-ads.md per step 4 and omit the "Observed patterns" section of
the concept brief.
does NOT clip the brand's own videos. When the brand has its own footage worth reusing (or
brand_video_urls is provided), run the sibling molecule build-brand-clip-library.
The brand-context pack:
brand-research/brand-summary.mdbrand-research/visual-identity.mdbrand-research/competitors.mdbrand-research/audience.mdbrand-research/existing-ads.mdbrand-research/brand-grammar.mdbrand-research/asset-urls.mdbrand-research/video-research.json (structured echo of existing-ads + brand-grammar; only when ≥1 ad was analyzed)brand-research/ui-references.md (only when the product has notable UI)brand-assets/ — the asset manifest + populated logos/, reference-photos/, and(unless skipped) generated-product-shots/, generated-lifestyle/, songs/
existing-ads/ — raw/ originals, semantically renamed copies, INDEX.md, andgrammar/<slug>/grammar-profile.json per ad
concept-brief.mdbrand-research/*.md files (brand-summary, visual-identity,competitors, audience, existing-ads, brand-grammar) exist with **no remaining
placeholder markers** and use the exact section headers above.
existing-ads.md and brand-grammar.md either reference a populated INDEX.md + per-adgrammar-profile.json files (≥1 ad watched) or carry the explicit "No live Meta ads found"
stub — never silently empty.
brand-grammar.md names a Dominant archetype that maps to one of the fixed creator-grammararchetypes and gives concrete numeric cuts_per_10s defaults (not "fast" / "snappy" prose).
existing-ads/ contains raw/ originals, renamed copies, an INDEX.md whose per-ad blockswere filled by watching the files (not guessed from filenames), and per-ad
grammar-profile.json.
asset-urls.md cites real, dated sources for every research claim and sourced asset.path is relativeto the brand pack and resolves to a real file; every kind is in the allowed enum; no entry
is missing name/description.
brand_url was not provided → refuse.and stop before image generation.
concept brief.
back to the manual browser/curl path documented in that atom; if still empty, write the "no
live ads" stub in existing-ads.md and continue rather than halting.
INDEX.md, skip thatfile, continue.
Assists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.
Efficient database search tool for bioRxiv preprint server. Use this skill when searching for life sciences preprints by keywords, authors, date ranges, or categories, retrieving paper metadata, downloading PDFs, or conducting literature reviews.
Query and analyze scholarly literature using the OpenAlex database. This skill should be used when searching for academic papers, analyzing research trends, finding works by authors or institutions, tracking citations, discovering open access publications, or conducting bibliometric analysis across 240M+ scholarly works. Use for literature searches, research output analysis, citation analysis, and academic database queries.
Access USPTO APIs for patent/trademark searches, examination history (PEDS), assignments, citations, office actions, TSDR, for IP analysis and prior art searches.
Multiagent AI system for scientific research assistance that automates research workflows from data analysis to publication. This skill should be used when generating research ideas from datasets, developing research methodologies, executing computational experiments, performing literature searches, or generating publication-ready papers in LaTeX format. Supports end-to-end research pipelines with customizable agent orchestration.
Automated LLM-driven hypothesis generation and testing on tabular datasets. Use when you want to systematically explore hypotheses about patterns in empirical data (e.g., deception detection, content analysis). Combines literature insights with data-driven hypothesis testing. For manual hypothesis formulation use hypothesis-generation; for creative ideation use scientific-brainstorming.
Take gooseworks-ai/brand-research from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.