# Indian Data Project

> Read Indian government statistics from the Indian Data Project, an open portal that gathers official figures into eighty datasets across eleven domains: the Union Budget, the Economic Survey, RBI and monetary policy, state finances, the Census, education, employment, healthcare, environment, elections, and crime and safety. Rank the states on any indicator to find where literacy is lowest or crime highest, read a national trend year by year, pull the headline figures for a domain, look up what a term means in plain language, or fetch any dataset whole. Rupee totals come back in a readable form as well as raw, because they are quoted in crore. Nothing here needs an account, a key or a sign-up.

App · Research & Academia · 9 actions. Web page: https://docs.lodol.com/docs/integrations/indian-data-project

## Actions

### Check the portal status

Check the portal is reachable and report which year it is publishing under. The year is part of every file path, so a workflow that stores results is worth stamping with it, and a change here is the signal that the paths have moved. Also returns when the data was last refreshed and the licence the data carries.

**Inputs**: None.

**Outputs**

- `base_url` (text): The portal that answered
- `data_year` (text): The year the data itself reports
- `datasets` (number): How many datasets in all
- `domains` (number): How many domains it publishes
- `last_updated` (text): When the data was last refreshed
- `licence` (text): What licence the code and the data carry
- `path_year` (text): The year folder the file paths use
- `reachable` (true/false): True when the portal answered

**Example output**

```json
{
  "base_url": "https://indiandataproject.org",
  "data_year": "2025-26",
  "datasets": 79,
  "domains": 11,
  "last_updated": "2026-06-02",
  "licence": "Portal code is AGPL-3.0. The underlying data keeps its original government licence, usually GODL or public domain.",
  "path_year": "2025-26",
  "reachable": true
}
```

### Compare states

Rank the states on one indicator: which has the highest crime rate, the lowest literacy, the most forest cover. This is the question most of this data exists to answer, and it works across eight of the eleven domains. Every state comes back with its rank and value, plus the national average and the two ends of the range. Name a state to get its own standing alongside. Asking a domain that publishes national figures instead gets an error saying so and pointing at 'Get a trend'.

**Inputs**

- Domain (`domain`, text, required): Which body of data to rank on. Only these eight break down by state; the Union Budget, Economic Survey and RBI domains publish national figures, so use 'Get a trend' for those. One of: `states` (State Finances), `census` (Census & Demographics), `education`, `employment`, `healthcare`, `environment`, `elections`, `crime` (Crime & Safety).
- Indicator (`indicator`, text, required): Which indicator to read, by its id or its name. 'List indicators' returns every one a domain has, and a name that is close enough matches, so 'literacy' finds 'Literacy Rate (Total)'.
- Order (`order`, text): Whether to put the highest value first or the lowest. Defaults to highest. Which end is 'best' depends on the indicator: the highest literacy is good, the highest crime rate is not. One of: `highest` (Highest first), `lowest` (Lowest first). Default: `highest`.
- How many states (`size`, number): How many to return, from 1 to 50. Leave blank for all of them. Set it to 5 for a top five. From 1 to 50.
- Also pick out this state (`state`, text): Return one named state's rank and value alongside the list, by name or by two-letter code. Useful for 'where does Kerala stand' without pulling every state.

**Outputs**

- `attribution` (object): Who to credit. The portal asks that the original government source be credited rather than the portal itself, with a link back to it
- `average` (number): The mean across every state covered
- `count` (number): How many states came back
- `domain` (text): The domain that was read
- `highest` (object): The state with the highest value, whichever way the list was sorted
- `indicator` (object): Which indicator the figures belong to
- `lowest` (object): The state with the lowest value, whichever way the list was sorted
- `order` (text): Which way the list was sorted
- `state` (object): The named state's own standing, when one was asked for
- `states` (list)
- `states_ranked` (number): How many the indicator covers in all

**Example output**

```json
{
  "attribution": {
    "note": "Open data assembled from Indian government sources. Credit the source above and link back to indiandataproject.org.",
    "portal": "Indian Data Project",
    "portal_url": "https://indiandataproject.org/open-data",
    "source": "NCRB Crime in India 2023"
  },
  "average": 425.2833,
  "count": 5,
  "domain": "crime",
  "highest": {
    "id": "KL",
    "name": "Kerala",
    "rank": 1,
    "value": 1631.2
  },
  "indicator": {
    "category": "overall",
    "id": "crime_rate",
    "name": "Crime Rate (per lakh population)",
    "unit": "per lakh"
  },
  "lowest": {
    "id": "NL",
    "name": "Nagaland",
    "rank": 30,
    "value": 84.9
  },
  "order": "highest",
  "states": [
    {
      "id": "KL",
      "name": "Kerala",
      "rank": 1,
      "value": 1631.2
    },
    {
      "id": "DL",
      "name": "Delhi",
      "rank": 2,
      "value": 1602.0
    },
    {
      "id": "GJ",
      "name": "Gujarat",
      "rank": 3,
      "value": 806.3
    }
  ],
  "states_ranked": 30
}
```

