LinkedIn Data Scraping with React: A Step-by-Step Guide

Jason Gong
June 22, 2024

Scrape LinkedIn data using React with Axios and Cheerio.

By the way, we're Bardeen, we build a free AI Agent for doing repetitive tasks.

If you're scraping LinkedIn, try our LinkedIn Data Scraper. Automate data extraction with no code.

Web scraping has become an essential tool for data collection, and LinkedIn, with its vast network of professionals, offers valuable insights for businesses and researchers alike. In this tutorial, we'll guide you through the process of scraping LinkedIn data using React, a popular JavaScript library known for its flexibility and performance. By leveraging React's components and state management capabilities, you'll learn how to build an efficient and user-friendly web scraping tool specifically tailored for LinkedIn.

Introduction to LinkedIn Data Scraping with React

Web scraping is the process of extracting data from websites, and LinkedIn, with its vast network of professionals, offers valuable insights for businesses and researchers. React, a popular JavaScript library, provides a practical and efficient way to develop scraping tools for LinkedIn data collection.

Here are some key points to understand about LinkedIn data scraping with React:

  • Web scraping automates the extraction of data from LinkedIn, allowing you to gather information such as user profiles, job listings, and company details.
  • React's component-based architecture and virtual DOM make it well-suited for building scraping tools that can handle LinkedIn's dynamic content.
  • By leveraging React's state management and lifecycle methods, you can efficiently navigate through LinkedIn pages, extract desired data, and handle pagination.

When scraping LinkedIn data, it's crucial to respect LinkedIn's terms of service and adhere to ethical scraping practices. This includes avoiding excessive requests, properly handling rate limits, and ensuring that your scraping activities do not violate any legal or privacy regulations.

React, in combination with libraries like Axios for making HTTP requests and Cheerio for parsing HTML, provides a powerful toolset for building robust LinkedIn scraping applications. With React's flexibility and performance, you can create efficient and maintainable scraping tools tailored to your specific data collection needs.

Setting Up Your React Environment for Scraping

To set up your React environment for web scraping, you'll need to create a new React project and install the necessary dependencies. Here's a step-by-step guide to web scraping:

  1. Create a new React project using your preferred method, such as create-react-app or a custom setup with Webpack and Babel.
  2. Install the required dependencies for web scraping:
    • Axios: A popular library for making HTTP requests from the browser or Node.js.
    • Cheerio: A lightweight library for parsing and manipulating HTML, similar to jQuery.
  3. To install these dependencies, run the following command in your project directory:npm install axios cheerio
  4. Set up a proper user-agent header in your Axios requests to mimic a browser session. This helps avoid being blocked by websites that detect scraping activities. You can set the user-agent in the Axios configuration:

