Best use case
mass-outreach is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Multi-channel outreach via Telegram/Email/WhatsApp
Teams using mass-outreach should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/mass-outreach/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How mass-outreach Compares
| Feature / Agent | mass-outreach | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Multi-channel outreach via Telegram/Email/WhatsApp
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Mass Outreach Skill
> Mass message sending via Telegram, Email, WhatsApp with lessons learned from previous mistakes.
## Lessons Learned (Mistakes NOT to repeat)
### 1. Verify data BEFORE sending
**Mistake:** Asked people to write an intro who had already done so.
- @oleksii_badika - had written an intro, was asked again
- @Geddare (Yaroslava Bahriy) - had written an intro, was asked again
**Solution:**
```
ALWAYS check via Telegram API who has already posted in the "Introduction" topic
DO NOT rely on old CSV data
```
### 2. Verify group membership
**Mistake:** Marked a person as "IN GROUP" when they were not in the group.
- @danylchenko - marked as in group, actually was not
**Solution:**
```
ALWAYS verify membership via client.get_participants(group)
DO NOT rely on notes in CRM
```
### 3. Verify dates
**Mistake:** Wrong dates in the message (Sunday 9, Monday 10 instead of 8 and 9).
- @KR0Ler and @alexpazhyn received incorrect dates
**Solution:**
```python
from datetime import datetime, timedelta
today = datetime.now()
# Find the nearest Sunday
days_until_sunday = (6 - today.weekday()) % 7
if days_until_sunday == 0:
days_until_sunday = 7
next_sunday = today + timedelta(days=days_until_sunday)
next_monday = next_sunday + timedelta(days=1)
print(f"Sunday: {next_sunday.strftime('%d.%m')}")
print(f"Monday: {next_monday.strftime('%d.%m')}")
```
### 4. Check who has already been contacted
**Mistake:** Did not check sent message history before the campaign.
**Solution:**
```
ALWAYS before sending:
1. Get the list of all potential recipients
2. Check outgoing messages for the last N days
3. Exclude those who have already been contacted
4. Show to the user for confirmation
```
### 5. Rate Limiting
**Rules for Telegram:**
- Minimum 45-60 seconds between messages
- No more than 30-50 messages per day
- If FloodWait -- stop and wait
**Rules for Email:**
- Batch of 10-20 emails
- 5-10 second delay between emails
- No more than 100 per day
## Pre-send checklist
```
[ ] 1. Dates verified (day of week = date)
[ ] 2. Recipient list verified via API
[ ] 3. Checked who has already received messages
[ ] 4. Checked who has written an intro (if relevant)
[ ] 5. Template shown to user and approved
[ ] 6. Rate limits configured
[ ] 7. There is a plan in case of error
```
## Execution template
```python
# 1. Data verification
def verify_recipients(group_name, check_intro=True):
# Get all group participants
participants = client.get_participants(group)
# If needed -- check who has written an intro
if check_intro:
intro_messages = client.get_messages(group, limit=2000)
intro_authors = extract_intro_authors(intro_messages)
# Check who has already been contacted
already_sent = check_sent_messages(participants, days=3)
return {
'all': participants,
'with_intro': intro_authors if check_intro else [],
'already_sent': already_sent,
'to_send': [p for p in participants if p not in already_sent]
}
# 2. Sending with rate limiting
def send_with_delay(recipients, message_template, delay=45):
for i, recipient in enumerate(recipients):
try:
message = personalize(message_template, recipient)
client.send_message(recipient, message)
print(f"✓ {i+1}/{len(recipients)} - sent")
if i < len(recipients) - 1:
time.sleep(delay)
except FloodWaitError as e:
print(f"FloodWait: sleeping {e.seconds}s")
time.sleep(e.seconds)
except Exception as e:
print(f"✗ Error: {e}")
log_error(recipient, e)
```
## After sending
1. Log in activities.csv
2. Update statuses in CRM
3. Commit via change-review
4. Create a follow-up task
## Paths
| What | Path |
|------|------|
| Telegram sessions | `$SALES_PATH/telegram/sessions/` |
| CRM contacts | `$CRM_PATH/contacts/` |
| Activities | `$CRM_PATH/activities.csv` |
| Communities | `$CRM_PATH/communities/` |Related Skills
whatsapp-outreach-run
Automatic WhatsApp outreach agent run
email-outreach-run
Automatic email outreach agent run
wemp-operator
> 微信公众号全功能运营——草稿/发布/评论/用户/素材/群发/统计/菜单/二维码 API 封装
zsxq-smart-publish
Publish and manage content on 知识星球 (zsxq.com). Supports talk posts, Q&A, long articles, file sharing, digest/bookmark, homework tasks, and tag management. Use when publishing content to 知识星球, creating/editing posts, uploading files/images/audio, managing digests, batch publishing, or formatting content for 知识星球.
zoom-automation
Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.
zoho-crm-automation
Automate Zoho CRM tasks via Rube MCP (Composio): create/update records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.
ziliu-publisher
字流(Ziliu) - AI驱动的多平台内容分发工具。用于一次创作、智能适配排版、一键分发到16+平台(公众号/知乎/小红书/B站/抖音/微博/X等)。当用户需要多平台发布、内容排版、格式适配时使用。触发词:字流、ziliu、多平台发布、一键分发、内容分发、排版发布。
zhihu-post-skill
> 知乎文章发布——知乎平台内容创作与发布自动化
zendesk-automation
Automate Zendesk tasks via Rube MCP (Composio): tickets, users, organizations, replies. Always search tools first for current schemas.
youtube-knowledge-extractor
This skill performs deep analysis of YouTube videos through **both information channels** Multimodal YouTube video analysis through both audio (transcript) and visual (frame extraction + image analysis) channels. Especially powerful for HowTo videos, tutorials, demos, and explainer videos where what is SHOWN (screenshots, UI demos, diagrams, code, physical actions) is just as important as what is SAID. Use this skill whenever a user wants to analyze, summarize, or create step-by-step guides from YouTube videos, or when they share a YouTube URL and want to understand what happens in the video. Triggers on requests like "Analyze this YouTube video", "Create a step-by-step guide from this video", "What does this video show?", "Summarize this tutorial", or any YouTube URL shared with analysis intent.
youtube-factory
Generate complete YouTube videos from a single prompt - script, voiceover, stock footage, captions, thumbnail. Self-contained, no external modules. 100% free tools.
youtube-automation
Automate YouTube tasks via Rube MCP (Composio): upload videos, manage playlists, search content, get analytics, and handle comments. Always search tools first for current schemas.