A powerful, user-friendly LinkedIn profile scraper and LinkedIn data scraper that extracts comprehensive profile information using the LinkdAPI. Perfect for recruiters, marketers, researchers, and anyone needing to collect LinkedIn profile data at scale.
Watch the scraper extract 320 LinkedIn profiles in seconds with async processing!
demo.mp4
🚀 The demo shows real-time scraping with live progress tracking, intelligent error handling, and batch processing at scale. Experience the speed of parallel API requests handling 10+ profiles simultaneously!
What you'll see in the demo:
- ⚡ Blazing-fast async batch processing
- 📊 Real-time progress bars and activity logs
- 🎯 Smart retry logic for rate limits
- ✅ Successful scraping of 320 profiles
- 💾 Automatic data export to CSV
- ✅ No Coding Required - Beautiful interactive menu with arrow-key navigation
- ⚡ Blazing Fast - Async processing handles multiple profiles simultaneously (10x-40x faster) - See the demo scraping 320 profiles!
- 🎯 Comprehensive Data - Scrapes profiles, experience, education, skills, certifications, and contact info
- 💾 Smart Export - Export to CSV or JSON with automatic data flattening
- 🛡️ Safe & Reliable - Built-in retry logic, error handling, and duplicate prevention
- 🎨 Beautiful UI - Rich terminal interface with real-time progress tracking
- 💙 Made with love by LinkdAPI Team
- See It In Action
- What You Can Scrape
- Quick Start (Non-Developers)
- Installation Guide
- How to Use
- Configuration Options
- Features in Detail
- CSV Output Format
- Tips & Best Practices
- Troubleshooting
- Common Use Cases
- Support & Links
This LinkedIn profile scraper extracts:
| Data Type | What's Included |
|---|---|
| 👤 Basic Info | Full name, headline, location, profile URL |
| 📝 About | Summary/bio section |
| 💼 Experience | Job titles, companies, durations, descriptions |
| 🎓 Education | Schools, degrees, fields of study, dates |
| ⚡ Skills | All skills with endorsement counts |
| 🏆 Certifications | Certificates and professional licenses |
| 📊 Stats | Follower count, connection count |
| 📞 Contact | Email, phone numbers, websites (when available) |
Never coded before? No problem! Watch our demo video to see it in action, then follow these simple steps:
- Visit linkdapi.com
- Sign up for a free account
- Copy your API key from the dashboard
# Download the project (or download ZIP from GitHub)
git clone https://github.com/linkdapi/linkedin-profile-scraper.git
cd linkedin-profile-scraper
# Run the automatic setup (installs everything for you)
chmod +x setup.sh
./setup.sh- Open
config.inifile in any text editor (Notepad, TextEdit, etc.) - Replace
YOUR_API_KEY_HEREwith your actual API key - Save the file
- Open
usernames.txtin a text editor - Add LinkedIn usernames (one per line)
- How to find username: From
linkedin.com/in/billgates→ usebillgates
- How to find username: From
- Save the file
# Activate the environment
source venv/bin/activate # On macOS/Linux
# OR
venv\Scripts\activate # On Windows
# Start the scraper
python3 main.py- Use ↑↓ arrow keys to navigate
- Press Enter to select
- Choose "Scrape from usernames.txt"
- Select what data you want (use Space to check/uncheck)
- Press Enter to confirm and start scraping
- When done, choose "Export data" to save as CSV or JSON
That's it! Your data will be in the output/ folder 🎉
- Python 3.8 or higher (Download Python)
- LinkdAPI Account (Sign up free)
- Internet connection
-
Install Python (if not already installed)
- Download from python.org
- ✅ Check "Add Python to PATH" during installation
-
Open Command Prompt (cmd)
# Navigate to project folder cd path\to\linkedin-profile-scraper # Create virtual environment python -m venv venv # Activate it venv\Scripts\activate # Install dependencies pip install -r requirements.txt
-
Configure API Key
- Open
config.iniin Notepad - Replace
YOUR_API_KEY_HEREwith your LinkdAPI key - Save
- Open
-
Run the scraper
python main.py
-
Open Terminal
-
Run the automated setup
cd linkedin-profile-scraper chmod +x setup.sh ./setup.shOR manually install:
# Create virtual environment python3 -m venv venv # Activate it source venv/bin/activate # Install dependencies pip install -r requirements.txt
-
Configure API Key
# Edit config file nano config.ini # OR open config.ini # Opens in default editor on macOS # Replace YOUR_API_KEY_HERE with your key, then save
-
Run the scraper
python3 main.py
When you run python3 main.py, you'll see:
╔═══════════════════════════════════════════════════════════╗
║ ║
║ LinkedIn Profile Scraper • Main Menu ║
║ ║
║ ⚙️ Configuration ║
║ API Key: enterpr...Egag-Q • Concurrent: 10 • Retries: 3 ║
║ ║
║ 💙 Made with love by LinkdAPI Team ║
║ 📧 support@linkdapi.com • 🌐 linkdapi.com • ⭐ github.com/linkdapi ║
║ ║
╚═══════════════════════════════════════════════════════════╝
Choose action:
❯ Scrape from usernames.txt
Scrape from custom file
Enter usernames manually
View scraped profiles
Export data
Exit
-
Prepare your file: Edit
usernames.txt, add usernames (one per line)billgates satyanadella jeffweiner08 -
Select this option from the menu
-
Choose what to scrape: Check/uncheck with Space, confirm with Enter
- ✅ Details & About
- ✅ Experience
- ✅ Education
- ✅ Skills
- ✅ Certifications
- ✅ Contact Info
-
Confirm and watch the magic happen!
Same as Option 1, but you can specify any file path:
Enter file path: /path/to/my-linkedin-list.txt
Type usernames separated by commas:
Enter usernames (comma-separated): billgates, elonmusk, reidhoffman
See a summary table of all profiles you've scraped in the current session.
Choose format:
- CSV - Perfect for Excel, Google Sheets, data analysis
- JSON - Complete raw data with full structure
Enter custom filename or press Enter for auto-generated name (e.g., linkedin_profiles_20250106_143022.csv)
- If you have unsaved data, you'll be prompted:
⚠️ You have unsaved data! Would you like to save before exiting? (Y/n) - Choose Yes to export before exiting
- Choose No to exit without saving
Edit config.ini to customize:
[LINKDAPI]
# Your API key from https://linkdapi.com
api_key = YOUR_API_KEY_HERE
[SETTINGS]
# Number of profiles to scrape simultaneously (1-50)
# Higher = faster but uses more API credits
# Recommended: 10 for free plans, 20-30 for paid plans
max_concurrent_requests = 10
# Where to save exported files
output_directory = output
# How many times to retry failed requests (1-10)
max_retries = 3
# Delay between retries in seconds
# Note: Rate limit errors (429) use exponential backoff automatically
# All other errors use fixed 1-second wait
retry_delay = 2| Plan Type | Recommended max_concurrent_requests |
|---|---|
| Free Trial | 5-10 |
| Starter | 10-15 |
| Professional | 20-30 |
| Enterprise | 30-50 |
- Processes multiple profiles simultaneously
- Up to 40x faster than sequential scraping
- Configurable concurrency to match your API plan
- Watch it in action - See 320 profiles scraped in seconds!
- Rate Limits (429): Exponential backoff (2s, 4s, 6s...)
- Other Errors: Fixed 1-second wait between retries
- Non-Retryable Errors: Skips profiles that don't exist
- Automatically detects already-scraped usernames
- Prevents wasting API credits on duplicates
- Shows warning with list of duplicates
- Choose exactly what data you need
- Save API credits by skipping unnecessary fields
- Overview (basic info) is always included
- Live activity log showing each profile as it's scraped
- Success/failure indicators
- Error messages with retry information
- Config always visible in header
- Color-coded messages (green=success, yellow=warning, red=error)
- Progress bars and spinners
- Professional data tables
- Tracks whether scraped data has been exported
- Warns you before exiting if data is unsaved
- Works for both Exit button and Ctrl+C
The CSV export includes these columns (only non-empty columns are included):
username- LinkedIn usernameprofile_url- Full LinkedIn profile URLfirstName,lastName,fullName- Name fieldsheadline- Professional headlineprofilePictureURL- Profile photo URL
location_city,location_region,location_country,location_fullfollowerCount- Number of followersconnectionsCount- Number of connections
about- About/summary sectioncurrent_companies- Current employer(s)top_5_experiences- Recent work positions with durationstotal_experience_count- Total jobs listed
top_3_education- Recent education with degreestotal_education_count- Total education entries
top_10_skills- Key skills (comma-separated)top_10_skills_with_endorsements- Skills with endorsement countstotal_skills_count- Total skills listedtop_5_certifications- Recent certificationstotal_certifications_count- Total certifications
email- Email address(es) when availablephone- Phone number(s) when availablewebsites- Personal/company websiteswebsites_detailed- Websites with categories
premium- Premium account statuscreator- Creator mode statusinfluencer- Influencer statusjoined- LinkedIn join date
Note: Only columns with actual data are included. Empty fields across all profiles are automatically removed.
The username is the part after linkedin.com/in/:
✅ Correct Examples:
- URL:
https://linkedin.com/in/billgates→ Username:billgates - URL:
https://linkedin.com/in/satya-nadella-3145136→ Username:satya-nadella-3145136 - URL:
https://linkedin.com/in/jeff-weiner-08→ Username:jeff-weiner-08
❌ Wrong:
- Don't use the full URL
- Don't include
in/or any slashes - Don't use profile IDs from company pages
- Start Small: Test with 5-10 profiles first
- Monitor Credits: Check your LinkdAPI dashboard regularly
- Adjust Concurrency: Increase
max_concurrent_requestsif you have a paid plan - Batch Your Work: Process 50-100 profiles at a time, export, then continue
- Don't set
max_concurrent_requeststoo high (respect your plan limits) - The scraper automatically handles rate limits with exponential backoff
- If you hit frequent rate limits, reduce concurrency
For scraping 500+ profiles:
- Split into batches: Create multiple input files with 100 profiles each
- Export after each batch: Don't scrape 1000 profiles without exporting
- Use JSON for full data: CSV flattening may lose some nested details
- Public profiles only: Private profiles or profiles with strict privacy settings won't return full data
- Contact info: Email/phone are only available if the profile owner made them public
- Real-time data: Data is fetched live from LinkedIn via LinkdAPI
Solution: Make sure config.ini exists in the same directory as main.py
Solution:
- Open
config.ini - Replace
YOUR_API_KEY_HEREwith your actual API key from linkdapi.com - Save the file
Solution: Create a usernames.txt file in the project directory and add LinkedIn usernames (one per line)
Solution:
# Make sure virtual environment is activated
source venv/bin/activate # macOS/Linux
# OR
venv\Scripts\activate # Windows
# Reinstall dependencies
pip install -r requirements.txtPossible causes:
- Username is incorrect (check spelling)
- Profile doesn't exist or was deleted
- Profile is set to private
- Username format is wrong (should be the part after
linkedin.com/in/)
Solution:
- The scraper automatically handles this with exponential backoff
- If it happens frequently, reduce
max_concurrent_requestsinconfig.ini - Check your API plan limits at linkdapi.com/dashboard
Solutions:
- Increase
max_concurrent_requestsinconfig.ini(if your plan allows) - Uncheck data types you don't need (less API calls = faster)
- Check your internet connection
Cause: No profiles were successfully scraped Solution:
- Check the scraping logs for errors
- Verify usernames are correct
- Ensure your API key is valid and has credits
Solution:
pip install linkdapi --upgradeScrape candidate profiles from LinkedIn searches:
- Find candidates on LinkedIn manually
- Copy their usernames to
usernames.txt - Scrape all profiles at once
- Export to CSV for your ATS or spreadsheet
Analyze professionals in specific industries:
- Identify skill trends in your industry
- Research competitor employee backgrounds
- Build industry expertise databases
Build targeted prospect lists:
- Scrape decision-maker profiles
- Collect contact information (when available)
- Build outreach lists with job titles and companies
Study career paths and professional networks:
- Analyze career progression patterns
- Study education-to-career pipelines
- Research professional skills distribution
Identify and research LinkedIn influencers:
- Find creators by follower count
- Analyze top voices in your niche
- Build influencer outreach lists
- Website: linkdapi.com
- GitHub: github.com/linkdapi
- Documentation: linkdapi.com/docs
- API Dashboard: linkdapi.com/dashboard
- Email: support@linkdapi.com
- Issues: Create an issue on GitHub
- API Questions: Check LinkdAPI Documentation
- LinkdAPI Python SDK: github.com/linkdapi/linkdapi-sdk
- API Playground: Test API calls at linkdapi.com/playground
This project is licensed under the MIT License - see the LICENSE file for details.
This LinkedIn scraper tool is for educational and research purposes only. Users are responsible for:
- Complying with LinkedIn's Terms of Service
- Respecting data privacy laws (GDPR, CCPA, etc.)
- Obtaining necessary permissions for data collection
- Using scraped data ethically and legally
The LinkdAPI Team is not responsible for misuse of this tool. Always respect people's privacy and use scraped data responsibly.
If this LinkedIn profile scraper helped you, please ⭐ star this repository on GitHub!
💙 Made with love by LinkdAPI Team
Questions? Email us at support@linkdapi.com