agentsclimarketplace

Analyzing dtc stores

Skill Agent-Engineer-Master/skill-engineer/marketing/analyzing-dtc-stores

Shared public skills developed by Skill Engineer

Install
npx -y skills add Agent-Engineer-Master/skill-engineer --skill analyzing-dtc-stores

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when the user provides a DTC or ecommerce store URL and asks for a teardown, breakdown, brand analysis, competitor teardown, investor memo, store audit, deep dive, or 'what's going on with [brand]'. Produces an investor-grade markdown teardown report covering brand, market, unit economics, supply chain, channel mix, marketing, reviews, agentic-commerce readiness, risks, and a falsifiable verdict. Triggers: 'dtc teardown', 'brand teardown', 'store teardown', 'competitor teardown', 'analyze this store', 'investor memo on [brand]', 'break down [store url]'. Do NOT use for SEO-only audits, design-system extraction, lead-gen scraping, or general web scraping with no brand/investor focus.

SKILL.md

9.7 KB, as published. Nobody here has run it

Analyzing DTC Stores

Produces an investor-grade teardown of a DTC brand from its public URL. Read-only — never writes to the store, sends email, or posts anywhere.

Inputs

  • Required: store_url — brand's primary storefront.
  • Optional: depthquick | standard (default) | deep.
  • Optional: focus — free-text bias (e.g. "supply chain", "acquisition target fit").
  • Optional: --no-save — return the report inline and skip saving.

Process

Step 1 — Intake

  1. Parse store_url, depth, focus, --no-save.
  2. Derive brand_slug from the domain (e.g. brandname.combrand-name).
  3. Copy assets/report-template.md to a working draft. Do not save to the final path yet.

Step 2 — Recon sweep (scripted)

Run scripts/recon.py --url <store_url> to fetch homepage, robots.txt, sitemap, JSON-LD, and detect platform + apps (Shopify/Klaviyo/Gorgias/Recharge/Triple Whale signatures). Output cached in .cache/recon-[slug].json. Feeds the Tech Stack and Agentic Readiness sections.

Step 3 — Fan-out research (scripted + reasoning)

Load references/sources-playbook.md — required reading, it maps each report section to prescribed sources.

Run every applicable script. Fail gracefully: if a source is unreachable, log [source unavailable] in the report's Sources section and continue — never halt.

Mandatory scripts (all depths):

  • scripts/meta_ad_library.py --brand <brand> — active ad count, creative lifespan distribution.
  • scripts/importyeti_lookup.py --brand <brand> — supplier + country-of-origin + shipment volume. Mandatory — the #1 skipped source.
  • scripts/similarweb_lookup.py --domain <domain> — traffic with the 50K/mo accuracy floor flag.
  • scripts/store_leads_lookup.py --domain <domain> — Shopify plan, app stack, revenue bracket.
  • scripts/reviews_scan.py --brand <brand> --domain <domain> — Trustpilot + Amazon + YouTube review URLs.
  • scripts/reddit_search.py --brand <brand> — Reddit sentiment via OpenAI web search (requires OPENAI_API_KEY). Returns structured JSON: thread_count, sentiment, top_praise_theme, top_complaint_theme. "0 threads" is a valid finding — log it in §10.

Additional for standard and deep:

  • scripts/amazon_bsr.py --brand <brand> — BSR + est. monthly unit sales for top SKUs.

For the reasoning steps (brand story, competitive strategic group, verdict framing) use WebSearch + WebFetch directly.

Step 4 — Unit economics

Read references/unit-economics-benchmarks.md for category COGS / CAC / LTV ranges. Run scripts/unit_econ.py --category <cat> --aov <aov> --cac <cac> to produce a CM1 → CM2 → CM3 waterfall. Every figure must carry stated assumptions and a ~ (est., method: …) prefix.

Step 5 — Draft the report

Fill the 16-section template in order. Principles:

  • Prefer "Insufficient public data" over speculation. A 2-line section with the sources checked beats 8 lines of filler.
  • Cite inline with [1][2] — the Sources section at the end is the numbered index.
  • Every numeric claim is either cited or prefixed ~ with method shown. Non-negotiable.
  • Competitors must come from independent discovery, not the brand's own "vs" page. If the brand lists competitors on its site, exclude them until resurfaced via search intent or category overlap.
  • Show the CM waterfall, not just gross margin. Apparel especially — returns collapse CM2.
  • SimilarWeb under 50K/mo = directional only. Quote a range, not a point estimate; triangulate with ad count + review velocity + headcount.

For depth=deep: after the draft, present three alternative verdict framings (bull, bear, contrarian) and let the user pick before finalising.

Step 6 — Self-check (scripted, mandatory)

