
Every new DTC product I onboard starts the same way. Founder hands me a product. I ask who it's for. I get back some version of "women 30-55 who care about wellness." That's not an audience — that's a census tract. I can't write a hook for that. The media buyer can't build a lookalike off it. And the founder usually knows it's thin, but doesn't have a faster path to something better.
The fast path is to generate audience hypotheses before you do the deep research, not after. Three sharp guesses you can test in a week beat one perfect persona that takes a month. So I built a Claude Code skill that takes a product description plus a price point and returns three audience hypotheses, each with a trigger event and two testable ad angles. It's the starter version of what I use on paying client work — about 60% of the job, free, copy-pasteable below.
Why "who's it for?" usually gets a bad answer
The default audience-research prompt — "describe the target customer for this product" — fails because there's no constraint on the output shape. The model returns a demographic blob, throws in "values authenticity," and stops. You can't run a campaign off that. There's nothing to test.
The fix is to force the model to produce three different audiences, with structured fields the media buyer actually needs. Demographic plus psychographic profile. The trigger event — the specific moment that turns the audience from "aware" to "buying." Where they hang out online, so you have somewhere to seed the lookalike or scrape for voice. And two ad angles per audience, so the creative team has somewhere to start. When the structure is locked, the output gets specific.
What this starter skill is
One markdown file Claude reads when you invoke it. You give it a product description and a price point. It returns a table of three audience hypotheses — each one a separate testable bet — formatted for handoff to a media buyer or copywriter.
No Python. No API calls. No runner. The skill is the prompt.
The starter skill
~/.claude/skills/audience-research/SKILL.md
---
name: audience-research
description: Generate 3 audience hypotheses for a DTC product from a product description and price point. Each hypothesis includes a demographic + psychographic profile, the trigger event, where the audience hangs out online, and 2 testable ad angles. Use when the user asks to "research audience for [product]", "who's the buyer for [product]", or invokes /audience-research.
---
# audience-research — Starter
You produce 3 audience hypotheses for a DTC product. Each hypothesis is a separate, testable bet — not three variations of the same persona. Your output must follow the structure exactly.
## Inputs
The user provides:
1. A one-paragraph product description (what it is, what it does, key ingredients or specs)
2. A price point (single unit price in USD)
If either piece is missing, ask before generating. Do not invent the price.
## The 3 hypotheses
Each hypothesis must differ on at least one of: life stage, primary trigger event, or purchase motivation. Do not produce three audiences who all want the same outcome — produce three audiences who want different outcomes from the same product.
For each audience, fill all four fields:
1. **Profile.** Demographic (age range, gender if relevant, income band, life stage) and psychographic (3-4 specific traits, NOT "values authenticity"). Psychographic must include at least one consumption habit and at least one belief about the category. Example: "reads ingredient labels", "distrusts mainstream supplement brands".
2. **Trigger event.** The specific moment that moves this audience from "aware of the problem" to "ready to buy." Must be concrete: a life event, a doctor visit, a failed alternative, a deadline. Not "they want to feel better."
3. **Where they hang out online.** 3 specific places — a subreddit, a creator, a forum, a podcast, a Facebook group. Name them. "Wellness Instagram" is not specific. "r/Supplements, Andrew Huberman's podcast, the Hormone University Facebook group" is specific.
4. **Two ad angles.** Each angle is one sentence. Both must be testable as a Meta primary text opener. The two angles must hit different psychological levers (e.g. one identity-driven, one outcome-driven; one curiosity, one contrarian).
## Output format
Return a markdown table with one row per audience. No commentary before or after the table.
| # | Audience name | Profile | Trigger event | Where they hang out | Ad angle A | Ad angle B |
|---|---------------|---------|---------------|---------------------|------------|------------|
| 1 | [name] | ... | ... | ... | ... | ... |
| 2 | [name] | ... | ... | ... | ... | ... |
| 3 | [name] | ... | ... | ... | ... | ... |
The audience name is a short label the media buyer can use in ad set names (3-5 words, lowercase, hyphenated). Example: "perimenopause-symptom-management".
## Rules
- The price point matters. Anchor the psychographics and trigger event to the price tier — a $24 product attracts different buyers than a $189 product. Reflect that.
- No vague psychographics. Banned: "values wellness", "cares about quality", "health-conscious". Always replace with a behavior or belief.
- No invented data. If you don't know whether a specific creator or forum exists for this audience, name a category instead (e.g. "any of the perimenopause podcasts in the top 20 on Apple Health").
- Ad angles must be product-specific. If the angle still works after swapping in a different product, rewrite it.
- No exclamation points. No "imagine if". No "are you tired of".
That's the whole skill. About 50 lines of markdown. The structure does the work.
How to use it
mkdir -p ~/.claude/skills/audience-research
Paste the SKILL.md above into ~/.claude/skills/audience-research/SKILL.md.
From inside Claude Code, invoke with a product description and price:
research audience for: a magnesium glycinate + L-theanine sleep supplement, third-party tested, 60 capsules per bottle, $42
Claude reads the skill, follows the structure, returns three hypotheses. First run takes about 12 seconds.
Example output
Here's what came back for that brief on the first try.
| # | Audience | Profile | Trigger event | Where they hang out | Ad angle A | Ad angle B |
|---|---|---|---|---|---|---|
| 1 | perimenopause-sleep-loss | Women 40-52, household income $90K+, reads ingredient labels, distrusts melatonin after dependency stories, has tried 2+ sleep aids in past year | Woke up at 3am five nights in a row and finally Googled "perimenopause sleep" instead of "can't sleep" | r/Perimenopause, the Hormone University Facebook group, Dr. Mary Claire Haver's content | The sleep supplement built around the magnesium your hormones stopped absorbing at 42. | Stop taking melatonin nightly. It's not a sleep aid — it's a hormone, and your body is making less of its own every week you take it. |
| 2 | high-performer-burnout | Men and women 28-38, knowledge workers, $120K+ income, tracks sleep on Whoop or Oura, believes "sleep is the new performance edge", will pay premium for clinical-grade | Whoop or Oura sleep score dropped below 70 for two weeks straight despite no obvious lifestyle change | Andrew Huberman's podcast, r/Biohackers, the Whoop subreddit | Your Whoop score isn't dropping because of stress. It's dropping because magnesium glycinate is the only form your nervous system absorbs after 30. | Two ingredients. Third-party tested. The sleep stack the longevity podcasts have been hinting at for 18 months. |
| 3 | postpartum-recovery | Women 30-40, 4-18 months postpartum, breastfeeding-aware, suspicious of supplements not cleared by their OB, household income $75K+ | Returned to work at 4 months postpartum and realized broken sleep wasn't ending with the newborn phase | r/BeyondTheBump, the Lily Nichols nutrition Facebook group, Real Food for Pregnancy listeners | The first sleep supplement formulated for moms who are still waking up at 2am, with two ingredients you can actually look up. | If your OB said "just try melatonin," ask her about L-theanine instead. It's the one in the postpartum sleep studies. |
Three different bets. Three different ad sets. Three different opening hooks. The media buyer can stand up three creative tests by Wednesday without needing another founder meeting.
Where the starter falls short
I use this for fast-pass discovery on every new DTC brand I onboard. For the version that goes into a paid client's media plan, it's not enough. The gaps:
- No behavioral data backing the "where they hang out" field. The starter relies on what the model already knew about online communities. That's stale and approximate. The production version pulls real audience overlap data from competitor-scrape — actual sites, podcasts, and creators where your target audience indexes high. Closer to what SparkToro does, but seeded from your own competitor list.
- No sentiment mining. The trigger event in the starter is the model's best guess. The production version reads structured sentiment from Reddit threads, Amazon reviews, and niche forums to surface the actual language buyers use when they describe the moment they decided to buy. That language becomes the hook, verbatim.
- No lookalike-seed synthesis. The production version takes a CRM export (your existing buyers) and works backward to identify which of the three hypotheses they cluster into, plus any fourth audience you didn't think to test. Without it, you're guessing about which hypothesis is closest to the actual buyer base — the starter is good for net-new, weaker for retargeting.
- No direct platform export. The production version pushes the validated audience to Meta as a custom audience scaffold (named ad sets, interest stacks, exclusion lists). The starter is markdown only — somebody still has to build the ad sets by hand.
The production version
The full skill lives in the Intelligence Suite pack on operatorstack.app/packs/intelligence-suite, $99. It adds the behavioral data layer, sentiment mining, lookalike synthesis, and platform export — alongside the rest of the intelligence stack (competitive ad-library spy, AI SEO intelligence, market-sophistication assessment).
Bonus: closing the loop with the Meta Marketing API
If you connect the Meta Marketing API to your audience-research workflow, the loop closes. You can pull historical performance from your own ad account by audience segment, feed it back into the prompt as evidence ("this audience cluster has run at a $32 CAC across 14 tests"), and bias future hypotheses toward the segments that have already worked. The starter is one-shot — the API version is iterative, getting sharper every time you run a test. Same conceptual move as the Meta Ads CLI for terminal-driven campaign management — pull your own performance data, treat it as fuel for the next generation.
The takeaway
Audience research doesn't need to be a four-week project. It needs to be a four-minute first pass that gives the media buyer something specific to test. Three hypotheses, structured fields, ad angles ready to ship. The Claude Code skill above does that for free. The production version closes the loop with real data — the Intelligence Suite pack is where that lives.
Or hire Clare Digital to run this — and the rest of the intelligence stack — against your account. Let's talk.