{"_id":"@bullpenm/legal-case-scraper","name":"@bullpenm/legal-case-scraper","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@bullpenm/legal-case-scraper","version":"0.1.0","description":"The first open source Node.js library for Indian eCourts case data.","main":"src/index.js","author":{"name":"gorupa"},"license":"MIT","dependencies":{"axios":"^1.6.0","axios-cookiejar-support":"^4.0.7","cheerio":"^1.0.0","qs":"^6.12.0","sharp":"^0.33.0","tesseract.js":"^5.0.4","tough-cookie":"^4.1.3","@bring-id/tlsn-js":"latest"},"publishConfig":{"access":"public"},"gitHead":"d35372818e8f879aab7d7c8dc696605c16a4560b","_id":"@bullpenm/legal-case-scraper@0.1.0","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-ZMkRGCY/I78Mae5ZYsA+w4qUJghnkmVKfz88ZdR001C3wLMC28FAtiRNO1vstwJCNPqFFESdf9UddCeb4wOhog==","shasum":"5935ba2413ee024a0c0486fb8647f90acdd09ca6","tarball":"https://registry.npmjs.org/@bullpenm/legal-case-scraper/-/legal-case-scraper-0.1.0.tgz","fileCount":12,"unpackedSize":34199,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC2upF265Fr3xgQFG5ggYEfjxut6BcbvojCh9LdCGaYFAIgVYmil4i16P/dYleesiqQrXxazvgZU8PxBaUgmopkoKY="}]},"_npmUser":{"name":"bullpenm","email":"gauravkalal1719@gmail.com"},"directories":{},"maintainers":[{"name":"bullpenm","email":"gauravkalal1719@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/legal-case-scraper_0.1.0_1773641055260_0.9691534659600474"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-16T06:04:15.164Z","0.1.0":"2026-03-16T06:04:15.409Z","modified":"2026-03-16T06:04:15.606Z"},"maintainers":[{"name":"bullpenm","email":"gauravkalal1719@gmail.com"}],"description":"The first open source Node.js library for Indian eCourts case data.","author":{"name":"gorupa"},"license":"MIT","readme":"# ecourts-js\r\n\r\n[![npm](https://img.shields.io/npm/v/ecourts-js?style=for-the-badge&color=1a73e8)](https://www.npmjs.com/package/ecourts-js)\r\n[![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](LICENSE)\r\n[![Open Source](https://img.shields.io/badge/Open%20Source-Yes-6d28d9?style=for-the-badge&logo=github)](https://github.com/Gorupa/ecourts-js)\r\n\r\n> The first open source Node.js library for Indian eCourts case data.\r\n> Search by CNR number, party name or advocate name — directly from ecourts.gov.in.\r\n\r\n---\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install ecourts-js\r\n```\r\n\r\n---\r\n\r\n## Quick Start\r\n\r\n```js\r\nconst ecourts = require('ecourts-js');\r\n\r\n// 1. Create a session (do this once, reuse it)\r\nconst session = await ecourts.createSession();\r\n\r\n// 2. Get case by CNR number\r\nconst caseData = await ecourts.getCaseByCNR(session, 'MHAU010012342023');\r\nconsole.log(caseData.next_hearing_date); // → '15-04-2026'\r\nconsole.log(caseData.case_status);       // → 'Pending'\r\n\r\n// 3. Get all states\r\nconst states = await ecourts.getStates(session);\r\n\r\n// 4. Get districts for a state\r\nconst districts = await ecourts.getDistricts(session, '24'); // Maharashtra\r\n\r\n// 5. Search by party name\r\nconst cases = await ecourts.searchByParty(session, {\r\n    stateCode:    '24',\r\n    districtCode: '1',\r\n    name:         'Gaurav Kalal',\r\n});\r\n\r\n// 6. Search by advocate name\r\nconst advCases = await ecourts.searchByAdvocate(session, {\r\n    stateCode:    '24',\r\n    districtCode: '1',\r\n    name:         'Sharma',\r\n});\r\n```\r\n\r\n---\r\n\r\n## API Reference\r\n\r\n### `ecourts.createSession()`\r\nCreates a new HTTP session with eCourts portal. Call once and reuse.\r\n```js\r\nconst session = await ecourts.createSession();\r\n```\r\n\r\n### `ecourts.getCaseByCNR(session, cnrNumber)`\r\nGet full case details by 16-character CNR number.\r\n```js\r\nconst detail = await ecourts.getCaseByCNR(session, 'MHAU010012342023');\r\n```\r\nReturns:\r\n```js\r\n{\r\n    cnr_number:          'MHAU010012342023',\r\n    case_title:          'ABC vs XYZ',\r\n    case_type:           'Civil Suit',\r\n    filing_date:         '01-01-2023',\r\n    case_status:         'Pending',\r\n    case_stage:          'Arguments',\r\n    court_name:          'Civil Judge Senior Division',\r\n    district_name:       'Aurangabad',\r\n    petitioner:          'ABC',\r\n    respondent:          'XYZ',\r\n    petitioner_advocate: 'Adv. Sharma',\r\n    respondent_advocate: 'Adv. Mehta',\r\n    next_hearing_date:   '15-04-2026',\r\n    next_hearing_purpose:'Arguments',\r\n    case_history: [\r\n        { hearing_date: '01-03-2026', order_details: '...', purpose: '...' }\r\n    ]\r\n}\r\n```\r\n\r\n### `ecourts.getStates(session)`\r\nReturns all Indian states with codes.\r\n```js\r\nconst states = await ecourts.getStates(session);\r\n// [{ state_code: '1', state_name: 'Andhra Pradesh' }, ...]\r\n```\r\n\r\n### `ecourts.getDistricts(session, stateCode)`\r\nReturns districts for a state.\r\n```js\r\nconst districts = await ecourts.getDistricts(session, '24');\r\n// [{ district_code: '1', district_name: 'Ahmednagar' }, ...]\r\n```\r\n\r\n### `ecourts.searchByParty(session, options)`\r\nSearch cases by petitioner or respondent name.\r\n```js\r\nconst cases = await ecourts.searchByParty(session, {\r\n    stateCode:    '24',   // required\r\n    districtCode: '1',    // required\r\n    name:         'Sharma', // required, min 3 chars\r\n    caseType:     '',       // optional\r\n});\r\n```\r\n\r\n### `ecourts.searchByAdvocate(session, options)`\r\nSearch cases by advocate name.\r\n```js\r\nconst cases = await ecourts.searchByAdvocate(session, {\r\n    stateCode:    '24',\r\n    districtCode: '1',\r\n    name:         'Mehta',\r\n});\r\n```\r\n\r\n### `ecourts.refreshSession(session)`\r\nRefresh session if it expires.\r\n```js\r\nawait ecourts.refreshSession(session);\r\n```\r\n\r\n---\r\n\r\n## How it works\r\n\r\n```\r\necourts-js\r\n    ↓\r\nCreates HTTP session with eCourts portal\r\n    ↓\r\nFetches CAPTCHA image\r\n    ↓\r\nSolves CAPTCHA using Tesseract OCR (~75% accuracy)\r\n    ↓\r\nSubmits search form with solved CAPTCHA\r\n    ↓\r\nRetries up to 10 times if CAPTCHA fails\r\n    ↓\r\nParses HTML response into clean JSON\r\n    ↓\r\nReturns structured data\r\n```\r\n\r\n---\r\n\r\n## File Structure\r\n\r\n```\r\necourts-js/\r\n├── src/\r\n│   ├── index.js       ← main export\r\n│   ├── session.js     ← session + cookie management\r\n│   ├── captcha.js     ← Tesseract OCR solver\r\n│   ├── parser.js      ← HTML → JSON parser\r\n│   ├── cnr.js         ← CNR search\r\n│   ├── party.js       ← party name search\r\n│   ├── advocate.js    ← advocate search\r\n│   └── states.js      ← states + districts\r\n├── examples/\r\n│   └── basic.js       ← usage examples\r\n├── package.json\r\n├── README.md\r\n└── LICENSE\r\n```\r\n\r\n---\r\n\r\n## Important Notes\r\n\r\n- This library scrapes publicly available data from `ecourts.gov.in`\r\n- Use responsibly — add delays between bulk requests\r\n- CAPTCHA solving accuracy is ~75% — the library retries automatically\r\n- For production use with high volume, consider applying for the official NIC eCourts API at `developer.ecourts.gov.in`\r\n- Sessions expire — call `refreshSession()` if you encounter repeated errors\r\n\r\n---\r\n\r\n## Used by\r\n\r\n- **[vaad.in](https://vaad.pages.dev)** — Free Indian court case tracker\r\n\r\n---\r\n\r\n## Contributing\r\n\r\nPRs welcome. Key areas for improvement:\r\n- [ ] Better CAPTCHA solver accuracy\r\n- [ ] High Court support\r\n- [ ] Consumer Forum support\r\n- [ ] TypeScript definitions\r\n- [ ] Retry logic improvements\r\n- [ ] Session pooling for high volume\r\n\r\n---\r\n\r\n## Disclaimer\r\n\r\necourts-js is an independent open source project and is not affiliated with the eCommittee of the Supreme Court of India, NIC, or any government body. All data is fetched from the publicly accessible `ecourts.gov.in` portal.\r\n\r\n---\r\n\r\n## License\r\n\r\n[MIT](LICENSE) © 2026 [gorupa](https://github.com/gorupa) / Gaurav Kalal\r\n","readmeFilename":"README.md","_rev":"1-5871be6cb0bb4491b7ec173cd48cedcc"}