### Get a dataset

Fetch any one of the portal's eighty datasets whole, exactly as it is published. The escape hatch for everything the shaped actions do not cover: the budget's Sankey flows and treemaps, ministry-level allocations, the justice pipeline, candidate profiles. Run 'List datasets' to see what there is.

**Inputs**

- Domain (`domain`, text, required): Which body of data to read. The portal groups everything into eleven domains, from the Union Budget to Crime and Safety. One of: `budget` (Union Budget), `economy` (Economic Survey), `rbi` (RBI & Monetary Policy), `states` (State Finances), `census` (Census & Demographics), `education`, `employment`, `healthcare`, `environment`, `elections`, `crime` (Crime & Safety).
- Dataset (`dataset`, text, required): Which dataset in that domain, for example 'expenditure' or 'women-safety'. 'List datasets' returns every one, and a path or filename pasted off the portal works too.

**Outputs**

- `attribution` (object): Who to credit. The portal asks that the original government source be credited rather than the portal itself, with a link back to it
- `data` (object): The file's contents, untouched
- `dataset` (text): Which dataset was read
- `description` (text): What it holds
- `domain` (text): The domain it came from
- `domain_label` (text): That domain's readable name
- `url` (text): Direct link to the JSON file
- `year` (text): Which year it is for

**Example output**

```json
{
  "attribution": {
    "note": "Open data assembled from Indian government sources. Credit the source above and link back to indiandataproject.org.",
    "portal": "Indian Data Project",
    "portal_url": "https://indiandataproject.org/open-data",
    "source": "CWC Reservoir Bulletin + CGWB Assessment 2023"
  },
  "data": {
    "groundwaterStage": [
      {
        "id": "DL",
        "name": "Delhi",
        "stage": "Over-Exploited",
        "stagePct": 137
      },
      {
        "id": "RJ",
        "name": "Rajasthan",
        "stage": "Over-Exploited",
        "stagePct": 140
      },
      {
        "id": "HR",
        "name": "Haryana",
        "stage": "Over-Exploited",
        "stagePct": 137
      }
    ],
    "reservoirStorage": [
      {
        "capacityBCM": 19.66,
        "region": "North",
        "reservoirCount": 15,
        "storagePct": 47
      },
      {
        "capacityBCM": 21.38,
        "region": "East",
        "reservoirCount": 23,
        "storagePct": 39
      },
      {
        "capacityBCM": 37.13,
        "region": "West",
        "reservoirCount": 36,
        "storagePct": 51
      }
    ],
    "source": "CWC Reservoir Bulletin + CGWB Assessment 2023",
    "year": "2025-26"
  },
  "dataset": "water",
  "description": "Water security: reservoir storage and groundwater stress.",
  "domain": "environment",
  "domain_label": "Environment",
  "url": "https://indiandataproject.org/data/environment/2025-26/water.json",
  "year": "2025-26"
}
```

### Get a domain summary

Read the headline figures for one of the eleven domains: the numbers its dashboard leads with. The budget's total spending and fiscal deficit, the economy's growth and inflation, crime's totals and conviction rate. Rupee figures are quoted in crore, which reads as a meaningless run of digits, so a readable form is returned alongside: 5065345 comes back also as 50.65 lakh crore.

**Inputs**

- Domain (`domain`, text, required): Which body of data to read. The portal groups everything into eleven domains, from the Union Budget to Crime and Safety. One of: `budget` (Union Budget), `economy` (Economic Survey), `rbi` (RBI & Monetary Policy), `states` (State Finances), `census` (Census & Demographics), `education`, `employment`, `healthcare`, `environment`, `elections`, `crime` (Crime & Safety).

**Outputs**

- `attribution` (object): Who to credit. The portal asks that the original government source be credited rather than the portal itself, with a link back to it
- `domain` (text): The domain that was read
- `domain_label` (text): Its readable name
- `figures` (object): The headline numbers, exactly as the portal names them
- `readable` (object): Rupee totals rendered the way they are normally said, in lakh crore, keyed by the same field name
- `url` (text): Direct link to the JSON file
- `year` (text): Which year the figures are for

