ad-policy-check
Checks paid ads against the ad platform's rules (Meta, TikTok, Google, LinkedIn and others) and the brand's category rules: the…
Step of the make-static-ads playbook: finds fresh, real static ads running on Meta — the brand's own, its competitors' and category leaders' — plus library templates that fit each ad's slot, shows them as a template gallery tagged with the concept each would carry, lets the
$ npx -y skills add gooseworks-ai/goose-skills --skill make-static-ads-find-references --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/make-static-ads-find-referencesContext preview
The summary Claude sees to decide when to auto-load this skill.
Step of the make-static-ads playbook: finds fresh, real static ads running on Meta — the brand's own, its competitors' and category leaders' — plus library templates that fit each ad's slot, shows them as a template gallery tagged with the concept each would carry, lets the
name: make-static-ads-find-references description: >- Step of the make-static-ads playbook: finds fresh, real static ads running on Meta — the brand's own, its competitors' and category leaders' — plus library templates that fit each ad's slot, shows them as a template gallery tagged with the concept each would carry, lets the marketer pick (or picks likely-working ones the brand hasn't tried), registers Meta ads that aren't templates yet, and records whether each ad runs structure-only. Run make-static-ads instead; not for direct use. version: 0.4.2
The how-to, endpoints and rules are `../make-static-ads/references/references-and-remix.md`; this atom is the order of work. Every ad gets a template — there is no "no template" slot.
**Reads:** the concept grid; own and competitor ads already imported (`gooseworks:ads_template_read` `mode: "mine"` / `"competitor"`, `filters.format: "image"`); the brand's tracked competitors (`gooseworks:brand_read` `sections: ["competitors"]`); saved inspiration (`gooseworks:social_inspiration_library`); the template library (`mode: "static_library"`, `"community"`). **Writes:** the gallery (HTML page or artifact, else a table with image links); per ad, the template id, advertiser and Ad Library link, and structure-only yes/no, on the grid row and in the batch file.
1. **Meta Ad Library first.** For the brand's tracked competitors and 3–5 leading brands in its category, read their live static ads: free in the host's browser (the advertiser's Ad Library page, default order = most spend first), else through the data proxy on one yes to a small ceiling (`references-and-remix.md` §2b; about 1 credit per brand). Keep statics that ran 14+ days, ran in several versions, or sit first on the page. 2. **Then the rest:** imported competitor ads (`ads_template_read` `mode: "competitor"`), the brand's own ads and the ads already made for it in GooseWorks (concept inventory and its "made before" list — those templates are not suggested again), saved inspiration, the template library. Import or refresh a tracked competitor with `gooseworks:ads_library_scrape` (free) when it has nothing imported or the import is older than ~7 days. 3. **Look at every candidate** against `references-and-remix.md` §1 (fits the slot, static, likely working — 14+ days, several versions, or among the first ads on a leader's page — new for this brand, real brand, buildable). Mark one suggestion per slot. Tag each direct competitor's ad "layout only" in the gallery (`references-and-remix.md` §5). 4. **Show the gallery** (§3) in the same message as the concepts when the host allows: 8–12 templates (3–5 per slot), templates with a headline first (a template with no headline makes an ad with no words, so use one only when the marketer picks it), each tagged with the concept it would carry, the suggestion marked. **The marketer picks** (Step 2 "you pick"). Step 2 "I pick", or no pick → the agent's suggestions, spread across frameworks and looks, shown in the same gallery as the agent's choice. A pick that differs from the suggestion keeps the slot's concept (`references-and-remix.md` §3.5); a pick already used for this brand gets one line saying so, and new content inside the layout (§3.6). A slot where nothing fits → more candidates (another leader, the library, a keyword search on a yes) until it has one. 5. **Register what isn't a template yet** (§4): a Meta ad found in §2b–d → re-host with `gooseworks:media_upload` (`source: {type: "fetch"}`) and register with `gooseworks:ads_template_create`; wait until its detail shows the remix fields. Read every picked template's detail (`template_id`) before compose. 6. **Structure-only per ad:** a template of another brand — competitor, category leader, library or community, however it was registered — is structure-only; the brand's own ads take the normal path. Record the decision per ad. Looking at candidates to choose them is fine; the blueprint itself is written at compose (Step 6).
Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Checks paid ads against the ad platform's rules (Meta, TikTok, Google, LinkedIn and others) and the brand's category rules: the…
Step of the analyze-performance playbook: calls ended tests, scores last week's calls, writes this week's kill/scale/hold calls…
Step of the analyze-performance playbook: flags tracking breaks with fixes and explains each big metric move with evidence,…
Step of the analyze-performance playbook: gathers the week's numbers from tools, exports and pastes, cleans them, and writes the…
Step of the analyze-performance playbook: ranks creative by angle, hook and format with spend gates, writes short per-channel…
Step of the analyze-performance playbook: joins cleaned store or CRM numbers with ad spend to build the business-truth table,…