Imported from Jedward23/claude-research-skill (
skills/research/SKILL.md). Install upstream withnpx skills add Jedward23/claude-research-skill --skill research. Copyright stays with the author.
Deep Research Skill
Research any industry by gathering insights from YouTube videos, blog posts, news articles, and social media — then synthesize everything into a beautiful report and optionally email it to you.
Setup (First-Time Only)
You need 1 required key and 1 optional key to use this skill.
1. Supadata API Key (Required)
Supadata lets you pull YouTube transcripts, social media metadata, and scrape any webpage.
- Go to supadata.ai and create a free account (100 free credits/month)
- Copy your API key from the dashboard
- Add it to your shell:
echo 'export SUPADATA_API_KEY="your_key_here"' >> ~/.zshrc source ~/.zshrc
2. Resend API Key (Optional — for email delivery)
If you want the research report emailed to you as a beautifully formatted HTML email:
- Go to resend.com and create a free account (100 emails/day)
- Copy your API key
- Add it to your shell:
echo 'export RESEND_API_KEY="your_key_here"' >> ~/.zshrc echo 'export RESEARCH_EMAIL="you@example.com"' >> ~/.zshrc source ~/.zshrc
That's it! The skill uses your keys automatically.
Research Flow
Step 1: Identify the Industry
If the user provided an industry in $ARGUMENTS, use that. Otherwise, ask:
What industry do you want to research? Examples: e-commerce, SaaS, healthcare, real estate, fintech, AI/ML, fitness, education, etc.
Step 2: Suggest Sub-Topics
Once you know the industry, suggest 5-8 specific sub-topics within it. Tailor these to what's currently trending and actionable.
Example for e-commerce:
Here are some hot sub-topics within e-commerce right now:
- Inventory management — demand forecasting, dead stock optimization
- Paid advertising — Meta ads changes, Google Performance Max, TikTok Shop ads
- New shopping methods — live shopping, social commerce, AR try-on
- Subscription models — retention strategies, churn reduction
- AI in e-commerce — personalized recommendations, AI customer service
- Cross-border selling — Temu/Shein disruption, tariff impacts
- Fulfillment & logistics — same-day delivery, micro-fulfillment centers
Which ones interest you? (Pick 1-3, or say "all")
Step 3: Choose Sources
Ask the user what types of sources they want:
What sources should I pull from?
- 🎬 YouTube videos — transcribe and extract insights from top videos
- 📰 News articles — recent industry news and analysis
- 📝 Blog posts — in-depth articles and thought leadership
- 📱 Social media — trending posts on X, TikTok, Instagram
- 🌐 All of the above
Pick your sources (e.g., "1, 2" or "all")
Step 4: Execute Research
IMPORTANT: Check that SUPADATA_API_KEY is set before making API calls:
[ -z "$SUPADATA_API_KEY" ] && echo "SUPADATA_API_KEY is not set. Get your free key at https://supadata.ai/?ref=jason" && exit 1
Run all source types in parallel using the Agent tool for maximum speed. Launch one agent per source type (YouTube, News, Blogs, Social Media) simultaneously.
🎬 YouTube Research
Find videos via WebSearch:
site:youtube.com {industry} {sub-topic} 2025 2026
Get metadata to filter by views/relevance:
curl -s "https://api.supadata.ai/v1/metadata?url=VIDEO_URL" \
-H "x-api-key: $SUPADATA_API_KEY" | python3 -m json.tool
Transcribe top 3-5 videos:
curl -s "https://api.supadata.ai/v1/transcript?url=VIDEO_URL&text=true" \
-H "x-api-key: $SUPADATA_API_KEY"
Extract from each transcript: key insights, data points, expert quotes, actionable takeaways.
📰 News & 📝 Blog Research
Find articles via WebSearch:
{industry} {sub-topic} news trends analysis 2026
{industry} {sub-topic} site:medium.com OR site:substack.com
Scrape top 8-10 articles:
curl -s "https://api.supadata.ai/v1/web/scrape?url=ARTICLE_URL" \
-H "x-api-key: $SUPADATA_API_KEY" | python3 -c "import sys,json; print(json.load(sys.stdin).get('content','')[:5000])"
📱 Social Media Research
Find discussions via WebSearch:
site:x.com {industry} {sub-topic}
Get post metadata:
curl -s "https://api.supadata.ai/v1/metadata?url=https://x.com/user/status/ID" \
-H "x-api-key: $SUPADATA_API_KEY"
Step 5: Synthesize & Save
Compile all findings into a structured markdown report and save to the current working directory:
{industry}-{subtopic}-research-{YYYY-MM-DD}.md
Use this structure:
# {Industry} Research: {Sub-topic(s)}
## Executive Summary
3-5 bullet points of the most important findings.
## Key Trends
- Trend 1: [description + evidence]
## Insights by Source
### From YouTube
- **[Video Title]** by [Channel] ([views] views)
- Key insight
- Notable quote: "..."
### From News & Blogs
- **[Article Title]** — [Publication]
- Key finding
### From Social Media
- **@[handle]**: [key point] ([engagement])
## Opportunities & Gaps
1. ...
## Actionable Takeaways
1. ...
## Sources
- [Title](URL)
Step 6: Email the Report (Optional)
After saving the markdown report, ask the user:
Want me to email you this report? (Requires RESEND_API_KEY and RESEARCH_EMAIL to be set — see setup instructions)
If yes, or if the user asked for an email upfront, generate and send an HTML email using the template below.
How to Send
Build the full HTML email string using the template in the next section, then send it via a Python script:
python3 /tmp/send_research_email.py
Where the Python script:
- Builds the HTML from the research data
- Sends via Resend API:
import subprocess, json
html = "...the full HTML string..."
cmd = [
"curl", "-s", "-X", "POST", "https://api.resend.com/emails",
"-H", f"Authorization: Bearer {resend_key}",
"-H", "Content-Type: application/json",
"-d", json.dumps({
"from": "onboarding@resend.dev",
"to": email,
"subject": f"{industry} Research Report — {date}",
"html": html
})
]
result = subprocess.run(cmd, capture_output=True, text=True)
response = json.loads(result.stdout)
if "id" in response:
print(f"Email sent successfully! ID: {response['id']}")
else:
print(f"Error: {result.stdout}")
Check the response — success returns {"id": "..."}.
HTML Email Template
Use this exact template structure for the email. Replace all {placeholder} values with actual research data. Use inline CSS only (email clients strip <style> tags).
<div style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; max-width: 720px; margin: 0 auto; color: #1a1a1a; line-height: 1.6;">
<!-- ============ HEADER ============ -->
<div style="background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); padding: 40px 32px; border-radius: 12px 12px 0 0;">
<h1 style="color: #fff; margin: 0 0 8px 0; font-size: 28px;">{Industry} Industry Research</h1>
<p style="color: #94a3b8; margin: 0; font-size: 14px;">{Date} • {X} YouTube videos transcribed • {Y}+ articles scraped • {Z}+ social posts analyzed</p>
</div>
<div style="padding: 32px; background: #fff; border: 1px solid #e2e8f0;">
<!-- ============ EXECUTIVE SUMMARY ============ -->
<h2 style="color: #0f172a; font-size: 22px; border-bottom: 2px solid #3b82f6; padding-bottom: 8px;">Executive Summary</h2>
<div style="background: #f0f9ff; border-left: 4px solid #3b82f6; padding: 16px 20px; margin: 16px 0; border-radius: 0 8px 8px 0;">
<ul style="margin: 0; padding-left: 20px;">
<!-- 3-5 bullet points, each with <strong>bold lead</strong> followed by detail -->
<li><strong>{Bold finding}.</strong> {Supporting detail and data.}</li>
<li><strong>{Bold finding}.</strong> {Supporting detail and data.}</li>
<li><strong>{Bold finding}.</strong> {Supporting detail and data.}</li>
</ul>
</div>
<!-- ============ KEY TRENDS ============ -->
<h2 style="color: #0f172a; font-size: 22px; border-bottom: 2px solid #3b82f6; padding-bottom: 8px; margin-top: 32px;">{N} Key Trends</h2>
<div style="margin: 16px 0;">
<!-- Repeat this block for each trend -->
<h3 style="color: #1e40af; margin-bottom: 4px;">{N}. {Trend Title}</h3>
<p>{Trend description with data points and evidence.}</p>
</div>
<!-- ============ YOUTUBE TABLE ============ -->
<h2 style="color: #0f172a; font-size: 22px; border-bottom: 2px solid #3b82f6; padding-bottom: 8px; margin-top: 32px;">Top YouTube Insights</h2>
<table style="width: 100%; border-collapse: collapse; font-size: 13px; margin: 16px 0;">
<tr style="background: #f1f5f9;">
<th style="padding: 8px 12px; text-align: left; border-bottom: 2px solid #cbd5e1;">Video</th>
<th style="padding: 8px 12px; text-align: left; border-bottom: 2px solid #cbd5e1;">Channel</th>
<th style="padding: 8px 12px; text-align: right; border-bottom: 2px solid #cbd5e1;">Views</th>
</tr>
<!-- Alternate row backgrounds: plain and style="background: #f8fafc;" -->
<tr>
<td style="padding: 8px 12px; border-bottom: 1px solid #e2e8f0;"><a href="{youtube_url}" style="color: #2563eb;">{Video Title}</a></td>
<td style="padding: 8px 12px; border-bottom: 1px solid #e2e8f0;">{Channel}</td>
<td style="padding: 8px 12px; text-align: right; border-bottom: 1px solid #e2e8f0;">{Views}</td>
</tr>
</table>
<!-- ============ BEST QUOTES ============ -->
<div style="background: #fefce8; border-left: 4px solid #eab308; padding: 16px 20px; margin: 16px 0; border-radius: 0 8px 8px 0;">
<p style="margin: 0 0 8px 0; font-weight: 600;">Best Quotes:</p>
<!-- Repeat for each quote -->
<p style="margin: 0 0 8px 0; font-style: italic;">“{Quote text}” — {Speaker}</p>
</div>
<!-- ============ KEY DATA POINTS (Stat Cards) ============ -->
<h2 style="color: #0f172a; font-size: 22px; border-bottom: 2px solid #3b82f6; padding-bottom: 8px; margin-top: 32px;">Key Data Points</h2>
<!-- Use a variety of color schemes for visual variety. Pick from these palettes: -->
<!-- Green: bg #f0fdf4, border #bbf7d0, number #15803d, text #166534 -->
<!-- Purple: bg #faf5ff, border #e9d5ff, number #7e22ce, text #6b21a8 -->
<!-- Orange: bg #fff7ed, border #fed7aa, number #c2410c, text #9a3412 -->
<!-- Red: bg #fef2f2, border #fecaca, number #dc2626, text #991b1b -->
<!-- Blue: bg #f0f9ff, border #bae6fd, number #0369a1, text #0c4a6e -->
<!-- Teal: bg #ecfdf5, border #a7f3d0, number #059669, text #065f46 -->
<div style="display: grid; gap: 12px; margin: 16px 0;">
<!-- Repeat for each stat, cycling through color palettes -->
<div style="background: {bg_color}; border: 1px solid {border_color}; border-radius: 8px; padding: 16px;">
<div style="font-size: 28px; font-weight: 700; color: {number_color};">{Stat Number}</div>
<div style="color: {text_color}; font-size: 13px;">{Stat description}</div>
</div>
</div>
<!-- ============ SOCIAL MEDIA PULSE ============ -->
<h2 style="color: #0f172a; font-size: 22px; border-bottom: 2px solid #3b82f6; padding-bottom: 8px; margin-top: 32px;">Social Media Pulse</h2>
<div style="border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden; margin: 16px 0;">
<!-- Alternate row backgrounds: plain and style="background: #f8fafc;" -->
<div style="padding: 16px; border-bottom: 1px solid #e2e8f0;">
<strong>{Name}</strong> <span style="color: #64748b;">@{handle} • {Title/Role}</span>
<p style="margin: 8px 0 0 0;">“{Quote or summary}”</p>
</div>
<div style="padding: 16px; border-bottom: 1px solid #e2e8f0; background: #f8fafc;">
<strong>{Name}</strong> <span style="color: #64748b;">@{handle} • {Title/Role}</span>
<p style="margin: 8px 0 0 0;">{Quote or summary}</p>
</div>
</div>
<!-- ============ OPPORTUNITIES ============ -->
<h2 style="color: #0f172a; font-size: 22px; border-bottom: 2px solid #3b82f6; padding-bottom: 8px; margin-top: 32px;">{N} Biggest Opportunities</h2>
<ol style="padding-left: 20px;">
<!-- Repeat for each opportunity -->
<li style="margin-bottom: 8px;"><strong>{Opportunity title}</strong> — {Brief explanation.}</li>
</ol>
<!-- ============ ACTIONABLE TAKEAWAYS ============ -->
<h2 style="color: #0f172a; font-size: 22px; border-bottom: 2px solid #3b82f6; padding-bottom: 8px; margin-top: 32px;">{N} Actionable Takeaways</h2>
<!-- Group takeaways by category with subheadings -->
<h3 style="color: #475569; font-size: 16px; margin-bottom: 8px;">{Category Name}</h3>
<ol style="padding-left: 20px; font-size: 14px;">
<li>{Takeaway with specific data}</li>
<li>{Takeaway with specific data}</li>
</ol>
<!-- Repeat h3 + ol for each category (e.g., Paid Advertising, AI, Social Commerce, Operations, Retention) -->
<!-- ============ SOURCES ============ -->
<h2 style="color: #0f172a; font-size: 22px; border-bottom: 2px solid #3b82f6; padding-bottom: 8px; margin-top: 32px;">All Sources</h2>
<h3 style="color: #475569; font-size: 14px;">YouTube Videos ({N} transcribed)</h3>
<ul style="font-size: 13px; padding-left: 20px;">
<li><a href="{url}" style="color: #2563eb;">{Channel} — {Title}</a> ({Views} views)</li>
</ul>
<h3 style="color: #475569; font-size: 14px;">News & Blog Articles ({N})</h3>
<ul style="font-size: 13px; padding-left: 20px;">
<li><a href="{url}" style="color: #2563eb;">{Publication} — {Title}</a></li>
</ul>
<h3 style="color: #475569; font-size: 14px;">Social Media Posts ({N})</h3>
<ul style="font-size: 13px; padding-left: 20px;">
<li><a href="{url}" style="color: #2563eb;">@{handle} — {Topic}</a></li>
</ul>
</div>
<!-- ============ FOOTER ============ -->
<div style="background: #f1f5f9; padding: 24px 32px; border-radius: 0 0 12px 12px; text-align: center;">
<p style="margin: 0; color: #64748b; font-size: 13px;">Research compiled with Claude Code's <code>/research</code> skill using <a href="https://supadata.ai/?ref=jason" style="color: #2563eb;">Supadata API</a> for YouTube transcripts, social media metadata, and web scraping.</p>
</div>
</div>
Template Rules
- Use inline CSS only — email clients strip
<style>tags - Escape HTML entities — use
“”for quotes,—for dashes,•for bullets,&for ampersands - Alternate row backgrounds — use plain white and
background: #f8fafc;for zebra striping in tables and social cards - Cycle stat card colors — use the 6 color palettes listed above, don't repeat the same color consecutively
- Keep the stat cards impactful — pick the 4-6 most surprising or important numbers from the research
- All links must be clickable — every YouTube video, article, and social post should link to the original source
- The footer always includes the Supadata affiliate link
Scheduled Research Digest (Optional Add-On)
After completing a research session, offer the user the option to receive a recurring research digest via email.
Want me to run this research on a schedule and email you the results?
- Every day — fresh research every morning
- Every 2 days — research every other day
- Every week — weekly research roundup (Mondays)
- Every 2 weeks — bi-weekly deep dive
- No thanks — just this one-time report
Pick a frequency (or say "no thanks")
Requires: RESEND_API_KEY and RESEARCH_EMAIL to be set (see setup above).
Schedule Mapping
| User Choice | Cron Expression | Description |
|---|---|---|
| Every day | 0 8 * * * |
8:00 AM daily |
| Every 2 days | 0 8 */2 * * |
8:00 AM every 2 days |
| Every week | 0 8 * * 1 |
8:00 AM every Monday |
| Every 2 weeks | 0 8 1,15 * * |
8:00 AM on 1st and 15th |
Ask the user what time they'd like to receive it (default: 8:00 AM). Adjust the hour in the cron expression accordingly.
Creating the Schedule
Use RemoteTrigger to create a recurring remote agent:
{
"name": "research-digest-{industry}",
"description": "{Frequency} {industry} research digest sent to {user_email}",
"schedule": "{cron_expression}",
"prompt": "Run /research for {industry} focused on {sub-topics}. Sources: all. After generating the report, format it using the HTML email template from the /research skill and send via Resend API to $RESEARCH_EMAIL using $RESEND_API_KEY. Subject: '{Industry} Research Digest — {today's date}'."
}
Confirming Setup
Tell the user:
Your {frequency} research digest is set up! You'll receive an email at {user_email} with the latest {industry} research.
To manage later, just ask:
- "List my scheduled research"
- "Change my research digest to weekly"
- "Cancel my research digest"
Managing Existing Digests
- List: RemoteTrigger action
list, filter for "research-digest" - Update: RemoteTrigger action
updateto change schedule, topics, or email - Cancel: RemoteTrigger action
getto find the ID, then delete
Tips for Best Results
- Be specific with sub-topics: "TikTok Shop ads for DTC brands" > "e-commerce advertising"
- Layer sources: YouTube gives depth, news gives recency, blogs give analysis, social gives sentiment
- Follow the experts: When you find a great source, check what else they've published
- Look for contrarian takes: The most valuable insights often come from people disagreeing with the consensus
Credit Usage
Supadata (free tier: 100 credits/month):
- Web scrape: 1 credit | Transcript: 1 credit | Metadata: 1 credit
- Typical session: ~15-25 credits
- Need more? Upgrade here
Resend (free tier: 100 emails/day):
- Each report email: 1 email
- Daily digest: 1 email/day