**Example output**

```json
{
  "attribution": {
    "note": "Open data assembled from Indian government sources. Credit the source above and link back to indiandataproject.org.",
    "portal": "Indian Data Project",
    "portal_url": "https://indiandataproject.org/open-data",
    "source": "https://openbudgetsindia.org/"
  },
  "domain": "budget",
  "domain_label": "Union Budget",
  "figures": {
    "capitalReceipts": 76000,
    "fiscalDeficit": 1568936,
    "fiscalDeficitPercentGDP": 4.4,
    "gdp": 35698000,
    "lastUpdated": "2026-06-02",
    "perCapitaDailyExpenditure": 95.71,
    "perCapitaExpenditure": 34933.0,
    "population": 1450000000,
    "revenueReceipts": 3420409,
    "source": "https://openbudgetsindia.org/",
    "totalExpenditure": 5065345,
    "totalReceipts": 3496409
  },
  "readable": {
    "capitalReceipts": "\u20b976,000.00 crore",
    "fiscalDeficit": "\u20b915.69 lakh crore",
    "fiscalDeficitPercentGDP": "\u20b94.40 crore",
    "gdp": "\u20b9356.98 lakh crore",
    "perCapitaDailyExpenditure": "\u20b995.71 crore",
    "perCapitaExpenditure": "\u20b934,933.00 crore",
    "revenueReceipts": "\u20b934.20 lakh crore",
    "totalExpenditure": "\u20b950.65 lakh crore",
    "totalReceipts": "\u20b934.96 lakh crore"
  },
  "url": "https://indiandataproject.org/data/budget/2025-26/summary.json",
  "year": "2025-26"
}
```

### Get a trend

Read an indicator's history as a year-by-year series, with the first and latest values, the change between them, and the peak and trough. Use it for 'how has GDP growth moved' or 'what has inflation done since 2020'. The Economic Survey and RBI domains publish their indicators this way; the other eight break down by state instead, and asking one of those gets an error pointing at 'Compare states'.

**Inputs**

- Domain (`domain`, text, required): Which body of data to read. Only these two publish year-by-year series; the other eight break down by state, so use 'Compare states' for those. One of: `economy` (Economic Survey), `rbi` (RBI & Monetary Policy).
- Indicator (`indicator`, text, required): Which indicator to read, by its id or its name. 'List indicators' returns every one a domain has, and a name that is close enough matches, so 'literacy' finds 'Literacy Rate (Total)'.
- From this year (`since`, text): Only return points from this financial year onwards, written the way the data writes them. Leave blank for the whole history.

**Outputs**

- `attribution` (object): Who to credit. The portal asks that the original government source be credited rather than the portal itself, with a link back to it
- `change` (number): Latest value minus the first, in the indicator's own unit
- `count` (number): How many points came back
- `domain` (text): The domain that was read
- `first` (object): The earliest point returned
- `highest` (object): The peak across the points returned
- `indicator` (object): Which indicator the figures belong to
- `latest` (object): The most recent point returned
- `lowest` (object): The trough across the points returned
- `points` (list)

**Example output**

```json
{
  "attribution": {
    "note": "Open data assembled from Indian government sources. Credit the source above and link back to indiandataproject.org.",
    "portal": "Indian Data Project",
    "portal_url": "https://indiandataproject.org/open-data",
    "source": "MOSPI NAS API (api.mospi.gov.in/api/nas/getNASData) + Economic Survey 2025-26"
  },
  "change": 1.9,
  "count": 14,
  "domain": "economy",
  "first": {
    "value": 5.5,
    "year": "2012-13"
  },
  "highest": {
    "value": 9.7,
    "year": "2021-22"
  },
  "indicator": {
    "category": "growth",
    "id": "gdp-growth",
    "name": "Real GDP Growth Rate",
    "source": "MOSPI NAS API (api.mospi.gov.in/api/nas/getNASData) + Economic Survey 2025-26",
    "unit": "percent"
  },
  "latest": {
    "value": 7.4,
    "year": "2025-26"
  },
  "lowest": {
    "value": -5.8,
    "year": "2020-21"
  },
  "points": [
    {
      "value": 5.5,
      "year": "2012-13"
    },
    {
      "value": 6.5,
      "year": "2013-14"
    },
    {
      "value": 7.2,
      "year": "2014-15"
    }
  ]
}
```

### List datasets

List what the portal publishes: eighty datasets across eleven domains, from the Union Budget to crime statistics, each with the government source behind it. Narrow by domain or search the descriptions. The catalogue is held in the integration rather than fetched, so this costs no request and is the cheapest way to find out what is available before asking for it.

