Navigation: Catchers | Installation | Output artifacts | Workflow | Examples | Why split | License
Side Scraper is a bundle of three Chrome extensions ("catchers") for turning a public social profile, an auto-scroll session, and one side-panel click into a clean CSV export of posts.
The catchers share the same UX, side-panel layout, and export schema. They differ only in the platform-specific scraping logic required to reliably extract posts from each site's DOM.
- Target:
https://www.linkedin.com/* - Description: Scroll a LinkedIn profile's recent activity and export posts with text, media, URL, and repost status to CSV.
- Permissions:
activeTab,scripting,storage,downloads,sidePanel - Entry points: side panel (
popup.html), service worker (background.js), content script (content.js)
- Target:
https://www.threads.net/*,https://www.threads.com/* - Description: Scroll a Threads profile and export posts with text, media, URL, repost status, and thread tag to CSV.
- Permissions:
activeTab,scripting,storage,downloads,sidePanel - Entry points: side panel (
popup.html), service worker (background.js), content script (content.js)
- Target:
https://x.com/*,https://twitter.com/* - Description: Scroll an X (Twitter) profile and export posts with text, media, URL, repost status, and thread tag to CSV.
- Permissions:
activeTab,scripting,storage,downloads,sidePanel - Entry points: side panel (
popup.html), service worker (background.js), content script (content.js),MAIN-world injected script (injected.js) loaded atdocument_start
These are unpacked Manifest V3 Chrome extensions. Install each catcher independently.
- Open
chrome://extensions - Enable Developer mode with the top-right toggle
- Click Load unpacked
- Select one of:
side-scraper/linkedin-catcherside-scraper/threads-catcherside-scraper/x-catcher
- Pin the extension to the toolbar
Repeat for each catcher you want installed.
git clone https://github.com/<owner>/side-scraper.git
cd side-scraperThen load linkedin-catcher/, threads-catcher/, and x-catcher/ as unpacked extensions using the steps above.
Chrome discovers the extension from the folder containing manifest.json, so each catcher folder must keep its manifest.json at the folder root.
Each catcher produces:
- a live in-panel preview of captured posts
- a CSV file downloaded via
chrome.downloads
CSV columns:
textmediaurlrepostthread tagwhere applicable for Threads and X
Use the catchers in this exact sequence per profile you want to capture.
Input:
- target profile URL on LinkedIn, Threads, or X
Output:
- a fully loaded profile page in the active tab
Input:
- click the catcher's toolbar icon
Output:
- the side panel UI (
popup.html) attached to the current tab, with live post counter and preview pane
Input:
- press Start in the side panel
Output:
- the content script auto-scrolls the feed, deduplicates posts, and streams them into the preview pane in real time
Input:
- press Stop when the feed is exhausted or you have enough rows
Output:
- a CSV downloaded via
chrome.downloads, containing one row per captured post
This step is intentionally separate from scraping so capture can:
- inspect each post as it streams in
- preserve dedup state across long scroll sessions
- save project-bound CSVs explicitly instead of leaving rows in extension storage
Use when you want to archive a LinkedIn user's recent activity feed.
1. Navigate to https://www.linkedin.com/in/<handle>/recent-activity/all/
2. Click the LinkedIn Catcher icon -> side panel opens
3. Press Start -> auto-scroll begins
4. Press Stop when done -> CSV downloads
Use when you want to archive a Threads profile's posts and reposts.
1. Navigate to https://www.threads.net/@<handle>
2. Click the Threads Catcher icon -> side panel opens
3. Press Start -> auto-scroll begins for threads.net and threads.com
4. Press Stop when done -> CSV downloads with thread tag populated
Use when you want to archive an X (Twitter) profile, including replies and reposts.
1. Navigate to https://x.com/<handle>
2. Click the X Catcher icon -> side panel opens
3. Press Start -> injected.js cooperates with content.js to capture posts
4. Press Stop when done -> CSV downloads with thread tag populated
A single all-in-one scraper fails in predictable ways:
- each platform virtualizes its feed differently
- selectors rot at different cadences per site
- permission scopes and
host_permissionsshould be minimal per platform - X requires a
MAIN-world injected script to reach internal APIs; LinkedIn and Threads do not - mixing all three into one extension would request access to every domain at once
So this repo separates responsibilities:
linkedin-catcherscrapes a LinkedIn profile's recent activity feedthreads-catcherscrapes a Threads profile on threads.net or threads.comx-catcherscrapes an X (Twitter) profile, including aMAIN-world injected helper
Side Scraper is released under the MIT License.
