A Chrome extension that automates sending connection requests on LinkedIn with optional personalized notes.
USE THIS TOOL RESPONSIBLY!
LinkedIn has daily limits on connection requests (typically 100-200 per day). Excessive or inappropriate use may result in:
- ⛔ Temporary restrictions on your LinkedIn account
- 🚫 Permanent account suspension
- 📛 Being flagged as spam
This tool is for educational purposes and personal productivity only. Always follow LinkedIn's Terms of Service and Professional Community Policies.
- 🔄 Automatic Connection Requests - Finds and clicks "Connect" buttons automatically
- 📄 Multi-Page Support - Automatically navigates through multiple search result pages
- 📝 Personalized Notes - Add custom messages with name placeholders ({{firstname}}, {{lastname}}, {{fullname}})
- ⚙️ Customizable Settings - Control delays, limits, and automation behavior
- 🛡️ Safety Features - Built-in rate limiting with randomized human-like delays
- 📊 Real-time Statistics - Track connection requests sent in current session
- ⏸️ Pause/Resume - Stop and restart automation at any time
- 🔒 Privacy-First - No data collection, everything stays local
- 🚀 Auto-Injection - Automatically loads content script if missing
- Installation
- Quick Start
- Usage Guide
- Configuration
- Personalization
- Safety Tips
- Troubleshooting
- Technical Details
- Contributing
- License
- Google Chrome browser (version 88 or higher)
- Active LinkedIn account
- Basic understanding of Chrome extensions
# Clone the repository
git clone https://github.com/yourusername/linkedin-auto-connect.git
# Navigate to the directory
cd linkedin-auto-connectOr download as ZIP and extract to a folder.
Create an icons/ folder in the extension directory and add three icon files:
icon16.png(16x16 pixels)icon48.png(48x48 pixels)icon128.png(128x128 pixels)
Quick Icon Creation:
- Use any image editor (Paint, GIMP, Photoshop)
- Fill with LinkedIn blue (#0077B5)
- Add white "LN" text or simple design
- Save as PNG
Or use placeholder icons:
# You can use any simple colored square images for testing
# Just name them correctly and place in icons/ folder- Open Chrome and navigate to
chrome://extensions/ - Enable "Developer mode" (toggle in top-right corner)
- Click "Load unpacked"
- Select the
linkedin-auto-connectfolder - The extension icon should appear in your Chrome toolbar
- Check that extension appears in
chrome://extensions/ - Version should show 1.0.1
- Status should show "Enabled"
- Install the extension (see above)
- Go to LinkedIn - Navigate to any of these pages:
- Search results:
linkedin.com/search/results/people/ - My Network:
linkedin.com/mynetwork/ - Company employee lists
- Search results:
- Open the extension - Click the extension icon in Chrome toolbar
- Configure settings (optional):
- Leave defaults for first test
- Or customize delays and limits
- Click "Start" - Automation begins immediately
- Monitor progress - Watch the counter update in real-time
- Click "Stop" when done or when limit is reached
For your first test, use these conservative settings:
- Max per Session: 5-10 connections
- Min Delay: 5 seconds
- Max Delay: 10 seconds
- Add Note: Unchecked (start without notes)
This lets you verify everything works before scaling up.
The extension works on these LinkedIn pages:
✅ Recommended Pages:
- Search results (people search)
- My Network suggestions
- "People You May Know"
- Alumni pages
- Company employee directories
- Conference attendee lists
❌ Not Recommended:
- Individual profile pages (no bulk connect buttons)
- Messaging pages
- Feed/timeline pages
- Navigate to target page on LinkedIn
- Refresh the page (F5) to ensure content script loads
- Open extension by clicking the icon
- Review settings and adjust if needed
- Click "Start" button
- Extension will:
- Find all "Connect" buttons on page
- Click each button with delays
- Add notes if enabled
- Scroll to load more profiles
- Navigate to next page if enabled
- Stop when limit reached or no more buttons found
- Click "Stop" to pause anytime
- Review statistics to see connections sent
- Use LinkedIn's search filters to narrow results:
- Location
- Industry
- Company
- School
- Connections (2nd degree)
- Start extension on filtered results
- All visible "Connect" buttons will be processed
Morning Session:
- Max 20-30 connections
- Target industry peers
- Use personalized notes
Afternoon Session:
- Max 20-30 connections
- Target different location/industry
- Use different note template
Total: 40-60 connections per day (safe range)
For larger campaigns (50+ connections):
- Spread over multiple days
- Use 5-7 second delays
- Vary your note templates
- Target diverse audiences
- Monitor for any LinkedIn warnings
- Toggle: Enable/disable personalized notes
- Default: Disabled
- Note: Adding notes significantly increases connection acceptance rate
- Limit: LinkedIn allows 300 characters per note
- Purpose: Your custom message to connections
- Placeholders: Use
{{firstname}},{{lastname}},{{fullname}}, or{name} - Best Practice: Keep it professional, brief, and relevant
- Example:
Hi {{firstname}}, I'd love to connect and learn from your experience in {{industry}}!
- Toggle: Enable/disable automatic page navigation
- Default: Enabled
- Behavior: Clicks "Next" button when current page is exhausted
- Use Case: Process multiple pages of search results automatically
- Range: 2-10 seconds
- Default: 3 seconds
- Purpose: Minimum wait time between actions
- Recommendation: Keep ≥3 seconds for safety
- Range: 3-15 seconds
- Default: 7 seconds
- Purpose: Maximum wait time between actions
- Behavior: Random delay between min and max creates human-like pattern
- Range: 1-100 connections
- Default: 20
- Purpose: Limit connections sent in one automation run
- Safety: LinkedIn's daily limit is ~100-200, so keep sessions modest
- Range: 1-5 seconds
- Default: 2 seconds
- Purpose: Wait time after scrolling to load more content
- Behavior: Allows LinkedIn's infinite scroll to load more profiles
Add Note: ✓ Enabled
Min Delay: 5 sec
Max Delay: 10 sec
Max per Session: 10-15
Auto Next Page: ✓ Enabled
Scroll Delay: 3 sec
Best for: First-time users, sensitive accounts
Add Note: ✓ Enabled
Min Delay: 3 sec
Max Delay: 7 sec
Max per Session: 20-30
Auto Next Page: ✓ Enabled
Scroll Delay: 2 sec
Best for: Regular use, daily networking
Add Note: ✗ Disabled
Min Delay: 2 sec
Max Delay: 5 sec
Max per Session: 50+
Auto Next Page: ✓ Enabled
Scroll Delay: 1 sec
Best for: Bulk campaigns, experienced users
The extension supports multiple placeholder formats:
| Placeholder | Example Output | Use Case |
|---|---|---|
{{firstname}} |
John | Casual, friendly |
{{lastname}} |
Doe | Formal reference |
{{fullname}} |
John Doe | Professional, formal |
{name} |
John | Legacy format (same as firstname) |
Hi {{firstname}}, I came across your profile and was impressed by your work in [field]. Would love to connect!
Hello {{firstname}}, I noticed your expertise in software engineering. I'm also in the tech space and would love to expand my network!
Hi {{firstname}}, I see we both know [mutual connection]. I'd love to connect and learn more about your work at [company]!
Hi {{firstname}}, Great meeting you at [event]! Let's stay connected. Looking forward to future collaborations!
Hello {{fullname}}, Fellow [University] alum here! Would love to connect and share experiences from our time there.
Hi {{firstname}}, I'm exploring opportunities in [industry]. Your career path is inspiring! Would love to connect and learn from your journey.
✅ DO:
- Keep it under 200 characters
- Be genuine and specific
- Mention common ground (school, company, interest)
- Use proper grammar and spelling
- Personalize beyond just the name
- Make it about them, not you
❌ DON'T:
- Use generic templates for everyone
- Make spelling/grammar errors
- Include sales pitches
- Use ALL CAPS or excessive punctuation!!!
- Send the same message to competitors
- Ask for favors in first message
If the extension can't extract a name from the profile:
- Placeholders are removed from the note
- Message is still sent (if not empty)
- No error or skipped connection
- Check console for debugging info
| Limit Type | Approximate Value | Consequence |
|---|---|---|
| Daily Invitations | 100-200 | Temporary restriction |
| Weekly Invitations | 500-700 | Warning message |
| Pending Invitations | 3,000 max | Can't send more until accepted/withdrawn |
| Connection Acceptance Rate | Monitor | Low rate may trigger review |
- New accounts (<6 months): 20-30 connections/day
- Established accounts: 50-100 connections/day
- Premium accounts: 100-150 connections/day
- Recruiter accounts: Up to 200 connections/day
⚠️ Sending too many requests too quickly⚠️ Low acceptance rate (<30%)⚠️ Too many pending invitations⚠️ Connecting with people far outside your network⚠️ Identical messages to many people⚠️ Using minimal delays (<2 seconds)
Symptoms:
- "You've reached the weekly invitation limit" message
- Can't send new invitations
- Warning email from LinkedIn
Actions:
- Stop immediately - Don't try to circumvent
- Wait it out - Usually 1-2 weeks
- Withdraw pending invitations - Frees up your limit
- Review strategy - Use more conservative settings
- Diversify approach - Use other networking methods too
- Vary your timing - Don't automate at same time every day
- Use realistic delays - 3-7 seconds mimics human behavior
- Personalize notes - Higher acceptance rate, less spam-like
- Target relevantly - Connect with people in your industry/interest
- Monitor acceptance - Low rate (<30%) is concerning
- Take breaks - Don't run automation for hours straight
- Spread across days - Better than bulk in one session
- Engage after connecting - Send follow-up messages, engage with posts
- Quality over quantity - Better to connect with 20 relevant people than 100 random
- Stay informed - LinkedIn's policies change, stay updated
Cause: Content script not loaded on LinkedIn page
Solution:
- Refresh the LinkedIn page (F5)
- Wait for page to fully load
- Click "Start" again
- Extension now auto-injects script, so this should rarely happen
Cause: Not on a LinkedIn page
Solution:
- Navigate to linkedin.com
- Go to search results or My Network
- Then start the extension
Possible Causes:
- Already connected with everyone visible
- Not on a page with connection buttons
- Need to scroll to load more
Solutions:
- Manually scroll down to load more profiles
- Navigate to different LinkedIn page
- Use search filters to find new people
- Try My Network page instead
Cause: Hitting errors or modal dialogs
Solution:
- Check console (F12 → Console) for errors
- Verify delays aren't too short
- Make sure LinkedIn page is stable
- Try refreshing and restarting
Possible Causes:
- "Add Note" checkbox not enabled
- Note template is empty
- LinkedIn's UI changed
Solutions:
- Enable "Add custom note" checkbox
- Verify note template has content
- Check console for errors
- Try sending one connection manually first
Cause: Message passing issue between popup and content script
Solution:
- Keep popup open while running
- Or check storage:
chrome://extensions/→ Extension details → Inspect views: service worker → Application → Storage - Refresh extension and try again
Symptoms: Counter not updating, no activity
Solutions:
- Wait longer - delays might be longer than expected
- Check if LinkedIn showed a dialog/modal
- Look at console for errors
- Click "Stop" and restart
- Refresh LinkedIn page
Cause: Extension was reloaded while running
Solution:
- Go to
chrome://extensions/ - Reload the extension
- Refresh all LinkedIn tabs
- Start automation again
- Open LinkedIn page
- Press F12 to open Developer Tools
- Go to Console tab
- Look for messages starting with "LinkedIn Auto Connect:"
- Share these messages when reporting issues
// In LinkedIn page console, type:
chrome.runtime.id;
// Should return extension ID, not undefined- Go to
chrome://extensions/ - Click "Details" on LinkedIn Auto Connect
- Under "Inspect views" click "service worker"
- Go to Application tab → Storage → Local Storage
- View current settings and state
linkedin-auto-connect/
├── manifest.json # Extension configuration (Manifest V3)
├── popup.html # User interface (350px popup)
├── popup.js # UI logic, settings management, message handling
├── content.js # Main automation engine, runs on LinkedIn pages
├── background.js # Service worker, handles state persistence
└── icons/ # Extension icons (16, 48, 128px)
- Manifest Version: V3 (modern Chrome extension standard)
- Permissions:
storage,activeTab,scripting - Host Permissions:
https://www.linkedin.com/* - APIs Used:
- Chrome Storage API (local storage for settings)
- Chrome Tabs API (active tab communication)
- Chrome Scripting API (dynamic content script injection)
- Chrome Runtime API (message passing)
-
Initialization
- Extension loads on Chrome startup
- Background service worker initializes default settings
- Content script auto-injects when LinkedIn pages load
-
User Interaction
- User opens popup, configures settings
- Settings saved to Chrome local storage
- User clicks "Start" button
-
Automation Flow
Popup sends "start" message ↓ Content script receives message ↓ Find all "Connect" buttons on page ↓ For each button: - Click "Connect" - Wait for modal - Add note (if enabled) - Click "Send" - Random delay - Update counter ↓ Scroll page to load more profiles ↓ If auto-next enabled: Click "Next" button ↓ Repeat until max connections reached ↓ Send "completed" message to popup -
Button Detection Algorithm
- Queries all
<button>elements - Filters by text content ("Connect")
- Checks aria-labels for "Connect" or "Invite"
- Excludes "Following", "Pending", "Message" buttons
- Verifies button is visible and enabled
- Creates unique ID per button to avoid duplicates
- Queries all
-
Name Extraction
- Searches button's parent container (card)
- Looks for profile name in
<span aria-hidden="true"> - Falls back to profile link text
- Parses into firstname, lastname, fullname components
- Handles edge cases (single names, titles, credentials)
-
Note Personalization
- Replaces placeholders with extracted names
- Supports multiple placeholder formats
- Cleans up whitespace from empty replacements
- Falls back gracefully if name not available
-
Safety Mechanisms
- Random delays between actions (mimics human behavior)
- Session limits (prevents excessive automation)
- Processed button tracking (prevents duplicates)
- Graceful error handling (continues on failures)
- Scroll delays (respects page load times)
Start Automation:
chrome.tabs.sendMessage(tabId, {
action: "start",
settings: {
addNote: boolean,
noteTemplate: string,
autoNextPage: boolean,
minDelay: number,
maxDelay: number,
maxConnections: number,
scrollDelay: number,
},
});Stop Automation:
chrome.tabs.sendMessage(tabId, {
action: "stop",
});Update Statistics:
chrome.runtime.sendMessage({
action: "updateStats",
connectionsSent: number,
completed: boolean,
});Ping Check:
chrome.tabs.sendMessage(tabId, {
action: "ping",
});
// Response: { status: 'ready' }{
addNote: boolean, // Enable custom notes
noteTemplate: string, // Note message template
autoNextPage: boolean, // Auto-navigate pages
minDelay: number, // Min delay in seconds
maxDelay: number, // Max delay in seconds
maxConnections: number, // Max per session
scrollDelay: number, // Scroll wait time
isRunning: boolean, // Current automation state
connectionsSent: number // Counter for session
}- Memory Usage: ~5-10 MB
- CPU Impact: Minimal (only active during automation)
- Network Impact: None (no external requests)
- Page Load Impact: Negligible
- Throughput: 5-12 connections per minute (depending on delays)
This extension does NOT collect any data.
- ✅ No analytics
- ✅ No tracking
- ✅ No external requests
- ✅ No personal information stored remotely
- ✅ All data stays in browser local storage
- ✅ No third-party services used
Local Storage Only:
- Settings (delays, limits, templates)
- Current automation state
- Connection counter for current session
No Cloud Storage:
- Nothing sent to external servers
- No sync across devices
- No user accounts required
| Permission | Purpose | Scope |
|---|---|---|
storage |
Save settings locally | Local only |
activeTab |
Access current tab when extension is clicked | Only active LinkedIn tab |
scripting |
Inject content script dynamically | Only linkedin.com |
host_permissions |
Run on LinkedIn pages | Only linkedin.com |
- Review code - All code is open source and auditable
- No external dependencies - No third-party libraries that could compromise security
- Minimal permissions - Only requests necessary permissions
- Sandboxed execution - Runs in Chrome's extension sandbox
- No eval() - No dynamic code execution
Contributions are welcome! Here's how you can help:
- Check existing issues first
- Include Chrome version and extension version
- Provide console logs (F12 → Console)
- Describe steps to reproduce
- Include expected vs actual behavior
- Open an issue with "[Feature Request]" prefix
- Describe the use case
- Explain expected behavior
- Consider LinkedIn's ToS implications
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Make your changes
- Test thoroughly on LinkedIn
- Commit with descriptive messages
- Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request
# Clone repo
git clone https://github.com/yourusername/linkedin-auto-connect.git
cd linkedin-auto-connect
# Make changes
# Test in Chrome
# Load in Chrome for testing
# chrome://extensions/ → Load unpacked- Use 2 spaces for indentation
- Descriptive variable names
- Comment complex logic
- Follow existing patterns
- Keep functions focused and small
MIT License
Copyright (c) 2024 [Your Name]
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Built with Chrome Extension Manifest V3
- Designed for responsible LinkedIn automation
- Inspired by the need for efficient professional networking
- Created for educational and productivity purposes
- Check Troubleshooting section
- Review Chrome extension console logs
- Search existing issues
- Open a new issue with details
- ✅ Fixed "Could not establish connection" error
- ✅ Added automatic content script injection
- ✅ Improved error handling and user feedback
- ✅ Added ping check before starting automation
- ✅ Better loading states in UI
- 🎉 Basic auto-connect functionality
- 📝 Custom note templates with placeholders
- ⚙️ Configurable delays and limits
- 🛡️ Safety features and rate limiting
- 📊 Real-time statistics tracking
- 📄 Multi-page navigation support
This extension automates interactions with LinkedIn. Before using:
- Read LinkedIn User Agreement
- Review Professional Community Policies
- Understand potential consequences of automation
✅ Ethical:
- Connecting with relevant professionals
- Personalizing connection requests
- Respecting daily limits
- Building genuine network
- Following up after connecting
❌ Unethical:
- Mass spamming connections
- Ignoring rejection/non-response
- Circumventing restrictions
- Misrepresenting yourself
- Harassing others
The developers of this extension are not responsible for:
- Account restrictions or bans
- Violations of LinkedIn's ToS
- Misuse of the tool
- Spam or harassment
- Any damages resulting from use
Use at your own risk and responsibility.
If this extension helped you, please consider:
- ⭐ Starring the repository
- 🐛 Reporting bugs
- 💡 Suggesting features
- 🤝 Contributing code
- 📢 Sharing with others (responsibly!)
Made with ❤️ for productive networking
Remember: Quality connections > Quantity of connections