**Inputs**

- Domain (`domain`, text): Only list datasets in this domain. Leave blank for all of them. One of: `budget` (Union Budget), `economy` (Economic Survey), `rbi` (RBI & Monetary Policy), `states` (State Finances), `census` (Census & Demographics), `education`, `employment`, `healthcare`, `environment`, `elections`, `crime` (Crime & Safety).
- Search (`search`, text): Only list datasets whose name or description mentions this. Leave blank for all of them.

**Outputs**

- `count` (number): How many datasets matched
- `datasets` (list)
- `domains` (list): Domains represented in the result
- `total_available` (number): How many the portal publishes in all

**Example output**

```json
{
  "count": 9,
  "datasets": [
    {
      "dataset": "summary",
      "description": "Crime snapshot: total crimes, crime rate, road deaths, conviction rate and police ratio.",
      "domain": "crime",
      "domain_label": "Crime & Safety",
      "has_state_breakdown": true,
      "has_time_series": false,
      "source": "NCRB + MoRTH + BPRD",
      "url": "https://indiandataproject.org/data/crime/2025-26/summary.json"
    },
    {
      "dataset": "overview",
      "description": "National crime trend, composition by type, state rates and homicide rate.",
      "domain": "crime",
      "domain_label": "Crime & Safety",
      "has_state_breakdown": true,
      "has_time_series": false,
      "source": "NCRB + MoRTH + BPRD",
      "url": "https://indiandataproject.org/data/crime/2025-26/overview.json"
    },
    {
      "dataset": "women-safety",
      "description": "Crimes against women: national trend, types, and state rates per lakh women.",
      "domain": "crime",
      "domain_label": "Crime & Safety",
      "has_state_breakdown": true,
      "has_time_series": false,
      "source": "NCRB + MoRTH + BPRD",
      "url": "https://indiandataproject.org/data/crime/2025-26/women-safety.json"
    }
  ],
  "domains": [
    "crime"
  ],
  "total_available": 79
}
```

### List indicators

List the indicators a domain tracks, with what each measures and in what unit. An indicator carries either a national year-by-year series or a state-by-state breakdown, never both, and which one depends on the domain. The response says which each has, so the next step asks the right question: 'Compare states' or 'Get a trend'.

**Inputs**

- Domain (`domain`, text, required): Which body of data to read. The portal groups everything into eleven domains, from the Union Budget to Crime and Safety. One of: `budget` (Union Budget), `economy` (Economic Survey), `rbi` (RBI & Monetary Policy), `states` (State Finances), `census` (Census & Demographics), `education`, `employment`, `healthcare`, `environment`, `elections`, `crime` (Crime & Safety).
- Category (`category`, text): Only list indicators in this category, for example 'growth' or 'women-safety'. Leave blank for all. The categories a domain has come back with the result.

**Outputs**

- `attribution` (object): Who to credit. The portal asks that the original government source be credited rather than the portal itself, with a link back to it
- `categories` (list): Every category this domain uses
- `count` (number): How many indicators matched
- `domain` (text): The domain that was read
- `indicators` (list)

**Example output**

```json
{
  "attribution": {
    "note": "Open data assembled from Indian government sources. Credit the source above and link back to indiandataproject.org.",
    "portal": "Indian Data Project",
    "portal_url": "https://indiandataproject.org/open-data",
    "source": "NCRB + MoRTH + BPRD"
  },
  "categories": [
    "infrastructure",
    "overall",
    "road-safety"
  ],
  "count": 5,
  "domain": "crime",
  "domain_label": "Crime & Safety",
  "indicators": [
    {
      "category": "overall",
      "has_state_breakdown": true,
      "has_time_series": false,
      "id": "crime_rate",
      "latest_value": null,
      "latest_year": null,
      "name": "Crime Rate (per lakh population)",
      "points": 30,
      "source": "NCRB Crime in India 2023",
      "unit": "per lakh"
    },
    {
      "category": "women-safety",
      "has_state_breakdown": true,
      "has_time_series": false,
      "id": "women_crime_rate",
      "latest_value": null,
      "latest_year": null,
      "name": "Crimes Against Women (per lakh women)",
      "points": 29,
      "source": "NCRB Crime in India 2023",
      "unit": "per lakh"
    },
    {
      "category": "road-safety",
      "has_state_breakdown": true,
      "has_time_series": false,
      "id": "road_fatality_rate",
      "latest_value": null,
      "latest_year": null,
      "name": "Road Accident Fatality Rate (per lakh)",
      "points": 29,
      "source": "MoRTH Road Accidents in India 2023",
      "unit": "per lakh"
    }
  ]
}
```

