GrowChief: Complete Tutorial for Social Media Automation Tool
⏱️ Estimated Reading Time: 12 minutes
Introduction
In today’s digital marketing landscape, social media automation has become an essential tool for businesses of all sizes. GrowChief stands out as a powerful open-source social media automation platform that enables you to create sophisticated workflows for LinkedIn outreach, lead generation, and relationship building.
Unlike traditional automation tools that rely on simple API calls or basic browser automation, GrowChief employs advanced techniques including human-like mouse movements, intelligent concurrency management, and stealth browser technology to ensure your automation activities remain undetected.
What Makes GrowChief Special?
🎯 Key Features
1. Intelligent Concurrency Management
- Prevents multiple automations from running simultaneously
- Maintains safe intervals between actions (10+ minutes)
- Protects your accounts from detection
2. Human-like Automation
- Natural mouse movements and clicks
- Randomized timing patterns
- Avoids programmatic DOM manipulation
3. Advanced Stealth Technology
- Uses Playwright with Patchright for maximum stealth
- Runs in headful mode with xvfb
- Supports custom proxy configurations
4. Smart Lead Enrichment
- Automatically finds profile URLs from email addresses
- Uses multiple data providers for comprehensive enrichment
- Waterfall approach for maximum success rates
5. Working Hours Compliance
- Respects business hours settings
- Queues actions for appropriate timing
- Prevents weekend or after-hours automation
Prerequisites
Before starting with GrowChief, ensure you have:
- Docker and Docker Compose installed
- Node.js (v18 or higher)
- PNPM package manager
- PostgreSQL database (or use Docker)
- Basic understanding of social media automation ethics
Installation Guide
Method 1: Docker Installation (Recommended)
Step 1: Clone the Repository
git clone https://github.com/growchief/growchief.git
cd growchief
Step 2: Environment Configuration
# Copy the example environment file
cp .env.example .env
# Edit the environment variables
nano .env
Essential Environment Variables:
# Database Configuration
DATABASE_URL="postgresql://username:password@localhost:5432/growchief"
# Temporal Configuration
TEMPORAL_ADDRESS="localhost:7233"
# Application Settings
NODE_ENV="development"
PORT=3000
# Proxy Settings (Optional)
PROXY_ENABLED=false
PROXY_HOST=""
PROXY_PORT=""
PROXY_USERNAME=""
PROXY_PASSWORD=""
Step 3: Start with Docker Compose
# Start all services
docker-compose up -d
# Check service status
docker-compose ps
Method 2: Manual Installation
Step 1: Install Dependencies
# Install PNPM globally
npm install -g pnpm
# Install project dependencies
pnpm install
Step 2: Database Setup
# Generate Prisma client
pnpm prisma generate
# Run database migrations
pnpm prisma migrate dev
Step 3: Start Services
# Start Temporal server (in separate terminal)
temporal server start-dev
# Start the application
pnpm dev
Configuration Guide
1. Account Authentication Setup
GrowChief uses a unique authentication system that doesn’t require storing passwords:
Step 1: Access Authentication Panel
- Navigate to
http://localhost:3000/auth
- Click “Add New Account”
Step 2: Browser Authentication
- A new browser window will open
- Log in to your social media account normally
- GrowChief will capture and store authentication cookies
Step 3: Verify Account
- Return to the dashboard
- Confirm your account appears in the accounts list
- Test connection with a simple profile view action
2. Proxy Configuration
For enhanced security and scale:
Step 1: Proxy Provider Setup
# Add proxy configuration to .env
PROXY_ENABLED=true
PROXY_HOST="your-proxy-host.com"
PROXY_PORT="8080"
PROXY_USERNAME="your-username"
PROXY_PASSWORD="your-password"
Step 2: Proxy Rotation (Advanced)
// Example proxy rotation configuration
const proxyConfig = {
rotation: {
enabled: true,
interval: 3600000, // 1 hour
providers: [
{
host: "proxy1.example.com",
port: 8080,
auth: { username: "user1", password: "pass1" }
},
{
host: "proxy2.example.com",
port: 8080,
auth: { username: "user2", password: "pass2" }
}
]
}
};
3. Working Hours Configuration
Step 1: Set Business Hours
// Working hours configuration
const workingHours = {
timezone: "America/New_York",
schedule: {
monday: { start: "09:00", end: "17:00" },
tuesday: { start: "09:00", end: "17:00" },
wednesday: { start: "09:00", end: "17:00" },
thursday: { start: "09:00", end: "17:00" },
friday: { start: "09:00", end: "17:00" },
saturday: { enabled: false },
sunday: { enabled: false }
}
};
Creating Your First Automation Workflow
1. Basic LinkedIn Connection Workflow
Step 1: Create New Workflow
- Navigate to “Workflows” section
- Click “Create New Workflow”
- Select “LinkedIn Connection Request”
Step 2: Define Workflow Steps
const connectionWorkflow = {
name: "LinkedIn Connection Outreach",
steps: [
{
type: "visit_profile",
delay: { min: 2000, max: 5000 }
},
{
type: "send_connection_request",
message: "Hi {firstName}, I'd love to connect and learn more about your work in {industry}.",
delay: { min: 3000, max: 7000 }
},
{
type: "wait",
duration: 86400000 // 24 hours
},
{
type: "follow_up_message",
condition: "connection_accepted",
message: "Thanks for connecting! I'm working on some interesting projects in {industry} and would love to share insights.",
delay: { min: 5000, max: 10000 }
}
]
};
Step 3: Configure Lead List
firstName,lastName,profileUrl,industry,email
John,Doe,https://linkedin.com/in/johndoe,Technology,john@example.com
Jane,Smith,https://linkedin.com/in/janesmith,Marketing,jane@example.com
2. Advanced Multi-Step Campaign
Step 1: Campaign Structure
const advancedCampaign = {
name: "Multi-Touch Outreach Campaign",
phases: [
{
name: "Initial Connection",
steps: ["visit_profile", "send_connection_request"],
delay: 0
},
{
name: "Welcome Message",
steps: ["send_message"],
delay: 86400000, // 1 day
condition: "connection_accepted"
},
{
name: "Value Proposition",
steps: ["send_message"],
delay: 259200000, // 3 days
condition: "previous_message_sent"
},
{
name: "Call to Action",
steps: ["send_message"],
delay: 604800000, // 7 days
condition: "no_response"
}
]
};
Step 2: Message Templates
const messageTemplates = {
welcome: "Hi {firstName}! Thanks for connecting. I noticed you work in {industry} - I'm always interested in connecting with professionals in this space.",
value_proposition: "Hi {firstName}, I wanted to share something that might interest you. We've been helping {industry} professionals like yourself achieve {specific_benefit}. Would you be open to a brief conversation?",
call_to_action: "Hi {firstName}, I hope you're doing well! I have a few minutes available this week if you'd like to discuss how we might be able to help with {pain_point}. Would Tuesday or Wednesday work better for you?"
};
Best Practices and Safety Guidelines
1. Account Safety
Daily Limits:
- Connection requests: 15-20 per day
- Messages: 25-30 per day
- Profile views: 100-150 per day
Timing Guidelines:
- Minimum 10-minute intervals between actions
- Randomize action timing (±30% variance)
- Respect platform rate limits
2. Content Quality
Connection Request Messages:
- Keep under 300 characters
- Personalize with profile information
- Avoid sales language
- Focus on mutual value
Follow-up Messages:
- Provide genuine value
- Ask thoughtful questions
- Avoid immediate sales pitches
- Maintain conversational tone
3. Compliance Considerations
Legal Requirements:
- Comply with GDPR/CCPA regulations
- Obtain proper consent for data processing
- Maintain data processing records
- Implement data retention policies
Platform Terms of Service:
- Understand automation violates ToS
- Use at your own risk
- Focus on quality over quantity
- Build genuine relationships
Monitoring and Analytics
1. Performance Metrics
Key Performance Indicators:
const kpis = {
connection_rate: "accepted_connections / sent_requests",
response_rate: "responses_received / messages_sent",
conversion_rate: "qualified_leads / total_connections",
account_health: "actions_completed / actions_attempted"
};
Step 2: Dashboard Setup
- Monitor daily activity levels
- Track success rates by message template
- Analyze optimal timing patterns
- Review account health metrics
2. Error Handling and Troubleshooting
Common Issues:
const troubleshooting = {
"Authentication Failed": {
solution: "Re-authenticate account through browser",
prevention: "Regular cookie refresh"
},
"Rate Limited": {
solution: "Reduce action frequency",
prevention: "Implement longer delays"
},
"Profile Not Found": {
solution: "Update lead data",
prevention: "Validate URLs before import"
}
};
Advanced Features
1. API Integration
Webhook Configuration:
const webhookConfig = {
url: "https://your-api.com/webhook",
events: [
"connection_accepted",
"message_received",
"profile_viewed",
"campaign_completed"
],
authentication: {
type: "bearer",
token: "your-api-token"
}
};
CRM Integration:
// Example Salesforce integration
const crmIntegration = {
provider: "salesforce",
credentials: {
clientId: process.env.SF_CLIENT_ID,
clientSecret: process.env.SF_CLIENT_SECRET,
username: process.env.SF_USERNAME,
password: process.env.SF_PASSWORD
},
mapping: {
lead: {
firstName: "FirstName",
lastName: "LastName",
email: "Email",
company: "Company",
title: "Title"
}
}
};
2. Custom Workflow Development
Step 1: Create Custom Action
// custom-actions/linkedin-post-engagement.js
class LinkedInPostEngagement {
async execute(context) {
const { page, lead, config } = context;
// Navigate to recent posts
await page.goto(`${lead.profileUrl}/recent-activity/`);
// Find and engage with recent posts
const posts = await page.$$('.feed-shared-update-v2');
for (let i = 0; i < Math.min(posts.length, 3); i++) {
const post = posts[i];
// Like the post
const likeButton = await post.$('[data-control-name="like"]');
if (likeButton) {
await this.humanClick(likeButton);
await this.randomDelay(2000, 5000);
}
}
}
async humanClick(element) {
// Implement human-like clicking behavior
const box = await element.boundingBox();
const x = box.x + Math.random() * box.width;
const y = box.y + Math.random() * box.height;
await element.page().mouse.move(x, y, { steps: 10 });
await this.randomDelay(100, 300);
await element.page().mouse.click(x, y);
}
async randomDelay(min, max) {
const delay = Math.floor(Math.random() * (max - min + 1)) + min;
await new Promise(resolve => setTimeout(resolve, delay));
}
}
Scaling and Production Deployment
1. Production Configuration
Docker Production Setup:
# Dockerfile.prod
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
Production Environment Variables:
NODE_ENV=production
DATABASE_URL="postgresql://user:pass@db:5432/growchief"
REDIS_URL="redis://redis:6379"
TEMPORAL_ADDRESS="temporal:7233"
# Security
JWT_SECRET="your-super-secure-jwt-secret"
ENCRYPTION_KEY="your-32-character-encryption-key"
# Monitoring
SENTRY_DSN="your-sentry-dsn"
LOG_LEVEL="info"
2. Monitoring and Observability
Health Check Endpoint:
// health-check.js
app.get('/health', async (req, res) => {
const health = {
status: 'healthy',
timestamp: new Date().toISOString(),
services: {
database: await checkDatabase(),
temporal: await checkTemporal(),
redis: await checkRedis()
}
};
res.json(health);
});
Logging Configuration:
const winston = require('winston');
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
new winston.transports.Console({
format: winston.format.simple()
})
]
});
Conclusion
GrowChief represents a significant advancement in social media automation technology, offering businesses a powerful yet responsible way to scale their outreach efforts. By combining human-like automation with intelligent safety features, it enables sustainable growth while minimizing the risk of account restrictions.
The key to success with GrowChief lies in balancing automation efficiency with genuine relationship building. Focus on providing value, maintaining authentic communication, and respecting both platform guidelines and recipient preferences.
Next Steps
- Start Small: Begin with a limited daily quota to test your workflows
- Monitor Performance: Track key metrics and adjust strategies accordingly
- Scale Gradually: Increase activity levels only after establishing consistent success
- Stay Updated: Keep up with platform changes and adjust automation accordingly
Resources
- Official Documentation: GrowChief Wiki
- Community Support: GitHub Issues
- Best Practices: LinkedIn Automation Guidelines
Remember: Social media automation should enhance, not replace, genuine human connection. Use GrowChief responsibly to build meaningful professional relationships that benefit all parties involved.
Disclaimer: Social media automation may violate platform terms of service. Use at your own risk and ensure compliance with applicable laws and regulations.