fameclaw
v1.2.0
Published
FameClaw — YouTube Creator Outreach CLI
Maintainers
Readme
100% local. Your data, emails, and credentials never leave your machine. Nothing is sent to any server, ever. No API keys, no cloud services, no tracking. Just curl + python3.
What It Does
- Scan your brand's website → auto-detect product category & niche
- Search YouTube for creators in matching niches
- Extract channel stats: subscribers, views, emails, descriptions
- Discover related channels via YouTube's recommendation algorithm
- Score every channel against your brand's audience profile (0-100)
- Email the best matches — personalized, mentions their actual videos
- Follow up automatically — day 3 and day 8 if no reply
- Negotiate autonomously — reads replies, counters, closes deals
Privacy
- All data stays on your device — CSVs, emails, credentials, campaign state
- Gmail credentials stored locally (
~/.config/fameclaw/gmail.json, mode 600) - No external APIs, no cloud services, no telemetry, no tracking
- Emails sent directly from your mailbox via SMTP — no middleman
- Works with Gmail, Outlook, iCloud, Yahoo, Zoho, Fastmail, or any SMTP server
- Open source — read every line of code yourself
Quick Start
Single channel
bash scripts/extract_channel_data.sh "https://youtube.com/@handle" output.csvBatch prospecting
bash scripts/prospect.sh \
--queries "tiktok shop tutorial" "dropshipping beginner" \
--target 100 \
--output channels.csv \
--max-subs 100000Full pipeline with audience matching
# 1. Scan brand site
bash scripts/onboard.sh --brand "MyBrand" --url "https://mybrand.com" --output scan.json
# 2. Create audience profile (edit the generated template)
# Sets target categories, demographics, authority preferences
# 3. Prospect
bash scripts/prospect.sh --config config.json
# 4. Score & rank
python3 scripts/score_channels.py --csv channels.csv --profile audience.json --output scored.csvAudience Matching
FameClaw scores creators using three dimensions:
| Dimension | Points | What It Checks | |-----------|--------|----------------| | Category match | 0-50 | Does the channel's content match your niche? | | Demographic match | 0-30 | Does the creator match your target customer? | | Authority match | 0-20 | Does the creator have professional credibility? |
14 content categories: Beauty & Skincare, Fitness & Health, Tech & Gadgets, Fashion & Lifestyle, Food & Cooking, E-commerce & Business, TikTok & Social Media, Finance & Investing, Gaming, Education & Tutorial, Home & DIY, Parenting & Family, Pets & Animals, Travel & Outdoor
Match types:
demographic— creator looks like your buyer (age, gender, lifestyle match)authority— creator has credibility (doctor, coach, certified expert, founder)demographic+authority— both signals present
Gmail Outreach
Send personalized emails to scraped creators using Google's official Workspace CLI.
Setup (one time)
# 1. Google Account → Security → 2-Step Verification → ON
# 2. Google Account → Security → App passwords → Generate
# 3. Create gmail_creds.json:
echo '{"email": "[email protected]", "app_password": "xxxx xxxx xxxx xxxx", "display_name": "Your Name"}' > gmail_creds.json
# 4. Test connection
python3 scripts/gmail.py test --creds gmail_creds.jsonConfigure campaign
{
"brand": "MyBrand",
"website": "https://mybrand.com",
"sender_name": "Alex",
"gmail_creds": "gmail_creds.json",
"current_partnerships": ["@CreatorA", "@CreatorB", "@CreatorC"],
"rate": 30,
"min_score": 25,
"max_per_run": 50
}Run outreach
# Send first emails (auto-fetches recent videos per creator)
python3 scripts/outreach.py send --csv scored.csv --config outreach.json --dry-run
python3 scripts/outreach.py send --csv scored.csv --config outreach.json
# Check for replies → moves responders to NEGOTIATE
python3 scripts/outreach.py check-replies --config outreach.json
# Auto follow-ups (day 3 + day 8)
python3 scripts/outreach.py followup --config outreach.json
# Campaign dashboard
python3 scripts/outreach.py status --config outreach.jsonEmail sequence
Three auto-generated emails per creator:
- Initial — short, mentions their specific video by name, drops 2-3 current partnerships
- Follow-up (day 3) — bump, references a different video
- Final (day 8) — last touch, respects their time
All emails stop automatically when the creator replies.
Scripts
| Script | Purpose |
|--------|---------|
| onboard.sh | Scan a brand's website, extract niche signals |
| scan_site.py | Site intelligence extraction (title, description, industry, social links) |
| prospect.sh | Batch prospecting pipeline with cron support |
| extract_channel_data.sh | Single channel → stats + email → CSV row |
| extract_email.sh | Email-only extraction from a channel |
| find_related_channels.sh | Discover related channels via YouTube recommendations |
| score_channels.py | Score & rank channels against audience profile |
| outreach.py | Multi-stage outreach pipeline (send, follow-up, reply detection) |
| gmail.py | Gmail client — SMTP send + IMAP reply tracking |
| outreach.sh | Simple one-shot email sender (legacy, uses gws CLI) |
| get_videos.sh | Fetch recent video titles for personalization |
| negotiate.py | Autonomous negotiation engine (classify, counter, close) |
Config
{
"queries": ["tiktok shop affiliate tutorial", "faceless youtube channel"],
"target_emails": 100,
"output": "channels.csv",
"max_subs": 100000,
"batch_size": 200,
"work_dir": "./prospect-run",
"cron_name": "my-prospect-job"
}Audience Profile
{
"brand": "MyBrand",
"url": "https://mybrand.com",
"target_categories": ["Beauty & Skincare", "Fashion & Lifestyle"],
"target_demographics": {
"age_range": "25-40",
"gender": "female",
"interests": ["skincare", "clean beauty"],
"location": "US"
},
"authority_preferred": true
}CSV Output
channel_name, handle, subscribers, total_videos, avg_views, median_views,
min_views, max_views, videos_sampled, email, description, external_links,
channel_url, content_category, match_score, match_type, match_reasonsCron Automation
For large targets, run on a schedule:
# Using OpenClaw
openclaw cron add --name "my-prospect" --every 30m \
--session isolated --model haiku --timeout-seconds 1800 \
--message "Run: bash scripts/prospect.sh --config config.json"
# Using system cron
*/30 * * * * bash /path/to/scripts/prospect.sh --config /path/to/config.jsonThe script auto-removes the cron job when the email target is reached.
How Email Discovery Works
- Scan YouTube channel page for emails in metadata/description
- Derive vanity domain from handle (strips "live", "official", "hq")
- Check vanity domain: root,
/contact,/about,/contact-us - Filter junk (image files, google/youtube domains, noreply)
Requirements
AI Agent Integration
FameClaw works as a skill for both major personal AI agent platforms:
OpenClaw
Drop the skill into your OpenClaw workspace and the agent handles the entire pipeline conversationally — onboarding, prospecting, scoring, outreach. Uses OpenClaw's cron system for automated runs.
NanoClaw
FameClaw ships with a NanoClaw-compatible skill in the nanoclaw/ directory. Copy it to your NanoClaw's .claude/skills/fameclaw/ directory:
cp -r nanoclaw/ /path/to/nanoclaw/.claude/skills/fameclaw/The scripts run inside NanoClaw's container sandbox. Mount ~/.config/fameclaw/ for credentials and your working directory for CSV output. Uses NanoClaw's task scheduler for recurring runs.
Both integrations use the same core scripts — zero divergence, zero API keys, fully local.
License
MIT — most of FameClaw is fully open source.
FSL-1.1-MIT — the scoring engine (score_channels.py) and negotiation engine (negotiate.py) are licensed under the Functional Source License. You can use and modify them for any purpose except building a competing product. Redistribution is not permitted. Companies under $1M/year revenue can use them freely, including commercially. Companies over $1M/year need a commercial license.
