The Controller General of Accounts (CGA), operating under the Ministry of Finance, is responsible for establishing and maintaining the Government of India's accounts. Every month — approximately 30 days after month-close — the CGA publishes a "Statement of Central Government Finances" covering receipts, disbursements, and the resulting surplus or deficit on a year-to-date (YTD) basis.
This is the primary source for The Public Rupee's Monthly Tracker.
What the CGA publishes
The monthly accounts consist of three statements:
Statement 1 — Summary: Total receipts, total disbursements, and the resulting surplus/deficit. Comparable to the fiscal deficit on a cash basis. Published as a single-page table.
Statement 2 — Receipts: Breakdown of revenue and capital receipts by major head. Revenue receipts include tax collections (with the gross figure before states' share) and non-tax items. Capital receipts include borrowings and loan recoveries.
Statement 3 — Disbursements: Expenditure by major head — spanning all Union ministries, interest payments, capital outlay, and grants to states. This is the most granular and longest statement.
The lag
CGA accounts are provisional. The timeline:
- Month-end: accounts compiled at Pay and Accounts Offices across ministries
- 25-30 days: reconciliation and aggregation at CGA level
- Publication: approximately Day 30-35 after month-end
- Example: January accounts published in late February
For annual budget tracking, there is an additional finality lag. Accounts for March (the fiscal year-end) are not finalised until May-June — after reconciliation, final ATRs (Abstract Tabular Returns), and departmentalised accounting reconciliation.
How we use it
The Monthly Tracker pipeline (rupee cga run) operates as follows:
- Discovery: Scrapes the CGA website listing page to find PDF links for the current fiscal year
- Download: Fetches each month's PDF to a local cache (idempotent — already-cached files are not re-fetched)
- Parse: Uses
pdfplumberto extract tables from Statement 1 (headline numbers) and Statements 2-3 (line items) - Ingest: Upserts parsed rows to Postgres with
ON CONFLICT DO UPDATE— safe to re-run
The pipeline is designed to be run monthly via a cron job or manual trigger. Once DATABASE_URL is set, make cga-ingest does the full fetch-parse-persist cycle.
Caveats and known gaps
Provisional figures: Monthly accounts are provisional. They are superseded by the CAG-audited annual accounts, published 12-18 months after fiscal year-end. Small discrepancies between monthly and annual figures are normal.
Major head aggregation: We aggregate by major head as printed in the PDF. CGA sometimes reclassifies items between major heads across years, which can create apparent discontinuities in time series.
Currency of comparisons: Monthly actuals are cumulative YTD. The budget estimate is full-year. A September actuals figure of 52% utilisation is not necessarily bad — it depends on the spending profile (front-loaded capex, end-of-year salary cycles, etc.).
PDF parsing quality: CGA PDFs are generated from legacy accounting software and have inconsistent table formatting across years. Our parser handles the most common table layouts, but some edge cases may produce warnings. We flag rows where parsing confidence is low.
Data provenance
| Field | Source | |-------|--------| | Total receipts/disbursements YTD | CGA Statement 1 | | Fiscal deficit YTD | CGA Statement 1 (computed: total receipts minus net lending) | | Receipt line items | CGA Statement 2 | | Expenditure line items | CGA Statement 3 | | Budget Estimate comparison | Union Budget 2026-27 Expenditure Budget Vol. 1 |
All data is linked to the source document in the database. The source_doc and page columns in every table record the exact PDF and page number the row was extracted from.