| name | whatsapp-instagram-tiktok-mass-sender-marketing |
| description | Automated social media mass messaging and group marketing system for WhatsApp, Instagram, and TikTok customer acquisition |
| triggers | ["how do I scrape TikTok followers automatically","setup Instagram mass DM sender","automate WhatsApp group marketing messages","extract competitor followers from social media","bulk send messages on Instagram and TikTok","configure automated social media lead generation","scrape hashtag users from Instagram","automate TikTok comment interactions"] |
WhatsApp Instagram TikTok Mass Sender Marketing
Skill by ara.so — Marketing Skills collection.
This project provides automated mass messaging and group marketing capabilities across WhatsApp, Instagram, and TikTok platforms. It enables scraping competitor followers, hashtag-based user extraction, automated engagement (likes, comments, follows), and bulk direct messaging for customer acquisition and traffic generation.
What It Does
- Competitor Follower Scraping: Extract follower lists from competitor accounts on Instagram and TikTok
- Hashtag & Keyword Targeting: Find users posting or engaging with specific hashtags/keywords
- Automated Engagement: Auto-follow, auto-like, auto-comment on target user content
- Bulk Messaging: Send personalized direct messages at scale across platforms
- AI-Powered Filtering: Filter users by demographics, engagement level, account quality
- Multi-Account Management: Operate multiple accounts simultaneously for matrix marketing
- WhatsApp Group Marketing: Bulk send to WhatsApp groups and contacts
Installation
This is a commercial/proprietary system accessed through the vendor's platform rather than self-hosted code. Based on the repository structure:
Access Setup
-
Register for Service
https://sites.google.com/view/facebook-script-custom/
-
Technical Support Channel
https://sites.google.com/view/instagram-keyword-hashtag-lead/
-
Account Configuration
const config = {
platforms: ['instagram', 'tiktok', 'whatsapp'],
accounts: [
{
platform: 'instagram',
username: process.env.IG_USERNAME,
password: process.env.IG_PASSWORD,
proxy: process.env.IG_PROXY
},
{
platform: 'tiktok',
username: process.env.TT_USERNAME,
password: process.env.TT_PASSWORD,
proxy: process.env.TT_PROXY
}
],
automation: {
delayBetweenActions: 3000,
dailyFollowLimit: 150,
dailyMessageLimit: 50,
randomizeDelays: true
}
};
Key Features & API Patterns
1. Follower Scraping
const scraperConfig = {
targetAccount: '@competitor_username',
platform: 'instagram',
filters: {
minFollowers: 100,
maxFollowers: 10000,
activeWithinDays: 30,
location: 'United States',
verifiedOnly: false
},
maxResults: 5000
};
async function scrapeFollowers(config) {
const results = await api.scrape({
type: 'followers',
target: config.targetAccount,
platform: config.platform,
filters: config.filters,
limit: config.maxResults
});
return results.users;
}
2. Hashtag-Based Lead Generation
const hashtagConfig = {
hashtags: ['#skincare', '#beautyproducts', '#antiaging'],
platform: 'tiktok',
filters: {
engagement: 'high',
accountAge: 90,
followerRange: [500, 50000]
},
limit: 3000
};
async function getHashtagUsers(config) {
const users = await api.extractByHashtag({
tags: config.hashtags,
platform: config.platform,
filters: config.filters,
maxUsers: config.limit
});
const filtered = await api.aiFilter(users, {
detectGender: true,
estimateAge: true,
removeBusinessAccounts: false,
removeBots: true
});
return filtered;
}
3. Automated Engagement
const engagementConfig = {
users: [],
actions: {
follow: true,
like: { enabled: true, postsCount: 3 },
comment: {
enabled: true,
templates: [
"Love this! 😍",
"Amazing content! 🔥",
"Great post! 💯"
],
randomize: true
}
},
timing: {
delayBetweenUsers: [5000, 15000],
dailyLimit: 100,
stopOnError: false
}
};
async function autoEngage(config) {
for (const user of config.users) {
try {
if (config.actions.follow) {
await api.follow(user.username);
await delay(random(config.timing.delayBetweenUsers));
}
if (config...) {
posts = api.(user., config...);
( post posts) {
api.(post.);
((, ));
}
}
(config...) {
comment = (config...);
api.(posts[]., comment);
}
((config..));
} (error) {
.(, error);
(config..) ;
}
}
}
4. Bulk Direct Messaging
const dmConfig = {
recipients: [],
message: {
text: "Hi {name}! 👋 Noticed you're into {interest}. Check out our exclusive offer: {link}",
variables: {
link: process.env.LANDING_PAGE_URL,
interest: 'skincare'
},
personalize: true
},
schedule: {
messagesPerHour: 10,
startTime: '09:00',
endTime: '18:00',
timezone: 'America/New_York'
},
tracking: {
enabled: true,
trackClicks: true,
trackReplies: true
}
};
async function sendBulkDMs(config) {
const queue = [...config.recipients];
while (queue.length > 0) {
const batch = queue.splice(0, config.schedule.messagesPerHour);
for (const user of batch) {
const personalizedMsg = config..
.(, user. || user.)
.(, user.?.[] || config...)
.(, config...);
api.({
: user.,
: personalizedMsg,
: user.,
: config.. ? (user) :
});
((, ));
}
(queue. > ) {
( / config..);
}
}
}
5. WhatsApp Group Marketing
const whatsappConfig = {
mode: 'group',
groups: [
{ id: 'group-id-1', name: 'Marketing Group' },
{ id: 'group-id-2', name: 'Sales Team' }
],
message: {
text: "🎉 New Product Launch! Check it out: {link}",
media: {
type: 'image',
url: process.env.PRODUCT_IMAGE_URL
}
},
schedule: {
sendAt: '2026-06-01T10:00:00Z',
timezone: 'UTC'
}
};
async function sendWhatsAppBulk(config) {
if (config.mode === 'group') {
for (const group of config.groups) {
await api.whatsapp.sendToGroup({
groupId: group.id,
text: config.message.text.replace('{link}', process.env.LANDING_PAGE_URL),
media: config..,
: config..
});
((, ));
}
}
}
Configuration Best Practices
Environment Variables
IG_USERNAME=your_instagram_username
IG_PASSWORD=your_instagram_password
TT_USERNAME=your_tiktok_username
TT_PASSWORD=your_tiktok_password
WA_PHONE=your_whatsapp_number
IG_PROXY=http://proxy1.example.com:8080
TT_PROXY=http://proxy2.example.com:8080
LANDING_PAGE_URL=https://yoursite.com/offer
PRODUCT_IMAGE_URL=https://yoursite.com/product.jpg
DAILY_FOLLOW_LIMIT=150
DAILY_MESSAGE_LIMIT=50
Rate Limiting & Safety
const safeLimits = {
instagram: {
followsPerHour: 20,
likesPerHour: 60,
commentsPerHour: 15,
dmsPerHour: 10,
dailyFollowLimit: 150,
dailyUnfollowLimit: 150
},
tiktok: {
followsPerHour: 30,
likesPerHour: 100,
commentsPerHour: 20,
dmsPerHour: 15
},
whatsapp: {
messagesPerHour: 30,
groupsPerHour: 5
}
};
function getRandomDelay(min = 3000, max = 8000) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Common Patterns
Pattern 1: Competitor Traffic Hijacking
async function competitorHijackingCampaign() {
const followers = await scrapeFollowers({
targetAccount: '@main_competitor',
platform: 'instagram',
filters: { minFollowers: 500, maxFollowers: 20000 },
maxResults: 2000
});
const qualified = await api.aiFilter(followers, {
removeBusinessAccounts: true,
removeBots: true,
estimateAge: true,
ageRange: [18, 45]
});
await autoEngage({
users: qualified.slice(0, 100),
actions: {
follow: true,
like: { enabled: true, postsCount: 2 }
},
timing: { dailyLimit: }
});
( () => {
engaged = api.(qualified);
({
: engaged,
: {
:
}
});
}, * );
}
Pattern 2: Hashtag-Based Funnel
async function hashtagFunnel() {
const leads = await getHashtagUsers({
hashtags: ['#needthis', '#wheretobuy', '#recommendations'],
platform: 'tiktok',
filters: { engagement: 'high' },
limit: 1000
});
await autoEngage({
users: leads,
actions: {
follow: true,
like: { enabled: true, postsCount: 1 },
comment: {
enabled: true,
templates: ["Check your DMs! 💌"]
}
}
});
await sendBulkDMs({
recipients: leads,
message: {
text: "Hi! Saw your post about {interest}. We've got exactly what you need: {link}"
},
schedule: { messagesPerHour: 20 }
});
}
Pattern 3: Multi-Platform Matrix
async function multiPlatformBlitz() {
const igUsers = await scrapeFollowers({
targetAccount: '@competitor_ig',
platform: 'instagram',
maxResults: 1000
});
const ttUsers = await getHashtagUsers({
hashtags: ['#productniche'],
platform: 'tiktok',
limit: 1000
});
await Promise.all([
autoEngage({ users: igUsers, actions: { follow: true, like: { enabled: true, postsCount: 2 } } }),
autoEngage({ users: ttUsers, actions: { follow: true, comment: { enabled: true } } })
]);
const phoneNumbers = await api.extractPhoneNumbers([...igUsers, ...ttUsers]);
(phoneNumbers. > ) {
api..({
: phoneNumbers,
:
});
}
}
Troubleshooting
Issue: Account Getting Banned/Restricted
Solution: Implement stricter rate limits and human-like behavior
const conservativeConfig = {
delayBetweenActions: [10000, 30000],
dailyFollowLimit: 50,
dailyMessageLimit: 20,
randomizeDelays: true,
useProxy: true,
rotateProxies: true,
sessionDuration: [1800000, 3600000]
};
async function engageWithBreaks(users) {
const sessionSize = 20;
for (let i = 0; i < users.length; i += sessionSize) {
const batch = users.slice(i, i + sessionSize);
await autoEngage({ users: batch });
if (i + sessionSize < users.length) {
await delay(random(900000, 1800000));
}
}
}
Issue: Low DM Response Rate
Solution: Improve message personalization and timing
async function improvePersonalization(user) {
const recentPosts = await api.getUserPosts(user.username, 5);
const interests = await api.extractInterests(recentPosts);
const templates = {
skincare: "Hey {name}! Your skin looks amazing in your recent posts! Have you tried {product}?",
fitness: "Hi {name}! Loved your workout content. Check out our fitness supplement: {link}",
fashion: "Hey {name}! Your style is 🔥 You'd love our new collection: {link}"
};
const category = interests[0] || 'general';
return templates[category] || templates.general;
}
const optimalTimes = {
instagram: ['10:00', '14:00', '19:00'],
tiktok: ['12:00', '17:00', '21:00']
};
Issue: Scraping Returns Duplicate Users
Solution: Implement deduplication
const seenUsers = new Set();
function deduplicateUsers(users) {
return users.filter(user => {
const key = `${user.platform}:${user.username}`;
if (seenUsers.has(key)) return false;
seenUsers.add(key);
return true;
});
}
const fs = require('fs');
function saveContactedUsers(users) {
const existing = JSON.parse(fs.readFileSync('contacted.json', 'utf8') || '[]');
const updated = [...existing, ...users.map(u => u.username)];
fs.writeFileSync('contacted.json', JSON.stringify([...new Set(updated)]));
}
Issue: API Rate Limits from Platform
Solution: Use proxy rotation and account rotation
const proxyPool = [
process.env.PROXY_1,
process.env.PROXY_2,
process.env.PROXY_3
];
let currentProxyIndex = 0;
function getNextProxy() {
const proxy = proxyPool[currentProxyIndex];
currentProxyIndex = (currentProxyIndex + 1) % proxyPool.length;
return proxy;
}
const accountPool = [
{ username: process.env.IG_USER_1, password: process.env.IG_PASS_1 },
{ username: process.env.IG_USER_2, password: process.env.IG_PASS_2 }
];
async function distributeLoad(users, action) {
const perAccount = Math.ceil(users.length / accountPool.length);
for (let i = 0; i < accountPool.length; i++) {
const batch = users.slice(i * perAccount, (i + 1) * perAccount);
await api.switchAccount(accountPool[i]);
(batch);
}
}
Legal & Ethical Considerations
Important: This type of automation may violate platform Terms of Service. Use responsibly:
- Respect user privacy and platform policies
- Implement opt-out mechanisms in DMs
- Comply with anti-spam regulations (CAN-SPAM, GDPR)
- Use only for legitimate business purposes
- Monitor and respect platform rate limits
- Ensure proxy/account usage complies with local laws
const compliantMessage = `
${originalMessage}
---
Reply STOP to opt out of future messages.
`;
async function checkOptOut(username) {
const optOuts = JSON.parse(fs.readFileSync('optouts.json', 'utf8') || '[]');
return optOuts.includes(username);
}