### Look up a term

Read a domain's glossary, or one term in particular. Every domain ships definitions written in plain language, each with a fuller explanation, an example of the term in use and the related terms worth reading next. Good for putting a definition beside a figure rather than leaving somebody to work out what a fiscal deficit is.

**Inputs**

- Domain (`domain`, text, required): Which body of data to read. The portal groups everything into eleven domains, from the Union Budget to Crime and Safety. One of: `budget` (Union Budget), `economy` (Economic Survey), `rbi` (RBI & Monetary Policy), `states` (State Finances), `census` (Census & Demographics), `education`, `employment`, `healthcare`, `environment`, `elections`, `crime` (Crime & Safety).
- Term (`term`, text): Look up one term rather than the whole glossary. A partial name matches, so 'deficit' finds 'Fiscal Deficit'. Leave blank for every term the domain defines.

**Outputs**

- `attribution` (object): Who to credit. The portal asks that the original government source be credited rather than the portal itself, with a link back to it
- `count` (number): How many terms came back
- `domain` (text): The domain that was read
- `terms` (list)

**Example output**

```json
{
  "attribution": {
    "note": "Open data assembled from Indian government sources. Credit the source above and link back to indiandataproject.org.",
    "portal": "Indian Data Project",
    "portal_url": "https://indiandataproject.org/open-data",
    "source": "Open Budgets India"
  },
  "count": 1,
  "domain": "budget",
  "terms": [
    {
      "detail": "The difference between total expenditure and total receipts (excluding borrowings). When the government spends more than it collects in taxes and other income, it borrows the rest....",
      "id": "fiscal-deficit",
      "in_context": "\u20b915,68,936 Cr (4.4% of GDP) in 2025-26",
      "related_terms": [
        "revenue-deficit",
        "gdp",
        "frbm"
      ],
      "simple": "How much the government borrows because it spends more than it earns.",
      "term": "Fiscal Deficit"
    }
  ]
}
```

### Search questions and answers

Search the portal's set of plain-language questions about this data, each with a short answer and a link to the section it came from. There are a hundred and sixty of them across all eleven domains: how much the government spends, why young people cannot find jobs, which state is safest. Useful for an explainer, for grounding a chatbot, or for finding which dataset answers a question before going to fetch it.

**Inputs**

- Search (`search`, text): Only return questions or answers mentioning this. Leave blank for all of them.
- Domain (`domain`, text): Only return questions about this domain. Leave blank for all. One of: `budget` (Union Budget), `economy` (Economic Survey), `rbi` (RBI & Monetary Policy), `states` (State Finances), `census` (Census & Demographics), `education`, `employment`, `healthcare`, `environment`, `elections`, `crime` (Crime & Safety).
- How many to return (`size`, number): How many questions to return, from 1 to 200. Defaults to 25. From 1 to 200. Default: `25`.

**Outputs**

- `attribution` (object): Who to credit. The portal asks that the original government source be credited rather than the portal itself, with a link back to it
- `count` (number): How many came back
- `questions` (list)
- `total_available` (number): How many the portal publishes in all
- `total_matched` (number): How many matched before the limit

**Example output**

```json
{
  "attribution": {
    "note": "Open data assembled from Indian government sources. Credit the source above and link back to indiandataproject.org.",
    "portal": "Indian Data Project",
    "portal_url": "https://indiandataproject.org/open-data",
    "source": "Indian Data Project"
  },
  "count": 3,
  "questions": [
    {
      "answer": "Overall unemployment has declined, but youth unemployment remains stubbornly high.",
      "domain": "employment",
      "id": "employment-unemployment",
      "question": "What is India's unemployment rate?",
      "section_id": "participation",
      "url": "https://indiandataproject.org/employment#participation"
    },
    {
      "answer": "Youth unemployment is far higher than the national average \u2014 education-job mismatch is key.",
      "domain": "employment",
      "id": "employment-youth-jobs",
      "question": "Why can't young people find jobs?",
      "section_id": "youth",
      "url": "https://indiandataproject.org/employment#youth"
    },
    {
      "answer": "Rural areas have higher LFPR but more informal work; urban areas face open unemployment.",
      "domain": "employment",
      "id": "employment-urban-rural",
      "question": "Is there a difference in urban vs rural employment?",
      "section_id": "rural-urban",
      "url": "https://indiandataproject.org/employment#rural-urban"
    }
  ],
  "total_available": 161,
  "total_matched": 4
}
```