const axios = require('axios');axios.defaults.headers.common['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36';

Handling cookies is also crucial for maintaining session persistence across requests. Axios automatically handles cookies by default, so you don't need to configure anything extra.

With these steps completed, your React environment is now set up for web scraping. You can start writing your scraping logic using Axios for making requests and Cheerio for parsing the HTML responses.

Use Bardeen to save time scraping. Automate tasks with no code required.

Implementing Authentication and Session Handling

When scraping LinkedIn data using React, managing authentication and maintaining session persistence are crucial for accessing user-specific information. Here's how you can implement authentication and session handling:

  1. Set up a login form in your React app that captures the user's LinkedIn credentials (email and password).
  2. Create a separate component or module to handle the authentication process.
  3. Use a library like Axios to send a POST request to LinkedIn's login API endpoint with the user's credentials.
  4. Upon successful authentication, LinkedIn will respond with a session cookie or token.
  5. Store this session cookie or token securely in your React app's state or local storage.
  6. For subsequent requests to LinkedIn's API, include the stored session cookie or token in the request headers to maintain the authenticated session.

To ensure session persistence across multiple scraping sessions, you can:

  • Implement a mechanism to refresh the session token periodically before it expires.
  • Store the session token in a persistent storage solution like browser cookies or local storage.
  • Retrieve the stored session token when the user revisits your React app and use it to authenticate requests.

By properly handling authentication and session persistence, you can ensure that your React app can access user-specific data from LinkedIn without the need for repeated login prompts.

Navigating and Extracting Data with React and Axios

When scraping LinkedIn data, navigating the site's structure and extracting specific data points is crucial. React components can be used to target and extract data from user profiles, job listings, and company pages. Here's how you can navigate and extract data using React and Axios:

  1. Identify the specific data points you want to extract from LinkedIn, such as user profile information, job details, or company data.
  2. Analyze the HTML structure of the relevant LinkedIn pages to determine the CSS selectors or XPath expressions needed to locate the desired data.
  3. Create React components that correspond to the different data points you want to scrape. For example, you might have a ProfileScraper, JobScraper, or CompanyScraper component.
  4. Within each component, use Axios to send HTTP requests to the corresponding LinkedIn pages and retrieve the HTML content.
  5. Once the HTML is obtained, use libraries like Cheerio or regular expressions to parse and extract the desired data based on the identified CSS selectors or XPath expressions.
  6. Handle pagination and navigate through multiple pages of data if necessary. LinkedIn often uses dynamic loading and pagination, so you may need to simulate scrolling or clicking on "Load more" buttons to access all the data.
  7. Store the extracted data in your preferred format, such as JSON objects or arrays, and pass it to other components or save it to a database for further processing.

Here's an example of using Axios to fetch data from a LinkedIn profile page:

import axios from 'axios';

// ...

const fetchProfileData = async (profileUrl) => { try { const response = await axios.get(profileUrl); const html =; // Parse the HTML and extract desired data using Cheerio or regular expressions // ... return extractedData; } catch (error) { console.error('Error fetching profile data:', error); return null; } };

By leveraging the power of React components and Axios, you can efficiently navigate LinkedIn's structure, extract specific data points, and handle pagination to ensure comprehensive data collection.

Save time scraping data with Bardeen. Try ourLinkedIn scraper to automate tasks with no code.

Data Parsing and Storage Solutions

When scraping data from LinkedIn using React, parsing the fetched HTML content and storing the extracted data efficiently are crucial steps. Cheerio, a popular library for parsing HTML, plays a significant role in this process.

Cheerio allows you to traverse and manipulate the fetched HTML content using a syntax similar to jQuery. With Cheerio, you can easily select specific elements, extract their text or attributes, and build structured data objects from the parsed information.

Here's an example of using Cheerio to parse LinkedIn profile data:

const cheerio = require('cheerio');

const parseProfileData = (html) => {
 const $ = cheerio.load(html);
 const name = $('').text().trim();
 const title = $('p.headline').text().trim();
 const location = $('span.location').text().trim();
 return {

After parsing the data, you need to consider storage solutions to persist the scraped information. The choice of storage depends on your specific requirements, such as data volume, querying needs, and scalability.

Some common storage options for scraped data include:

  • Local storage: Storing data in files or local databases like SQLite or JSON files.
  • Databases: Using databases like MongoDB, PostgreSQL, or MySQL to store structured data.
  • Cloud storage: Leveraging cloud platforms like AWS S3, Google Cloud Storage, or Azure Blob Storage for scalable file storage.

When working with React, you can utilize state management libraries like React Context or Redux to manage the scraped data within your application. These libraries provide a centralized store to hold the data and allow easy access and updates across different components.

For example, using React Context, you can create a scraping context to store and manage the scraped data:

import React, { createContext, useState } from 'react';

export const ScrapingContext = createContext();

export const ScrapingProvider = ({ children }) => {
 const [scrapedData, setScrapedData] = useState([]);

 const addScrapedData = (data) => {
   setScrapedData([...scrapedData, data]);

 return (
   <ScrapingContext.Provider value=>

By combining Cheerio for parsing and React Context or Redux for state management, you can effectively handle the scraped data within your React application, making it accessible and manageable throughout different components. Bardeen's scraper can help automate the process.

Handling Rate Limiting and Avoiding Bans

When scraping data from LinkedIn using React, it's crucial to handle rate limiting and avoid getting banned. LinkedIn employs various techniques to detect and block scrapers that make too many requests in a short period.

Here are some strategies to handle LinkedIn's rate limiting:

  • Implement delays between requests to mimic human behavior. Use libraries like setTimeout or setInterval to introduce random pauses.
  • Respect LinkedIn's API call limits. Familiarize yourself with the limits and ensure your scraper stays within the allowed thresholds.
  • Use exponential backoff. If a request fails due to rate limiting, gradually increase the delay before retrying.
  • Distribute your scraping across multiple IP addresses or proxies to avoid hitting rate limits from a single IP.

To avoid getting banned, follow these ethical scraping practices:

  • Rotate your IP addresses or use a pool of proxies. This helps distribute the requests and reduces the risk of being flagged.
  • Vary your user agent headers to mimic different browsers and devices. Avoid using the same user agent for all requests.
  • Respect LinkedIn's robots.txt file and avoid scraping restricted pages or sections.
  • Limit your scraping frequency and avoid aggressive crawling. Spread out your requests over a longer period.

Here's an example of implementing delays and proxies in a React component:

import React, { useEffect } from 'react';import axios from 'axios';const LinkedInScraper = () => {useEffect(() => {const scrapeData = async () => {const proxies = ['proxy1', 'proxy2', 'proxy3'];const userAgents = ['userAgent1', 'userAgent2', 'userAgent3'];for (const url of urlsToScrape) {const randomProxy = proxies[Math.floor(Math.random() * proxies.length)];const randomUserAgent = userAgents[Math.floor(Math.random() * userAgents.length)];try {await axios.get(url, {proxy: randomProxy,headers: {'User-Agent': randomUserAgent,},});// Process the scraped dataawait new Promise((resolve) => setTimeout(resolve, getRandomDelay()));} catch (error) {console.error('Scraping error:', error);// Implement exponential backoff or other error handling}}};scrapeData();}, []);const getRandomDelay = () => {// Generate a random delay between 1000 and 5000 millisecondsreturn Math.floor(Math.random() * 4000) + 1000;};return <div>{/* Render scraped data */}</div>;};export default LinkedInScraper;

By implementing these strategies and being mindful of LinkedIn's rate limits and terms of service, you can scrape data more effectively and reduce the risk of getting banned. Bardeen's LinkedIn integration can help automate the process.

Save time scraping data with Bardeen. Try our LinkedIn scraper to automate tasks with no code.

Building a User Interface with React for Scraping Controls

Creating a user-friendly interface for your LinkedIn scraping tool is essential to make it accessible and easy to use. With React, you can build a dynamic and interactive UI that allows users to input scraping parameters, initiate the scraping process, and view the results.

Here's how you can design a simple user interface using React components:

  1. Create a form component that allows users to input scraping parameters such as the LinkedIn profile URL, the number of pages to scrape, and any specific data fields to extract.
  2. Use React state to manage the form inputs and handle form submission. When the user submits the form, trigger the scraping process with the provided parameters.
  3. Display a progress indicator or loading spinner while the scraping is in progress. This keeps the user informed about the status of the scraping task.
  4. Once the scraping is complete, render the scraped data in a structured and visually appealing way. Use React components to display the data in tables, lists, or cards, depending on the nature of the data.
  5. Implement error handling to catch and display any errors that may occur during the scraping process. Show user-friendly error messages and provide guidance on how to resolve common issues.

Here's an example of a basic React component structure for a scraping control UI:

import React, { useState } from 'react';const ScrapingControlUI = () => {const [formData, setFormData] = useState({profileUrl: '',pages: 1,fields: [],});const [isLoading, setIsLoading] = useState(false);const [scrapedData, setScrapedData] = useState(null);const [error, setError] = useState(null);const handleSubmit = async (e) => {e.preventDefault();setIsLoading(true);try {const data = await scrapeLinkedInProfile(formData);setScrapedData(data);setError(null);} catch (error) {setError(error.message);setScrapedData(null);}setIsLoading(false);};return (<div><form onSubmit={handleSubmit}>{/* Form inputs */}<button type="submit" disabled={isLoading}>{isLoading ? 'Scraping...' : 'Start Scraping'}</button></form>{isLoading && <p>Scraping in progress...</p>}{error && <p>Error: {error}</p>}{scrapedData && (<div>{/* Display scraped data */}</div>)}</div>);};export default ScrapingControlUI;

By building a user interface with React, you can provide a seamless and intuitive experience for users to interact with your LinkedIn scraping tool. The UI components handle user input, display progress and error states, and present the scraped data in a structured manner.

Automate Your LinkedIn Tasks with Bardeen Playbooks

While scraping data from LinkedIn using React can be a complex process due to LinkedIn's dynamic content and the necessity of handling authentication, it's possible to automate data extraction directly from LinkedIn pages with Bardeen. Automating data extraction can save a tremendous amount of time and can be especially useful for lead generation, market research, or keeping track of job postings.

  1. Get data from a LinkedIn profile search: This playbook automates the extraction of data from LinkedIn profile searches, making it easier to gather comprehensive details for lead generation or competitor analysis.
  2. Get data from the LinkedIn job page: Streamline the process of gathering job-related information from LinkedIn, ideal for job seekers or recruiters seeking to compile a list of openings and requirements.
  3. Get data from the currently opened LinkedIn post: Automate the collection of data from LinkedIn posts for content analysis, competitor post tracking, or engagement evaluation.

These playbooks empower users to efficiently automate the extraction of valuable data from LinkedIn, enhancing productivity and data accuracy. Start automating by downloading the Bardeen app at

Automate LinkedIn Scraping with Bardeen

Use Bardeen's LinkedIn Data Scraper to automate data collection without coding.

Get Bardeen free

Related frequently asked questions

Step-by-Step Guide to Creating Databases in Notion

Learn how to create, master, link databases, and templates in Notion. This guide covers selecting types, layouts, and data sources for efficient organization.

Read more
Step-by-Step Guide to Upload Lists to HubSpot

Learn how to upload lists to HubSpot for contacts, companies, and more. Streamline CRM data management and improve targeted outreach efforts.

Read more
Step-by-Step Guide to Creating HubSpot Forms

Learn how to easily create and customize HubSpot forms and pop-up forms to capture visitor information, with step-by-step instructions.

Read more
Web Scraping into Excel: A Step-by-Step Guide

Learn how to scrape web data into Excel using tools, Web Queries, or VBA. Ideal for data analysis, market research, and information collection.

Read more
Become a HubSpot Partner: Steps & Benefits

Learn how to become a HubSpot Partner, including steps to join partner programs, complete certifications, and unlock benefits for growth.

Read more
Best 5 Data Automation Tools for Businesses 2024

Explore the top 5 data automation software tools of 2024 for improved business operations, integration, and productivity.

Read more
how does bardeen work?

Your proactive teammate — doing the busywork to save you time

Integrate your apps and websites

Use data and events in one app to automate another. Bardeen supports an increasing library of powerful integrations.

Perform tasks & actions

Bardeen completes tasks in apps and websites you use for work, so you don't have to - filling forms, sending messages, or even crafting detailed reports.

Combine it all to create workflows

Workflows are a series of actions triggered by you or a change in a connected app. They automate repetitive tasks you normally perform manually - saving you time.

get bardeen

Don't just connect your apps, automate them.

200,000+ users and counting use Bardeen to eliminate repetitive tasks

Effortless setup
AI powered workflows
Free to use
Reading time
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
By clicking “Accept”, you agree to the storing of cookies. View our Privacy Policy for more information.