Save BDJobs circulars before they disappear.
Installation • Quick Start • Documentation • Features • Roadmap
BDJobs.com hides job descriptions after the deadline. Want to review that JD before your interview? You need a Pro subscription.
JobSnap fixes this:
- 💻 CLI:
jobsnap save <url>,jobsnap list,jobsnap export - 🌐 Extension: One-click download (Markdown or PDF)
jobsnap save "https://bdjobs.com/jobs/details/1234567"Instantly creates:
job.md- Clean Markdown (LLM-friendly)job.json- Structured data (programmatic access)raw.html- Original page (future-proof re-parsing)
git clone https://github.com/Ahnaf19/jobsnap.git
cd jobsnap
npm install
npm install -g .Now use jobsnap anywhere:
jobsnap save "https://bdjobs.com/jobs/details/1436685"Run from Repo (No Global Install)
npm install
npm run jobsnap -- save "https://bdjobs.com/jobs/details/1436685"Chrome Extension (One-Click Saves)
- Open
chrome://extensions - Enable Developer mode
- Click Load unpacked → select
extension/folder - Click JobSnap icon on any BDJobs job page or paste the URL
jobsnap save "https://bdjobs.com/jobs/details/1436685"Output structure:
jobs/1436685/
├── raw.html # Original snapshot
├── job.json # Structured data
└── job.md # Clean Markdown
jobs/index.jsonl # Searchable catalog
jobsnap reparse jobs/1436685Use this when:
- Parser improves in a new version
- You want a different filename template
- Job files get corrupted
jobsnap save "https://bdjobs.com/jobs/details/1436685" --skip
jobsnap save "https://bdjobs.com/jobs/details/1436686" --skip
jobsnap save "https://bdjobs.com/jobs/details/1436687" --skipTip
The --skip flag prevents overwriting jobs you've already saved.
| Feature | Description |
|---|---|
| 🔒 Offline-First | Your data stays on your disk. No cloud dependencies. |
| 🤖 AI-Ready | Clean Markdown works seamlessly with ChatGPT, Claude, etc. |
| 📋 List & Filter | View, sort, and filter saved jobs by deadline, company, or tags. |
| 📄 PDF Export | Export jobs to professional PDFs or HTML with one command. |
| 🔄 Future-Proof | Re-parse old snapshots if BDJobs changes their format. |
| ⚡ Dual-Path Parser | Extracts embedded JSON + text fallback for resilience. |
| 🎯 Smart Dates | Unambiguous date format (Jan 08, 2026) prevents confusion. |
| 🎨 Flexible Output | Customize filenames with templates: {title}_{company}_{job_id}.md |
| 🧪 Tested | Unit tests, schema validation, fixture regression suite. |
| 🌐 Two Interfaces | CLI for power users, Chrome extension for one-click saves. |
- CLI Reference - Complete command documentation
- Contributing Guide - How to contribute to JobSnap
- Release Notes v1.0 - What's new in v1.0
- Output Contract - Guaranteed schema stability
- How It Works - Dual-path parsing explained
- Configuration - Config files and precedence
- Extension Guide - Chrome extension usage
- Roadmap - Future plans (v2.0, v3.0)
- FAQ - Common questions
| Command | Description |
|---|---|
jobsnap save <url> |
Fetch and save a BDJobs circular |
jobsnap list |
List all saved jobs with filtering/sorting |
jobsnap export <job_dir> |
Export job to PDF or HTML |
jobsnap reparse <dir> |
Re-parse from existing raw.html |
jobsnap --help |
Show usage information |
| Option | Description | Example |
|---|---|---|
--out <dir> |
Custom output directory | --out ./my-jobs |
--skip |
Skip if job already exists | --skip |
--template <pattern> |
Filename template | --template "{title}_{company}_{job_id}.md" |
--dry-run |
Preview paths without writing | --dry-run |
See full documentation: docs/cli-reference.md
JobSnap v1.0 guarantees a stable output format. Changes require a major version bump.
Required fields:
{
"job_id": "1436685",
"url": "https://bdjobs.com/jobs/details/1436685",
"saved_at": "2024-12-25T10:30:00Z",
"source": "bdjobs",
"parser_version": "1.0.0",
"title": "Senior Software Engineer",
"company": "ABC Technologies Ltd.",
"summary": "...",
"requirements": { ... },
"responsibilities_context": { ... },
"company_information": "..."
}Optional fields: application_deadline, published, skills_expertise, compensation_other_benefits, read_before_apply
Headings appear in this order when present:
- Summary
- Requirements (Education / Experience / Skills)
- Responsibilities & Context
- Skills & Expertise
- Compensation & Other Benefits
- Read Before Apply
- Company Information
- Raw Text (fallback only)
JobSnap uses two complementary extraction methods to ensure reliability:
- Primary: Extract embedded JSON from BDJobs' Angular state (
ng-state) - Fallback: Text scraping with intelligent section detection
- Merge: Combine both results for maximum data coverage
Even if BDJobs changes their page structure, JobSnap adapts.
# Save with current parser
jobsnap save "https://bdjobs.com/jobs/details/1436685"
# Later: parser improves in v1.1
jobsnap reparse jobs/1436685 # No re-download needed!Since JobSnap saves raw.html, you can regenerate job.json and job.md with newer parser versions anytime.
Set defaults in your project root:
{
"outputDir": "jobs",
"template": "{title}_{company}_{job_id}.md",
"skip": false
}CLI flags > jobsnap.config.json > .env > defaults
Example:
# Config has: outputDir = "jobs"
# This command uses "./archive" instead:
jobsnap save "..." --out ./archiveFull configuration guide: docs/cli-reference.md
The Chrome extension uses the same parser as the CLI.
- Open a BDJobs job page
- Click the JobSnap icon
- Choose:
- Download from current tab (one click)
- Download from URL (paste a link)
- Filename parts: Check/uncheck Title, Company, Job ID
- Defaults: Right-click icon → Options
If you modify core/ files:
npm run sync-extensionThen reload the extension in Chrome.
| Scenario | Solution |
|---|---|
| Preparing for interviews? | Review all saved JDs in one folder. Grep for specific skills. |
| Tailoring your CV? | Extract common requirements from saved jobs. |
| Lost access to a JD? | Re-read anytime—no Pro subscription needed. |
| AI-powered analysis? | Feed Markdown to ChatGPT/Claude for career advice. |
| Tracking applications? | Search index.jsonl for all jobs from a company. |
npm testTest coverage:
- ✅ Unit tests (core parser logic)
- ✅ Schema validation (required fields)
- ✅ Markdown contract (stable headings)
- ✅ Fixture regression (real BDJobs pages)
- Stable output contract
- Dual-path parser with fallback
- CLI + Chrome extension
- Regression test suite
- 📋 List command - View, sort, and filter saved jobs
- 📄 PDF/HTML export - Export jobs to PDF or HTML with professional styling
- 🎨 Enhanced extension - PDF download with native Chrome support
- 📅 Date standardization - Unambiguous date format (MMM DD, YYYY)
- 🤖 LLM-powered JD summaries - Extract must-haves vs nice-to-haves
- 📊 CV gap analysis - Compare resume against saved JDs
- 📝 Interview prep - Auto-generate topic checklists
- 🏷️ Tagging system - Tag and categorize saved jobs
- 🌍 Multi-platform - LinkedIn, Glassdoor, etc.
- 🇧🇩 Bangla support - Local job board compatibility
- 🔍 Advanced search - Full-text search across all saved jobs
Does this violate BDJobs terms of service?
JobSnap saves publicly accessible pages for personal archival use, similar to saving a webpage in your browser. It doesn't automate interactions, bypass authentication, or scrape private data. Use responsibly.
What if BDJobs changes their page format?
JobSnap's dual-path parser adapts automatically. You can also re-parse old jobs with jobsnap reparse using updated parsers.
Can I use this for other job boards?
Not yet. v1.0 only supports BDJobs. Multi-platform support is planned for v3.0+. Contributions are welcomed!
Where is my data stored?
Locally on your disk in the jobs/ folder (or custom --out directory). JobSnap doesn't send data to external servers.
How do I update JobSnap?
git pull
npm install -g .Then optionally reparse old jobs: jobsnap reparse jobs/<job_id>
⚠️ Only supportshttps://bdjobs.com/jobs/details/<job_id>format⚠️ No "Applied jobs" automation (manual URL input required)⚠️ English only (Bangla support planned for v3.0+)
- Node.js 18+ (tested with Node 22)
- Chrome browser (for extension)
Contributions are welcome! 🎉
- 🐛 Report bugs - Open an issue with reproduction steps
- 💡 Request features - Describe your use case
- 🔧 Submit PRs - See CONTRIBUTING.md for guidelines
- 📦 Add fixtures - Help test with real BDJobs pages
Please read our Contributing Guide before submitting pull requests.
MIT - See LICENSE file for details
Built to solve a real problem faced during my December 2023 job search in Bangladesh.
Questions or feedback? Open an issue or reach out!