Run scripts/validate_report.py --path <draft>. The script fails loud with a remediation list if:

  • Any of the 16 sections is missing or empty.
  • Any numeric claim is unsourced and not prefixed ~.
  • The Sources section is empty or has fewer than 5 entries.
  • The Verdict section lacks a numerical "what would change my mind" anchor.
  • Any banned hype word appears (revolutionary, disruptive, game-changing, cutting-edge, seamless, unparalleled).
  • The ImportYeti check is missing from the Sources section (even a "no records found" entry counts).

Fix every failure and re-run. Do not proceed to Step 7 until the validator exits 0.

Step 7 — Save + return

Run scripts/save_report.py --path <draft> --slug <brand_slug> (honors --no-save). Returns the final path. Then output to chat: final path + a 5-bullet executive summary (≤120 words total).

Step 8 — Closing feedback gate

Ask the user exactly once: "Any corrections to this teardown before I log it?"

Route the response:

  • Behavioural feedback (tone, framing, depth preference) → append to references/learnings.md.
  • Factual exception (platform quirk, blocked source) → append to references/edge-cases.md.
  • "Never again" → add a rule to this SKILL.md.
  • Approval with no changes → copy final report to assets/approved-examples/.

Report structure (16 sections, exact order)

  1. Research confidence & source map
  2. Executive summary (5 bullets, ≤120 words)
  3. Brand & positioning
  4. Product & value proposition
  5. Market & category (TAM/SAM, growth, tailwinds, regulatory)
  6. Competitive landscape (5–10 competitors in a table; name the strategic group)
  7. Pricing & unit economics (CM1/CM2/CM3 waterfall, CAC, payback — show the math)
  8. Supply chain & sourcing (ImportYeti, FDA, LinkedIn, job ads)
  9. Channel mix (DTC, Amazon, marketplaces, wholesale, international)
  10. Marketing & traffic (Meta Ad Library, Similarweb, creative lifespan, SEO)
  11. Customer voice & sentiment (review volumes, themes, NPS proxy)
  12. Tech stack
  13. Agentic / AI readiness (JSON-LD density, agentic storefront signals, checkout friction)
  14. Risks & red flags (incl. manufacturer-direct threat, tariff exposure)
  15. Financial summary & valuation (EV/Sales comps, buyer-type implications)
  16. Investor verdict (bull case, bear case, numerical "change my mind" anchor)
  17. Sources (numbered, with access dates)

Style: crisp, evidence-led, numerate, slightly sceptical. Voice of a senior analyst writing for a partner with 10 minutes. Length: 1,500–3,000 words for standard.

Gotchas

  • Symptom: report states "$X ARR" without a source. Cause: triangulation mistaken for fact. Fix: every revenue figure cites a filing/interview/press release, or prefix ~ (est., method: …) and show the math.
  • Symptom: competitor list matches the brand's own "vs" page. Cause: used brand marketing as source of truth. Fix: build the competitor set from search intent + category overlap; exclude any competitor named on the brand's own site until independently surfaced.
  • Symptom: unit economics cite gross margin only. Cause: stopped at CM1. Fix: always show the CM1 → CM2 → CM3 waterfall with stated assumptions; apparel especially — 24–30% return rates collapse CM2.
  • Symptom: SimilarWeb precise visitor count for a small brand. Cause: ignored the 50K/mo accuracy floor. Fix: below 50K/mo, quote a range and label "directional only"; triangulate with ad count, review velocity, LinkedIn headcount.
  • Symptom: no ImportYeti entry in Sources. Cause: forgot the mandatory check — the single most commonly skipped DTC source. Fix: Step 3 blocks until importyeti_lookup.py has run; a "no shipment records found" result still counts.
  • Symptom: verdict hedges ("interesting brand, execution risk at scale"). Cause: analyst avoided commitment. Fix: verdict must contain a numerical anchor (e.g. "investable below $80M valuation") AND a "what would change my mind" line. Validator fails otherwise.
  • Symptom: Meta-reported ROAS cited without qualification. Cause: ignored post-iOS14 attribution collapse. Fix: treat brand-reported Meta ROAS as directional; note the ATT caveat; prefer MER or incrementality-adjusted estimates.
  • Symptom: blended CAC cited instead of new-customer CAC. Cause: blended metric flatters because returning-customer spend is in the denominator. Fix: separate the two; new-customer CAC is the scaling metric investors care about.

Rules

  • SKILL.md is the routing layer. Domain knowledge lives in references/ — load on demand, don't embed.
  • references/sources-playbook.md is required reading at Step 3. Not optional.
  • scripts/validate_report.py is a hard gate at Step 6. Not optional.
  • ImportYeti check is mandatory even on quick depth — a "no records found" entry is an acceptable result, silence is not.
  • Never call this skill "complete" until the validator exits 0.
  • Read-only always. Never POST to the store, send email, or publish.
  • Banned hype words in output: revolutionary, disruptive, game-changing, cutting-edge, seamless, unparalleled.

<!-- Built with Agent Engineer Master — get your own production-ready skill: www.agentengineermaster.com/skill-engineer -->

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.