Project: fb-scraper
Maintainer: TRABY CASPER · CASPER TECH
Thank you for your interest in contributing! All contributions are welcome and appreciated.
- Node.js 18 or higher
- npm 8 or higher
- Chromium installed (for Puppeteer-based endpoints)
- Git
git clone https://github.com/Casper-Tech-ke/fb-scraper.git
cd fb-scraper
# Install dependencies
npm install puppeteer-core node-fetch
# Set your Chromium path in server.js if different from /usr/bin/chromium
# Start the service
node server.jsThe service will be available at http://127.0.0.1:5757.
Before opening an issue, please:
- Search existing issues to avoid duplicates
- Confirm the bug is reproducible with a real Facebook URL
When opening a bug report, include:
- Description of the issue
- The Facebook URL that failed (if not sensitive)
- Which endpoint failed (
/scrape,/scrape-sf, or/scrape-snap) - Expected vs actual behaviour
- Node.js version and OS
Open an issue with the label enhancement. Describe:
- The new scraping provider or strategy you want to add
- Why it would benefit users
- Any implementation ideas you have
To add a new upstream scraping provider:
- Write a new async function (e.g.
scrapeNewProvider(fbUrl)) inserver.js - Return the standard format:
{ success: true, title: 'Facebook Video', thumbnail: 'https://...', links: [ { url: 'https://...', label: 'HD Download', isHD: true, isSD: false } ] }
- Add a new route block in the server's request handler:
if (parsed.pathname === '/scrape-newprovider') { // call your function }
- Document the new endpoint in
README.md
- Fork the repository
- Create a branch from
main:git checkout -b feat/your-feature-name
- Make your changes — keep commits focused and descriptive
- Test your changes — ensure all endpoints respond correctly with a real Facebook URL
- Open a Pull Request against
mainwith a clear description
- Use
const/let, notvar - Async/await over callbacks and raw Promises
- Keep scraper functions self-contained — one function per provider
- Always
close()Puppeteer pages in afinallyblock - Standard response shape:
{ success: true, title, thumbnail, links: [{ url, label, isHD, isSD }] }
- Error responses:
res.statusCode = 500; res.end(JSON.stringify({ error: err.message }));
Use clear, present-tense messages:
feat: add snapsave.app vm-decode endpoint
fix: handle empty links array from fdown.net
docs: update README with new provider
chore: bump node version requirement
Be respectful, constructive, and inclusive. Harassment of any kind will not be tolerated.
© 2026 CASPER TECH · TRABY CASPER · Kenya 🇰🇪