{
 "sources": [
  {
   "id": "gst-portal-impdts",
   "name": "GST portal upcoming due dates (impdts JSON)",
   "publisher": "GSTN",
   "url": "https://www.gst.gov.in/fomessage/impdts",
   "category": "due-dates",
   "format": [
    "JSON"
   ],
   "access": "open",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "monthly (current return period)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 269 B transferred; JSON object keys data. Endpoint found in static.gst.gov.in landing1.2.js (also /fomessage/msgtckr for the ticker). Returned 12 entries for the Sep 2026 and Jul-Sep 2026 periods, e.g. GSTR-3B (Sep, 2026) Oct 20th, 2026."
   },
   "machineReadable": true,
   "useInCalendar": "Current-period due dates shown on the GST portal home page for GSTR-1 (monthly and QRMP), GSTR-3B (monthly and the two QRMP state groups), GSTR-5/5A/6/7/8, CMP-08 and IFF - the quickest signal that a GST date was extended.",
   "ingestion": "GET daily. Response is {\"data\": \"<JSON array encoded as a string>\"}, so decode twice; entries {f: form and period, d: date text such as 'Oct 22nd, 24th, 2026', t: type, q: QRMP flag}. Parse ordinal dates (two dates mean the two QRMP state groups) and compare with our GST rule output; open an issue on mismatch.",
   "priority": "P0"
  },
  {
   "id": "it-efiling-tax-calendar-api",
   "name": "e-Filing portal tax calendar API (full financial year)",
   "publisher": "Income Tax Department (CBDT) - e-Filing portal",
   "url": "https://eportal.incometax.gov.in/iec/returnservicesapi/getEntity",
   "category": "due-dates",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Unknown - GoI website, no open licence stated (due dates are statutory facts; attribute source)",
   "updates": "on publication; current FY only (FY 2027-28 not yet published)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "POST 200; application/json; 27 KB transferred; JSON list of 353. Endpoint found in the e-Filing Angular bundle. POST with dueYear 2026 returned 353 items covering Apr 2026 - Mar 2027; dueYear 2027 returned an empty list. The home-page widget endpoint /iec/foportal/tax-calendar/ajax?month=M&year=Y also returned 200 JSON (12-73 items per sampled month from Apr 2026 to Mar 2027, empty from Apr 2027 and without parameters). OpenSSL chain check ok."
   },
   "machineReadable": true,
   "useInCalendar": "Authoritative list of income-tax, TDS/TCS deposit and return, advance tax, STT/CTT and statutory form due dates for the current FY, with form codes, category and the applicable Act (Income-tax Act 1961 vs 2025). Primary cross-check and override signal for every income-tax rule.",
   "ingestion": "POST JSON {\"serviceName\":\"taxCalendarServiceImpl\",\"dueYear\":2026,\"pan\":\"\"} (dueYear = FY start year) with Content-Type application/json. Response is a list of about 350 objects: dueDate (epoch ms at IST midnight), dueDay/dueMonth/dueYear, dueDescription, dueCategory, formCd, dueDateDesc, applicableAct. Poll weekly (daily near deadlines), diff against rule expansion and open an issue on any mismatch. Per-month fallback: GET https://www.incometax.gov.in/iec/foportal/tax-calendar/ajax?month=11&year=2026 (same object shape).",
   "priority": "P0",
   "used": true,
   "usedFor": "Cross-check of every income-tax occurrence against the official tax calendar."
  },
  {
   "id": "state-pt-tn",
   "name": "Greater Chennai Corporation - Profession Tax press release",
   "publisher": "Revenue Department, Greater Chennai Corporation",
   "url": "https://chennaicorporation.gov.in/gcc/pdf/PT_Press_Release.pdf",
   "category": "due-dates",
   "format": [
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "half-yearly (reissued at a stable URL; current release dated 04-08-2026)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 application/pdf (1.0 MB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3. Text-extractable PDF ref R.D. PT C.No/3555/2026 dated 04-08-2026, citing s.117-C of the TN Urban Local Bodies Act 1998 and Rule 277(2)/(3) of the TN Urban Local Bodies Rules 2023: employers deduct PT from the August and January pay bills, and the August 2026 deduction is remitted by 30 September 2026 with the Form 14 return; half-yearly slab table (nil up to Rs 21,000 half-yearly income, then Rs 180 / 425 / 930 / 1,025 / 1,250 w.e.f. II/2024-25). Linked from the GCC home page; online payment via erp.chennaicorporation.gov.in. No RSS."
   },
   "machineReadable": false,
   "useInCalendar": "Tamil Nadu PT half-yearly deduction months, the first-half remittance deadline, slab table and Rule 277 citation; second-half deadline to be confirmed from the Rules.",
   "ingestion": "Automatable: fetch the stable PDF URL monthly, hash it, run pdftotext on change and flag for review. Rates are statewide; other urban local bodies collect in their own areas.",
   "priority": "P0"
  },
  {
   "id": "state-pt-od",
   "name": "Odisha CT and GST - Professional Tax page",
   "publisher": "Commissionerate of CT and GST, Finance Department, Government of Odisha",
   "url": "https://odishatax.gov.in/professional_tax.php",
   "category": "due-dates",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "occasional",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (20 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.2. Explains registration and enrolment, rates by annual gross income band (below Rs 1.6 lakh, Rs 1.6-3 lakh, above Rs 3 lakh), and that every registered employer and enrolled person files one online annual return in Form XII within three months of the end of the year; links a return-filing guide PDF (01-01-2024) and OPT Act, Rules and Notification pages (opt_act.php, opt_rules.php, opt_notification.php). No RSS."
   },
   "machineReadable": false,
   "useInCalendar": "Odisha PT annual return deadline (three months after year-end; confirm the year basis in the OPT Rules) and rate bands.",
   "ingestion": "Automatable: weekly fetch and hash of professional_tax.php and opt_notification.php; review on change.",
   "priority": "P1"
  },
  {
   "id": "state-lwf-ga",
   "name": "Goa Labour Welfare Board (Labour and Employment Commissionerate)",
   "publisher": "Office of the Commissioner, Labour and Employment, Government of Goa",
   "url": "https://labour.goa.gov.in/labour-welfare-board/",
   "category": "due-dates",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "on amendment (amendment notification posted Jul 2024)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (13 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3. States the Goa LWF Act 1986 contribution rates (employee Rs 10, employer Rs 30, Government Rs 20) and half-yearly deadlines: January-June by 31 July and July-December by 31 January; links worker, department and contribution portals (iwocm.goalwb.in). The 'Amendment of GLWB' notification PDF is linked through a bare IP (http://13.203.245.190/...), which is fragile."
   },
   "machineReadable": false,
   "useInCalendar": "Goa LWF half-yearly due dates and rates, directly.",
   "ingestion": "Automatable: monthly fetch and hash of the page; manual review on change.",
   "priority": "P2"
  },
  {
   "id": "archive-org-gazette-of-india",
   "name": "Internet Archive 'gazetteofindia' collection (central and state gazettes)",
   "publisher": "Internet Archive (uploads by Indian Kanoon)",
   "url": "https://archive.org/advancedsearch.php?q=collection%3Agazetteofindia+AND+identifier%3Ain.gazette.central*&fl%5B%5D=identifier&fl%5B%5D=title&fl%5B%5D=date&sort%5B%5D=date+desc&rows=50&output=json",
   "category": "regulatory-feed",
   "format": [
    "JSON",
    "API",
    "PDF"
   ],
   "access": "open",
   "license": "Gazette text reusable (Copyright Act 1957 s.52(1)(q)); archive.org terms apply",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 7 KB transferred; JSON object keys responseHeader,response. Collection holds 866,903 items (212,641 central); newest central items dated 2026-10-10 and uploaded the same day; newest state items 2026-10-12 (Gujarat). Metadata API 200 with OCR details. Scraper source code: github.com/sushant354/egazette."
   },
   "machineReadable": true,
   "useInCalendar": "Machine-friendly mirror of central and state gazettes with OCR text and ministry/department metadata - the most reliable way for an overseas runner to watch new CBDT, CBIC, MCA and Labour notifications.",
   "ingestion": "Daily GET of the advancedsearch API (JSON) sorted by date desc; for new identifiers GET https://archive.org/metadata/<identifier> (description holds Ministry/Department) and optionally the OCR text; filter ministries of interest. Standard TLS, no key.",
   "priority": "P0"
  },
  {
   "id": "cbic-taxinfo-api",
   "name": "CBIC Tax Information Portal API (GST and Customs notifications and circulars)",
   "publisher": "CBIC, Department of Revenue, Ministry of Finance",
   "url": "https://taxinformation.cbic.gov.in/api/cbic-notification-msts/fetchUpdatesByTaxId/1000001",
   "category": "regulatory-feed",
   "format": [
    "JSON",
    "API",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "on publication",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 3 KB transferred; JSON list of 4. JHipster API found in the portal main.js. Token POST returned a ROLE_ANONYMOUS JWT; GST updates returned 4 items; the Central Tax category returned 521 notifications (newest 02/2026-Central Tax dated 2026-05-07); GST circulars returned 272. OpenSSL check: 'unable to get local issuer certificate'."
   },
   "machineReadable": true,
   "useInCalendar": "Authoritative CGST/IGST notifications (including due-date extensions such as 01/2026-Central Tax for GSTR-3B), CBIC GST circulars and Customs notifications - the official source for GST overrides.",
   "ingestion": "POST https://taxinformation.cbic.gov.in/api/authenticate-token with an empty body to get an anonymous JWT (id_token), then GET with Authorization: Bearer <token>: /api/cbic-notification-msts/fetchUpdatesByTaxId/1000001 (latest GST items), /api/cbic-notification-msts/fetchNotificationByCategory/1000001/Central%20Tax (full Central Tax list), /api/cbic-circular-msts/fetchAllCircularsByTaxId/1000001 (GST circulars). Tax ids: 1000001 GST, 1000002 Customs, 1000003 Central Excise, 1000004 Service Tax. PDF path in docFilePath. Poll daily. The server sends an incomplete certificate chain: ship the intermediate CA in the repo and pass it to curl/requests on Ubuntu runners.",
   "priority": "P0",
   "used": true,
   "usedFor": "Source register of CGST notifications behind the GST rules and extensions."
  },
  {
   "id": "gst-portal-news",
   "name": "GST portal news and advisories API",
   "publisher": "GSTN",
   "url": "https://www.gst.gov.in/fomessage/newsupdates",
   "category": "regulatory-feed",
   "format": [
    "JSON"
   ],
   "access": "open",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "several per week",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 10 KB transferred; JSON object (data[20]). Newest items dated 13/10/2026 (GSTR-9/9C for FY 2025-26; FAQs on the 57th GST Council meeting of 8 October 2026)."
   },
   "machineReadable": true,
   "useInCalendar": "GSTN advisories (returns, registration, appeals, e-invoice), GST Council outcomes and monthly revenue releases, each with date and module tag.",
   "ingestion": "GET every 3-6 hours; {\"data\":[{id,title,order,module,content (HTML),date dd/mm/yyyy,IsExternal,linkURl}]} newest 20; item page https://www.gst.gov.in/newsandupdates/read/<id> (detail JSON at /fomessage/newsupdates/<id>). Decode with a cp1252 fallback - smart quotes arrive as non-UTF-8 bytes.",
   "priority": "P0",
   "used": true,
   "usedFor": "Collected daily into the regulator feed."
  },
  {
   "id": "it-efiling-rss",
   "name": "e-Filing portal RSS (news, CBDT circulars, form updates)",
   "publisher": "Income Tax Department (CBDT) - e-Filing portal",
   "url": "https://www.incometax.gov.in/iec/foportal/rss.xml",
   "category": "regulatory-feed",
   "format": [
    "RSS"
   ],
   "access": "open",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "several times a week",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/rss+xml; 18 KB transferred; feed parses (rss), 10 items, newest 2026-10-08. Drupal node feed, not linked from the site; found by convention."
   },
   "machineReadable": true,
   "useInCalendar": "Latest e-Filing news and e-campaigns, CBDT circulars (for example Circular No. 07/2026), new form utilities and FAQs, and deadline reminders - feeds the updates panel and flags income-tax extensions.",
   "ingestion": "GET every 3-6 hours from Actions; parse RSS 2.0 items (title, link, pubDate); dedupe by link; keyword-tag circular / notification / due date / extended. The human list is https://www.incometax.gov.in/iec/foportal/latest-news.",
   "priority": "P0",
   "used": true,
   "usedFor": "Collected daily into the regulator feed."
  },
  {
   "id": "labour-gov-cms-api",
   "name": "Ministry of Labour and Employment CMS API (documents, gazette notifications, whats new)",
   "publisher": "Ministry of Labour and Employment",
   "url": "https://www.labour.gov.in/cms/wp-json/wp/v2/documents?per_page=20",
   "category": "regulatory-feed",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "several per week",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 4 KB transferred; JSON list of 20. Site is a Next.js static front end (same build as legislative.gov.in) over a headless WordPress at /cms/ (the client bundle sends an apikey header, but requests without it also returned 200). Newest document 2026-10-13 (PF trust amnesty scheme 2026); gazette-notifications has 32 items. The site's own /cms/feed path returns HTML, not RSS."
   },
   "machineReadable": true,
   "useInCalendar": "Labour Code notifications and rules, EPFO and ESIC policy decisions (for example the EPF wage ceiling), amnesty schemes and press releases - the official labour feed now that the EPFO and ESIC sites are blocked abroad.",
   "ingestion": "GET daily: WordPress REST /cms/wp-json/wp/v2/documents?per_page=50&documents_category=146 (gazette-notifications), =144 (press-release), =147 (guidelines); category list at /cms/wp-json/wp/v2/documents_category?per_page=100; also /cms/wp-json/wp/v2/whats_new. Fields: id, date, modified, title.rendered, link, acf (attachments). No API key needed; dedupe by id.",
   "priority": "P0"
  },
  {
   "id": "pib-rss",
   "name": "PIB press releases RSS (English, all ministries)",
   "publisher": "Press Information Bureau",
   "url": "https://www.pib.gov.in/RssMain.aspx?ModId=6&Lang=1&Regid=3&reg=3",
   "category": "regulatory-feed",
   "format": [
    "RSS"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "hourly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/xml; 2 KB transferred; feed parses (rss), 20 items, items carry no dates. The documented URL (ModId=6&Lang=1&Regid=3) 302-redirects to the Hindi feed (Lang=2&reg=48) from Toronto; with reg=3 appended the English feed came back on three of three tries (20 items, no redirect), while adding &lang=1 redirected to Hindi again."
   },
   "machineReadable": true,
   "useInCalendar": "All-ministry press releases (Finance, Corporate Affairs, Labour, Commerce) - early signal for extensions, Cabinet decisions and new rules from sites we cannot reach (MCA, EPFO, ESIC).",
   "ingestion": "Poll hourly; items have only title and link (no pubDate), so dedupe on PRID from the link and fetch the release page (or AllRelease) for ministry and date. Use exactly this query string: dropping reg=3 or adding a lowercase lang=1 makes the server redirect to the Hindi feed (Lang=2&reg=48). ModId=8 is photos and ModId=18 features.",
   "priority": "P0"
  },
  {
   "id": "rbi-notifications-rss",
   "name": "RBI notifications RSS",
   "publisher": "Reserve Bank of India",
   "url": "https://www.rbi.org.in/notifications_rss.xml",
   "category": "regulatory-feed",
   "format": [
    "RSS"
   ],
   "access": "open",
   "license": "Unknown - RBI website terms",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/xml; 26 KB transferred; feed parses (rss), 10 items, newest 2026-10-12. Feed list at https://www.rbi.org.in/Scripts/rss.aspx."
   },
   "machineReadable": true,
   "useInCalendar": "RBI notifications including FEMA A.P. (DIR) circulars and master-direction amendments - FEMA reporting rules (FC-GPR, FC-TRS, ODI, ECB-2, FLA return).",
   "ingestion": "GET every 3-6 hours; RSS 2.0 with only the 10 newest items, so poll at least daily; dedupe by link.",
   "priority": "P0",
   "used": true,
   "usedFor": "Collected daily into the regulator feed."
  },
  {
   "id": "sebi-rss",
   "name": "SEBI RSS feed (press releases, circulars, orders)",
   "publisher": "Securities and Exchange Board of India",
   "url": "https://www.sebi.gov.in/sebirss.xml",
   "category": "regulatory-feed",
   "format": [
    "RSS"
   ],
   "access": "open",
   "license": "Unknown - GoI regulator website",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/xml; 17 KB transferred; feed parses (rss), 30 items, newest 2026-10-14. The only feed SEBI publishes (per https://www.sebi.gov.in/rss.html)."
   },
   "machineReadable": true,
   "useInCalendar": "SEBI circulars (LODR, PIT, intermediaries) and press releases for listed-company and intermediary audiences.",
   "ingestion": "GET every 3-6 hours; RSS 2.0; classify by link path (/legal/circulars/, /legal/regulations/, /media-and-notifications/press-releases/, /enforcement/orders/) and keep circulars and regulations for the feed.",
   "priority": "P0",
   "used": true,
   "usedFor": "Collected daily into the regulator feed."
  },
  {
   "id": "state-lwf-ka",
   "name": "Karnataka Labour Welfare Board",
   "publisher": "Karnataka Labour Welfare Board, Labour Department, Government of Karnataka",
   "url": "https://klwb.karnataka.gov.in/",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "annual (contribution notice each year) and on extension",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. klwbapps.karnataka.gov.in behaves the same. Wayback shows storage/pdf-files contribution notices (2023-24 contribution, 'contribution payment date extended' notices including one to 31-01-2022) and news items; the PDFs are scans."
   },
   "machineReadable": false,
   "useInCalendar": "Karnataka LWF annual contribution due date, any notified extension, and rates.",
   "ingestion": "Manual review each December-January; not reachable from GitHub-hosted runners.",
   "priority": "P0"
  },
  {
   "id": "state-pt-ka",
   "name": "Karnataka Profession Tax notifications (Commercial Taxes Department)",
   "publisher": "Commercial Taxes Department, Government of Karnataka",
   "url": "https://gst.karnataka.gov.in/Profession.aspx",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "on notification (21 rows; newest dated 02-05-2026)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (5.9 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles, TCP ok from Nuremberg. tlscheck: ok TLSv1.2. Server-rendered table (serial, subject, notification no., date, PDF link). Newest rows: Removal of Difficulties Order 01/2026 dated 02-05-2026 extending FY 2026-27 payment by enrolled persons to before 5 May 2026; KTPTC&E (Amendment) Act 2026, No. 22 of 2026 dated 27-03-2026; exemption-documents notification dated 01-04-2026. Sibling page Profession_tax.aspx links the Act, the 2025 amendment and the Rules. Old hosts pt.kar.nic.in and gst.kar.nic.in (still listed in IGOD) are NXDOMAIN. Gazette PDFs have a text layer; the July 2026 PT-portal press release is image-only. No RSS."
   },
   "machineReadable": false,
   "useInCalendar": "Annual PT payment date for enrolled persons (30 April) and notified extensions as overrides, amendment Acts that change slabs, source citations for Karnataka PT.",
   "ingestion": "Automatable: daily or weekly fetch of Profession.aspx, parse table rows, diff on serial number and date, open a review issue for each new row; encode extensions manually.",
   "priority": "P0"
  },
  {
   "id": "bse-rss-feeds",
   "name": "BSE RSS feeds (notices, corporate announcements)",
   "publisher": "BSE Ltd",
   "url": "https://www.bseindia.com/data/xml/notices.xml",
   "category": "regulatory-feed",
   "format": [
    "RSS"
   ],
   "access": "open",
   "license": "Proprietary - exchange website terms of use",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/xml; 3 KB transferred; feed parses (rss), 46 items, newest 2026-10-14. notices.xml 46 items (newest 2026-10-14); announcements.xml 965 items (newest 2026-10-15). Both work even though api.bseindia.com is blocked."
   },
   "machineReadable": true,
   "useInCalendar": "BSE notices (trading holidays, listing compliance, buybacks) and corporate announcements.",
   "ingestion": "GET daily notices.xml (and announcements.xml if per-company views are built); filter notice titles for holiday / listing / compliance.",
   "priority": "P1",
   "used": true,
   "usedFor": "Collected daily, filtered to listing-compliance notices."
  },
  {
   "id": "dgft-notices",
   "name": "DGFT notifications, public notices and trade notices",
   "publisher": "Directorate General of Foreign Trade",
   "url": "https://www.dgft.gov.in/CP/?opt=notification",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "several per week",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 285 KB transferred; HTML, 29098 chars of visible text. Root returns a 'Page Moved' stub pointing to /CP/; the three listings return 200-290 KB of server HTML with dated rows (e.g. 12/10/2026) and PDF links."
   },
   "machineReadable": false,
   "useInCalendar": "Foreign Trade Policy changes and deadlines for importers and exporters (IEC annual update, export obligation, RoDTEP).",
   "ingestion": "Daily scrape of ?opt=notification, ?opt=public-notice and ?opt=trade-notice; parse number, date, subject and PDF link; dedupe by number.",
   "priority": "P1"
  },
  {
   "id": "egazette",
   "name": "eGazette (Gazette of India) recent uploads",
   "publisher": "Directorate of Printing, Ministry of Housing and Urban Affairs",
   "url": "https://egazette.gov.in/",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Gazette text reusable (Copyright Act 1957 s.52(1)(q)); site terms apply",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 67 KB transferred; final URL https://egazette.gov.in/(S(tthkon4xdiscsr4m33z3ks4t))/default.aspx; HTML, 3240 chars of visible text. Home page lists recent extraordinary gazettes (e.g. CG-DL-E-14102026-277156, 14-Oct-2026). RecentUploads via the session URL returned 20 rows per category; without the session prefix it redirects to error.aspx. OpenSSL check: 'unable to get local issuer certificate'."
   },
   "machineReadable": false,
   "useInCalendar": "Legal publication of every central notification (CBDT, CBIC, MCA, Labour Codes) - authoritative citation and confirmation of overrides.",
   "ingestion": "Daily: GET / to capture the cookieless session path (S(...)), then GET <session>/RecentUploads.aspx?Category=1 (extraordinary) and Category=2 (weekly); parse ministry, subject, part/section, issue and publish dates and gazette id; filter ministries of interest. PDFs need a postback, so link to the gazette id instead. The server sends an incomplete certificate chain - bundle the intermediate CA. The archive.org mirror is easier to automate.",
   "priority": "P1"
  },
  {
   "id": "epfo-portal",
   "name": "EPFO website (circulars, ECR due-date extensions)",
   "publisher": "Employees' Provident Fund Organisation",
   "url": "https://www.epfindia.gov.in/site_en/circulars.php",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown - GoI website",
   "updates": "on publication",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "GET 403; text/html; 919 B transferred; final URL https://www.epfo.gov.in:443/site_en/circulars.php; block page: ERROR: The request could not be satisfied; HTML, 553 chars of visible text. Redirects to www.epfo.gov.in, then CloudFront 403 'Request blocked' (POP YTO50, Toronto) for the home page and circulars; the member portal unifiedportal-mem.epfindia.gov.in answered 200 (login page only)."
   },
   "machineReadable": false,
   "useInCalendar": "PF/EDLI payment and ECR due date (15th of the following month), extension circulars and amnesty schemes.",
   "ingestion": "Not pollable from GitHub-hosted runners. Watch the labour.gov.in CMS API and PIB (Ministry of Labour) for EPFO decisions; treat peer feeds as tip-offs only and confirm on an Indian connection.",
   "priority": "P1"
  },
  {
   "id": "esic-portal",
   "name": "ESIC website (circulars, contribution periods)",
   "publisher": "Employees' State Insurance Corporation",
   "url": "https://www.esic.gov.in/circulars",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown - GoI website",
   "updates": "on publication",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "GET failed: connect timeout (curl: (28) Connection timed out after 15016 milliseconds). TCP connect timed out on www.esic.gov.in and esic.gov.in on three attempts."
   },
   "machineReadable": false,
   "useInCalendar": "ESI contribution due date (15th of the following month), contribution periods and circulars.",
   "ingestion": "Not reachable from outside India; use the labour.gov.in CMS API and PIB.",
   "priority": "P1"
  },
  {
   "id": "gst-council",
   "name": "GST Council website",
   "publisher": "GST Council Secretariat",
   "url": "https://gstcouncil.gov.in/",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "per Council meeting",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 16 KB transferred; HTML, 6496 chars of visible text. Drupal site; /rss.xml returned 10 items whose titles are person names (apparently staff profile pages, newest 2026-07-27), not notices."
   },
   "machineReadable": false,
   "useInCalendar": "Council meeting recommendations, minutes and agenda notes that precede GST law and due-date changes.",
   "ingestion": "Weekly scrape of the home-page updates block, or rely on the GST portal news API, which republishes Council outcomes. Ignore /rss.xml (it carries staff profile nodes).",
   "priority": "P1"
  },
  {
   "id": "mca-portal",
   "name": "MCA21 portal (notifications, circulars, news, forms)",
   "publisher": "Ministry of Corporate Affairs",
   "url": "https://www.mca.gov.in/content/mca/global/en/acts-rules/ebooks/notifications.html",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "on publication",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "GET 403; text/html; 460 B transferred; block page: Access Denied; HTML, 380 chars of visible text. HTTP 403 Akamai 'Access Denied' for https://www.mca.gov.in/, https://mca.gov.in/, the notifications, circulars, latest-news and data-report pages and /mcafoportal/; efiling.mca.gov.in does not resolve."
   },
   "machineReadable": false,
   "useInCalendar": "Authoritative Companies Act and LLP Act notifications and General Circulars (AGM/filing extensions, fee waivers), and the forms behind company/LLP due dates (AOC-4, MGT-7, LLP Form 8 and 11, DIR-3 KYC, MSME-1, DPT-3).",
   "ingestion": "Blocked from outside India: every MCA URL tried returned an Akamai Access Denied 403. Capture MCA changes through PIB (Ministry of Corporate Affairs releases), the Gazette (archive.org mirror) and peer feeds; direct polling needs a self-hosted runner with an Indian IP.",
   "priority": "P1"
  },
  {
   "id": "nse-circulars-api",
   "name": "NSE circulars API",
   "publisher": "National Stock Exchange of India",
   "url": "https://www.nseindia.com/api/circulars",
   "category": "regulatory-feed",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Proprietary - exchange website terms of use",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 6 KB transferred; JSON object (data[148]). Returned 148 circulars for 08-10-2026 to 15-10-2026 with category, department, number and file link."
   },
   "machineReadable": true,
   "useInCalendar": "Exchange circulars on listing compliance submissions, holidays and settlement changes for listed entities.",
   "ingestion": "GET daily (default window is the last 7 days); filter circCategory and circDepartment (Listing, Compliance); dedupe by circNumber; link circFilelink.",
   "priority": "P1"
  },
  {
   "id": "pib-all-releases",
   "name": "PIB all releases page (grouped by ministry)",
   "publisher": "Press Information Bureau",
   "url": "https://www.pib.gov.in/AllRelease.aspx?reg=3&lang=1",
   "category": "regulatory-feed",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "hourly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 368 KB transferred; flags akamai-bot-manager; HTML, 192134 chars of visible text. 786 KB page listing 758 releases for October 2026 grouped under ministry headings."
   },
   "machineReadable": false,
   "useInCalendar": "Ministry and date for each release, enabling a filter to Finance, Corporate Affairs, Labour and Employment, Commerce and MSME.",
   "ingestion": "Daily GET of the current month; parse ul.num blocks (h3 = ministry, li = title, PRID link, 'Posted on' date). Ministry ids for postback filtering: Finance 15, Labour 21, Corporate Affairs 66.",
   "priority": "P1"
  },
  {
   "id": "rbi-press-releases-rss",
   "name": "RBI press releases RSS",
   "publisher": "Reserve Bank of India",
   "url": "https://www.rbi.org.in/pressreleases_rss.xml",
   "category": "regulatory-feed",
   "format": [
    "RSS"
   ],
   "access": "open",
   "license": "Unknown - RBI website terms",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/xml; 11 KB transferred; feed parses (rss), 10 items, newest 2026-10-14. RSS 2.0."
   },
   "machineReadable": true,
   "useInCalendar": "Policy announcements, holiday notices and draft directions.",
   "ingestion": "GET every 3-6 hours; 10 newest items only.",
   "priority": "P1",
   "used": true,
   "usedFor": "Collected daily into the regulator feed."
  },
  {
   "id": "sansad-bills-api",
   "name": "Sansad bills API (Lok Sabha and Rajya Sabha)",
   "publisher": "Parliament of India (Sansad)",
   "url": "https://sansad.in/api_rs/legislation/getBills?page=1&size=20&locale=en&sortOn=billIntroducedDate&sortBy=desc",
   "category": "regulatory-feed",
   "format": [
    "JSON",
    "API",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - Parliament website terms",
   "updates": "during sessions",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 21 KB transferred; JSON object (records[20]). Endpoint found in the sansad.in Next.js bills chunk. Returned _metadata.totalElements 10,099 with ministry, category, introduced/passed dates and PDF links (newest: Tribunals Reforms Bill 2026, introduced 2026-08-10)."
   },
   "machineReadable": true,
   "useInCalendar": "Track Finance Bills and other bills (tax, labour, company law) that will change due dates once enacted.",
   "ingestion": "Weekly GET sorted by billIntroducedDate desc (daily during sessions); filter ministryName (FINANCE, CORPORATE AFFAIRS, LABOUR AND EMPLOYMENT); record introduced and passed dates and PDF links. Lookup endpoints: /api_rs/legislation/getMinistryName, getBillTypes, getBillStatus.",
   "priority": "P1"
  },
  {
   "id": "dpiit-cms-api",
   "name": "DPIIT CMS API (FDI policy, press notes, rules)",
   "publisher": "Department for Promotion of Industry and Internal Trade",
   "url": "https://www.dpiit.gov.in/cms/wp-json/wp/v2/documents?per_page=20",
   "category": "regulatory-feed",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 5 KB transferred; JSON list of 20. Same digifootprint WordPress platform; newest document 2026-09-28 (Gas Cylinders (Third Amendment) Rules, 2026), FDI factsheet for Q1 FY 2026-27 present. OpenSSL check ok."
   },
   "machineReadable": true,
   "useInCalendar": "FDI policy press notes and factsheets that change FEMA FDI reporting obligations for foreign-owned companies.",
   "ingestion": "GET weekly /cms/wp-json/wp/v2/documents; keep items whose titles mention press note, FDI or rules.",
   "priority": "P2"
  },
  {
   "id": "ibbi",
   "name": "IBBI notifications and whats new",
   "publisher": "Insolvency and Bankruptcy Board of India",
   "url": "https://ibbi.gov.in/legal-framework/notifications",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI regulator website",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 20 KB transferred; HTML, 5523 chars of visible text. Dated rows in server HTML (newest 08 Jul, 2026); /whats-new also 200."
   },
   "machineReadable": false,
   "useInCalendar": "IBC regulation amendments and insolvency-professional compliance (annual fees, continuing education).",
   "ingestion": "Monthly scrape of dated rows; no RSS.",
   "priority": "P2"
  },
  {
   "id": "iepf-authority",
   "name": "IEPF Authority website",
   "publisher": "Investor Education and Protection Fund Authority (Ministry of Corporate Affairs)",
   "url": "https://www.iepf.gov.in/",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown - GoI website",
   "updates": "on publication",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "GET 403; text/html; 371 B transferred; block page: Access Denied; HTML, 291 chars of visible text. Akamai 403 Access Denied, same edge behaviour as mca.gov.in."
   },
   "machineReadable": false,
   "useInCalendar": "Rules and notices behind IEPF-1 / IEPF-4 transfers of unclaimed dividends and shares and the annual IEPF reporting by companies.",
   "ingestion": "Blocked like mca.gov.in; maintain IEPF rules manually and watch the Gazette mirror and PIB (Corporate Affairs).",
   "priority": "P2"
  },
  {
   "id": "ifsca",
   "name": "IFSCA website (circulars, regulations, press releases)",
   "publisher": "International Financial Services Centres Authority",
   "url": "https://ifsca.gov.in/",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI regulator website",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 121 KB transferred; HTML, 10330 chars of visible text. Home 123 KB; legal and press-release listings 200; no feed found."
   },
   "machineReadable": false,
   "useInCalendar": "GIFT City entity compliance (IFSC units, fund managers) - optional audience.",
   "ingestion": "Monthly scrape if the IFSC audience is added; listing URLs use encrypted ids (/Legal/Index/<id>, /PressRelease/Index/<id>); no RSS.",
   "priority": "P2"
  },
  {
   "id": "irdai",
   "name": "IRDAI circulars, notifications and whats new",
   "publisher": "Insurance Regulatory and Development Authority of India",
   "url": "https://irdai.gov.in/circulars",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI regulator website",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 485 KB transferred; HTML, 6633 chars of visible text. First attempt timed out; later attempts 200 with dated rows (newest 22-09-2026); /notifications and /web/guest/whats-new also 200."
   },
   "machineReadable": false,
   "useInCalendar": "Insurer and intermediary compliance deadlines (optional audience).",
   "ingestion": "Monthly scrape of dated rows (Liferay pages are about 500 KB); no RSS.",
   "priority": "P2"
  },
  {
   "id": "meity-cms-api",
   "name": "MeitY CMS API (DPDP, IT Act and CERT-In documents)",
   "publisher": "Ministry of Electronics and Information Technology",
   "url": "https://www.meity.gov.in/cms/wp-json/wp/v2/documents?per_page=20",
   "category": "regulatory-feed",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "several per week",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 5 KB transferred; JSON list of 20. Same Next.js plus WordPress (digifootprint) platform as labour.gov.in and legislative.gov.in; newest document 2026-10-12 (CERT-In attached-office declaration). OpenSSL check ok."
   },
   "machineReadable": true,
   "useInCalendar": "Digital Personal Data Protection Act and Rules notifications, IT Act rules and CERT-In directions - inputs for an optional data-protection compliance category.",
   "ingestion": "Same headless WordPress platform as labour.gov.in: GET /cms/wp-json/wp/v2/documents (and /documents_category for filters) daily if a data-protection category is added; dedupe by id.",
   "priority": "P2"
  },
  {
   "id": "msme-cms-api",
   "name": "Ministry of MSME CMS API",
   "publisher": "Ministry of Micro, Small and Medium Enterprises",
   "url": "https://www.msme.gov.in/cms/wp-json/wp/v2/documents?per_page=20",
   "category": "regulatory-feed",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "irregular",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 4 KB transferred; JSON list of 20. msme.gov.in redirects to www; the default document listing returned items dated 2025-06-20 (international cooperation pages), so the CMS looks sparsely used. OpenSSL check ok."
   },
   "machineReadable": true,
   "useInCalendar": "MSMED Act and Udyam notifications that affect MSME payment timelines (45-day rule) and MSME-1 reporting context.",
   "ingestion": "Low value today: poll monthly at most; PIB covers Ministry of MSME releases.",
   "priority": "P2"
  },
  {
   "id": "nfra",
   "name": "NFRA website",
   "publisher": "National Financial Reporting Authority",
   "url": "https://nfra.gov.in/",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "monthly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 31 KB transferred; HTML, 3948 chars of visible text. WordPress site; /wp-json/wp/v2/posts 401, /feed/ 500."
   },
   "machineReadable": false,
   "useInCalendar": "Auditor obligations such as the annual NFRA-2 return (audit audience).",
   "ingestion": "Monthly manual check; the WordPress REST API is locked (401) and /feed/ returns HTTP 500.",
   "priority": "P2"
  },
  {
   "id": "nse-rss-feeds",
   "name": "NSE RSS feeds (circulars, announcements, corporate actions, results)",
   "publisher": "National Stock Exchange of India",
   "url": "https://nsearchives.nseindia.com/content/RSS/Circulars.xml",
   "category": "regulatory-feed",
   "format": [
    "RSS"
   ],
   "access": "open",
   "license": "Proprietary - exchange website terms of use",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/xml; 1 KB transferred; feed parses (rss), 20 items, newest 2026-10-14. Circulars.xml 20 items (newest 2026-10-14); Online_announcements.xml 2 items; Corporate_action.xml 9 items; Financial_Results.xml 4 items dated 2026-08-24 (stale); Board_Meetings.xml empty."
   },
   "machineReadable": true,
   "useInCalendar": "Fallback feed for exchange circulars and corporate actions.",
   "ingestion": "Prefer the circulars JSON API; use Circulars.xml as fallback (no cookies needed on nsearchives). Feed index: https://www.nseindia.com/static/rss-feed.",
   "priority": "P2",
   "used": true,
   "usedFor": "Collected daily, filtered to listing-compliance circulars."
  },
  {
   "id": "pfrda",
   "name": "PFRDA circulars",
   "publisher": "Pension Fund Regulatory and Development Authority",
   "url": "https://www.pfrda.org.in/regulatory-framework/circulars/active",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI regulator website",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 125 KB transferred; final URL https://www.pfrda.org.in/regulatory-framework/circulars/active-circulars; HTML, 2702 chars of visible text. Liferay page with dated rows (newest 08-10-2026)."
   },
   "machineReadable": false,
   "useInCalendar": "NPS corporate-model obligations for employers (contribution remittance timelines).",
   "ingestion": "Monthly scrape; no RSS.",
   "priority": "P2"
  },
  {
   "id": "rbi-other-rss",
   "name": "RBI other RSS feeds (speeches, publications, tenders, bulletin, annual report)",
   "publisher": "Reserve Bank of India",
   "url": "https://www.rbi.org.in/Scripts/rss.aspx",
   "category": "regulatory-feed",
   "format": [
    "RSS",
    "HTML"
   ],
   "access": "open",
   "license": "Unknown - RBI website terms",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 15 KB transferred; HTML, 3770 chars of visible text. Index page links speeches_rss.xml, Publication_rss.xml, tenders_rss.xml, Bulletin_rss.xml and AnnualReportMain_rss.xml."
   },
   "machineReadable": true,
   "useInCalendar": "Not needed for due dates; listed for completeness.",
   "ingestion": "Skip.",
   "priority": "P2"
  },
  {
   "id": "state-lwf-od",
   "name": "Odisha Labour Directorate - OLWF notifications and guidelines",
   "publisher": "Labour Directorate, Government of Odisha",
   "url": "https://labourdirectorate.odisha.gov.in/notifications-guidelines/olwf",
   "category": "regulatory-feed",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on notification",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. The IGOD-listed labdirodisha.gov.in returns a Drupal 500 page whose body script-redirects to this host. Wayback (2023) shows this OLWF notifications page, an OLWF Act-and-Rules page and a PDF titled 'The OLWF Act, 2005 & Orissa Rules, 2015'."
   },
   "machineReadable": false,
   "useInCalendar": "Odisha LWF contribution dates and rates from the Act, Rules and notifications.",
   "ingestion": "Manual review; not reachable from GitHub-hosted runners.",
   "priority": "P2"
  },
  {
   "id": "indiagov-central-holidays-api",
   "name": "National Portal of India holiday API - central government holidays",
   "publisher": "NIC / National Portal of India (data from DoPT)",
   "url": "https://www.india.gov.in/internal/cms",
   "category": "holidays",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Unknown - GoI website (undocumented internal route)",
   "updates": "annual (2027 list already loaded)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "POST 200; application/json; 2 KB transferred; JSON object keys data. Route found in the calendar page JS (module calls /internal/cms with a Strapi route). 2026 returned 50 holidays and 2027 returned 49, each typed Gazetted or Restricted. Human page https://www.india.gov.in/calendar is 200 and also offers an ICS download (/api/calendar-ics)."
   },
   "machineReadable": true,
   "useInCalendar": "Central gazetted and restricted holidays for 2026 and 2027 with type flags - drives workingDaysAfter and the holiday layer.",
   "ingestion": "Weekly POST to /internal/cms with JSON {\"route\":\"/api/calendar-holidays?filters[date][$gte]=2027-01-01&filters[date][$lte]=2027-12-31&pagination[pageSize]=100\"} for the current and next year; fields title, date, day, holiday_type (Gazetted / Restricted), calendar_year. It is an internal Strapi proxy route, so pin the response shape in tests, commit the last good snapshot and confirm against the DoPT OM.",
   "priority": "P0",
   "used": true,
   "usedFor": "Cross-check of the central holiday lists."
  },
  {
   "id": "indiagov-state-holidays-api",
   "name": "National Portal of India holiday API - state and UT holidays",
   "publisher": "NIC / National Portal of India (data from state GAD notifications)",
   "url": "https://www.india.gov.in/internal/cms",
   "category": "holidays",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Unknown - GoI website (undocumented internal route)",
   "updates": "annual (2027 not yet loaded)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "POST 200; application/json; 11 KB transferred; JSON object keys data. 2026 has 1,541 entries in 16 pages across 36 states/UTs (state title, LGD code, holiday_type); 6 of 16 sequential page requests returned HTTP 504 on the first pass; 2027 returned 0 entries."
   },
   "machineReadable": true,
   "useInCalendar": "State and UT public holidays keyed by state (LGD code) - state closures and state-tax deadline rolling.",
   "ingestion": "Weekly; POST route /api/state-holidays?populate=state_dept_org&filters[date][$gte]=YYYY-01-01&filters[date][$lte]=YYYY-12-31&pagination[pageSize]=100&pagination[page]=N, paging to meta.pagination.pageCount with backoff and retries (HTTP 504 is common); map LGD codes to ISO 3166-2:IN; verify against each state's notification PDF linked on the calendar page.",
   "priority": "P0"
  },
  {
   "id": "nse-holiday-api",
   "name": "NSE holiday master API (trading and clearing holidays)",
   "publisher": "National Stock Exchange of India",
   "url": "https://www.nseindia.com/api/holiday-master?type=trading",
   "category": "holidays",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Proprietary - exchange website terms of use",
   "updates": "annual (next year's list usually in December) plus ad-hoc closures",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 1 KB transferred; JSON object (CBM[20], CD[24], CM[20], CMOT[20]). Returned JSON without cookies; CM segment lists 20 dates for 2026 (including weekend dates and the Diwali muhurat note); ?type=clearing also 200. The www.nseindia.com HTML home page returned Akamai 403 at the same time, so blocking there is path or bot based, not purely geographic."
   },
   "machineReadable": true,
   "useInCalendar": "Exchange trading holidays per segment for the listed and investor audiences, including ad-hoc closures such as the 15 Jan 2026 Maharashtra municipal election.",
   "ingestion": "GET monthly (daily during December) with a browser User-Agent and Accept: application/json; if it starts returning 401/403, first GET https://www.nseindia.com/ to obtain cookies. Response keys are segments (CM, FO, CD, COM, IRD, MF, SLBS, ...) each a list of {tradingDate dd-Mon-yyyy, weekDay, description}. Store dates only; ?type=clearing gives settlement holidays.",
   "priority": "P0",
   "used": true,
   "usedFor": "Source of the exchange trading and settlement holidays."
  },
  {
   "id": "rbi-holiday-matrix",
   "name": "RBI holiday matrix (bank holidays under the NI Act by regional office)",
   "publisher": "Reserve Bank of India",
   "url": "https://www.rbi.org.in/Scripts/HolidayMatrixDisplay.aspx",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Unknown - RBI website terms",
   "updates": "annual (next year usually added in December) plus ad-hoc additions",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 20 KB transferred; HTML, 10118 chars of visible text. GET shows the current month for all 32 regional offices. A WebForms POST for Mumbai (id 28), all months, 2026 returned the named list (e.g. 15 Jan municipal election holiday, 1 Apr closing of accounts, 10 Nov Diwali Bali Pratipada). The year dropdown currently ends at 2026."
   },
   "machineReadable": false,
   "useInCalendar": "State-wise bank holidays (Negotiable Instruments Act) including Banks' Closing of Accounts - needed to roll payment due dates and show bank closures per state.",
   "ingestion": "Weekly job: GET the page for __VIEWSTATE, __VIEWSTATEGENERATOR and __EVENTVALIDATION, then POST drRegionalOffice=<id>, drMonth=0, drYear=<yyyy>, btnGo=GO once per regional office (32) and year; parse month headings, day numbers and holiday names; map regional offices to ISO 3166-2:IN codes. Re-run when the next year appears in the year dropdown.",
   "priority": "P0",
   "used": true,
   "usedFor": "Source of the bank holiday lists by state."
  },
  {
   "id": "dopt-holiday-om",
   "name": "DoPT holiday Office Memorandums (central government)",
   "publisher": "Department of Personnel and Training",
   "url": "https://dopt.gov.in/",
   "category": "holidays",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown - GoI website",
   "updates": "annual (OM for next year usually mid-year)",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "GET failed: connect timeout (curl: (28) Connection timed out after 15014 milliseconds). dopt.gov.in, www.dopt.gov.in, doptcirculars.nic.in and documents.doptcirculars.nic.in all timed out on connect."
   },
   "machineReadable": false,
   "useInCalendar": "Authoritative gazetted and restricted holiday list for central government offices in Delhi/New Delhi - basis of 'working day' computations.",
   "ingestion": "Not pollable from outside India; use the India Portal holiday API (which republishes this list) and confirm once a year against the OM PDF via an Indian connection.",
   "priority": "P1",
   "used": true,
   "usedFor": "Source of the central gazetted and restricted holiday lists."
  },
  {
   "id": "state-gad-holiday-notifications",
   "name": "State government holiday notifications (GAD PDFs)",
   "publisher": "State General Administration Departments",
   "url": "https://www.india.gov.in/calendar",
   "category": "holidays",
   "format": [
    "PDF",
    "HTML"
   ],
   "access": "open",
   "license": "Unknown - state government websites",
   "updates": "annual",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 40 KB transferred; HTML, 8094 chars of visible text. The calendar page links 2026 notifications for most states, e.g. gad.gujarat.gov.in, kerala.gov.in, gad.rajasthan.gov.in, goa.gov.in, maids.delhi.gov.in, meghalaya.gov.in, py.gov.in."
   },
   "machineReadable": false,
   "useInCalendar": "Authoritative state holiday lists used to verify the India Portal state data.",
   "ingestion": "Manual annual verification; store each PDF URL as the source on state holiday records.",
   "priority": "P1"
  },
  {
   "id": "abstract-holidays-api",
   "name": "Abstract API public holidays",
   "publisher": "Abstract API",
   "url": "https://holidays.abstractapi.com/v1/?country=IN&year=2026",
   "category": "holidays",
   "format": [
    "JSON",
    "API"
   ],
   "access": "api-key",
   "license": "Proprietary",
   "updates": "continuous",
   "reachable": {
    "status": 400,
    "checked": "2026-10-14",
    "note": "GET 400; application/json; 133 B transferred; JSON object keys error. 400 validation error 'api_key is required'."
   },
   "machineReadable": true,
   "useInCalendar": "Commercial holiday lookup.",
   "ingestion": "Not recommended (key and terms).",
   "priority": "P2"
  },
  {
   "id": "api-ninjas-holidays",
   "name": "API Ninjas holidays",
   "publisher": "API Ninjas",
   "url": "https://api.api-ninjas.com/v1/holidays?country=IN&year=2026",
   "category": "holidays",
   "format": [
    "JSON",
    "API"
   ],
   "access": "api-key",
   "license": "Proprietary",
   "updates": "continuous",
   "reachable": {
    "status": 400,
    "checked": "2026-10-14",
    "note": "GET 400; application/json; 29 B transferred; JSON object keys error. 400 without the X-Api-Key header."
   },
   "machineReadable": true,
   "useInCalendar": "Commercial holiday lookup.",
   "ingestion": "Not recommended (key and terms).",
   "priority": "P2"
  },
  {
   "id": "bse-holidays-page",
   "name": "BSE trading holidays page",
   "publisher": "BSE Ltd",
   "url": "https://www.bseindia.com/static/markets/marketinfo/listholi.aspx",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Proprietary - exchange website terms of use",
   "updates": "annual",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 4 KB transferred; final URL https://www.bseindia.com/static/markets/marketinfo/listholi; HTML, 112 chars of visible text. Returns the 4 KB Angular shell; table rendered client-side."
   },
   "machineReadable": false,
   "useInCalendar": "Cross-check for exchange holidays (BSE and NSE publish the same trading calendar).",
   "ingestion": "Manual cross-check each December; no stable public JSON found (the Angular bundle loads it lazily and api.bseindia.com is blocked).",
   "priority": "P2",
   "used": true,
   "usedFor": "Source of the BSE trading holidays."
  },
  {
   "id": "calendarific-api",
   "name": "Calendarific holidays API",
   "publisher": "Calendarific",
   "url": "https://calendarific.com/api/v2/holidays?country=IN&year=2026",
   "category": "holidays",
   "format": [
    "JSON",
    "API"
   ],
   "access": "api-key",
   "license": "Proprietary",
   "updates": "continuous",
   "reachable": {
    "status": 401,
    "checked": "2026-10-14",
    "note": "GET 401; application/json; 178 B transferred; JSON object (response[0]). 401 'Missing or invalid api credentials' without a key."
   },
   "machineReadable": true,
   "useInCalendar": "Commercial holiday API with India national and state coverage.",
   "ingestion": "Not recommended - needs a key (Actions secret) and commercial terms limit redistribution; official sources exist.",
   "priority": "P2"
  },
  {
   "id": "google-india-holidays-ics",
   "name": "Google Calendar public holidays in India (ICS)",
   "publisher": "Google",
   "url": "https://calendar.google.com/calendar/ical/en.indian%23holiday%40group.v.calendar.google.com/public/basic.ics",
   "category": "holidays",
   "format": [
    "ICS"
   ],
   "access": "open",
   "license": "Proprietary - Google terms",
   "updates": "continuous",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/calendar; 22 KB transferred; ics events=565. 565 events spanning 2021-2031: 167 'Public holiday', 16 marked tentative, 382 'Observance'."
   },
   "machineReadable": true,
   "useInCalendar": "Cross-check for central holiday dates and early estimates for future years.",
   "ingestion": "Monthly fetch for diffing only; never publish as authoritative (mixes observances with holidays and is not state-specific).",
   "priority": "P2"
  },
  {
   "id": "holidayapi-com",
   "name": "HolidayAPI.com",
   "publisher": "Holiday API",
   "url": "https://holidayapi.com/v1/holidays?country=IN&year=2025",
   "category": "holidays",
   "format": [
    "JSON",
    "API"
   ],
   "access": "api-key",
   "license": "Proprietary",
   "updates": "continuous",
   "reachable": {
    "status": 401,
    "checked": "2026-10-14",
    "note": "GET 401; application/json; 125 B transferred; JSON object keys status,error. 401 'The API key parameter is required'."
   },
   "machineReadable": true,
   "useInCalendar": "Commercial holiday lookup.",
   "ingestion": "Not recommended (key and terms).",
   "priority": "P2"
  },
  {
   "id": "legal-itat-holiday-lists",
   "name": "ITAT bench-wise holiday lists",
   "publisher": "Income Tax Appellate Tribunal",
   "url": "https://itat.gov.in/page/holiday_lists",
   "category": "holidays",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "yearly per bench (2026 lists uploaded between October 2025 and June 2026)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Open HTML table (description, PDF link, upload date) with 2026 holiday lists for the Cochin, Bangalore, Guwahati, Surat, Nagpur, Jaipur, Mumbai, Varanasi, Allahabad, Chennai, Jabalpur, Panaji, Jodhpur, Visakhapatnam, Hyderabad, Ahmedabad and Kolkata benches. PDFs vary in quality (some are scans). Same TLS chain problem as legal-itat."
   },
   "machineReadable": false,
   "useInCalendar": "Bench-specific non-working days for ITAT appeal reminders; also a cross-check of local holidays observed by central offices in each city.",
   "ingestion": "Annual scrape of the table plus manual or OCR extraction of dates from the PDFs; ship the missing intermediate certificate with the job.",
   "priority": "P2"
  },
  {
   "id": "legal-nclt-holiday-notices",
   "name": "NCLT holiday notifications",
   "publisher": "National Company Law Tribunal",
   "url": "https://nclt.gov.in/notifcation-holidays",
   "category": "holidays",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "ad hoc (latest entry issued 09/04/2026 for a holiday on 14 April 2026)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Open HTML table of 12 holiday declarations with PDFs (Ambedkar Jayanti, a court vacation 23-31 Dec 2024, bench-specific local holidays, the G-20 closure in 2023). Sparse and bench-specific; not a full annual list."
   },
   "machineReadable": false,
   "useInCalendar": "Mark NCLT-specific closures next to IBC and company-law filing reminders (minor).",
   "ingestion": "Optional monthly scrape of the table (title, issue date, PDF link); the holiday date has to be read from the title or PDF.",
   "priority": "P2"
  },
  {
   "id": "mcx-holidays",
   "name": "MCX trading holidays",
   "publisher": "Multi Commodity Exchange of India",
   "url": "https://www.mcxindia.com/market-operations/trading-survelliance/trading-holidays",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Proprietary - exchange website terms of use",
   "updates": "annual",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "GET 403; text/html; 441 B transferred; block page: Access Denied; HTML, 361 chars of visible text. Akamai 403 'Access Denied'."
   },
   "machineReadable": false,
   "useInCalendar": "Commodity market holidays, only if a commodities audience is added.",
   "ingestion": "Not reachable; vacanza/holidays or pandas_market_calendars may cover it later.",
   "priority": "P2"
  },
  {
   "id": "ncdex-holidays",
   "name": "NCDEX holiday list",
   "publisher": "National Commodity and Derivatives Exchange",
   "url": "https://www.ncdex.com/markets/holiday-list",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Proprietary - exchange website terms of use",
   "updates": "annual",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 4 KB transferred; HTML, 0 chars of visible text. 4 KB JavaScript shell with no server-rendered content."
   },
   "machineReadable": false,
   "useInCalendar": "Agri-commodity exchange holidays (optional).",
   "ingestion": "JavaScript-rendered; skip unless a commodities audience is added.",
   "priority": "P2"
  },
  {
   "id": "officeholidays-india",
   "name": "Office Holidays - India",
   "publisher": "Office Holidays Ltd",
   "url": "https://www.officeholidays.com/countries/india/2026",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Proprietary",
   "updates": "annual",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 19 KB transferred; HTML, 17441 chars of visible text. Server-rendered page."
   },
   "machineReadable": false,
   "useInCalendar": "Human cross-check only.",
   "ingestion": "Reference only.",
   "priority": "P2"
  },
  {
   "id": "openholidays-api",
   "name": "OpenHolidays API",
   "publisher": "OpenHolidays project",
   "url": "https://openholidaysapi.org/PublicHolidays?countryIsoCode=IN&validFrom=2026-01-01&validTo=2026-12-31",
   "category": "holidays",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Open data project (licence not reviewed - India not covered)",
   "updates": "n/a",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 2 B transferred; JSON list of 0. Returned [] for IN; /Countries lists 36 countries (mostly Europe plus BR, MX, ZA) and no IN."
   },
   "machineReadable": true,
   "useInCalendar": "None today - India is not covered.",
   "ingestion": "Not usable.",
   "priority": "P2"
  },
  {
   "id": "publicholidays-in",
   "name": "PublicHolidays.in",
   "publisher": "PublicHolidays.in",
   "url": "https://publicholidays.in/2026-dates/",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Proprietary",
   "updates": "annual",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 124 KB transferred; final URL https://publicholidays.in/; HTML, 18321 chars of visible text. The 2026 path redirects to the home page."
   },
   "machineReadable": false,
   "useInCalendar": "Human cross-check for state holidays.",
   "ingestion": "Reference only.",
   "priority": "P2"
  },
  {
   "id": "timeanddate-india",
   "name": "timeanddate.com India holidays",
   "publisher": "Time and Date AS",
   "url": "https://www.timeanddate.com/holidays/india/2026",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "captcha",
   "license": "Proprietary",
   "updates": "continuous",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "GET 403; text/html; 4 KB transferred; block page: Just a moment&hellip;; HTML, 125 chars of visible text. 403 Cloudflare 'Just a moment' challenge page."
   },
   "machineReadable": false,
   "useInCalendar": "Human cross-check only.",
   "ingestion": "Not ingestible (Cloudflare challenge) and proprietary.",
   "priority": "P2"
  },
  {
   "id": "wikidata-sparql",
   "name": "Wikidata SPARQL (holiday entities for India)",
   "publisher": "Wikimedia Foundation",
   "url": "https://query.wikidata.org/sparql?query=SELECT%20%3Fh%20WHERE%20%7B%20%3Fh%20wdt%3AP17%20wd%3AQ668%20%7D%20LIMIT%201&format=json",
   "category": "holidays",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "CC0-1.0",
   "updates": "continuous",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/sparql-results+json; 147 B transferred; JSON object keys head,results. A holiday query returned 50 entities (Republic Day, Bihu, Odisha Day, Karnataka Rajyotsava ...)."
   },
   "machineReadable": true,
   "useInCalendar": "Optional enrichment - multilingual names and descriptions keyed by holiday.",
   "ingestion": "Build-time SPARQL query (instance of public holiday Q1197685, country India Q668); entities lack year-specific dates for lunar festivals, so never use for dates.",
   "priority": "P2"
  },
  {
   "id": "wikipedia-holidays-india",
   "name": "Wikipedia - Public holidays in India",
   "publisher": "Wikimedia Foundation (community)",
   "url": "https://en.wikipedia.org/wiki/Public_holidays_in_India",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "CC-BY-SA-4.0",
   "updates": "continuous",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 53 KB transferred; HTML, 13954 chars of visible text. 55 KB article."
   },
   "machineReadable": false,
   "useInCalendar": "Background descriptions of holidays; not dated per year.",
   "ingestion": "Reference only (share-alike text - do not copy into an MIT site).",
   "priority": "P2"
  },
  {
   "id": "state-lwf-mh",
   "name": "Maharashtra Labour Welfare Fund Act and Rules (MLWB consolidated English PDF)",
   "publisher": "Maharashtra Labour Welfare Board",
   "url": "https://mlwb.in/react-static-files/pdf/homepage/Quick-Links/MLWB-Fund-Act-and-Rules-english-version.pdf",
   "category": "legal-text",
   "format": [
    "PDF",
    "HTML"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "on amendment (consolidated through MGG Ext. No. 41 dated 18-03-2024)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 application/pdf (3.7 MB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3 (mlwb.in). Text-extractable; s.6BB as substituted in 2024: employee Rs 25 per half-year for employees on the register on 30 June and 31 December, employer three times that, both paid by the employer before 15 July and 15 January. mlwb.in itself is a React SPA (JS-only shell) whose bundle links this PDF and the Notification-6BB gazette (Marathi, font-encoded); adminconsole.mlwb.in/api serves only visitor stats, contacts and scheme counts. The server-rendered portal public.mlwb.in (200, 156 KB) posts notices (e.g. June 2026 unpaid-accumulation notice) but fails tlscheck (unable to get local issuer certificate)."
   },
   "machineReadable": false,
   "useInCalendar": "Maharashtra LWF half-yearly due dates (15 July and 15 January), current rates and the s.6BB citation.",
   "ingestion": "Automatable: monthly hash of this PDF plus the public.mlwb.in notice list (intermediate certificate added); manual review on change.",
   "priority": "P0"
  },
  {
   "id": "indiabudget",
   "name": "Union Budget documents (Finance Bill, memorandum)",
   "publisher": "Ministry of Finance",
   "url": "https://www.indiabudget.gov.in/doc/Finance_Bill.pdf",
   "category": "legal-text",
   "format": [
    "PDF",
    "HTML"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "annual (Budget day, usually 1 February)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/pdf; 1741 KB transferred; pdf. Finance_Bill.pdf 200 (1.8 MB) and memo.pdf 200 (3.1 MB) for Budget 2026-27; home page 200."
   },
   "machineReadable": false,
   "useInCalendar": "Annual Finance Bill and explanatory memorandum - rate and due-date changes effective each 1 April.",
   "ingestion": "Manual review each February; archive the PDFs; the Finance Act as passed comes later via the Gazette.",
   "priority": "P1"
  },
  {
   "id": "indiacode",
   "name": "India Code (DSpace 9 REST, OAI-PMH, OpenSearch)",
   "publisher": "Legislative Department / NIC",
   "url": "https://indiacode.gov.in/server/api/discover/search/objects?query=income-tax&size=3",
   "category": "legal-text",
   "format": [
    "JSON",
    "API",
    "RSS",
    "XML",
    "PDF"
   ],
   "access": "open",
   "license": "Acts reusable (Copyright Act 1957 s.52(1)(q)); site terms apply",
   "updates": "on enactment (currently back-filling history)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 3 KB transferred; JSON object keys id,scope,query,appliedFilters,sort. indiacode.nic.in now shows a 'Site Migration' page redirecting to https://indiacode.gov.in (DSpace 9.1, 131,034 items). REST, OAI Identify and OpenSearch RSS all 200. www.indiacode.gov.in fails TLS (hostname mismatch) - use the apex host. indiacode.nic.in OAI timed out."
   },
   "machineReadable": true,
   "useInCalendar": "Bare Acts and subordinate legislation (Income-tax Act 2025, CGST Act, Companies Act, Labour Codes, state PT and LWF Acts) for law citations on each rule.",
   "ingestion": "Resolve handles per Act at build time via /server/api/discover/search/objects?query=...; OAI-PMH at /server/oai/request and OpenSearch RSS at /server/opensearch/search?query=...&format=rss. Do not treat recently accessioned items as new law - historical ordinances were being back-filled on 2026-10-14.",
   "priority": "P1"
  },
  {
   "id": "itd-incometaxindia",
   "name": "Income Tax Department website (CBDT notifications, circulars, Acts, tax calendar)",
   "publisher": "Income Tax Department / CBDT",
   "url": "https://incometaxindia.gov.in/Pages/communications/notifications.aspx",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "restricted",
   "license": "Unknown - GoI website, no open licence stated",
   "updates": "on publication",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "GET 403; text/html; 434 B transferred; final URL https://www.incometaxindia.gov.in/Pages/communications/notifications.aspx; block page: Access Denied; HTML, 354 chars of visible text. Redirects to www.incometaxindia.gov.in then HTTP 403 Akamai Access Denied on every path tried here (/, /Pages/tax-calendar.aspx, notifications, circulars). A parallel multi-location check (check-host.net nodes, run by the open-data survey) saw it answer from some US, Canadian and Singapore servers but refuse Germany and a Mumbai datacenter, so the block looks like IP reputation rather than country."
   },
   "machineReadable": false,
   "useInCalendar": "Primary home of CBDT notifications and circulars, the Income-tax Act 2025 and Income-tax Rules text and the department's own tax calendar - the citation targets for income-tax rule sources.",
   "ingestion": "Not reliably ingestible from outside India: every path tried from this machine returned an Akamai Access Denied page. Use the e-Filing RSS and tax-calendar API for automation, cite incometaxindia URLs by hand, and test once from the actual Actions runner (the block appears to be IP-reputation based, so a runner may or may not pass); a self-hosted runner is the fallback.",
   "priority": "P1"
  },
  {
   "id": "rbi-master-directions",
   "name": "RBI Master Directions (incl. FEMA)",
   "publisher": "Reserve Bank of India",
   "url": "https://www.rbi.org.in/Scripts/BS_ViewMasterDirections.aspx",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - RBI website terms",
   "updates": "on amendment",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 81 KB transferred; HTML, 196609 chars of visible text. Old-style Scripts page still served alongside the redesigned site; a master-direction detail page (BS_ViewMasDirections.aspx?id=11253) also returned 200."
   },
   "machineReadable": false,
   "useInCalendar": "Citation targets for FEMA reporting rules (FDI and ODI reporting, ECB returns, LRS).",
   "ingestion": "Monthly scrape for changed 'updated as on' dates; the notifications RSS catches amendments in between.",
   "priority": "P1"
  },
  {
   "id": "sebi-legal-listings",
   "name": "SEBI circulars and regulations listings (incl. LODR)",
   "publisher": "Securities and Exchange Board of India",
   "url": "https://www.sebi.gov.in/sebiweb/home/HomeAction.do?doListing=yes&sid=1&ssid=7&smid=0",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI regulator website",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 46 KB transferred; HTML, 5137 chars of visible text. Circulars listing has dated rows (newest Oct 07, 2026); the regulations listing (ssid=3) also 200; a guessed /legal/regulations/ path returned 403."
   },
   "machineReadable": false,
   "useInCalendar": "Current LODR Regulations 2015 text and the circulars that set listed-company deadlines (Reg 13, 23, 24A, 27, 31, 33, 34, BRSR).",
   "ingestion": "Weekly scrape of the circulars (ssid=7) and regulations (ssid=3) listings; paging is a POST to /sebiweb/ajax/home/getnewslistinfo.jsp. Store links to the latest LODR consolidated text; use the RSS for change detection.",
   "priority": "P1"
  },
  {
   "id": "state-lwf-pb",
   "name": "Punjab Labour Welfare Board (Punjab Labour Department)",
   "publisher": "Punjab Labour Welfare Board, Labour Department, Government of Punjab",
   "url": "https://pblabour.gov.in/",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF",
    "JSON"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on notification",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. Wayback shows uploads of the Punjab Labour Welfare Fund Act 1965 and Rules 1966 PDFs, a PLWB constitution notice, scheme lists, and a JSON endpoint /plwbapi/plwb/schemes/status used by the site (scheme data, not contribution rules)."
   },
   "machineReadable": false,
   "useInCalendar": "Punjab LWF contribution rates and due dates from the Act and Rules; the same Act is the basis for Chandigarh.",
   "ingestion": "Manual review; not reachable from GitHub-hosted runners.",
   "priority": "P1"
  },
  {
   "id": "state-lwf-tg",
   "name": "Telangana Labour Department - Labour Welfare Fund Act 1987",
   "publisher": "Labour Department, Government of Telangana",
   "url": "https://labour.telangana.gov.in/content/ActsRules/TELANGANA%20LABOUR%20WELFARE%20FUND%20ACT,%201987.htm",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "restricted",
   "license": "Unknown",
   "updates": "on amendment",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "HTTP 403 F5 ASM 'The requested URL was rejected' page from Toronto, and 403 from check-host Mumbai, Los Angeles and Nuremberg for this page and the site root, so the WAF blocks scripted clients regardless of country. tlscheck: ok TLSv1.3. Wayback shows this HTML Act page (2019) and the AP LWF Act 1987 PDF under content/ActsRules."
   },
   "machineReadable": false,
   "useInCalendar": "Telangana LWF contribution rates and annual due date from the Act.",
   "ingestion": "Manual only; the WAF rejects automated fetches.",
   "priority": "P1"
  },
  {
   "id": "state-pt-jh",
   "name": "Jharkhand Commercial Taxes - Professional Tax Acts and Rules",
   "publisher": "Department of Commercial Taxes, Government of Jharkhand",
   "url": "https://ctax.jharkhand.gov.in/web/10231/professional-tax-acts",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on notification",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto and Los Angeles, refused from Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. Liferay site; Wayback captures (to Apr 2026) show the PT Acts and PT Rules pages, the Professional Tax Rules 2012 document and a 'Circular regarding Professional Tax'. The older domain jharkhandcomtax.gov.in resolves only from India (geo-DNS)."
   },
   "machineReadable": false,
   "useInCalendar": "Jharkhand PT Act and Rules 2012 for slabs and annual payment and return dates.",
   "ingestion": "Manual annual review; not reachable from GitHub-hosted runners.",
   "priority": "P1"
  },
  {
   "id": "state-pt-mp",
   "name": "Madhya Pradesh Commercial Tax - Profession Tax Act and schedule",
   "publisher": "Commercial Tax Department, Government of Madhya Pradesh",
   "url": "https://mptax.mp.gov.in/mpvatweb/requestRedirect.do?dispatch=displayPTActDetails",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "on notification",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (56 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: VERIFY-FAIL unable to get local issuer certificate (incomplete chain; a Linux runner fails unless the intermediate is supplied, while Windows curl succeeds via AIA). Menu items are javascript: links that wrap plain GET URLs (PT Act and PT Schedule both map to displayPTActDetails; government notifications at /mpvatweb/circular.do?strType=NOTI&strActionType=LIST). The 'js-required' flag comes from a browser notice; the content is server-rendered. mptaxes.mp.gov.in is NXDOMAIN; the mptax.mp.gov.in root is a meta-refresh to /mpvatweb."
   },
   "machineReadable": false,
   "useInCalendar": "MP PT (Vritti Kar) Act text and schedule, and the notification list for rate or date changes.",
   "ingestion": "Weekly fetch with the missing intermediate certificate added to the runner CA bundle; diff the notification list and review new items.",
   "priority": "P1"
  },
  {
   "id": "cci",
   "name": "Competition Commission of India regulations",
   "publisher": "Competition Commission of India",
   "url": "https://www.cci.gov.in/legal-framwork/regulations",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI regulator website",
   "updates": "occasional",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 7 KB transferred; HTML, 1114 chars of visible text. Server HTML has almost no list content (one date visible)."
   },
   "machineReadable": false,
   "useInCalendar": "Combination (merger) filing timelines - event-based rules only.",
   "ingestion": "Reference only; list content loads client-side.",
   "priority": "P2"
  },
  {
   "id": "legal-aws-hc-judgments",
   "name": "Indian High Court Judgments (Registry of Open Data on AWS)",
   "publisher": "Dattam Labs (data collected from the eCourts judgments portal)",
   "url": "https://registry.opendata.aws/indian-high-court-judgments/",
   "category": "legal-text",
   "format": [
    "PDF",
    "JSON",
    "Parquet",
    "TAR"
   ],
   "access": "open",
   "license": "CC-BY-4.0",
   "updates": "quarterly per the registry; several 2026 partitions modified 2026-10-14",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Registry page 200. Bucket s3://indian-high-court-judgments (ap-south-1) lists anonymously: 25 High Courts, metadata/parquet/year=YYYY/court=<code>/bench=<bench>/metadata.parquet (56 objects for 2026), metadata/parquet_case_details, JSON and tar bundles plus compressed PDFs."
   },
   "machineReadable": true,
   "useInCalendar": "Same as the Supreme Court set; useful for GST and income-tax writ rulings in a curated updates feed.",
   "ingestion": "Monthly: list the current-year partitions, download only parquet files whose LastModified or ETag changed, filter by keywords, publish a small JSON; same CC-BY attribution.",
   "priority": "P2"
  },
  {
   "id": "legal-aws-sc-judgments",
   "name": "Indian Supreme Court Judgments (Registry of Open Data on AWS)",
   "publisher": "Dattam Labs (data collected from the eCourts judgments portal)",
   "url": "https://registry.opendata.aws/indian-supreme-court-judgments/",
   "category": "legal-text",
   "format": [
    "PDF",
    "JSON",
    "Parquet",
    "TAR"
   ],
   "access": "open",
   "license": "CC-BY-4.0",
   "updates": "bi-monthly per the registry; metadata/parquet/year=2026/metadata.parquet last modified 2026-10-14",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Registry page 200. Bucket s3://indian-supreme-court-judgments (ap-south-1) lists anonymously over HTTPS with no AWS account: data/pdf, data/tar, metadata/json and metadata/parquet/year=1950 to year=2026. The description covers 1950-2025 with English and regional-language versions; documentation lives in github.com/vanga/indian-supreme-court-judgments."
   },
   "machineReadable": true,
   "useInCalendar": "Optional 'recent rulings' feed: filter the current-year metadata for tax and company-law matters and link to the PDF.",
   "ingestion": "Weekly: GET https://indian-supreme-court-judgments.s3.ap-south-1.amazonaws.com/metadata/parquet/year=<YYYY>/metadata.parquet (about 270 KB), read with pyarrow or duckdb, keep the last 30 days, attribute 'Indian Supreme Court Judgments, Dattam Labs, CC-BY-4.0'.",
   "priority": "P2"
  },
  {
   "id": "legal-cestat",
   "name": "CESTAT cause lists and final orders",
   "publisher": "Customs, Excise and Service Tax Appellate Tribunal",
   "url": "https://cestat.gov.in/viewcauselist",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "captcha",
   "license": "Unknown",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Reachable here and from check-host nodes in the US, Germany and India; cause list, order status and final-order searches all require a CSRF token plus an image CAPTCHA."
   },
   "machineReadable": false,
   "useInCalendar": "None.",
   "ingestion": "None.",
   "priority": "P2"
  },
  {
   "id": "legal-ecourts-judgments",
   "name": "eCourts Judgments and Orders portal (Supreme Court and High Courts)",
   "publisher": "e-Committee, Supreme Court of India",
   "url": "https://judgments.ecourts.gov.in/pdfsearch/index.php",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "captcha",
   "license": "Unknown (court judgments may be reproduced under Copyright Act s.52(1)(q)(iv))",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Reachable from outside India (and from check-host nodes in the US, Germany and India); full-text search needs an image CAPTCHA per search session. This portal is the upstream of the AWS open datasets below."
   },
   "machineReadable": false,
   "useInCalendar": "None directly.",
   "ingestion": "Do not scrape; use legal-aws-sc-judgments and legal-aws-hc-judgments.",
   "priority": "P2"
  },
  {
   "id": "legal-ecourts-services",
   "name": "eCourts Services (case status, cause lists and orders for district courts and High Courts)",
   "publisher": "e-Committee, Supreme Court of India / NIC",
   "url": "https://services.ecourts.gov.in/ecourtindia_v6/",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "captcha",
   "license": "Unknown",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Reachable from outside India; case status, cause list and order searches all require an image CAPTCHA."
   },
   "machineReadable": false,
   "useInCalendar": "None for a compliance calendar.",
   "ingestion": "None.",
   "priority": "P2"
  },
  {
   "id": "legal-indian-kanoon",
   "name": "Indian Kanoon API and website",
   "publisher": "Indian Kanoon (private legal search service)",
   "url": "https://api.indiankanoon.org/",
   "category": "legal-text",
   "format": [
    "JSON",
    "XML",
    "HTML",
    "API"
   ],
   "access": "api-key",
   "license": "Proprietary",
   "updates": "daily (new judgments, orders and statutes)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "api.indiankanoon.org pages (pricing, terms, documentation) returned 200 here after a transient Cloudflare 502 earlier in the day, and 200 from seven check-host nodes in five countries. The public site indiankanoon.org serves a Cloudflare 'Just a moment' challenge (403) to non-Indian datacenter IPs but 200 to the Mumbai node, so scraping is not viable. Pricing: prepaid INR per request - search 0.50, original document 0.50, document 0.20, fragment 0.05, metainfo 0.02; INR 500 free credit on signup; non-commercial use can get INR 10,000 free per month after use-case verification. Terms: a 'powered by IKanoon' logo attribution is mandatory (also for RAG or model-training use), prices can change with one week's notice, data is provided as is. Auth is an 'Authorization: Token' header or signed requests."
   },
   "machineReadable": true,
   "useInCalendar": "Optional: link a due-date or penalty explainer to leading judgments on that provision; not needed for dates.",
   "ingestion": "Backend or build-time only so the token stays secret: POST https://api.indiankanoon.org/search/?formInput=<q>&pagenum=0 and /doc/<id>/ (as the official ikapi client does), cache results per explainer page, stay within the free non-commercial credit, show the required logo.",
   "priority": "P2"
  },
  {
   "id": "legal-itat",
   "name": "ITAT tribunal orders",
   "publisher": "Income Tax Appellate Tribunal",
   "url": "https://itat.gov.in/judicial/tribunal_orders",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "captcha",
   "license": "Unknown",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Order search needs a CAPTCHA and CSRF token. TLS: itat.gov.in serves an incomplete certificate chain (VERIFY-FAIL 'unable to get local issuer certificate' against the Mozilla bundle), so Ubuntu runners fail unless the intermediate is supplied; Windows curl passed thanks to AIA fetching. Responses took about 9 seconds."
   },
   "machineReadable": false,
   "useInCalendar": "None.",
   "ingestion": "None.",
   "priority": "P2"
  },
  {
   "id": "legal-nclat",
   "name": "NCLAT daily cause lists, judgments and daily orders",
   "publisher": "National Company Law Appellate Tribunal",
   "url": "https://nclat.nic.in/daily-cause-list",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Cause-list page links 31 PDFs (for example Causelist_II_16.10.2026.pdf, downloadable, Last-Modified 2026-10-13); judgments and daily orders are searchable through forms with a CSRF token but no CAPTCHA, and the homepage lists the latest order PDFs with party names. Material before 31.05.2021 sits in separate archives."
   },
   "machineReadable": false,
   "useInCalendar": "Optional link-outs to recent IBC appellate rulings in the updates feed.",
   "ingestion": "Optional daily scrape of the homepage 'Judgements' tab (title, date, PDF link).",
   "priority": "P2"
  },
  {
   "id": "legal-nclt",
   "name": "NCLT cause lists, orders and circulars",
   "publisher": "National Company Law Tribunal",
   "url": "https://nclt.gov.in/all-cause-list",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "daily (next-day cause lists per bench)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Drupal table without CAPTCHA: title, bench/court, number of entries, date and a PDF under /sites/default/files/pdf_cause_list/ (20 lists dated 15 Oct 2026 on page one; a sampled PDF downloaded with Last-Modified 2026-10-14). Orders and judgements by date (/order-date-wise) need a CAPTCHA. Circulars and public notices are listed on the homepage and /circulars."
   },
   "machineReadable": false,
   "useInCalendar": "Low: IBC and company-law notices for an updates feed; cause lists are out of scope.",
   "ingestion": "Optional weekly scrape of /circulars and homepage notices (title, date, PDF link); no order scraping.",
   "priority": "P2"
  },
  {
   "id": "legal-sci",
   "name": "Supreme Court of India website (judgments, cause lists)",
   "publisher": "Supreme Court of India",
   "url": "https://www.sci.gov.in/judgements-judgement-date/",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "captcha",
   "license": "Unknown (judgments may be reproduced under Copyright Act s.52(1)(q)(iv))",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Akamai-fronted WordPress site: 200 here and from US check-host nodes, 403 from Germany and Mumbai datacenter nodes. Judgment-by-date and cause-list searches require a CAPTCHA; /feed/ and /wp-json/ return 404, so there is no RSS."
   },
   "machineReadable": false,
   "useInCalendar": "Rare: landmark tax or corporate rulings for the updates feed.",
   "ingestion": "Use legal-aws-sc-judgments instead of scraping.",
   "priority": "P2"
  },
  {
   "id": "legislative-dept-cms-api",
   "name": "Legislative Department CMS API",
   "publisher": "Legislative Department, Ministry of Law and Justice",
   "url": "https://www.legislative.gov.in/cms/wp-json/wp/v2/documents?per_page=20",
   "category": "legal-text",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "monthly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 5 KB transferred; JSON list of 20. Same headless WordPress platform as labour.gov.in; sparse content (acts-and-policy 10 items, gazette-notifications 3); newest document 2026-08-24."
   },
   "machineReadable": true,
   "useInCalendar": "Repealed-law lists, central ordinances and constitution orders - low value for due dates.",
   "ingestion": "Monthly poll at most; India Code is the better legal-text source.",
   "priority": "P2"
  },
  {
   "id": "state-pt-ml",
   "name": "Meghalaya Taxation Department - Professions Tax Acts, Rules and forms",
   "publisher": "Taxation Department, Government of Meghalaya",
   "url": "https://meggst.gov.in/",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on amendment (latest seen: amendment Act 2022)",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto and Nuremberg, but HTTP 200 from check-host Los Angeles and Mumbai, so the filter is not India-only. tlscheck: CONNECT-FAIL timeout. Wayback shows /ActsRules/ PDFs (Meghalaya professional amendment Act 2022, PT rules, PT notification, 1991 and 2012 amendments) and /forms/ptax/ forms. megtaxes.gov.in and megvat.gov.in are NXDOMAIN."
   },
   "machineReadable": false,
   "useInCalendar": "Meghalaya PT slab and payment rules (Act as amended in 2022).",
   "ingestion": "May work from US-based GitHub runners (Los Angeles succeeded); try once from Actions, else manual annual review.",
   "priority": "P2"
  },
  {
   "id": "state-pt-mn",
   "name": "Manipur Department of Taxes - Professional Tax amendments",
   "publisher": "Department of Taxes, Government of Manipur",
   "url": "https://www.manipurtaxes.gov.in/en/professional-tax/amendment/",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "stale (latest item: Ninth Amendment Act 2020)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (9.9 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3. Table of PT amendment Acts with PDFs (latest No.2/11/2020-Leg/L dated 06-03-2020, Ninth Amendment Act 2020); sibling pages hold the Manipur Professions Act 1981 and Rules 1982. The PT Notification and Order tables show 'Data Not Available' and the header still shows former office-holders, so the site is not maintained. The older host manipurvat.gov.in has an expired certificate (tlscheck VERIFY-FAIL)."
   },
   "machineReadable": false,
   "useInCalendar": "Manipur PT Act and amendment citations only.",
   "ingestion": "Manual check once a year.",
   "priority": "P2"
  },
  {
   "id": "state-pt-py",
   "name": "Puducherry Local Administration Department - Acts and Rules (municipal profession tax)",
   "publisher": "Local Administration Department, Government of Puducherry",
   "url": "https://lad.py.gov.in/acts-rules",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "rarely",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (115 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: VERIFY-FAIL unable to get local issuer certificate (incomplete chain). The captcha flag comes only from a feedback webform. Lists the Puducherry Municipalities Act 1973 (labelled 'Puducherry Municipal Decree Act-1973') and links the five municipalities (Puducherry, Oulgaret, Karaikal, Mahe, Yanam) and commune panchayats, which levy PT; the tax payment portal lgrams.py.gov.in timed out from Toronto. No PT schedule or due dates found."
   },
   "machineReadable": false,
   "useInCalendar": "Legal basis for Puducherry PT as a municipal levy; no schedule or due dates online.",
   "ingestion": "Manual annual review; add the intermediate certificate if this is ever automated.",
   "priority": "P2"
  },
  {
   "id": "state-pt-tr",
   "name": "Tripura Commissionerate of Taxes and Excise - Professions Tax rules and notifications",
   "publisher": "Commissionerate of Taxes and Excise, Finance Department, Government of Tripura",
   "url": "https://taxes.tripura.gov.in/index.php/profession_rules",
   "category": "legal-text",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on notification (rate notifications uploaded May 2024)",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto and Los Angeles, DNS failure from Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. Drupal site; Wayback shows the profession_rules listing and May 2024 uploads titled 'Notification on Revision of Rate of Professions Tax' (the one extracted is the 2013 gazette notification under the Tripura PT Act 1997). The separate e-portal ptax.tripura.gov.in (IGOD-listed, also geo-blocked) uses math captchas for enrolment."
   },
   "machineReadable": false,
   "useInCalendar": "Tripura PT rate schedule and notifications.",
   "ingestion": "Manual annual review; not reachable from GitHub-hosted runners.",
   "priority": "P2"
  },
  {
   "id": "entity-gleif-lei-api",
   "name": "GLEIF LEI Records API",
   "publisher": "Global Legal Entity Identifier Foundation (GLEIF)",
   "url": "https://api.gleif.org/api/v1/lei-records?filter[entity.legalAddress.country]=IN&page[size]=5",
   "category": "entity-data",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "CC0-1.0",
   "updates": "continuous; golden copy refreshed three times a day",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "402,547 LEI records with legal address country IN (meta.pagination.total, golden copy 2026-10-14 08:00 UTC). Indian records carry registeredAt RA000394 (MCA Companies Register) with the 21-character CIN in registeredAs, or RA000754 (GST Portal) with a GSTIN for proprietorships; lookup by CIN works (filter[entity.registeredAs]=L85110KA1981PLC013115 returns Infosys with next renewal 2027-07-20). No key needed, CORS allows any origin. Square brackets must be URL-encoded for curl."
   },
   "machineReadable": true,
   "useInCalendar": "LEI renewal is itself a recurring deadline (RBI requires LEIs for some borrowers and for large-value RTGS/NEFT payments by entities, and an LEI lapses unless renewed yearly). A user can enter a CIN or LEI and get registration.nextRenewalDate as a reminder; it also gives a free CIN-to-name check.",
   "ingestion": "Client-side fetch from the static site (CORS *) for on-demand lookups: GET /api/v1/lei-records?filter[entity.registeredAs]=<CIN> or /api/v1/lei-records/<LEI>; no server needed. Respect GLEIF fair-use limits.",
   "priority": "P1"
  },
  {
   "id": "entity-nse-equity-list",
   "name": "NSE securities available for trading (EQUITY_L.csv) and NSE Emerge SME list",
   "publisher": "National Stock Exchange of India Ltd",
   "url": "https://nsearchives.nseindia.com/content/equities/EQUITY_L.csv",
   "category": "entity-data",
   "format": [
    "CSV"
   ],
   "access": "open",
   "license": "Proprietary (NSE website terms; factual listing data)",
   "updates": "daily (Last-Modified 2026-10-14)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Plain CSV through Akamai, no cookies or extra headers needed: 2,605 rows (SYMBOL, NAME OF COMPANY, SERIES, DATE OF LISTING, PAID UP VALUE, MARKET LOT, ISIN NUMBER, FACE VALUE). The SME list at /emerge/corporates/content/SME_EQUITY_L.csv has 580 rows. check-host nodes in the US got 200, but the Germany and Mumbai nodes timed out, so keep the last good copy."
   },
   "machineReadable": true,
   "useInCalendar": "Identify listed companies so SEBI LODR deadlines apply (quarterly results within 45 days, shareholding pattern within 21 days of quarter end, and so on); powers a 'listed company' search or toggle.",
   "ingestion": "Weekly GitHub Action: GET both CSVs, trim header whitespace, store symbol, ISIN, name and listing date as JSON; fail soft and keep the previous file if a fetch times out.",
   "priority": "P1"
  },
  {
   "id": "entity-bse-scrip-list",
   "name": "BSE list of scrips (ListofScripData API)",
   "publisher": "BSE Ltd",
   "url": "https://api.bseindia.com/BseIndiaAPI/api/ListofScripData/w?Group=&Scripcode=&industry=&segment=Equity&status=Active",
   "category": "entity-data",
   "format": [
    "JSON",
    "API"
   ],
   "access": "restricted",
   "license": "Proprietary (BSE website terms; undocumented website API)",
   "updates": "daily",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "The probe (browser user agent only) got Akamai 'Access Denied' (403). The same URL returned 200 JSON with 5,111 active equity scrips (SCRIP_CD, Scrip_Name, Issuer_Name, ISIN_NUMBER, GROUP, FACE_VALUE, Mktcap) when sent with Referer and Origin https://www.bseindia.com plus Chrome sec-fetch and sec-ch-ua headers; another api.bseindia.com endpoint stayed 403 even then."
   },
   "machineReadable": true,
   "useInCalendar": "Adds BSE-only listed companies to the listed-company search.",
   "ingestion": "Weekly fetch with browser-like headers; fragile under Akamai bot management, so keep the last good copy and alert on failure. Use the NSE list first.",
   "priority": "P2"
  },
  {
   "id": "entity-gleif-golden-copy",
   "name": "GLEIF Golden Copy and delta files",
   "publisher": "Global Legal Entity Identifier Foundation (GLEIF)",
   "url": "https://goldencopy.gleif.org/api/v2/golden-copies/publishes/latest",
   "category": "entity-data",
   "format": [
    "CSV",
    "XML",
    "JSON",
    "ZIP"
   ],
   "access": "open",
   "license": "CC0-1.0",
   "updates": "three publishes a day (00:00, 08:00, 16:00 UTC) plus intraday deltas",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Latest publish 2026-10-14 16:00 UTC: LEI2 full CSV with 3,462,035 records worldwide (481 MB zipped), plus relationship and reporting-exception files and delta files. GLEIF's terms state the data is provided under CC0 1.0."
   },
   "machineReadable": true,
   "useInCalendar": "Bulk route to an India-only LEI index (about 0.4 M rows) for offline search of renewal dates without per-user API calls.",
   "ingestion": "Weekly GitHub Action: stream the full CSV zip, keep rows with legal address country IN, write a slim CSV (LEI, name, registeredAs, status, next renewal date) as a release asset rather than committing it.",
   "priority": "P2"
  },
  {
   "id": "entity-gstin-search",
   "name": "GST portal Search Taxpayer (GSTIN lookup)",
   "publisher": "Goods and Services Tax Network (GSTN)",
   "url": "https://services.gst.gov.in/services/searchtp",
   "category": "entity-data",
   "format": [
    "HTML",
    "JSON"
   ],
   "access": "captcha",
   "license": "Unknown",
   "updates": "live",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Reachable from outside India (also from check-host nodes in the US, Germany and India), but the page is an Angular shell and at times an F5 BIG-IP bot-defence JavaScript challenge ('Please enable JavaScript... support ID'). The lookup itself (POST /services/api/search/taxpayerDetails) needs a solved image CAPTCHA; a bare GET returns 405. Official machine access is the GSTN Tax Payer API on API Setu (partner credentials) or licensed GST Suvidha Providers."
   },
   "machineReadable": false,
   "useInCalendar": "Could reveal a taxpayer's filing frequency (monthly or QRMP) and status to pick GSTR-1 and GSTR-3B dates, but cannot be automated from a static site.",
   "ingestion": "Do not scrape. Let users choose monthly or QRMP and their state.",
   "priority": "P2"
  },
  {
   "id": "entity-leil-india",
   "name": "Legal Entity Identifier India Ltd (LEIL) - LEI issuer for India",
   "publisher": "LEIL, a subsidiary of The Clearing Corporation of India Ltd (CCIL)",
   "url": "https://www.ccilindia-lei.co.in/",
   "category": "entity-data",
   "format": [
    "XML",
    "JSON",
    "HTML"
   ],
   "access": "open",
   "license": "Unknown (the same LEI records are CC0 via GLEIF)",
   "updates": "daily full files (file timestamps between 13:00 and 14:30 server time)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Website is a React shell, but its public JSON endpoints answer from outside India (also from check-host nodes in the US, Germany and India): /api/public/cds-files-download lists the last eight daily full files (for 2026-10-14: LEIL-CDF2-Full-20261014_142339.zip of 25.6 MB plus relationship and reporting-exception files) and /api/public/datamatrix/get-count reports 147,844 legal entities. /api/public/download-cds-file/<name> returned about 36 MB of JSON (a base64-wrapped zip) and ignores Range requests."
   },
   "machineReadable": true,
   "useInCalendar": "Same use as GLEIF but limited to LEIs managed by LEIL; GLEIF is the simpler single source.",
   "ingestion": "Prefer GLEIF; use LEIL files only as a cross-check.",
   "priority": "P2"
  },
  {
   "id": "entity-mca-master-data",
   "name": "MCA21 V3 company/LLP master data and monthly incorporation lists",
   "publisher": "Ministry of Corporate Affairs",
   "url": "https://www.mca.gov.in/content/mca/global/en/mca/master-data/MDS.html",
   "category": "entity-data",
   "format": [
    "HTML",
    "XLSX"
   ],
   "access": "geo-blocked",
   "license": "Unknown (government website terms)",
   "updates": "live register; incorporated and closed company/LLP lists monthly",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "Akamai 'Access Denied' for every mca.gov.in path tried, including Data and Reports > incorporated/closed during the month; check-host.net nodes in the US, UK, Germany and Singapore also got 403 (the Mumbai node failed DNS, inconclusive). The Internet Archive has logged 403 for the master-data page since October 2025; its September 2025 copy shows the company/LLP lookup behind a CAPTCHA modal."
   },
   "machineReadable": false,
   "useInCalendar": "Best source for company/LLP status and incorporation dates (AGM, AOC-4, MGT-7, LLP Form 8 and Form 11 timelines), but not reachable or automatable from outside India.",
   "ingestion": "None from runners. Ask users for entity type and incorporation date; optionally pre-fill the name from GLEIF (CIN in registeredAs).",
   "priority": "P2"
  },
  {
   "id": "entity-opencorporates-india",
   "name": "OpenCorporates - India jurisdiction",
   "publisher": "OpenCorporates Ltd",
   "url": "https://opencorporates.com/companies/in",
   "category": "entity-data",
   "format": [
    "JSON",
    "HTML",
    "API"
   ],
   "access": "api-key",
   "license": "ODbL-1.0 (share-alike and attribution; free API use is for qualifying 'Permitted Users', otherwise a paid licence)",
   "updates": "Unknown for India (sourced from MCA records)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Catalogue URL re-probed at build: GET 200; text/html; 5 KB transferred; HTML, 1539 chars of visible text. Earlier check by the survey (status 401, may refer to a related endpoint): API v0.4 (/companies/search?jurisdiction_code=in and /jurisdictions/in) returns 401 'Invalid Api Token' without a token. The website reports 2,715,214 Indian companies; browsing the jurisdiction needs a login and some fields (incorporation date) are hidden from logged-out users, while a company page by CIN loads (200)."
   },
   "machineReadable": true,
   "useInCalendar": "Possible fallback for company status lookups, but share-alike licensing and key handling make it a poor fit for a static open-source site.",
   "ingestion": "Not for v1. If ever used: apply for a public-benefit key, query /companies/in/<CIN> on demand from a backend, show OpenCorporates attribution.",
   "priority": "P2"
  },
  {
   "id": "entity-pan-verification",
   "name": "PAN verification channels (e-Filing 'Verify Your PAN', Protean online PAN verification, API Setu PAN APIs)",
   "publisher": "Income Tax Department; Protean eGov Technologies",
   "url": "https://eportal.incometax.gov.in/iec/foservices/#/pre-login/verifyYourPAN",
   "category": "entity-data",
   "format": [
    "HTML",
    "API"
   ],
   "access": "restricted",
   "license": "Proprietary",
   "updates": "live",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "The e-Filing portal shell loads from outside India (JavaScript required); its Verify Your PAN flow needs PAN, name, date of birth and a mobile OTP. Protean's online PAN verification is a paid service for registered entities (the old product URL now redirects to the tinpan.proteantech.in React app). API Setu lists an Organization PAN Verification API that needs partner onboarding. There is no open PAN dataset."
   },
   "machineReadable": false,
   "useInCalendar": "None as a lookup. A PAN's format can be checked locally, and its 4th character (P individual, C company, F firm, H HUF, and so on) can pick the right deadline set without any external call.",
   "ingestion": "None. Local format validation only.",
   "priority": "P2"
  },
  {
   "id": "entity-rbi-ifsc-lists",
   "name": "RBI bank-wise IFSC and MICR lists",
   "publisher": "Reserve Bank of India",
   "url": "https://www.rbi.org.in/Scripts/bs_viewcontent.aspx?Id=2009",
   "category": "entity-data",
   "format": [
    "XLSX",
    "HTML"
   ],
   "access": "open",
   "license": "Unknown (RBI website terms)",
   "updates": "periodic; consolidated NEFT list 68774.xlsx Last-Modified 2026-10-07",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Listing page loads (also from check-host nodes in the US, Germany and India) with 235 bank-wise XLSX links on rbidocs.rbi.org.in. During a burst of manual requests rbidocs answered with an F5 image-CAPTCHA page ('What code is in the image?') instead of the XLSX; a later single request returned the consolidated 68774.xlsx (17 MB, about 91,800 rows)."
   },
   "machineReadable": true,
   "useInCalendar": "None beyond bank reference; prefer Razorpay's packaged copy.",
   "ingestion": "Do not poll; if needed, one slow fetch per month of 68774.xlsx with backoff, or simply consume razorpay/ifsc releases.",
   "priority": "P2"
  },
  {
   "id": "entity-udyam-verify",
   "name": "Udyam Registration Number verification",
   "publisher": "Ministry of Micro, Small and Medium Enterprises",
   "url": "https://udyamregistration.gov.in/Udyam_Verify.aspx",
   "category": "entity-data",
   "format": [
    "HTML"
   ],
   "access": "captcha",
   "license": "Unknown",
   "updates": "live",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Without a session the verify URL redirects to Default.aspx (what the probe recorded); with the session cookie and a Referer it serves an ASP.NET form with the Udyam number field and an image CAPTCHA. Reachable from outside India and from check-host nodes in the US, Germany and India. API Setu only offers the Udyam certificate as a consent-based DigiLocker pull."
   },
   "machineReadable": false,
   "useInCalendar": "A supplier's MSME status matters for the 45-day payment rule and the half-yearly MSME-1 return, but verification stays manual.",
   "ingestion": "None (CAPTCHA). Link out for users.",
   "priority": "P2"
  },
  {
   "id": "nse-corporate-events-api",
   "name": "NSE event calendar, board meeting and announcement APIs",
   "publisher": "National Stock Exchange of India",
   "url": "https://www.nseindia.com/api/event-calendar",
   "category": "entity-data",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Proprietary - exchange website terms of use",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 10 KB transferred; JSON list of 346. event-calendar returned 346 upcoming events (results, dividends); corporate-board-meetings returned 20 recent intimations; corporate-announcements returned 20 items - all without cookies."
   },
   "machineReadable": true,
   "useInCalendar": "Optional per-company results and board-meeting dates for a listed-company view; not statutory due dates.",
   "ingestion": "Only if a per-company view is built: GET daily /api/event-calendar, /api/corporate-board-meetings?index=equities and /api/corporate-announcements?index=equities; respect exchange terms.",
   "priority": "P2"
  },
  {
   "id": "ogd-mca-company-master",
   "name": "Registrars of Companies (RoC)-wise Company Master Data (resource 4dbe5667-7b6b-41d7-82af-211562424d9a)",
   "publisher": "Ministry of Corporate Affairs via OGD Platform India",
   "url": "https://www.data.gov.in/resource/registrars-companies-roc-wise-company-master-data",
   "category": "entity-data",
   "format": [
    "JSON",
    "CSV",
    "XML",
    "API"
   ],
   "access": "geo-blocked",
   "license": "GODL-India",
   "updates": "portal frequency 'Monthly'; metadata changed 2025-11-14 and 2026-06-11 per archived portal JSON, but the resource note still says data up to 3 Nov 2023",
   "reachable": {
    "status": 503,
    "checked": "2026-10-14",
    "note": "Catalogue URL re-probed at build: GET 503; text/html; 282 B transferred; HTML, 216 chars of visible text. Earlier check by the survey (status 0, may refer to a related endpoint): Resource id confirmed from an archived copy of the portal backend JSON (March 2026: uuid 4dbe5667-7b6b-41d7-82af-211562424d9a, catalog 'Company Master Data' ec58dab7-d891-4abb-936e-d5d274a6ce9b, created 2015-09-15) and from several 2026 open-source projects, one reporting 3,674,314 rows and another an updated_date of 2026-07-22. One unified resource filterable by CompanyROCcode; fields include CIN, CompanyName, CompanyStatus, CompanyClass, CompanyCategory, AuthorizedCapital, PaidupCapital, CompanyRegistrationdate_date, Registered_Office_Address, Listingstatus, CompanyStateCode and nic_code; exact-match filters only. Two projects treat non-CIN identifiers in it as LLPs, so LLP rows may be included (unverified). API connect timeout from here; a sample-key call returned 200 from the check-host Mumbai node."
   },
   "machineReadable": true,
   "useInCalendar": "Optional entity lookup: company class (private, public, OPC), status and incorporation date would select the right ROC filings (AOC-4, MGT-7/7A, DPT-3, MSME-1) and first-year AGM timing.",
   "ingestion": "Not feasible from GitHub-hosted runners. If an India-based job exists: page through with a personal key (about 3.7 M rows), keep CIN, name, class, status, incorporation date and state as a compressed CSV, refresh quarterly. Otherwise ask users for company type.",
   "priority": "P2"
  },
  {
   "id": "ogd-gst-statistics",
   "name": "GST portal statistics workbooks (registrations, GSTR-1 and GSTR-3B filing, state-wise collection, IGST settlement, e-way bills)",
   "publisher": "Goods and Services Tax Network (GSTN)",
   "url": "https://www.gst.gov.in/download/gststatistics",
   "category": "statistics",
   "format": [
    "XLSX",
    "PDF",
    "HTML"
   ],
   "access": "open",
   "license": "Unknown (government website; no explicit open licence)",
   "updates": "monthly (page LAST_UPDATED_DATE 10-10-2026; 2026-27 workbooks Last-Modified 2026-09-30)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "AngularJS page, but the download links are in the HTML and point to predictable files under https://tutorial.gst.gov.in/offlineutilities/gst_statistics/ (GSTR-3B-2026-2027.xlsx, GSTR-1-2026-2027.xlsx, statewise_GST_collection_2026-27.xlsx, Settlement-of-IGST-to-State-2026-2027.xlsx, ewb-data-2026-27.xlsx, Gross_Net_Tax_collection.xlsx, REGISTRATION.xlsx; one file per FY back to 2017-18). XLSX downloads returned 200 here and from check-host nodes in the US, Germany and India. The GSTR-3B sheet gives, per state, taxpayers eligible to file, filed by due date, filed after due date and total returns."
   },
   "machineReadable": true,
   "useInCalendar": "Annotate GSTR-1 and GSTR-3B deadlines with real on-time filing rates by state and month; registration counts as context.",
   "ingestion": "Monthly GitHub Action: build the current-FY filenames, GET the XLSX files, parse with openpyxl, emit small JSON (per month: eligible, on time, late); alert when a filename 404s because the naming pattern changed.",
   "priority": "P1"
  },
  {
   "id": "ogd-cbdt-direct-taxes-data",
   "name": "CBDT Direct Taxes Data (time series, collection updates, ITR and PAN statistics)",
   "publisher": "Central Board of Direct Taxes, Income Tax Department",
   "url": "https://www.incometaxindia.gov.in/direct-taxes-data",
   "category": "statistics",
   "format": [
    "PDF",
    "HTML"
   ],
   "access": "restricted",
   "license": "Unknown",
   "updates": "time series yearly (latest seen FY 2000-01 to 2024-25); collection updates roughly monthly; ITR and PAN statistics yearly",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "Akamai 'Access Denied' (403) here for both the new Liferay URL /direct-taxes-data and the old /Pages/Direct-Taxes-Data.aspx (the apex host 302s to www). check-host.net: 200 from Los Angeles, Dallas, Vancouver and Singapore nodes but 403 from Germany and a Mumbai datacenter, so blocking follows IP reputation rather than country and GitHub runners may or may not pass. Content is PDFs only, for example /documents/d/guest/final-time-series-data-pdf and 'Direct Tax Collections for F.Y. 2026-27 as on ...' notes."
   },
   "machineReadable": false,
   "useInCalendar": "Background only (advance-tax collection snapshots around 15 June, 15 September, 15 December and 15 March).",
   "ingestion": "Skip: PDF-only and unreliable from datacenter IPs.",
   "priority": "P2"
  },
  {
   "id": "ogd-data-gov-in-portal",
   "name": "Open Government Data (OGD) Platform India - catalog, search and backend JSON",
   "publisher": "National Informatics Centre (NIC), Ministry of Electronics and IT",
   "url": "https://www.data.gov.in/",
   "category": "statistics",
   "format": [
    "HTML",
    "JSON",
    "CSV",
    "XLSX"
   ],
   "access": "restricted",
   "license": "GODL-India",
   "updates": "varies per dataset; much of the catalog is one-off parliamentary-answer tables or years old",
   "reachable": {
    "status": 503,
    "checked": "2026-10-14",
    "note": "Every path tried (home, /search?title=holiday, /Godl, resource pages, /backend/dmspublic/v1/search JSON) returned an Akamai 503 'Reference #102' error page from this Canadian host. check-host.net nodes got 503 from Los Angeles, Dallas and Singapore and 403 from Germany, London, New York and a Mumbai datacenter node, so the portal also refuses datacenter traffic inside India. TLS chain verifies. Internet Archive captures in 2025-2026 are a mix of 200 and 403."
   },
   "machineReadable": true,
   "useInCalendar": "Dataset discovery only. No current central-government holiday list, bank holiday list, LLP master or EPFO payroll resource was found (checked the archived catalog index and public code that calls the API); the tax datasets found are one-off Rajya Sabha answer tables.",
   "ingestion": "Not usable from GitHub-hosted runners. For one-off discovery from an Indian residential connection, the site's own JSON search is GET /backend/dmspublic/v1/search?query=<q>&filters[type]=resources&filters[domain_visibility]=4&limit=10&offset=0, and resource metadata is GET /backend/dms/v1/resource/<slug>?_format=json, whose uuid field is the API resource id.",
   "priority": "P2"
  },
  {
   "id": "ogd-direct-tax-statewise",
   "name": "State/UT-wise Direct Tax Collection 2022-23 (resource e3b6c58c-0292-4b1b-b39a-8388a0d4a35b)",
   "publisher": "Ministry of Finance via OGD Platform India (Rajya Sabha Session 262, Unstarred Question 232, answered 5 Dec 2023)",
   "url": "https://www.data.gov.in/resource/stateut-wise-details-total-amount-direct-tax-collection-during-2022-23",
   "category": "statistics",
   "format": [
    "CSV",
    "JSON",
    "API"
   ],
   "access": "geo-blocked",
   "license": "GODL-India",
   "updates": "one-off; published 2024-08-27, metadata touched 2025-02-12",
   "reachable": {
    "status": 503,
    "checked": "2026-10-14",
    "note": "Catalogue URL re-probed at build: GET 503; text/html; 282 B transferred; HTML, 216 chars of visible text. Earlier check by the survey (status 0, may refer to a related endpoint): Resource uuid (catalog c87f45f9-6597-41c5-8125-28c5abf93116) read from an archived resource page dated 2026-08-12; columns Sl. No., State/UT, Gross Collection, Refund, Net Collection. No maintained CBDT direct-tax time series exists on data.gov.in; CBDT's own PDFs are on incometaxindia.gov.in (see ogd-cbdt-direct-taxes-data). API connect timeout from here."
   },
   "machineReadable": true,
   "useInCalendar": "None.",
   "ingestion": "Do not ingest.",
   "priority": "P2"
  },
  {
   "id": "ogd-epfo-members",
   "name": "Year-wise Members Registered under EPFO 2018-19 to 2022-23 (resource b42a6d71-554c-49ab-8495-7b08164d788c)",
   "publisher": "Ministry of Labour and Employment via OGD Platform India (Rajya Sabha Session 263, Unstarred Question 753, answered 8 Feb 2024)",
   "url": "https://www.data.gov.in/resource/year-wise-number-members-registered-under-employees-provident-fund-organisation-epfo-2018",
   "category": "statistics",
   "format": [
    "CSV",
    "JSON",
    "API"
   ],
   "access": "geo-blocked",
   "license": "GODL-India",
   "updates": "one-off; stale since April 2024",
   "reachable": {
    "status": 503,
    "checked": "2026-10-14",
    "note": "Catalogue URL re-probed at build: GET 503; text/html; 282 B transferred; HTML, 216 chars of visible text. Earlier check by the survey (status 0, may refer to a related endpoint): Resource uuid read from an archived resource page (April 2024). No EPFO monthly payroll resource was found on data.gov.in; EPFO's payroll PDFs live on epfindia.gov.in (see ogd-epfo-payroll). API connect timeout from here."
   },
   "machineReadable": true,
   "useInCalendar": "None.",
   "ingestion": "Do not ingest.",
   "priority": "P2"
  },
  {
   "id": "ogd-epfo-payroll",
   "name": "EPFO payroll data (monthly provisional payroll PDFs)",
   "publisher": "Employees' Provident Fund Organisation",
   "url": "https://www.epfindia.gov.in/site_en/Estimate_of_Payroll.php",
   "category": "statistics",
   "format": [
    "PDF",
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "monthly (files named site_docs/exmpted_est/Payroll_Data_EPFO_<Month>_<YYYY>.pdf; the archive shows releases through mid-2025)",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "epfindia.gov.in 301-redirects to www.epfo.gov.in, which serves a CloudFront 403 'Request blocked' page here, including for a direct payroll PDF; check-host.net nodes in the US, UK, Germany and Singapore also got 403, while the Mumbai node reached the origin (404 for this old page path, so the listing URL has changed). The Internet Archive fetched these PDFs with 200 in late 2025."
   },
   "machineReadable": false,
   "useInCalendar": "None directly; EPF due dates (ECR filing and payment by the 15th) come from the regulatory slice.",
   "ingestion": "Skip; geo-blocked from runners and PDF-only.",
   "priority": "P2"
  },
  {
   "id": "ogd-esankhyiki-api",
   "name": "MoSPI eSankhyiki portal, JSON API and MCP server",
   "publisher": "Ministry of Statistics and Programme Implementation (MoSPI)",
   "url": "https://esankhyiki.mospi.gov.in/",
   "category": "statistics",
   "format": [
    "JSON",
    "API",
    "HTML"
   ],
   "access": "open",
   "license": "Unknown (MoSPI asks for attribution 'Source: MoSPI'; no explicit open licence found)",
   "updates": "release-driven: CPI and IIP monthly, PLFS monthly and quarterly, NAS quarterly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Unauthenticated JSON at https://api.mospi.gov.in/api (for example /cpi/getCpiBaseYear, /rbi/getRbiIndicatorList, /wpi/getWpiBaseYear) answered 200 here; the portal also publishes llms.txt, ai-catalog.json and an MCP server at https://mcp.mospi.gov.in (tools list_datasets, get_indicators, get_metadata, get_data). TLS trap: api.mospi.gov.in needs legacy TLS renegotiation, and OpenSSL 3 clients (Python here, and check-host nodes in the US, Germany and India) fail with 'unsafe legacy renegotiation disabled', so stock Ubuntu runners will fail; it worked with Python ssl.OP_LEGACY_SERVER_CONNECT. Windows Schannel curl was unaffected."
   },
   "machineReadable": true,
   "useInCalendar": "Optional context such as CPI release dates or index values; not a source of compliance due dates.",
   "ingestion": "If used: monthly GET of specific indicator endpoints with an SSL context that sets OP_LEGACY_SERVER_CONNECT (or an OpenSSL config enabling UnsafeLegacyRenegotiation); cache JSON in the repo.",
   "priority": "P2"
  },
  {
   "id": "ogd-gst-collection-statewise",
   "name": "State/UT-wise Gross GST Collection 2020-21 to 2024-25 (resource 5d0b81aa-d513-4dfd-9f57-84571829c049)",
   "publisher": "Ministry of Finance via OGD Platform India (Rajya Sabha Session 266, Unstarred Question 881, answered 3 Dec 2024)",
   "url": "https://www.data.gov.in/resource/stateut-wise-details-gross-goods-and-service-tax-gst-collection-2020-21-2024-25",
   "category": "statistics",
   "format": [
    "CSV",
    "JSON",
    "API"
   ],
   "access": "geo-blocked",
   "license": "GODL-India",
   "updates": "one-off; 2024-25 only up to October 2024; metadata dated 2025-04-15",
   "reachable": {
    "status": 503,
    "checked": "2026-10-14",
    "note": "Catalogue URL re-probed at build: GET 503; text/html; 282 B transferred; HTML, 216 chars of visible text. Earlier check by the survey (status 0, may refer to a related endpoint): Resource uuid read from an archived copy of the resource page (October 2025); catalog 'Answers Data of Rajya Sabha Questions Session 266' (78889f83-0f96-484b-9fbc-5be92454446f). API connect timeout from here; a sample-key call returned 200 from the check-host Mumbai node. Typical of GST data on data.gov.in: parliamentary-answer snapshots, not a maintained series."
   },
   "machineReadable": true,
   "useInCalendar": "None; the GST portal's monthly statistics workbooks (ogd-gst-statistics) are fresher and reachable.",
   "ingestion": "Do not ingest; use ogd-gst-statistics.",
   "priority": "P2"
  },
  {
   "id": "ogd-gst-council",
   "name": "GST Council website - GST revenue page",
   "publisher": "GST Council Secretariat",
   "url": "https://gstcouncil.gov.in/gst-revenue",
   "category": "statistics",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "stale: linked revenue PDFs and newsletters were uploaded in February 2024 (latest revenue item September 2023)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Drupal site reachable from outside India; the revenue page links a handful of 2023 PDFs (a monthly revenue note, newsletters, early GST discussion papers). Not a live statistics source."
   },
   "machineReadable": false,
   "useInCalendar": "Not for statistics; the same site's Council meeting recommendations matter for the regulatory feed (other slice).",
   "ingestion": "Skip for statistics; use ogd-gst-statistics.",
   "priority": "P2"
  },
  {
   "id": "ogd-ndap",
   "name": "NITI Aayog National Data and Analytics Platform (NDAP)",
   "publisher": "NITI Aayog",
   "url": "https://ndap.niti.gov.in/",
   "category": "statistics",
   "format": [
    "JSON",
    "CSV",
    "XLSX",
    "API"
   ],
   "access": "login",
   "license": "GODL-India (portal cites NDSAP and GODL; attribute the source ministry)",
   "updates": "per dataset; 'Goods and Service Tax (GST) - Registration' (id 7103) shows LastUpdatedDate 2026-10-14, MCA 'Registration of New Companies' (id 3355) 2025-11-10",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "React shell on CloudFront; backend https://loadqa.ndapapi.com. Anonymous GET /v1/search/catalogue?query=gst returned 78 results when sent with Origin and Referer https://ndap.niti.gov.in; without those headers it answers Message 'Invalid Request', which is what the probe recorded. Dataset detail and download calls (POST /v1/dataset/details, /v1/dataset/download) answer 'Token Required' (Cognito login), and the open API (/v1/openapi/getdetails) needs an API key from a registered account. Collections include GST Statistics (returns, registrations, collections, e-way bills) and the MCA Monthly Information Bulletin; nothing on holidays."
   },
   "machineReadable": true,
   "useInCalendar": "Background statistics only (GST registrations and returns, monthly company registrations); no due dates.",
   "ingestion": "Optional: register, obtain an API key, POST /v1/openapi/getdetails per dataset id monthly. Not needed for v1.",
   "priority": "P2"
  },
  {
   "id": "ogd-rbi-dbie",
   "name": "RBI Database on Indian Economy (DBIE)",
   "publisher": "Reserve Bank of India",
   "url": "https://data.rbi.org.in/",
   "category": "statistics",
   "format": [
    "HTML",
    "XLSX",
    "CSV"
   ],
   "access": "open",
   "license": "Unknown (RBI asks users to credit 'Database on Indian Economy, Reserve Bank of India')",
   "updates": "daily to annual depending on series",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Angular single-page app (8 KB shell, no content without JavaScript); data calls go to /CIMS_Gateway_DBIE/GATEWAY/SERVICES and related gateways with client-side crypto, and no documented public API was found. Reachable from outside India."
   },
   "machineReadable": false,
   "useInCalendar": "Low: reference rates or policy-rate history for context; RBI due dates come from RBI notifications (regulatory slice).",
   "ingestion": "Not recommended; manual download of specific tables if ever needed.",
   "priority": "P2"
  },
  {
   "id": "ogd-udyam-district-msme",
   "name": "District-wise Total MSME Registered Enterprises under Udyam Registration (resource f8cd85a1-f9b8-4ff1-b195-9f75c10eb338)",
   "publisher": "Ministry of Micro, Small and Medium Enterprises via OGD Platform India",
   "url": "https://www.data.gov.in/resource/district-wise-total-msme-registered-enterprises-under-udyam-registration-till-last-date",
   "category": "statistics",
   "format": [
    "JSON",
    "CSV",
    "API"
   ],
   "access": "geo-blocked",
   "license": "GODL-India",
   "updates": "rolling cumulative counts; a third-party API response shows updated_date 2026-08-13",
   "reachable": {
    "status": 503,
    "checked": "2026-10-14",
    "note": "Catalogue URL re-probed at build: GET 503; text/html; 282 B transferred; HTML, 216 chars of visible text. Earlier check by the survey (status 0, may refer to a related endpoint): Resource id and the sibling services-only resource c3dfe7e6-0cfd-4ddb-8f79-9cb3695d9866 come from open-source projects that called the API in 2026 (788 rows: state_name, state_id, district_name, lg_dt_code as an LGD district code, micro, small, medium, total; catalog uuid 0536e86e-3751-4054-84e5-e257d4c94477). API connect timeout from here; a sample-key call returned 200 from the check-host Mumbai node."
   },
   "machineReadable": true,
   "useInCalendar": "Context only (MSME density by district); adds no dates.",
   "ingestion": "Skip for v1; if wanted later, a quarterly pull from an India-based job into a static CSV.",
   "priority": "P2"
  },
  {
   "id": "bse-json-api",
   "name": "BSE JSON API (api.bseindia.com)",
   "publisher": "BSE Ltd",
   "url": "https://api.bseindia.com/BseIndiaAPI/api/Corpforthresults/w",
   "category": "api",
   "format": [
    "JSON",
    "API"
   ],
   "access": "geo-blocked",
   "license": "Proprietary - exchange website terms of use",
   "updates": "daily",
   "reachable": {
    "status": 403,
    "checked": "2026-10-14",
    "note": "GET 403; text/html; 414 B transferred; block page: Access Denied; HTML, 334 chars of visible text. Akamai 403 'Access Denied' for Corpforthresults, AnnSubCategoryGetData and a guessed holiday endpoint, with and without Referer/Origin headers."
   },
   "machineReadable": true,
   "useInCalendar": "Forthcoming results, announcements and other market data (if reachable).",
   "ingestion": "Not usable from outside India; use the BSE RSS feeds and NSE APIs instead.",
   "priority": "P2"
  },
  {
   "id": "it-efiling-eri-api",
   "name": "e-Filing API specifications (ERI and third-party APIs)",
   "publisher": "Income Tax Department - e-Filing portal",
   "url": "https://www.incometax.gov.in/iec/foportal/api-specifications",
   "category": "api",
   "format": [
    "HTML",
    "PDF",
    "API"
   ],
   "access": "restricted",
   "license": "Unknown - GoI website",
   "updates": "occasional",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 28 KB transferred; HTML, 7248 chars of visible text. Public page listing the API specification documents."
   },
   "machineReadable": false,
   "useInCalendar": "Documents the APIs open only to registered e-Return Intermediaries; explains why PAN-level data stays out of scope for a public static site.",
   "ingestion": "Reference only - the APIs need ERI registration, client credentials and taxpayer consent.",
   "priority": "P2"
  },
  {
   "id": "ogd-api-setu-directory",
   "name": "API Setu - Government of India API directory",
   "publisher": "National e-Governance Division (NeGD), Ministry of Electronics and IT",
   "url": "https://directory.apisetu.gov.in/",
   "category": "api",
   "format": [
    "JSON",
    "YAML",
    "HTML",
    "API"
   ],
   "access": "restricted",
   "license": "Proprietary (API Setu terms of use; OpenAPI specs are public)",
   "updates": "continuous (a GSTN registration-certificate collection was added 2026-09-21)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Next.js directory; its search JSON (/api/list?q=<JSON>) works after fetching one-time headers from /api/auth/generate-headers. Compliance-relevant listings: GSTN Tax Payer Details API v1/v2 (GET /gstn/v2/taxpayers/{gstin}) and GST registration certificate (OTP flow); Income Tax Department Organization PAN Verification API (POST /verify/v1/pan/org) and Track PAN; MSME Udyam Certificate and EPFO UAN Card as DigiLocker document pulls that need the holder's consent. No MCA company-master, eCourts or CBDT statistics API is listed. Specs sit on cf-media.api-setu.in (gstn-v2.yaml: server https://apisetu.gov.in, headers X-APISETU-CLIENTID and X-APISETU-APIKEY)."
   },
   "machineReadable": true,
   "useInCalendar": "Shows which official verification APIs exist; none can be called from a public static site.",
   "ingestion": "No scheduled ingestion. A future backend would onboard as an API Setu consumer (organisation registration, per-API access approved by the publisher, client id and API key kept server-side).",
   "priority": "P2"
  },
  {
   "id": "ogd-data-gov-in-api",
   "name": "OGD Platform India REST API (api.data.gov.in)",
   "publisher": "National Informatics Centre (NIC), Ministry of Electronics and IT",
   "url": "https://api.data.gov.in/resource/{resource-id}?api-key={key}&format=json&limit=10",
   "category": "api",
   "format": [
    "JSON",
    "CSV",
    "XML",
    "API"
   ],
   "access": "geo-blocked",
   "license": "GODL-India",
   "updates": "per resource",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "api.data.gov.in resolves to 164.100.61.198 (NIC) but TCP connects on 443 and 80 time out from this host; check-host.net nodes in the US, UK, Germany and Singapore got 'no route to host', 'connection refused' or timeouts. From the check-host Mumbai node the documented sample key 579b464db66ec23bdd000001cdd3946e44ce4aad7209ff7b23ac571b returned HTTP 200, a bogus key 403 and no key 400, so the sample key is accepted from India. A made-up resource id also returned 200, so a 200 alone does not prove a resource exists. Open-source projects report the sample key caps responses at 10 records and is rate-limited (HTTP 429); personal keys need a data.gov.in account."
   },
   "machineReadable": true,
   "useInCalendar": "Indirect only: entity enrichment (MCA company master) and context statistics. Nothing date-critical depends on it.",
   "ingestion": "Needs an India-hosted job or proxy: GET /resource/<id>?api-key=<personal key>&format=json&limit=1000&offset=N until offset >= total, tolerate empty pages mid-run (a reported quirk), and use exact-match keyword filters (filters[Field]=VALUE). Do not ship the shared sample key.",
   "priority": "P2"
  },
  {
   "id": "gh-kskarthik-gstfeed",
   "name": "gstfeed - GST portal news and updates as an Atom feed",
   "publisher": "kskarthik",
   "url": "https://github.com/kskarthik/gstfeed",
   "category": "open-source",
   "format": [
    "Atom",
    "JSON",
    "TypeScript"
   ],
   "access": "open",
   "license": "GPL-3.0",
   "updates": "code last changed 2024-11-27, but the scheduled 'Refresh Feed' workflow is active and last succeeded 2026-10-14 (runs every 12 hours)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "https://kskarthik.github.io/gstfeed/feed.xml 200 application/xml (41 KB, 20 entries, newest 2026-10-13, Last-Modified 2026-10-14, CORS *); upstream https://www.gst.gov.in/fomessage/newsupdates 200 application/json (33 KB, 20 items with id, title, module, content HTML, date DD/MM/YYYY, linkURl; CORS *); raw main.ts 200"
   },
   "machineReadable": true,
   "useInCalendar": "GSTN portal news and advisories (returns, e-invoice, GSTR-9/9C enablement, due-date extension advisories) for the GST part of the regulatory-updates feed. Its main value is revealing the portal's JSON endpoint.",
   "ingestion": "Poll the upstream GST portal JSON directly at build time every 6-12 hours, build links as https://www.gst.gov.in/newsandupdates/read/<id>, keep id/title/date/module and strip the HTML body. Use the GitHub Pages Atom feed only as a fallback: the GPL covers the script, and the feed depends on one maintainer's workflow staying enabled.",
   "priority": "P0"
  },
  {
   "id": "gh-sushant354-egazette",
   "name": "egazette - Gazette of India and state gazette downloader (archive.org gazetteofindia collection)",
   "publisher": "sushant354 (Sushant Sinha, Indian Kanoon)",
   "url": "https://github.com/sushant354/egazette",
   "category": "open-source",
   "format": [
    "Python",
    "JSON",
    "RSS",
    "PDF"
   ],
   "access": "open",
   "license": "Apache-2.0",
   "updates": "active - last push 2026-10-11 (34 stars); archive.org uploads are continuous, newest item uploaded 2026-10-14 23:57 UTC",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw srcs/central.py 200 (18 KB); archive.org advancedsearch JSON 200 with CORS * (collection:gazetteofindia 866,902 items; identifier in.gazette.central* 212,640 items); collection RSS 200 (50 newest items, all 2026-10-14); a description:\"Department of Revenue\" filter returned 12,586 central items, newest a CBDT notice dated 2026-10-08 (Income-tax Form No. 161 amendment after Finance Act 2026) uploaded 2026-10-09"
   },
   "machineReadable": true,
   "useInCalendar": "Regulatory-updates feed straight from the Gazette: central extraordinary and weekly gazettes whose item metadata carries Ministry, Department, Subject, Office and Gazette ID, so items can be filtered to CBDT, CBIC, Ministry of Corporate Affairs, Ministry of Labour and Employment, etc. Also about 35 state gazettes, useful for state holiday, PT and LWF notifications.",
   "ingestion": "Daily build job: query archive.org advancedsearch (q=collection:gazetteofindia AND identifier:in.gazette.central* plus a recent date range; fields identifier, title, date, description), parse Ministry/Department/Subject/Office out of the description HTML, link to the archive.org item and the egazette.gov.in source. Filter and sort on the gazette date, not publicdate, because old backfills are uploaded too (2019 items appeared in 2026-09). Store only metadata and links. We do not need to run egazette itself. NakliTechie/sansadsaar-gazettes (no license) publishes a derived daily JSON index of the same central corpus.",
   "priority": "P0"
  },
  {
   "id": "gh-vacanza-holidays",
   "name": "holidays (python-holidays) - India, NSE and BSE calendars",
   "publisher": "vacanza",
   "url": "https://github.com/vacanza/holidays",
   "category": "open-source",
   "format": [
    "Python",
    "JSON"
   ],
   "access": "open",
   "license": "MIT",
   "updates": "active - last push 2026-10-14; PyPI 0.106 released 2026-10-05, releases roughly every two weeks",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw snapshots/countries/IN_COMMON.json 200 (119 KB, flat date-to-name map 1950-2050); IN_MH.json 200 (130 KB); snapshots/financial/XNSE.json and XBOM.json 200 (21 KB, 2001-2050); holidays/countries/india.py 200 (62 KB); jsDelivr mirror (also pinned @v0.106) 200 application/json with CORS *; PyPI JSON 200 (0.106, MIT, Python >=3.10)"
   },
   "machineReadable": true,
   "useInCalendar": "Backbone for central and state public holidays: India module at holidays/countries/india.py covers all 36 states/UTs (codes AN..WB; TS for Telangana with TG alias, OD Odisha, UK Uttarakhand, DH for merged DNH and DD), categories PUBLIC, GOVERNMENT, OPTIONAL (restricted) and OPTIONAL_WOMEN (Himachal), from 1948, names in 11 languages. Also ships NSE (XNSE, holidays/financial/national_stock_exchange_of_india.py) and BSE (XBOM, subclass of NSE) trading-holiday calendars from 2001. ERPNext's Holiday List uses this package.",
   "ingestion": "Build time in GitHub Actions: pip install a pinned holidays version, generate per-state JSON for the current and next year with explicit categories (the committed snapshot files merge all categories, so they cannot separate gazetted from restricted days). Raw or jsDelivr snapshot JSON is a zero-code fallback for prototyping. Label future lunar and Islamic dates as provisional until DoPT/state notifications confirm them (the library itself tags some as '(estimated)'). Caveats found: XNSE misses ad-hoc closures (2026-01-15 Maharashtra municipal election closure is absent, while the NSE API and pandas_market_calendars have it), XNSE omits weekend holidays, and India has no bank/NI Act category. Bump the pin on each release via Dependabot.",
   "priority": "P0"
  },
  {
   "id": "gh-akshay93aditya-compliance-grid",
   "name": "Compliance Grid - India regulatory source index and obligations graph",
   "publisher": "akshay93aditya",
   "url": "https://github.com/akshay93aditya/compliance-grid",
   "category": "open-source",
   "format": [
    "YAML",
    "JSONL",
    "TypeScript"
   ],
   "access": "open",
   "license": "CC0-1.0 (data) AND MIT (code)",
   "updates": "slow - v0.1.0 public release 2026-06-08 (last main commit), last push 2026-08-31 (6 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw sources/IN-AP/tax/apct-gov-in.yaml 200 (1 KB source card); seed/IN-KA/labour/obligations.jsonl 200 (150 KB, 163 Karnataka labour-code obligations with frequency, deadline_rule, penalty, source_refs, confidence); DATA-LICENSE.md 200 (CC0 for sources/ and seed/)"
   },
   "machineReadable": true,
   "useInCalendar": "CC0 registry of 436 official source portals (159 central, the rest per state/UT) across tax, labour, legal, industry and other domains, with fetch-recipe and access-status notes; directly useful for building our state PT/LWF/labour and gazette source lists. The Karnataka seed shows one way to structure labour-code (OSH Rules 2021) obligations with deadline rules.",
   "ingestion": "Vendor the sources/**/*.yaml index as the seed of our source registry (CC0, no attribution needed) and re-sync monthly. Treat the obligations as unverified: they carry machine-extraction confidence scores and cover only Karnataka labour rules.",
   "priority": "P1"
  },
  {
   "id": "gh-crmleaf-payroll-core",
   "name": "CRMLeaf payroll-core rate tables - state professional tax slabs and payroll due dates",
   "publisher": "CrmLeaf",
   "url": "https://github.com/CrmLeaf/payroll-core",
   "category": "open-source",
   "format": [
    "JSON",
    "PHP"
   ],
   "access": "open",
   "license": "MIT",
   "updates": "recent - last commit 2026-08-13 (0 stars); sibling CrmLeaf/payroll-js pushed 2026-10-13",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw resources/rates/professional-tax.json 200 (12 KB; 18 states, slabs in paise, frequency, special_month, gender_exemption, versioned effective_from 2025-04-01); resources/rates/compliance-calendar.json 200 (7 KB; 13 recurring obligations: PF_ECR, ESI_PAY, TDS_PAY, 24Q, Form 16, GSTR-1, GSTR-3B, PT_PAY, advance tax, ITR non-audit/audit, tax audit, LWF)"
   },
   "machineReadable": true,
   "useInCalendar": "The only permissively licensed, machine-readable PT slab table found, with a versioned schema (effective_from/effective_to) worth copying for our own data. The due-date file is a usable seed for payroll obligations.",
   "ingestion": "Seed, then verify: vendor a pinned copy with attribution (MIT) or fetch the raw JSON at build time. Caveats: compiled 'as at FY 2025-26' by a small vendor; the calendar still cites Income-tax Rules 1962 and the 1961 Act, so TDS and ITR rules must be re-based on the Income-tax Act 2025 for FY 2026-27; PT_PAY is a flat 20th for every state, which is wrong for several states; no coverage for some PT states such as Manipur, Mizoram and Nagaland.",
   "priority": "P1"
  },
  {
   "id": "gh-frappe-india-payroll",
   "name": "India Payroll (Frappe HR extension) - PT and LWF state tables",
   "publisher": "frappe",
   "url": "https://github.com/frappe/india-payroll",
   "category": "open-source",
   "format": [
    "Python"
   ],
   "access": "open",
   "license": "GPL-3.0",
   "updates": "active - last push 2026-10-13 (24 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw india_payroll/india_payroll/professional_tax.py 200 (14 KB; STATE_PT_CONFIG for 16 states with monthly, half-yearly or yearly slabs, February/March top-up months, Maharashtra women exemption, optional dated revisions); lwf.py 200 (4.5 KB; LWF_STATE_CONFIG for 16 states/UTs 'as of May 2026' with employee/employer amounts and monthly, half-yearly or annual frequency)"
   },
   "machineReadable": true,
   "useInCalendar": "This is where Frappe keeps PT and LWF data (not frappe/hrms, not india-compliance). It tells us which states levy PT/LWF and the deduction frequency, which drives when PT/LWF items appear (for example June/December half-yearly LWF states, December-only annual states).",
   "ingestion": "Reference only: GPL-3.0 with no separate data license, and the data is Python dicts. Use it to cross-check our own state PT/LWF table built from state notifications, and watch commits to these two files as a signal that a state changed rates. It holds amounts, not due dates; due-date rules still need state sources.",
   "priority": "P1"
  },
  {
   "id": "gh-parinshahaibuilder-indian-compliance-calendar",
   "name": "indian-compliance-calendar - SEBI LODR, MCA, LLP, tax and labour due-date rules",
   "publisher": "parinshahAIbuilder",
   "url": "https://github.com/parinshahAIbuilder/indian-compliance-calendar",
   "category": "open-source",
   "format": [
    "JavaScript",
    "Markdown"
   ],
   "access": "open",
   "license": "MIT",
   "updates": "active - last push 2026-10-05 (1 star, new project)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw assets/app/lib/master.js 200 (34 KB; about 60 compliance templates with kind Q/H/A/M/E, regulation reference, timeline text, due-date functions, BSE auto-detect rules, 8 items flagged verify:true); references/data-sources.md 200 (7 KB, documents BSE/NSE/SEBI endpoints and blocking behaviour)"
   },
   "machineReadable": false,
   "useInCalendar": "Closest existing analogue to this product. Rules for SEBI LODR equity and debt (Reg 14, 24A, 27(2) and 13(3) integrated filing, 29, 30, 31, 34, 40(9), 44(3), BRSR, debt Regs 52/53/54/57), SEBI PIT/SAST/DP/ICDR, Companies Act forms (AOC-4, MGT-7, ADT-1, DIR-3 KYC, DPT-3, MSME-1, PAS-6, CSR-2, CRA-2/CRA-4, MBP-1, MGT-15, MR-3, AGM), LLP-8/LLP-11, and GSTR-1/3B/9, TDS payment and returns, advance tax, ITR, tax audit, PF/ESI. Its notes record that BSE APIs sit behind Akamai and started blocking non-browser clients in Oct 2026, and that NSE needs a session cookie.",
   "ingestion": "Port the rule set into our own data format with attribution (MIT) and verify each rule against the cited regulation, starting with the verify:true items. It is code (JS functions), not a data file, so there is nothing to poll; watch the repo and re-diff master.js on new commits.",
   "priority": "P1"
  },
  {
   "id": "gh-resilient-tech-india-compliance",
   "name": "India Compliance (Frappe/ERPNext app) - GST and TDS reference data",
   "publisher": "resilient-tech",
   "url": "https://github.com/resilient-tech/india-compliance",
   "category": "open-source",
   "format": [
    "JSON",
    "Python"
   ],
   "access": "open",
   "license": "GPL-3.0",
   "updates": "active - last push 2026-10-14 (274 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw income_tax_india/data/tds_details.json 200 (67 KB, 127 TDS category rows keyed to Income-tax Act 2025 sections 392/393 with rates effective 2026-04-01 to 2027-03-31); gst_india/data/hsn_codes.json 200 (4.2 MB, 18,687 HSN/SAC rows); gst_india/constants/__init__.py 200 (45 KB: STATE_NUMBERS GST state codes, STATE_PINCODE_MAPPING, PORT_CODES, UOMs, GSTIN regexes); income_tax_india/constants/__init__.py 200 (OLD_TDS_SECTIONS and NEW_TDS_SECTIONS with 4-digit section codes from 1001)"
   },
   "machineReadable": true,
   "useInCalendar": "Reference for TDS section labels under the new Act (old 194x sections to new 392/393 table entries with section codes) and for GST state codes; tds_details_old.json covers the 1961 Act. It ships no due-date or holiday data: GST returns are handled only through return-period keys (MMYYYY).",
   "ingestion": "Reference only: GPL-3.0 with no separate data license, so do not copy the JSON into an MIT site. Cross-check our own TDS section table compiled from CBDT notifications against it, and use commits to tds_details.json as a change signal (repo commits Atom feed).",
   "priority": "P1"
  },
  {
   "id": "gh-rsheftel-pandas-market-calendars",
   "name": "pandas_market_calendars - NSE and BSE exchange calendars",
   "publisher": "rsheftel",
   "url": "https://github.com/rsheftel/pandas_market_calendars",
   "category": "open-source",
   "format": [
    "Python"
   ],
   "access": "open",
   "license": "MIT",
   "updates": "active - last push 2026-10-05; PyPI 5.5.0 released 2026-10-05 (1.0k stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw pandas_market_calendars/holidays/nse.py 200 (18 KB, hardcoded NSE closed days 1996-2026); calendars/bse.py 200 (20 KB, BSE list with per-date comments such as 2026-01-15 Maharashtra Municipal Elections); PyPI JSON 200"
   },
   "machineReadable": true,
   "useInCalendar": "Independent cross-check of NSE and BSE trading holidays, including ad-hoc closures (it has 2026-01-15, which vacanza lacks) and special sessions such as Muhurat trading.",
   "ingestion": "Extract the date literals from holidays/nse.py and calendars/bse.py with a regex at build time (no import needed), diff against the NSE holiday-master API and alert on mismatch. No 2027 data yet; NSE usually publishes next year's list in December and maintainers add it afterwards.",
   "priority": "P1"
  },
  {
   "id": "gh-aeron7-nsepython",
   "name": "nsepython - unofficial NSE API wrapper",
   "publisher": "aeron7",
   "url": "https://github.com/aeron7/nsepython",
   "category": "open-source",
   "format": [
    "Python"
   ],
   "access": "open",
   "license": "GPL-3.0",
   "updates": "active - last push 2026-10-07; PyPI 2.101 on 2026-10-07 (370 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw nsepython/rahu.py 200 (131 KB); nse_holidays() and holiday_master() call https://www.nseindia.com/api/holiday-master with type=trading or type=clearing, and its comments note that any other type returns an empty 200"
   },
   "machineReadable": true,
   "useInCalendar": "Endpoint documentation for NSE trading and clearing holidays; same data as jugaad-data.",
   "ingestion": "Reference only (GPL-3.0). Call the NSE endpoint ourselves.",
   "priority": "P2"
  },
  {
   "id": "gh-commenthol-date-holidays",
   "name": "date-holidays (npm) - India data",
   "publisher": "commenthol",
   "url": "https://github.com/commenthol/date-holidays",
   "category": "open-source",
   "format": [
    "YAML",
    "JavaScript"
   ],
   "access": "open",
   "license": "ISC AND CC-BY-SA-3.0",
   "updates": "active - last push 2026-09-20; npm 3.37.0 published 2026-09-20 (1.1k stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw data/countries/IN.yaml 200 (16.7 KB); LICENSE 200 (holiday data CC BY-SA 3.0 from Wikipedia, code ISC); npm registry JSON 200 (latest 3.37.0, license field '(ISC AND CC-BY-3.0)', which disagrees with the LICENSE file)"
   },
   "machineReadable": true,
   "useInCalendar": "Very thin for India: 6 national fixed-date days (Republic Day, Ambedkar Jayanti, Good Friday, Independence Day, Gandhi Jayanti, Christmas) plus mostly fixed-date state days for 35 region codes. No Diwali, Holi, Eid or other lunar festivals; uses outdated codes (OR, UT, CT, separate DD/DN) and has no JH or LA.",
   "ingestion": "Do not use as an India source. Share-alike data would push CC BY-SA terms onto any derived holiday dataset we publish, and the license metadata is inconsistent. Reference only.",
   "priority": "P2"
  },
  {
   "id": "gh-drona-jadhav7-holidaylens",
   "name": "HolidayLens - official holiday reference sets and python-holidays audit tool",
   "publisher": "Drona-jadhav7",
   "url": "https://github.com/Drona-jadhav7/HolidayLens",
   "category": "open-source",
   "format": [
    "CSV",
    "Python"
   ],
   "access": "open",
   "license": "MIT",
   "updates": "active - last push 2026-10-06 (0 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw data/official/IN/bank/2026.csv 200 (2 KB; date, name, category, source, citing RBI HolidayMatrixDisplay); data/official/IN/stock/2026.csv 200 (2 KB, citing the NSE holidays page); 2026 CSVs also exist for IN/AS, IN/MH, IN/MP, IN/UK"
   },
   "machineReadable": true,
   "useInCalendar": "Small hand-checked 2026 reference sets with per-row source URLs, plus a CLI that diffs official lists against python-holidays and reports MISSING/EXTRA days - a ready QA pattern for our holiday pipeline.",
   "ingestion": "Do not ingest the data (one year, a handful of states). Reuse the approach or the MIT code to run a yearly diff between our generated holidays and official notifications.",
   "priority": "P2"
  },
  {
   "id": "gh-frappe-hrms",
   "name": "Frappe HR (hrms) - India regional data",
   "publisher": "frappe",
   "url": "https://github.com/frappe/hrms",
   "category": "open-source",
   "format": [
    "JSON",
    "Python"
   ],
   "access": "open",
   "license": "GPL-3.0",
   "updates": "active - last push 2026-10-14 (8.9k stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw hrms/regional/india/data/salary_components.json 200 (1.2 KB, six salary components including a 'Professional Tax' placeholder; no slabs)"
   },
   "machineReadable": true,
   "useInCalendar": "Nothing direct. India data is limited to salary component names, a standard gratuity rule and an income-tax-slab doctype; PT and LWF slabs live in frappe/india-payroll. Holiday lists are user-maintained.",
   "ingestion": "Skip; use frappe/india-payroll as the PT/LWF reference.",
   "priority": "P2"
  },
  {
   "id": "gh-gerrymanoim-exchange-calendars",
   "name": "exchange_calendars - XBOM (BSE) calendar",
   "publisher": "gerrymanoim",
   "url": "https://github.com/gerrymanoim/exchange_calendars",
   "category": "open-source",
   "format": [
    "Python"
   ],
   "access": "open",
   "license": "Apache-2.0",
   "updates": "active - last push 2026-10-12; PyPI 4.13.2 released 2026-03-10 (680 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw exchange_calendars/exchange_calendar_xbom.py 200 (12.6 KB; precomputed BSE holiday list through 2026, includes 2026-01-15); PyPI JSON 200"
   },
   "machineReadable": true,
   "useInCalendar": "A third opinion for BSE closures; there is no separate NSE calendar (XBOM only).",
   "ingestion": "Optional regex extraction of the XBOM date list for a three-way diff with the NSE API and pandas_market_calendars. Low marginal value; the data is just dates.",
   "priority": "P2"
  },
  {
   "id": "gh-jugaad-py-jugaad-data",
   "name": "jugaad-data - NSE/BSE data library (documents the NSE holiday API)",
   "publisher": "jugaad-py",
   "url": "https://github.com/jugaad-py/jugaad-data",
   "category": "open-source",
   "format": [
    "Python",
    "JSON"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "active - last push 2026-10-06; PyPI 0.35.10 on 2026-10-06 (585 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw jugaad_data/nse/live.py 200 (15 KB) maps holiday_list to /api/holiday-master?type=trading on www.nseindia.com. That endpoint answered 200 application/json (34 KB; segments CBM, CD, CM, CMOT, COM, EGR, FO, IRD, MF, NDM, NTRP, SLBS; CM has 20 rows for 2026 including the 15-Jan election closure and weekend holidays) with a browser user agent and no cookie warm-up; type=clearing also 200 (24 KB). CORS is limited to nseindia.com."
   },
   "machineReadable": true,
   "useInCalendar": "Points to the official NSE trading and clearing holiday API, which is the primary source for NSE holidays. Fields: tradingDate (DD-Mon-YYYY), weekDay, description, morning_session, evening_session, Sr_no. The companion jugaad-py/master-data repo (holidays.csv) has been stale since 2020.",
   "ingestion": "Do not depend on the library: its license is LICENSE.YOLO.md (PyPI says 'YOLO'), which is not an OSI license. Call the NSE endpoint directly at build time (not from the browser, because of CORS), keeping a cookie warm-up as fallback in case NSE starts rejecting cold requests. Re-fetch weekly and in mid-December for next year's list.",
   "priority": "P2"
  },
  {
   "id": "gh-mahatosoftware-indianbankholidaycalendar",
   "name": "Indian Bank Holiday Calendar app data (RBI 2026 scrape and captured RBI XHR responses)",
   "publisher": "mahatosoftware",
   "url": "https://github.com/mahatosoftware/IndianBankHolidayCalendar",
   "category": "open-source",
   "format": [
    "JSON"
   ],
   "access": "open",
   "license": "None (no licence file - all rights reserved by default)",
   "updates": "recent - last push 2026-09-02",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw assets/2026.json 200 (438 KB; 3,279 rows of state, region, date, holiday_name for 34 RBI regional offices, about 2,584 of them Sundays or 2nd/4th Saturdays). The repo also holds captured RBI XHR responses showing the RBI site's JSON shape: legends 'Holiday under Negotiable Instruments Act', the same 'and Real Time Gross Settlement Holiday', and 'Banks' Closing of Accounts Holiday'; 30 state/office entries; years 2001-2026."
   },
   "machineReadable": true,
   "useInCalendar": "Cross-check for 2026 bank holidays per RBI regional office, and evidence that RBI's site has a JSON holiday API separating NI Act, RTGS and closing-of-accounts holidays.",
   "ingestion": "Reference only (no license). Go to RBI directly: the legacy https://www.rbi.org.in/Scripts/HolidayMatrixDisplay.aspx answered 200 (136 KB HTML, ASP.NET postback form), while https://website.rbi.org.in/web/rbi/bank-holidays now redirects to the www.rbi.org.in home page, so the captured XHR paths need re-discovery.",
   "priority": "P2"
  },
  {
   "id": "gh-mohitgoyal09-india-merchant-data-api",
   "name": "india-merchant-data-api - RBI holiday matrix scraper",
   "publisher": "MohitGoyal09",
   "url": "https://github.com/MohitGoyal09/india-merchant-data-api",
   "category": "open-source",
   "format": [
    "Python"
   ],
   "access": "open",
   "license": "None (no licence file - all rights reserved by default)",
   "updates": "active - last push 2026-10-02 (new project)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw src/imda/sources/rbi/holidays.py 200 (11.6 KB): ASP.NET postback scraper for https://www.rbi.org.in/Scripts/HolidayMatrixDisplay.aspx with matrix and office-list modes, marker parsing for NI Act vs RTGS-only days and completeness checks; tests include fixtures for 2026-03, 2026-04, 2026-10 and Mumbai 2026"
   },
   "machineReadable": false,
   "useInCalendar": "The best-documented approach found for scraping RBI bank holidays by regional office, including the NI Act vs RTGS distinction.",
   "ingestion": "Reference only (no license). Re-implement the postback flow ourselves and refresh monthly, since RBI updates the matrix during the year.",
   "priority": "P2"
  },
  {
   "id": "gh-nager-nager-date",
   "name": "Nager.Date public holiday API",
   "publisher": "nager",
   "url": "https://github.com/nager/Nager.Date",
   "category": "open-source",
   "format": [
    "JSON",
    "C#"
   ],
   "access": "open",
   "license": "MIT",
   "updates": "active - last push 2026-10-14 (1.4k stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "Catalogue URL re-probed at build: GET 200; text/html; 58 KB transferred; HTML, 38795 chars of visible text. Earlier check by the survey (status 204, may refer to a related endpoint): API /api/v3/PublicHolidays/2026/IN returned 204 No Content; /api/v3/AvailableCountries 200 lists 204 countries without IN; none of the 214 HolidayProviders is for India (raw src/Nager.Date/CountryCode.cs 200)"
   },
   "machineReadable": true,
   "useInCalendar": "None - India is not supported.",
   "ingestion": "Do not use. Listed so it is not proposed again; drop it from smoke and probe lists.",
   "priority": "P2"
  },
  {
   "id": "gh-peopleandlaws-compliance-calendar-csv",
   "name": "peopleandlaws compliance-calendar-csv - state labour return calendars",
   "publisher": "peopleandlaws",
   "url": "https://github.com/peopleandlaws/compliance-calendar-csv",
   "category": "open-source",
   "format": [
    "CSV"
   ],
   "access": "open",
   "license": "None (no licence file - all rights reserved by default)",
   "updates": "stale - last push 2025-09-01",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw shops/shops_karnataka.csv 200 (3 KB) and factories/factories_maharashtra.csv 200 (3 KB); 74 CSVs (factories and shops for 37 states/UTs) with columns State, Business, Laws, Jan..Dec holding free-text cells such as 'Annual return by 30-May'"
   },
   "machineReadable": true,
   "useInCalendar": "Month-by-month state labour filings per state: PT annual returns, LWF statements, ESI/EPF challans, shops and factories returns, ER-1/ER-2 employment exchange returns.",
   "ingestion": "Cross-check only: there is no license file (all rights reserved by default), so do not copy. It cites pre-Labour-Code central Acts (Payment of Wages Act 1936, Minimum Wages Act 1948 and others) that the four Labour Codes replaced from 21 Nov 2025, so many rows are outdated. The companion peopleandlaws/minimum-wages-india repo (per-state wage CSVs) is also unlicensed.",
   "priority": "P2"
  },
  {
   "id": "gh-razorpay-ifsc",
   "name": "Razorpay IFSC dataset",
   "publisher": "razorpay",
   "url": "https://github.com/razorpay/ifsc",
   "category": "open-source",
   "format": [
    "JSON",
    "CSV"
   ],
   "access": "open",
   "license": "MIT",
   "updates": "active - release v2.0.62 on 2026-09-01, last push 2026-10-04 (395 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw src/banks.json 200 (299 KB); release asset IFSC.json 200 application/octet-stream (1.09 MB); IFSC.csv is 36 MB in the release; hosted API https://ifsc.razorpay.com/<IFSC> 200 JSON"
   },
   "machineReadable": true,
   "useInCalendar": "Tangential. The bank master (names, codes, NEFT/RTGS/IMPS/UPI flags) could label bank-holiday content, but a due-date calendar does not need branch data.",
   "ingestion": "Not needed for v1. If wanted, pull banks.json from the latest release monthly; the README states the code is MIT and the dataset itself is public domain.",
   "priority": "P2"
  },
  {
   "id": "gh-refrens-gst-states",
   "name": "gst-states - GST state code map",
   "publisher": "refrens",
   "url": "https://github.com/refrens/gst-states",
   "category": "open-source",
   "format": [
    "JSON"
   ],
   "access": "open",
   "license": "MIT",
   "updates": "active - last push 2026-10-06 (2 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw index.json 200 (0.9 KB, 40 code-to-name pairs: 01 to 38 plus 97 and 99)"
   },
   "machineReadable": true,
   "useInCalendar": "GST state code to name mapping, needed to place states in the two QRMP GSTR-3B groups (22nd vs 24th) and to label state-specific items.",
   "ingestion": "Vendor once with attribution (MIT) or hand-maintain; it is tiny and rarely changes. Cross-check against india-compliance STATE_NUMBERS (GPL, reference only).",
   "priority": "P2"
  },
  {
   "id": "gh-rhnvrm-stock-market-circulars",
   "name": "Stock Market Circulars living dataset (exchangecirculars.com)",
   "publisher": "rhnvrm",
   "url": "https://github.com/rhnvrm/stock-market-circulars",
   "category": "open-source",
   "format": [
    "RSS",
    "Markdown"
   ],
   "access": "open",
   "license": "None (no licence file - all rights reserved by default)",
   "updates": "active - last push 2026-10-14; pipeline runs every 3 hours (11 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "https://exchangecirculars.com/feed.xml 200 application/rss+xml (152 KB, 50 items, newest 2026-10-14) and /circulars/sebi/feed.xml 200 (158 KB); items carry source, category, impact and the official pdfUrl; raw hugo-site/content/circulars/sebi/2026/*.md 200 with YAML frontmatter (date, pdf_url, guid on sebi.gov.in)"
   },
   "machineReadable": true,
   "useInCalendar": "Aggregated NSE, BSE and SEBI circulars with categories for the regulatory-updates section, including BSE, which is hard to fetch directly now that BSE APIs block non-browser clients. Per-source and per-tag feeds exist (/circulars/{nse|bse|sebi}/feed.xml, /tags/{tag}/feed.xml).",
   "ingestion": "Discovery and cross-check only: no license, and descriptions are AI-generated (Gemini). Keep only title, date, source and the official PDF/guid link, and prefer the official SEBI RSS and NSE RSS (nsearchives.nseindia.com/content/RSS/Circulars.xml answered 200 with 2026-10-14 items). Filter out SEBI enforcement items, which include individuals' PAN details.",
   "priority": "P2"
  },
  {
   "id": "gh-ruchitanmay-nselib",
   "name": "nselib - NSE data library",
   "publisher": "RuchiTanmay",
   "url": "https://github.com/RuchiTanmay/nselib",
   "category": "open-source",
   "format": [
    "Python"
   ],
   "access": "open",
   "license": "Apache-2.0",
   "updates": "active - last push 2026-07-18; PyPI 2.5.1 on 2026-05-01 (181 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw nselib/libutil.py 200 (8 KB): trading_holiday_calendar() does a cookie warm-up GET on nseindia.com, fetches holiday-master?type=trading and flattens the per-segment lists into rows (Product, tradingDate, weekDay, description, Sr_no)"
   },
   "machineReadable": true,
   "useInCalendar": "Permissively licensed reference implementation of the NSE holiday fetch with cookie handling.",
   "ingestion": "If cookie handling becomes necessary, adapt its short session pattern (Apache-2.0, keep the notice); otherwise reference only. Other wrappers using the same endpoint: BennyThadikaran/NseIndiaApi (GPL-3.0, ships a sample holidays.json), hi-imcodeman/stock-nse-india (MIT, npm 1.4.0), bshada/nse-bse-api (MIT, npm).",
   "priority": "P2"
  },
  {
   "id": "gh-sushant354-ikapi",
   "name": "IKAPI - Indian Kanoon API client",
   "publisher": "sushant354",
   "url": "https://github.com/sushant354/IKAPI",
   "category": "open-source",
   "format": [
    "Python",
    "Java"
   ],
   "access": "api-key",
   "license": "MIT",
   "updates": "recent - last push 2026-07-02 (4 stars)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "raw python/ikapi.py 200 (21 KB). A GET to api.indiankanoon.org/search without a token returned 502 (Cloudflare bad gateway); the API expects POST with an API token."
   },
   "machineReadable": true,
   "useInCalendar": "Marginal: search judgments and orders that mention a provision. Not needed for due dates or holidays.",
   "ingestion": "Skip for v1. Indian Kanoon's API is token-based and metered, and its terms would need review before showing results on a public site.",
   "priority": "P2"
  },
  {
   "id": "state-lwf-hr",
   "name": "Haryana Labour Welfare Board (Labour Department portal)",
   "publisher": "Haryana Labour Welfare Board, Labour Department, Government of Haryana",
   "url": "https://hrylabour.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on notification",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. Wayback shows HLWB pages (hlwbmedia, welfare media, employer pamphlet, FAQ material) and the Punjab Labour Welfare Fund Act 1965 and Rules as applied to Haryana under staticdocs."
   },
   "machineReadable": false,
   "useInCalendar": "Haryana LWF contribution rate and deposit dates, with Act and Rules citations.",
   "ingestion": "Manual review; not reachable from GitHub-hosted runners.",
   "priority": "P0"
  },
  {
   "id": "state-lwf-tn",
   "name": "Tamil Nadu Labour Welfare Board",
   "publisher": "Tamil Nadu Labour Welfare Board, Government of Tamil Nadu",
   "url": "https://lwb.tn.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on GO",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. Wayback shows the Tamil Nadu Labour Welfare Fund Act 1972 and Rules 1973 PDFs, contribution Forms A, B and C, and GOs (e.g. GO_Ms_13_G2_2022, Gazette_538); the contact form uses a captcha."
   },
   "machineReadable": false,
   "useInCalendar": "Tamil Nadu LWF annual contribution date and rates, with Act and Rules citations.",
   "ingestion": "Manual annual review; not reachable from GitHub-hosted runners.",
   "priority": "P0"
  },
  {
   "id": "state-pt-gj",
   "name": "Gujarat Profession Tax - Surat Municipal Corporation PT department",
   "publisher": "Surat Municipal Corporation (designated PT authority under the Gujarat PT Act)",
   "url": "https://www.suratmunicipal.gov.in/Departments/ProfessionalTaxHome",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "rarely (newest notification listed is from 2013)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (14.5 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3. Lists the Gujarat Finance Department PT notifications: 2008 implementation of the amended Act, appointment of designated authorities, 2008 rate notifications, and the 2013 revised employee rate; plus a PT FAQ page and RC/EC enrolment services. The state portal commercialtax.gujarat.gov.in/vatwebsite (PT registration guidelines, PT dashboard) timed out intermittently from Toronto (200 on retry; 200 from Mumbai, Los Angeles and Nuremberg) and fails tlscheck (unable to get local issuer certificate). Ahmedabad (ahmedabadcity.gov.in) PT pages fail OpenSSL 3 with unsafe legacy renegotiation; Rajkot (rmc.gov.in, TLS ok) has PT forms."
   },
   "machineReadable": false,
   "useInCalendar": "Gujarat PT rate notifications and the local-body collection model (corporations as designated authorities); any post-2013 slab change must be confirmed from the state gazette.",
   "ingestion": "Weekly fetch and hash of the SMC page with manual review on change; the state CT portal needs the missing intermediate certificate added to the runner trust store.",
   "priority": "P0"
  },
  {
   "id": "state-pt-mh",
   "name": "Maharashtra Profession Tax (MahaGST)",
   "publisher": "Maharashtra Goods and Services Tax Department, Government of Maharashtra",
   "url": "https://www.mahagst.gov.in/en/profession-tax-and-other-rate-schedule",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on notification; rate schedule revised through state Finance Acts (current PDF dated 01.04.2023)",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from this machine (Toronto, CA) and from check-host Los Angeles and Nuremberg; check-host Mumbai got 'connection reset by peer' for www.mahagst.gov.in and mahagst.gov.in, so Indian datacenter IPs are refused too. tlscheck: CONNECT-FAIL timeout. Content seen only through Wayback captures (up to Apr 2026): PT section with Acts, Rules, Notifications (PT late-fee notifications, Rule 32 amendment, PT Amendment Act 2023), G.R.s, Rate Schedule (PDF 'PT Rate Schedule updated 01.04.2023'), Trade Circulars (e.g. 17T of 2025 extending VAT-CST-PT returns), Forms, and a yearly PTRC return-periodicity list. No RSS seen."
   },
   "machineReadable": false,
   "useInCalendar": "PT slab table for salaried employees, PTRC return periodicity per FY, late-fee rules and notified return-date extensions (trade circulars) for Maharashtra.",
   "ingestion": "Not fetchable from GitHub-hosted runners or Indian datacenters. Manual review each April and on news of extensions (person in India or Wayback snapshots); record trade circular numbers as overrides.",
   "priority": "P0"
  },
  {
   "id": "state-pt-tg",
   "name": "Telangana Commercial Taxes - Profession Tax schedule and GOs",
   "publisher": "Commercial Taxes Department, Government of Telangana",
   "url": "https://www.tgct.gov.in/tgportal/AllActs/APPT/APPTSchedule.aspx",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "on notification (latest PT GO listed: G.O. 30 dated 08-03-2021)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (13 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3 (www.tgct.gov.in and tgct.gov.in). HTML First Schedule of the Telangana PT Act 1987 'as amended up to date' (salary up to Rs 15,000 nil; Rs 15,001-20,000 Rs 150 per month; above Rs 20,000 Rs 200 per month; then professions and trades). Sibling pages APPTAct.aspx, APPTRules.aspx, APPTForms.aspx and Gos_Notifications.aspx (HTML table: GO number, date, subject). PT e-services at ptax.tgct.gov.in. tsct.gov.in is NXDOMAIN; the tgct.gov.in root is a JS redirect to /tgportal. No RSS."
   },
   "machineReadable": false,
   "useInCalendar": "Telangana PT slab table plus the GO list for change detection; Act and Rules pages for payment and return citations.",
   "ingestion": "Automatable: weekly fetch of the Schedule and GOs pages, parse the HTML tables, alert on new GO rows or slab changes.",
   "priority": "P0"
  },
  {
   "id": "state-pt-wb",
   "name": "West Bengal Profession Tax portal",
   "publisher": "Directorate of Commercial Taxes (Profession Tax), Finance Department, Government of West Bengal",
   "url": "https://professiontax.wb.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "Unknown (single-page app; notices irregular)",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; from check-host Mumbai the TLS handshake fails with OpenSSL error 0A000152 (unsafe legacy renegotiation), so OpenSSL 3 clients fail even inside India. tlscheck: CONNECT-FAIL timeout. The long-standing domain wbprofessiontax.gov.in returned 301 to this host in Apr 2025 and is now NXDOMAIN at the .gov.in registry. The new site is a React SPA (Wayback has only shell pages: quick-pay, registration, GRN view, PTPC download). egov.wbcomtax.gov.in shows only an Oracle default page and also needs legacy renegotiation; wbcomtax.gov.in times out even from Mumbai."
   },
   "machineReadable": false,
   "useInCalendar": "Official home for WB PT payment and returns; the old site carried the rate schedule (w.e.f. 1-4-2014) and return-extension orders, so extensions should now appear here.",
   "ingestion": "No automated path from outside India; manual review against WB gazette notifications. Automation would need an India-based runner with legacy TLS renegotiation enabled.",
   "priority": "P0"
  },
  {
   "id": "corplawupdates-feed",
   "name": "CorpLawUpdates.in RSS feed",
   "publisher": "CorpLawUpdates.in",
   "url": "https://www.corplawupdates.in/api/feed.xml",
   "category": "reference-site",
   "format": [
    "RSS",
    "HTML"
   ],
   "access": "open",
   "license": "Proprietary - terms forbid automated bulk scraping",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/xml; 4 KB transferred; final URL https://www.corplawupdates.in/api/feed.xml; feed parses (rss), 20 items, newest 2026-10-14. Apex URL redirects to www; 20 items, newest 2026-10-14."
   },
   "machineReadable": true,
   "useInCalendar": "Peer tip-off for changes on sites we cannot reach (EPFO, MCA, ESIC) - e.g. the EPFO September 2026 ECR extension to 31 October.",
   "ingestion": "Read headlines only as a tip-off, then verify on primary sources; never copy text; stay within its terms. The site also has /calendar (Compliance Calendar 2026-27), /updates, /category/<regulator> and /llms.txt.",
   "priority": "P1"
  },
  {
   "id": "state-lwf-ap",
   "name": "Andhra Pradesh Labour Welfare Board",
   "publisher": "Labour Welfare Board, Labour Department, Government of Andhra Pradesh",
   "url": "https://aplabourwelfareboard.ap.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "Unknown",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto (tlscheck: network unreachable), Los Angeles and Nuremberg; check-host Mumbai got HTTP 302. tlscheck: CONNECT-FAIL. Wayback captures are from 2019 only (JSP pages for schemes, latest updates, a circular memo)."
   },
   "machineReadable": false,
   "useInCalendar": "Andhra Pradesh LWF annual contribution date and rates under the AP LWF Act 1987.",
   "ingestion": "Manual annual review; not automatable from outside India.",
   "priority": "P1"
  },
  {
   "id": "state-lwf-dl",
   "name": "Delhi Labour Welfare Board",
   "publisher": "Delhi Labour Welfare Board, Labour Department, Government of NCT of Delhi",
   "url": "https://dlwb.delhi.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "Unknown",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. IGOD-listed Drupal site; Wayback shows tenders and PDF uploads up to Sep 2024. labour.delhi.gov.in shows the same geo-block."
   },
   "machineReadable": false,
   "useInCalendar": "Delhi LWF contribution rates and dates.",
   "ingestion": "Manual review; not reachable from GitHub-hosted runners.",
   "priority": "P1"
  },
  {
   "id": "state-lwf-gj",
   "name": "Gujarat Labour Welfare Board",
   "publisher": "Gujarat Labour Welfare Board, Labour, Skill Development and Employment Department",
   "url": "https://glwb.gujarat.gov.in/index.htm",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "Unknown",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto (tlscheck: network unreachable) and Nuremberg. An earlier TCP check succeeded from Mumbai and Los Angeles, but HTTP checks of index.htm and / timed out from Mumbai, Los Angeles and Nuremberg on 2026-10-14, so the web server also looked unresponsive. Wayback holds little beyond the home page and a cycle-subsidy scheme page."
   },
   "machineReadable": false,
   "useInCalendar": "Gujarat LWF half-yearly contribution dates and rates (else from the Gujarat LWF Act 1953 text).",
   "ingestion": "Manual review; treat as unavailable for automation.",
   "priority": "P1"
  },
  {
   "id": "state-lwf-kl",
   "name": "Kerala Labour Welfare Fund Board",
   "publisher": "Kerala Labour Welfare Fund Board, Government of Kerala",
   "url": "https://labourwelfarefund.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "irregular (GO list ends 2020)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (11 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3. Pages: fund_act (full Act text in HTML), fund_rules, governmentorders (table; newest is the Kerala Labour Welfare Fund (Amendment) Ordinance 2020 dated 16-01-2020), faq, pay_online. The HTML Act still shows the old s.15 rates (Rs 4 employee and Rs 8 employer per half-year, both paid before 15 January), so it is not consolidated with the 2020 amendment that raised them."
   },
   "machineReadable": false,
   "useInCalendar": "Kerala LWF payment deadline (before 15 January) and the amendment GO for current rates.",
   "ingestion": "Monthly fetch of the governmentorders table; manual reading of amendment PDFs (scans).",
   "priority": "P1"
  },
  {
   "id": "state-lwf-mp",
   "name": "Madhya Pradesh Shram Kalyan Mandal (Labour Welfare Board)",
   "publisher": "MP Shram Kalyan Mandal, Labour Department, Government of Madhya Pradesh",
   "url": "https://shramkalyanmandal.mp.gov.in/SKM/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "Unknown",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 but only an 860-byte JS shell (Vite/React SPA) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3. The JS bundle holds the /contribution-info page: rates under s.9(2)(3) of the MP Shram Kalyan Nidhi Adhiniyam 1982 - employer Rs 50 per worker per half-year, employee Rs 10 per half-year, employer minimum Rs 2,500 per half-year - plus yearly collection totals. The API base /SKM/api needs a login token. A 'contribution before 2026' module hints at a 2026 process change; no due dates found."
   },
   "machineReadable": false,
   "useInCalendar": "Madhya Pradesh LWF half-yearly rates and the statutory citation.",
   "ingestion": "Monthly headless-browser render of /SKM/contribution-info (or parse the JS bundle); manual review on change.",
   "priority": "P1"
  },
  {
   "id": "state-lwf-wb",
   "name": "West Bengal Labour Welfare Board (Labour Department portal)",
   "publisher": "West Bengal Labour Welfare Board, Labour Department, Government of West Bengal",
   "url": "https://labour.wb.gov.in/welfare_board/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "Unknown",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. The board's old domain wblwb.org still answers from Toronto, but its page now carries injected pharmaceutical spam text plus a JS redirect to this URL; do not cite wblwb.org. Wayback has no welfare_board pages."
   },
   "machineReadable": false,
   "useInCalendar": "West Bengal LWF contribution dates and rates.",
   "ingestion": "Manual review; not reachable from GitHub-hosted runners.",
   "priority": "P1"
  },
  {
   "id": "state-pt-ap",
   "name": "Andhra Pradesh Commercial Taxes portal - Profession Tax",
   "publisher": "Commercial Taxes Department, Government of Andhra Pradesh",
   "url": "https://apct.gov.in/apportal/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on notification",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. Wayback shows a PT schedule PDF (gstportal/GST_Portal/Help_docs/PT_Schedule.pdf, 2022), a PT user manual and an EODB PT note; older captures list PT GOs."
   },
   "machineReadable": false,
   "useInCalendar": "Andhra Pradesh PT slab schedule and PT notifications (same 1987 Act lineage as Telangana).",
   "ingestion": "Manual annual review (from India or via Wayback copies); not reachable from GitHub-hosted runners.",
   "priority": "P1"
  },
  {
   "id": "state-pt-as",
   "name": "Assam Commissionerate of Taxes - Professional Tax",
   "publisher": "Commissionerate of Taxes, Finance Department, Government of Assam",
   "url": "https://comtax.assam.gov.in/information-and-services/assam-professional-tax",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "occasional (page last updated 11-Sep-2026)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (14 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3. Standardized Website Framework page carrying the PT schedule PDF (dms72_profession_tax-schedule_1.pdf). The legacy portal tax.assam.gov.in (200, TLS ok) still serves AssamTimsInfo HTML pages for the Assam Professions, Trades, Callings and Employments Taxation Act 1947, its Rules, Schedule and Forms, plus a PT registration dashboard."
   },
   "machineReadable": false,
   "useInCalendar": "Assam PT slab schedule and Act and Rules citations.",
   "ingestion": "Automatable: weekly fetch and hash of the PT page and schedule PDF; manual review on change.",
   "priority": "P1"
  },
  {
   "id": "state-pt-br",
   "name": "Bihar Commercial Taxes Department portal - Professional Tax",
   "publisher": "Commercial Taxes Department, Government of Bihar",
   "url": "https://www.biharcommercialtax.gov.in/bweb/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "on notification",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "DNS failure from this machine (curl rc 6) and SERVFAIL from Google DNS-over-HTTPS; check-host resolved it to 182.95.251.12 and got HTTP 200 from Mumbai and Los Angeles, while Nuremberg failed DNS. With that IP pinned, the page returned 200 (40 KB) from Toronto, so only DNS is flaky. tlscheck: CONNECT-FAIL getaddrinfo failed. The apex biharcommercialtax.gov.in has no A record. Page links PT payment, PT registration status and list views of circulars and notifications (circular.do?...&strActionType=LIST); no PT pages found in Wayback."
   },
   "machineReadable": false,
   "useInCalendar": "Bihar PT payment and registration references and the notification list for rate or date changes.",
   "ingestion": "Automatable only when DNS resolves on the runner; add retries and fall back to manual review.",
   "priority": "P1"
  },
  {
   "id": "state-pt-kl",
   "name": "Kerala LSGD Profession Tax portal",
   "publisher": "Local Self Government Department, Government of Kerala",
   "url": "https://professiontax.lsgkerala.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "Unknown (appears unmaintained)",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "curl fails TLS: certificate expired (Let's Encrypt R3, notAfter 2024-08-15); tlscheck: VERIFY-FAIL certificate has expired. Ignoring the certificate, the body is only 'Connection failed!!!' (backend error). check-host, which does not validate certificates, gets HTTP 200 from Mumbai, Los Angeles and Nuremberg, so the host is up but broken. Still the PT link on the Thiruvananthapuram and Kochi corporation sites. Fallback lsgkerala.gov.in/en/act-rule (200, TLS ok) hosts the Panchayat Raj and Municipality Acts but no PT schedule, and has no search hits or RSS for profession tax; the K-SMART portal bundle has no PT module."
   },
   "machineReadable": false,
   "useInCalendar": "Nothing usable today; Kerala PT (half-yearly, collected by each local body) needs statute-based rules citing the Kerala Municipality and Panchayat Raj Acts.",
   "ingestion": "Not ingestible (expired TLS, backend error). Manual annual review of LSGD orders (go.lsgkerala.gov.in) and the Kerala Gazette.",
   "priority": "P1"
  },
  {
   "id": "state-pt-pb",
   "name": "Punjab State Development Tax (Excise and Taxation Department)",
   "publisher": "Excise and Taxation Department, Government of Punjab",
   "url": "https://taxation.punjab.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "on notification (PSDT notification Nov 2024)",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; HTTP 200 from check-host Mumbai. tlscheck: CONNECT-FAIL timeout. Wayback shows PSDT attachments: Punjab State Development Tax Act 2018, PSDT Rules, registration guides, a PSDT calendar PDF (employer annual return Form PSDT-6 on or before 30 April of the next year; Form PSDT-7 annual return for persons), a Nov 2024 PSDT notification (image PDF) and a note on PSDT for pensioners. The former PEXTAX domain pextax.com now serves an unrelated forex-broker review site; do not link it."
   },
   "machineReadable": false,
   "useInCalendar": "PSDT annual return deadline (30 April) and employer deduction rules for Punjab.",
   "ingestion": "Manual annual review from India or via Wayback; not reachable from GitHub-hosted runners.",
   "priority": "P1"
  },
  {
   "id": "caclubindia-feed",
   "name": "CAclubindia RSS feed",
   "publisher": "CAclubindia",
   "url": "https://www.caclubindia.com/rss.xml",
   "category": "reference-site",
   "format": [
    "RSS"
   ],
   "access": "open",
   "license": "Proprietary",
   "updates": "hourly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/xml; 6 KB transferred; feed parses (rss), 20 items, newest 2026-10-14. 20 items, newest 2026-10-14."
   },
   "machineReadable": true,
   "useInCalendar": "Tip-offs (ICAI announcements, tax updates).",
   "ingestion": "Optional tip-off feed only.",
   "priority": "P2"
  },
  {
   "id": "cbic-gst-legacy",
   "name": "Legacy CBIC GST site (cbic-gst.gov.in)",
   "publisher": "CBIC",
   "url": "https://cbic-gst.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "stale",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 13 KB transferred; HTML, 15864 chars of visible text. Static HTML, mostly ACES archive and migration pages."
   },
   "machineReadable": false,
   "useInCalendar": "Old citation links (ACES archive, 2017 migration material).",
   "ingestion": "Do not ingest; superseded by taxinformation.cbic.gov.in.",
   "priority": "P2"
  },
  {
   "id": "cbic-website",
   "name": "CBIC main website (cbic.gov.in)",
   "publisher": "CBIC",
   "url": "https://www.cbic.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 7 KB transferred; flags js-required; HTML, 158 chars of visible text. Angular (JHipster) shell; /api/getTickerData without parameters falls back to the SPA HTML. OpenSSL check: unable to get local issuer certificate (incomplete chain)."
   },
   "machineReadable": false,
   "useInCalendar": "Press releases, helpdesk details and links into the tax information portal.",
   "ingestion": "Reference only - its /api/* routes need undocumented parameters; use the taxinformation.cbic.gov.in API for documents.",
   "priority": "P2"
  },
  {
   "id": "cleartax-calendar",
   "name": "ClearTax income tax calendar",
   "publisher": "ClearTax (Defmacro Software)",
   "url": "https://cleartax.in/s/income-tax-calendar",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Proprietary",
   "updates": "monthly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 30 KB transferred; HTML, 41980 chars of visible text. Server-rendered article (42 KB text)."
   },
   "machineReadable": false,
   "useInCalendar": "Human cross-check of income-tax dates only.",
   "ingestion": "Reference only - do not copy.",
   "priority": "P2"
  },
  {
   "id": "cpcb-epr-portals",
   "name": "CPCB EPR portals (plastic packaging, battery, e-waste)",
   "publisher": "Central Pollution Control Board",
   "url": "https://eprplastic.cpcb.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "login",
   "license": "Unknown - GoI website",
   "updates": "n/a",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 1 KB transferred; flags js-required; HTML, 125 chars of visible text. eprplastic is an Angular shell; eprbattery.cpcb.gov.in serves a captcha login; eprewaste.cpcb.gov.in a small shell; cpcb.nic.in redirects to cpcb.gov.in (200)."
   },
   "machineReadable": false,
   "useInCalendar": "Extended Producer Responsibility registration and annual-return deadlines for producers, importers and brand owners.",
   "ingestion": "Reference only; maintain EPR rules manually from the notified rules.",
   "priority": "P2"
  },
  {
   "id": "dor",
   "name": "Department of Revenue website",
   "publisher": "Department of Revenue, Ministry of Finance",
   "url": "https://dor.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "occasional",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 16 KB transferred; HTML, 7607 chars of visible text. Drupal site; feed stale."
   },
   "machineReadable": false,
   "useInCalendar": "Department-level notices; little due-date content.",
   "ingestion": "Skip; /rss.xml holds a single 2023 item.",
   "priority": "P2"
  },
  {
   "id": "finmin",
   "name": "Ministry of Finance website",
   "publisher": "Ministry of Finance",
   "url": "https://www.finmin.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Unknown - GoI website",
   "updates": "occasional",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "GET failed: connect timeout (curl: (28) Connection timed out after 15010 milliseconds). TCP connect timed out on three attempts."
   },
   "machineReadable": false,
   "useInCalendar": "Ministry press notes and links.",
   "ingestion": "Not reachable from outside India; PIB covers Ministry of Finance releases.",
   "priority": "P2"
  },
  {
   "id": "fssai",
   "name": "FSSAI website and FoSCoS",
   "publisher": "Food Safety and Standards Authority of India",
   "url": "https://www.fssai.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 1 KB transferred; HTML, 52 chars of visible text. 1 KB Vite/React shell; FoSCoS connect timeout."
   },
   "machineReadable": false,
   "useInCalendar": "Annual and half-yearly return obligations for food business operators (manual rule maintenance).",
   "ingestion": "Reference only; the site is a client-rendered SPA and FoSCoS (foscos.fssai.gov.in) timed out from Toronto.",
   "priority": "P2"
  },
  {
   "id": "gst-einvoice-portal",
   "name": "GST e-invoice portal (IRP)",
   "publisher": "GSTN / NIC",
   "url": "https://einvoice1.gst.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Unknown - GoI website",
   "updates": "on publication",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "GET failed: connect timeout (curl: (28) Connection timed out after 15014 milliseconds). TCP connect timed out (15 s) on three separate attempts from Toronto, consistent with network-level geo restriction."
   },
   "machineReadable": false,
   "useInCalendar": "e-invoice applicability thresholds and reporting time-limit advisories.",
   "ingestion": "Not reachable from outside India; the GST portal news API republishes e-invoice advisories.",
   "priority": "P2"
  },
  {
   "id": "gst-ewaybill-portal",
   "name": "GST e-way bill portal",
   "publisher": "GSTN / NIC",
   "url": "https://ewaybillgst.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Unknown - GoI website",
   "updates": "on publication",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "GET failed: connect timeout (curl: (28) Connection timed out after 15008 milliseconds). TCP connect timed out (15 s) on three separate attempts from Toronto."
   },
   "machineReadable": false,
   "useInCalendar": "e-way bill rule changes and advisories.",
   "ingestion": "Not reachable from outside India; rely on GST portal news and CBIC notifications.",
   "priority": "P2"
  },
  {
   "id": "gst-tutorial",
   "name": "GST user manuals and tutorials (tutorial.gst.gov.in)",
   "publisher": "GSTN",
   "url": "https://tutorial.gst.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "occasional",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 7 KB transferred; final URL https://tutorial.gst.gov.in/userguide/registration/#t=manual.htm; HTML, 47 chars of visible text. Redirects to the RoboHelp user guide (/userguide/registration/); the old /downloads/news/ path returns 404."
   },
   "machineReadable": false,
   "useInCalendar": "Form-level filing guides and FAQs to link from GST rule pages.",
   "ingestion": "Reference links only.",
   "priority": "P2"
  },
  {
   "id": "icai",
   "name": "ICAI announcements",
   "publisher": "Institute of Chartered Accountants of India",
   "url": "https://www.icai.org/category/announcements",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Proprietary",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 50 KB transferred; HTML, 4102 chars of visible text. Announcements page 51 KB."
   },
   "machineReadable": false,
   "useInCalendar": "Professional announcements; no structured due-date calendar found.",
   "ingestion": "Reference only; no RSS (/rss.html 404).",
   "priority": "P2"
  },
  {
   "id": "icegate",
   "name": "ICEGATE advisories",
   "publisher": "CBIC - Indian Customs EDI Gateway",
   "url": "https://www.icegate.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - GoI website",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 18 KB transferred; HTML, 5545 chars of visible text. Drupal home page with advisory sections; /rss.xml returns 403 (feed disabled); /latest-updates/latest-updates 404. OpenSSL check: unable to get local issuer certificate (incomplete chain)."
   },
   "machineReadable": false,
   "useInCalendar": "Customs filing advisories for importers and exporters.",
   "ingestion": "Use the CBIC tax information API (taxId 1000002) for customs notifications; scrape ICEGATE advisories monthly only if needed.",
   "priority": "P2"
  },
  {
   "id": "icsi",
   "name": "ICSI website and latest-updates API",
   "publisher": "Institute of Company Secretaries of India",
   "url": "https://www.icsi.edu/api/home/latest-updates/",
   "category": "reference-site",
   "format": [
    "JSON",
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Proprietary",
   "updates": "weekly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/json; 1012 B transferred; JSON object keys announcements. New React site; latest-updates returned dated announcements (newest 23-09-2026); a site search for 'compliance calendar' found no calendar page."
   },
   "machineReadable": true,
   "useInCalendar": "ICSI announcements and secretarial standards; its compliance calendar (published in its journal and bulletins) is a human reference for MCA/SEBI deadlines - never copy.",
   "ingestion": "Reference only; the same-origin JSON API (/api/home/latest-updates/, /api/search/) mostly carries student and exam notices.",
   "priority": "P2"
  },
  {
   "id": "ogd-godl-india-license",
   "name": "Government Open Data License - India (GODL-India)",
   "publisher": "Ministry of Electronics and IT (notified in the Gazette of India, February 2017)",
   "url": "https://www.data.gov.in/Godl",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "restricted",
   "license": "GODL-India",
   "updates": "static since 2017",
   "reachable": {
    "status": 503,
    "checked": "2026-10-14",
    "note": "Same Akamai 503 as the rest of data.gov.in. The licence text is rendered client-side, so even a 2024 archived copy of /Godl holds only the page frame; the older path /government-open-data-license-india now returns 404 on the site."
   },
   "machineReadable": false,
   "useInCalendar": "Licence basis for anything shown from data.gov.in or NDAP: broadly free reuse, commercial included, with attribution to the source ministry and no implied endorsement; personal data, emblems/logos and third-party material are carved out. Confirm against the Gazette text before relying on it.",
   "ingestion": "No ingestion. Add a per-dataset attribution line (for example 'Source: Ministry of Corporate Affairs, Government of India, via data.gov.in, under GODL-India') and keep a copy of the Gazette text in the repo docs once obtained.",
   "priority": "P2"
  },
  {
   "id": "protean-tin-pan",
   "name": "Protean (formerly NSDL e-Gov) TIN and PAN services",
   "publisher": "Protean eGov Technologies",
   "url": "https://www.protean-tinpan.com/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Proprietary",
   "updates": "n/a",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 1 KB transferred; final URL https://tinpan.proteantech.in/; flags js-required; HTML, 101 chars of visible text. Redirects to https://tinpan.proteantech.in/ (1 KB JavaScript shell with captcha widgets)."
   },
   "machineReadable": false,
   "useInCalendar": "Historic home of e-TDS/TCS return guidance and TIN facilitation; now mainly PAN application services.",
   "ingestion": "Reference only; the old e-TDS due-date pages no longer resolve to content.",
   "priority": "P2"
  },
  {
   "id": "prs-billtrack",
   "name": "PRS Legislative Research bill tracker",
   "publisher": "PRS Legislative Research",
   "url": "https://prsindia.org/billtrack",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown - PRS terms",
   "updates": "per session",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 35 KB transferred; HTML, 32395 chars of visible text. Server-rendered list (35 KB)."
   },
   "machineReadable": false,
   "useInCalendar": "Plain-language bill summaries and status for context in the updates feed.",
   "ingestion": "Reference only; no RSS (/rss.xml and /billtrack/rss 404). Prefer the Sansad API for status.",
   "priority": "P2"
  },
  {
   "id": "rbi-firms-portal",
   "name": "RBI FIRMS portal (FEMA reporting forms)",
   "publisher": "Reserve Bank of India",
   "url": "https://firms.rbi.org.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Unknown - RBI website terms",
   "updates": "n/a",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "GET failed: connection reset (curl: (35) Recv failure: Connection was reset). TLS connection reset ('Recv failure') from Toronto."
   },
   "machineReadable": false,
   "useInCalendar": "Where FC-GPR, FC-TRS, ESOP, DRR and LLP forms are filed - deep link only.",
   "ingestion": "Reference link only.",
   "priority": "P2"
  },
  {
   "id": "shram-suvidha",
   "name": "Shram Suvidha portal (unified labour returns)",
   "publisher": "Ministry of Labour and Employment",
   "url": "https://shramsuvidha.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Unknown - GoI website",
   "updates": "n/a",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "GET failed: connect timeout (curl: (28) Connection timed out after 15000 milliseconds). TCP connect timed out on three attempts."
   },
   "machineReadable": false,
   "useInCalendar": "Unified annual and half-yearly returns under central labour law - deep link only.",
   "ingestion": "Not reachable from outside India; reference link only.",
   "priority": "P2"
  },
  {
   "id": "state-lwf-cg",
   "name": "Chhattisgarh Shram Kalyan Mandal (Labour Department portal)",
   "publisher": "Labour Department, Government of Chhattisgarh",
   "url": "https://shramevjayate.cg.gov.in/shramik/Lwb/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "Unknown",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (9 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.3. Next.js page whose content renders client-side; the static HTML and 25 JS chunks held no contribution rates or dates, and the sitemap lists only policy pages. cglabour.nic.in is NXDOMAIN."
   },
   "machineReadable": false,
   "useInCalendar": "Chhattisgarh LWF board home only; rates and dates must come from statute and notifications.",
   "ingestion": "Needs a headless browser; otherwise manual review.",
   "priority": "P2"
  },
  {
   "id": "state-lwf-ch",
   "name": "Chandigarh Labour Department - Deposit of Labour Welfare Fund",
   "publisher": "Labour Department, Chandigarh Administration",
   "url": "https://labour.chd.gov.in/PublicPages/deposit-of-labour-welfare-fund.aspx",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "Unknown",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto, Los Angeles and Nuremberg; from check-host Mumbai the TLS handshake fails with OpenSSL 0A00018A (dh key too small), so modern OpenSSL clients fail even in India. tlscheck: CONNECT-FAIL timeout. Page found via Wayback (2022). Chandigarh applies the Punjab LWF Act 1965, whose Act and Rules PDFs are on pblabour.gov.in. chdlabour.gov.in is NXDOMAIN."
   },
   "machineReadable": false,
   "useInCalendar": "Chandigarh LWF deposit procedure and dates.",
   "ingestion": "Manual review; the weak-DH TLS setup blocks automated clients.",
   "priority": "P2"
  },
  {
   "id": "state-pt-mz",
   "name": "Mizoram Taxation Department - downloads (PT Act and slabs)",
   "publisher": "Taxation Department, Government of Mizoram",
   "url": "https://zotax.nic.in/download.html",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "rarely (latest PT slab notification 11-07-2024)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (11 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.2. Links the Mizoram PT Act 1995, the PT schedule w.e.f. 2013-14 and 'Final Profession Tax Slab 2024' (text PDF: notification No.J.17011/1/2017-TAX dated 11-07-2024 modifying the schedule w.e.f. assessment year 2023-24). The home page also links a Finance Department OM (June 2022) cutting PT deduction instalments for government staff. The other IGOD host, taxation.mizoram.gov.in, returns 403."
   },
   "machineReadable": false,
   "useInCalendar": "Mizoram PT slab table and Act citation.",
   "ingestion": "Automatable: monthly fetch of download.html; alert on new PT links.",
   "priority": "P2"
  },
  {
   "id": "state-pt-nl",
   "name": "Nagaland Department of Taxes - Professional Tax",
   "publisher": "Department of Taxes, Government of Nagaland",
   "url": "https://nagalandtax.nic.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "open",
   "license": "Unknown",
   "updates": "occasional",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "HTTP 200 (26 KB) from Toronto; HTTP 200 from check-host Mumbai and Los Angeles. tlscheck: ok TLSv1.2. Links a PT notification and a PT public notice (both scanned image PDFs without a text layer), a PT registration guide, and the PT e-service at taxsoft-ngl.nic.in/Ptaxnagaland. nagalandtax.gov.in is NXDOMAIN."
   },
   "machineReadable": false,
   "useInCalendar": "Nagaland PT notice and registration references; rates need a manual read of the scans.",
   "ingestion": "Monthly fetch and hash of the home-page links; manual reading of scanned PDFs (OCR optional).",
   "priority": "P2"
  },
  {
   "id": "state-pt-sk",
   "name": "Sikkim Commercial Taxes - Professional Tax",
   "publisher": "Commercial Taxes Division, Finance Department, Government of Sikkim",
   "url": "https://sikkimtax.gov.in/",
   "category": "reference-site",
   "format": [
    "HTML",
    "PDF"
   ],
   "access": "geo-blocked",
   "license": "Unknown",
   "updates": "rarely (rate PDFs uploaded 2022)",
   "reachable": {
    "status": 0,
    "checked": "2026-10-14",
    "note": "TCP connect timeout from Toronto and Nuremberg; from check-host Mumbai and Los Angeles the TLS handshake fails with OpenSSL 0A000102 (unsupported protocol; the server appears to offer only legacy TLS), so OpenSSL 3 runners fail even where TCP is allowed. tlscheck: CONNECT-FAIL timeout. WordPress site; Wayback shows the Sikkim Tax on Professions, Trades, Callings and Employments Act 2006, PT rules, 'Professional Rate of tax' PDFs (2022) and WordPress category RSS feeds."
   },
   "machineReadable": false,
   "useInCalendar": "Sikkim PT rate schedule and Act citation.",
   "ingestion": "Manual annual review; the WordPress feeds would only help with legacy TLS from an allowed network.",
   "priority": "P2"
  },
  {
   "id": "taxguru-feed",
   "name": "TaxGuru RSS feed",
   "publisher": "TaxGuru",
   "url": "https://taxguru.in/feed/",
   "category": "reference-site",
   "format": [
    "RSS"
   ],
   "access": "open",
   "license": "Proprietary",
   "updates": "hourly",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; application/rss+xml; 13 KB transferred; feed parses (rss), 75 items, newest 2026-10-15. WordPress feed with 75 items, newest 2026-10-14; tag feeds exist (/tag/<tag>/feed/); search feed timed out."
   },
   "machineReadable": true,
   "useInCalendar": "Tip-offs on tax and corporate-law changes; monthly compliance-calendar articles.",
   "ingestion": "Optional tip-off feed only; do not copy.",
   "priority": "P2"
  },
  {
   "id": "taxmann",
   "name": "Taxmann",
   "publisher": "Taxmann Allied Services",
   "url": "https://www.taxmann.com/",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "login",
   "license": "Proprietary",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 20 KB transferred; flags js-required; HTML, 68 chars of visible text. JavaScript shell; content client-rendered."
   },
   "machineReadable": false,
   "useInCalendar": "Paid research database; compliance calendar behind its app.",
   "ingestion": "Reference only.",
   "priority": "P2"
  },
  {
   "id": "traces-tdscpc",
   "name": "TRACES (TDS CPC portal)",
   "publisher": "Income Tax Department - TDS Centralized Processing Cell",
   "url": "https://www.tdscpc.gov.in/app/login.xhtml",
   "category": "reference-site",
   "format": [
    "HTML"
   ],
   "access": "login",
   "license": "Unknown - GoI website",
   "updates": "n/a",
   "reachable": {
    "status": 200,
    "checked": "2026-10-14",
    "note": "GET 200; text/html; 2 KB transferred; final URL https://traces.tdscpc.gov.in/; HTML, 62 chars of visible text. Redirects to https://traces.tdscpc.gov.in/ (2 KB JavaScript login shell)."
   },
   "machineReadable": false,
   "useInCalendar": "Where deductors download Form 16/16A and file TDS corrections - deep-link target for TDS certificate due dates.",
   "ingestion": "Reference only; no public news feed or data.",
   "priority": "P2"
  },
  {
   "id": "ca-labour-program-general-holidays",
   "name": "Labour Program general holiday pay calculator and its dated list (Canada Labour Code general holidays)",
   "publisher": "Employment and Social Development Canada - Labour Program",
   "url": "https://wages-salaires.service.canada.ca/en/gen_holiday/index.html",
   "category": "holidays",
   "format": [
    "HTML",
    "JavaScript"
   ],
   "access": "open",
   "license": "Government of Canada terms and conditions (non-commercial reproduction with attribution)",
   "updates": "annually, a few years ahead (2021 to 2028 listed)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "The data file https://wages-salaires.service.canada.ca/_conf/assets/js/general_holiday.js holds holidayJsonEN entries {date, name}; answered 200 to an identifying user agent."
   },
   "machineReadable": true,
   "useInCalendar": "Dated Canada Labour Code s. 166 general holidays for the Canada federal list; the refresher compares each year with it.",
   "ingestion": "GET the data file every other day and read the \"date\" values for the year; report differences, never apply them.",
   "priority": "P0",
   "used": true
  },
  {
   "id": "ca-labour-code-s166",
   "name": "Canada Labour Code s. 166 and s. 193 (general holidays)",
   "publisher": "Department of Justice Canada",
   "url": "https://laws-lois.justice.gc.ca/eng/acts/L-2/section-166.html",
   "category": "legal-text",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Reproduction of federal law permitted (Reproduction of Federal Law Order)",
   "updates": "on amendment",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "Consolidated text; s. 193 covers holidays on a non-working day."
   },
   "machineReadable": false,
   "useInCalendar": "The rule behind the Canada federal list and its weekend handling.",
   "ingestion": "Manual review on amendment.",
   "priority": "P1",
   "used": true
  },
  {
   "id": "on-esa-public-holidays",
   "name": "Your guide to the Employment Standards Act: public holidays (Ontario)",
   "publisher": "Government of Ontario - Ministry of Labour, Immigration, Training and Skills Development",
   "url": "https://www.ontario.ca/document/your-guide-employment-standards-act-0/public-holidays",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Copyright King's Printer for Ontario; reproduction for non-commercial purposes permitted",
   "updates": "as the Act changes; no dated list per year",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "Names the nine public holidays and the substitute-day rule (s. 29); gives no dates."
   },
   "machineReadable": false,
   "useInCalendar": "The nine Ontario public holidays; dates follow the Act, cross-checked against canada-holidays.ca.",
   "ingestion": "Manual review; dates computed from the Act.",
   "priority": "P1",
   "used": true
  },
  {
   "id": "payments-canada-closures",
   "name": "Payments Canada system closure schedule (Lynx and ACSS)",
   "publisher": "Payments Canada",
   "url": "https://www.payments.ca/system-closure-schedule",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "Payments Canada website terms s. 3.2 (accurate, unmodified, non-commercial reproduction)",
   "updates": "annually, current year only",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "One table per year (Federal holiday, Date, Date of system closure); only 2026 published on 2026-10-15."
   },
   "machineReadable": false,
   "useInCalendar": "The Ontario bank holiday list: the days Canadian payment systems are closed.",
   "ingestion": "GET every other day and read the closure column of the year's table; report differences.",
   "priority": "P0",
   "used": true
  },
  {
   "id": "boc-holiday-schedule",
   "name": "Bank of Canada holiday schedule and bank-holidays RSS feed",
   "publisher": "Bank of Canada",
   "url": "https://www.bankofcanada.ca/press/upcoming-events/bank-of-canada-holiday-schedule/",
   "category": "holidays",
   "format": [
    "HTML",
    "RSS",
    "iCal"
   ],
   "access": "open",
   "license": "Bank of Canada terms of use (free use with attribution)",
   "updates": "rolling, upcoming dates only",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "Lists national and provincial holidays (Family Day and the Civic Holiday as provincial); no 2027 dates yet."
   },
   "machineReadable": true,
   "useInCalendar": "Context for the Ontario bank list: the Bank's own offices close on some days the payment systems run.",
   "ingestion": "Not used for dates.",
   "priority": "P1",
   "used": false
  },
  {
   "id": "canada-holidays-api",
   "name": "Canada Holidays API (canada-holidays.ca)",
   "publisher": "Paul Craig (open-source project, not a government source)",
   "url": "https://canada-holidays.ca/api/v1/provinces/ON?year=2026",
   "category": "open-source",
   "format": [
    "JSON",
    "API",
    "iCal"
   ],
   "access": "open",
   "license": "MIT (github.com/pcraig3/hols)",
   "updates": "covers 2013 to 2038",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "Province endpoint returns {province: {holidays: [{date, nameEn, federal, observedDate}]}}; its Ontario list is the nine ESA public holidays."
   },
   "machineReadable": true,
   "useInCalendar": "Second opinion on the Ontario public holiday list.",
   "ingestion": "GET every other day for this year and next; report differences.",
   "priority": "P1",
   "used": true
  },
  {
   "id": "opm-federal-holidays",
   "name": "OPM federal holidays and iCalendar feed",
   "publisher": "U.S. Office of Personnel Management",
   "url": "https://www.opm.gov/policy-data-oversight/pay-leave/federal-holidays/",
   "category": "holidays",
   "format": [
    "HTML",
    "iCal"
   ],
   "access": "open",
   "license": "U.S. government work (17 U.S.C. 105)",
   "updates": "annually, published years ahead (feed covers 2021 to 2030)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "Feed https://www.opm.gov/policy-data-oversight/pay-leave/federal-holidays/holidays.ics, one VEVENT per holiday with DTSTART;VALUE=DATE on the observed date."
   },
   "machineReadable": true,
   "useInCalendar": "The US federal holiday list and its observed dates.",
   "ingestion": "GET the feed every other day; report differences.",
   "priority": "P0",
   "used": true
  },
  {
   "id": "fed-k8-holidays",
   "name": "K.8 - Holidays observed by the Federal Reserve System",
   "publisher": "Board of Governors of the Federal Reserve System",
   "url": "https://www.federalreserve.gov/aboutthefed/k8.htm",
   "category": "holidays",
   "format": [
    "HTML"
   ],
   "access": "open",
   "license": "U.S. government work",
   "updates": "annually (2026 to 2030 published)",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "HTML table with footnotes for Saturday and Sunday holidays; no machine-readable feed found."
   },
   "machineReadable": false,
   "useInCalendar": "The Federal Reserve bank holiday list.",
   "ingestion": "Manual review; dates follow the K.8 rule, which the refresher checks.",
   "priority": "P0",
   "used": true
  },
  {
   "id": "federal-register-api",
   "name": "Federal Register API (executive orders closing federal offices)",
   "publisher": "Office of the Federal Register (NARA) and GPO",
   "url": "https://www.federalregister.gov/developers/documentation/api/v1",
   "category": "api",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "U.S. government work",
   "updates": "daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "documents.json search for executive orders titled \"Providing for the Closing of Executive Departments\" found EO 14133 and EO 14371 (2025)."
   },
   "machineReadable": true,
   "useInCalendar": "Flags an extra federal closure (such as 24 December) that is not one of the eleven statutory holidays.",
   "ingestion": "Search every other day for the year; report dates missing from the US list.",
   "priority": "P1",
   "used": true
  },
  {
   "id": "nager-date-api",
   "name": "Nager.Date public holiday API",
   "publisher": "Nager.Date (open-source project)",
   "url": "https://date.nager.at/api/v3/PublicHolidays/2026/CA",
   "category": "open-source",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Code MIT; API terms of service limit commercial use and republishing",
   "updates": "continuous; v3 reaches end of life on 2027-01-31",
   "reachable": {
    "status": 200,
    "checked": "2026-10-15",
    "note": "Not a federal or bank calendar: Remembrance Day and Boxing Day are provincial for Canada, and US Saturday holidays are typed Bank although Reserve Banks open."
   },
   "machineReadable": true,
   "useInCalendar": "Not used: its terms bar republishing and it does not model statutory or bank calendars.",
   "ingestion": "None.",
   "priority": "P1",
   "used": false
  },
  {
   "id": "boc-valet-fx",
   "name": "Bank of Canada daily exchange rates (Valet API)",
   "publisher": "Bank of Canada",
   "url": "https://www.bankofcanada.ca/valet/observations/FXINRCAD,FXUSDCAD/json?recent=10",
   "category": "statistics",
   "format": [
    "JSON",
    "API"
   ],
   "access": "open",
   "license": "Bank of Canada terms of use (free use with attribution)",
   "updates": "business daily",
   "reachable": {
    "status": 200,
    "checked": "2026-10-16",
    "note": "observations [{d, FXINRCAD: {v}, FXUSDCAD: {v}}]; FXINRCAD is Canadian dollars per Indian rupee (0.01493 on 2026-10-15)."
   },
   "machineReadable": true,
   "useInCalendar": "The CAD and USD reference amounts beside every rupee penalty figure.",
   "ingestion": "GET on every build and refresher run (scripts/fetch-fx.ts); keep the last good rates on failure.",
   "priority": "P1",
   "used": true
  }
 ]
}