Skip to content

Repository files navigation

LinkedIn Post Scraper Chrome Extension

A reliable Chrome extension for exporting recent LinkedIn profile posts and company page posts to CSV, with a persistent queue, configurable limits, pause/reset controls, and resilient feed scrolling.

Manifest V3 No Build Step License MIT Status Active

Overview

LinkedIn Post Scraper Chrome Extension helps you collect public LinkedIn activity from:

  • Personal LinkedIn profiles via /recent-activity/all/
  • LinkedIn company, school, and showcase pages via /posts/?feedView=all

It is designed for researchers, sales teams, founders, recruiters, content analysts, and developers who need a practical way to export visible LinkedIn posts from a browser session they control.

The extension runs in your own Chrome profile, uses your active LinkedIn login session, and exports one CSV per queued profile or company page.

SEO Keywords

LinkedIn scraper, LinkedIn post scraper, LinkedIn company page scraper, LinkedIn profile scraper, LinkedIn Chrome extension, LinkedIn data export, LinkedIn activity scraper, LinkedIn posts to CSV, LinkedIn recent posts scraper, LinkedIn sales research tool, LinkedIn content research, LinkedIn lead research extension.

Features

  • Scrape personal profiles and company pages
    • Personal profiles: /recent-activity/all/
    • Company/school/showcase pages: /posts/?feedView=all
  • Persistent queue
    • Add many URLs at once.
    • Close/reopen the popup without losing progress.
  • Configurable scrape depth
    • Latest N posts.
    • Until LinkedIn stops loading more posts.
  • Robust URL normalization
    • Handles missing protocol, trailing slashes, query strings, pasted JSON arrays, comma lists, newline lists, and duplicate URLs.
  • Reliable scrolling
    • Collects posts incrementally as LinkedIn virtualizes the feed.
    • Detects short feeds and no-activity states.
    • Stops if the viewport stalls for about 10 seconds.
    • Uses a per-profile runtime budget so one bad page does not block the whole queue.
  • Professional run controls
    • Start
    • Pause
    • Retry failed
    • Clear completed
    • Clear all
    • Reset extension
  • Performance mode
    • Optionally blocks images, video/media, and fonts while scraping to reduce memory and network usage.
  • CSV exports
    • One CSV per profile/company.
    • Includes scrape mode, attempt number, status, and stop reason.

Screenshots

Screenshots are welcome. Add images to a future docs/ folder and reference them here:

![Popup dashboard](docs/popup-dashboard.png)

Installation

  1. Download or clone this repository.
  2. Open Chrome and go to chrome://extensions.
  3. Enable Developer mode.
  4. Click Load unpacked.
  5. Select this repository folder.
  6. Pin the extension from the Chrome toolbar.

No build step is required.

Usage

  1. Log in to LinkedIn in the same Chrome profile.
  2. Open the extension popup.
  3. Paste LinkedIn profile/company URLs into the Profiles box.
  4. Click Add.
  5. Configure run settings:
    • Depth: Latest N posts or Until end.
    • Post limit: Used for Latest N posts.
    • Delay: Pause between profiles.
    • Retries: Automatic retries before an item is marked failed.
    • Performance mode: Blocks heavy LinkedIn media while scraping.
  6. Click Save Settings.
  7. Click Start.

The extension opens or reuses a LinkedIn tab, visits the normalized posts/activity page, scrolls the feed, collects visible post data, and downloads CSV files to the linkedin-scraper/ downloads folder.

Supported URL Examples

Personal profiles:

https://www.linkedin.com/in/example
linkedin.com/in/example/
/in/example/recent-activity/all/
example

Company-like pages:

https://www.linkedin.com/company/example-company
linkedin.com/company/example-company/
linkedin.com/school/example-school/
/showcase/example-showcase/posts/
company/example-company

A bare value like example is treated as a personal profile slug and normalized to:

https://www.linkedin.com/in/example/

CSV Schema

ProfileURL,
ProfileType,
PageName,
Content,
PostDate,
RawTime,
Likes,
Comments,
PostURL,
ScrapeMode,
Attempt,
Status,
Message

Reliability Design

LinkedIn feeds are dynamic and virtualized. This extension uses several strategies to make scraping more reliable:

  • Collects posts incrementally while scrolling.
  • Deduplicates posts using post URLs, activity URNs, and content fallback keys.
  • Avoids clicking LinkedIn post/media links while expanding text.
  • Stops when the selected post limit is reached.
  • Stops when explicit no-post/no-activity text appears.
  • Stops when the page bottom is stable and no loader is visible.
  • Stops when scroll position, page height, and collected post count remain unchanged for about 10 seconds.
  • Uses per-profile time budgets so the queue can continue if one page behaves badly.
  • Uses run IDs and cancellation messages so pause, clear, and reset do not save stale scrape results.

Permissions

The extension uses these Chrome permissions:

  • tabs: open and reuse a LinkedIn tab.
  • activeTab: interact with the active browser tab.
  • scripting: inject/retry the content script when needed.
  • storage: persist queue, logs, settings, and status.
  • downloads: export CSV files.
  • alarms: resume queue processing after service worker suspension.
  • declarativeNetRequest: enable optional performance mode by blocking heavy media/font requests during scraping.

Host permissions are limited to:

["*://www.linkedin.com/*"]

Project Structure

.
|-- manifest.json       # Chrome extension manifest
|-- background.js       # Persistent queue, downloads, state, cancellation
|-- contentScript.js    # LinkedIn feed navigation and post extraction
|-- popup.html          # Popup dashboard
|-- popup.css           # Popup styling
|-- popup.js            # Popup controls and rendering
|-- chunk.txt           # Legacy sample input file, not used by the extension
|-- README.md
|-- LICENSE
|-- CONTRIBUTING.md
|-- SECURITY.md

Roadmap

  • JSON export alongside CSV.
  • Import/export queue state.
  • Better post URL extraction across LinkedIn layout variants.
  • Optional Markdown reports.
  • Local agent/MCP integration for controlled research workflows.
  • Screenshots and demo GIFs.
  • Chrome Web Store packaging checklist.

Responsible Use

This project is intended for lawful, ethical research of data you are allowed to access. LinkedIn may restrict automated collection under its terms or rate-limit suspicious activity.

Do not use this extension to collect private data, bypass authentication, evade access controls, spam users, or infer sensitive personal traits. You are responsible for complying with LinkedIn's terms, privacy laws, and all applicable regulations.

Troubleshooting

  • Nothing scrapes: Confirm you are logged in to LinkedIn.
  • Company pages return too few posts: Use /posts/?feedView=all, turn Performance mode off, and retry.
  • Profile has fewer posts than your limit: The scraper saves what it finds and moves on.
  • Popup looks stale after an update: Reload the unpacked extension in chrome://extensions.
  • State gets messy: Use Reset Extension in the popup.
  • LinkedIn layout changes: Selectors may need updates in contentScript.js.

Contributing

Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.

Good first issues:

  • Add screenshots.
  • Improve company page selectors.
  • Add JSON export.
  • Add tests around URL normalization.
  • Improve documentation for edge cases.

License

MIT License. See LICENSE.

Disclaimer

This project is not affiliated with, endorsed by, or sponsored by LinkedIn or Microsoft. LinkedIn is a trademark of LinkedIn Corporation. Use this software at your own risk.

Releases

Packages

Contributors

Languages