Skip to content
Darpan, public transparency index

How the index is built, and what it cannot tell you.

Darpan reads official press releases, keeps the ones that report a seizure or interdiction, and records what was seized, how much, where, when and by whom. Rules are written down here so that anyone can check a number against its source.

Pipeline

Each run rebuilds the whole index from the January 2024 window to today. Past months are read from a local cache; the current month is fetched again.

Darpan pipeline PIB monthly listings are screened by title, candidate release pages are read, rules extract items, places and agencies, duplicate releases are merged, aggregates are computed, and JSON and CSV files are published. News headlines from GDELT form a separate layer. PIB listings16 a month Title screenseized, recovered Release pagesrules extract Mergeduplicates PublishJSON and CSV GDELTnews headlines Headline rulestext not stored News layerkept apart
Solid boxes and lines: the official layer. Dashed: the news layer, never added to official counts.
  1. PIB listings 16 a month
  2. Title screen seized, recovered
  3. Release pages rules extract
  4. Merge duplicates
  5. Publish JSON and CSV
  1. GDELT news headlines
  2. Headline rules text not stored
  3. News layer kept apart

The news layer is never added to official counts.

Loading the latest run.

Sources

Every source the index is meant to draw on is tested on each run from the build network, and its status is published here, including the sources that do not work. A site that refuses our research agent (HTTP 403) is tried once more with an ordinary browser agent, and the note says which one worked. Agencies that block us still reach the index when they publish through the Press Information Bureau.

Loading
Coverage

PIB listings are read month by month for PIB Delhi (all ministries) and for nine regional offices (Mumbai, Chennai, Kolkata, Ahmedabad, Guwahati, Thiruvananthapuram, Hyderabad, Bengaluru, Chandigarh) for the ministries that carry seizure news: Finance, Home Affairs and Defence. The chart compares all English releases PIB Delhi published each month with the seizure events that came out of them.

The PIB offices nearest the land borders were tested before being left out: for September 2026, PIB Imphal, Mizoram, Agartala, Shillong and Jammu and Kashmir published between 5 and 20 releases of their own, none about a seizure. Border-force seizures there reach PIB through Delhi or Guwahati, when they are published at all.

PIB published far fewer releases of any kind while the 2024 general election code of conduct was in force (mid-March to early June 2024).

What counts

A release becomes an event when its title (or subtitle) names an enforcement action (seized, recovered, intercepted, apprehended, busted, confiscated and similar) and names contraband. A weaker verb (smuggling, crackdown, detects) counts only with a quantity or a stronger verb in the opening lines.

These are read but not counted as events:

  • statements of totals over a period ("in 2024", "since 2014", "in the last six months", "in the last two weeks", financial-year figures) and replies to questions in Parliament;
  • destruction and disposal drives, awareness campaigns, agreements, conferences, ceremonies and handovers;
  • quality enforcement that is not smuggling, such as hallmarking raids or spurious medicines;
  • tax fraud cases (GST, input tax credit), and stories about a person rather than a seizure: arrests of wanted persons, extradition, court remand or sentencing;
  • human trafficking rescues and migration cases. These concern people, and the index records goods;
  • recoveries of looted or stolen weapons, explosive devices planted by armed groups, and arms dumps or hideouts of Maoist and other armed groups (a consignment intercepted on its way across the border stays in). These are policing and counter-insurgency, not interdictions of smuggled goods.

Inside a release, the account of the event ends where the release turns to the agency's record ("The year 2023 has been one of the most successful years") or to other operations ("This seizure comes amid growing concerns", "In recent major operations"); a border route named after that point is not this seizure's route. Figures after that point, and quantities of an earlier, separate seizure ("following an earlier seizure of 200 grams"), are not counted.

The reasons each screened release was set aside are counted in the line under the pipeline diagram.

Categories and units
CategoryWhat is includedHeadline unit
Narcoticsheroin (smack, brown sugar), morphine, methamphetamine (yaba, crystal meth), amphetamine, cocaine, mephedrone (MD), MDMA, cannabis (ganja, hydroponic weed), hashish (charas, hash oil), opium and poppy straw (doda), pharmaceutical opioids and psychotropics (codeine syrup, tramadol, alprazolam and others), ketamine, precursor chemicals; "drugs" with no type namedkg; tablets and bottles counted separately; precursor chemicals are listed but left out of the narcotics weight, because they are controlled chemicals, not drugs
Goldbars, biscuits, dust, paste, jewellerykg
Cattlelive cattle, cows, buffaloes, bullocks, calves; horns, hides and meat are not counted as cattlehead
Currency and FICNfake Indian currency notes, foreign currency, cash seized with contraband or on its ownrupees (face value, amount, or the rupee value a release gives for foreign currency)
Arms and ammunitionpistols, rifles, firearms; cartridges and rounds; magazines; explosives and grenadespieces; rounds counted separately
Wildlifepangolin, ivory, tiger and leopard parts, rhino horn, tortoises and turtles, tokay geckos, live mammals (slow lorises, civets, giant squirrels, monkeys), birds, reptiles, monitor lizard parts ("hatha jodi"), marine species, ambergris, wildlife products (peacock feathers, musk pods, antlers), red sanders and agarwood (protected flora)mixed: animals, pieces, kg
Dronesdrones, UAVs, quadcopters recovered or seized. A "drone-dropped" parcel is not a drone.pieces
Other contrabandcigarettes and e-cigarettes, areca nuts, poppy seeds, silver, diamonds and gems, saffron, dry dates, rock salt and other prohibited Pakistan-origin goods, garlic, firecrackers, diesel and other fuel, liquor, electronics, toys and cosmetics, antiquities and idols; "goods" with no type namedmixed

Units are normalised before anything is added up: grams, kilograms, quintals (100 kg) and tonnes or "MT" (1,000 kg) become kilograms; litres stay litres; tablets, capsules and pills are tablets, except capsules of cocaine, heroin or other drugs swallowed or packed by a carrier, which are packaging and are not counted; bottles and vials are bottles; live animals are counted as animals. Counts written in Indian style are read as written: 1 lakh = 100,000 and 1 crore = 10,000,000 ("Rs 36L" and "worth 49.5L" are lakh, never litres), so "12.22 lakh cigarettes" is 1,222,000 and "2,40,000 tablets" is 240,000. Cartons, packets and bags are kept only when the release gives nothing finer. Kilograms are never added to tablets.

Quantities preceded by "around", "about", "over", "more than" or "nearly" are marked approximate and shown with "about". When a release gives its own total ("in total, 73,70,000 sticks"), that total is used, and a part named after "including" ("67 weapons including 27 AK rifles") is not added to it. A release that reports several operations has its quantities summed, once each, unless its opening sentence already totals them ("has, in three operations, seized four ivory articles, one leopard skin, two live pangolins"): then that sentence's figures are used. In a release about one operation, each kind of item is taken from the first sentence that quantifies it, so a later sentence that repeats the figure does not double it; different animals counted in one sentence ("15 slow lorises, 2 binturongs") add up. A quantity that describes past activity ("had transported 318 kg in the past nine months") is ignored. Seized money has no separate value: "foreign currency worth Rs 35.40 lakh" is recorded as Rs 35.40 lakh of foreign currency.

Places and the border

Place names are matched against a gazetteer of every current district of India from Wikidata (CC0), with common alternative names (Karimganj for Sribhumi, Ferozepur for Firozpur), plus hand-listed towns, land ports, airports, seaports and container depots. Names that are also everyday words or personal names (Puri, Anand, Sagar) count only next to a place word such as "in" or "district". A district name shared by two states is used only when the release names the state.

The place of an event is the place in the title; failing that, the place the release says the seizure happened. Places mentioned as an origin or destination ("from Zokhawthar", "bound for Delhi") weigh less, and a city named in an office ("DRI Mumbai", "Mumbai Customs") is used only when nothing else is named. Releases that report seizures in several states are listed as "several states".

Each district has one zone: land-border (on an international land border), coastal, or inland. A seizure at an airport, seaport or container depot, or at sea, takes that zone instead, so gold found on a passenger at Kolkata airport is not counted as a border-district event even though the airport lies in North 24 Parganas.

An event is border-related if any of these hold, and the reasons are listed with each event:

  • it happened in a land-border district;
  • the release names a cross-border route: "Indo-Bangladesh border", "drone-dropped", border outposts, the Line of Control or the maritime boundary line, or goods "smuggled from" a neighbouring country by land;
  • a border guarding force acted: BSF, Assam Rifles, SSB or ITBP;
  • it was an interdiction at sea by the Coast Guard or Navy.

Goods that came from a neighbouring country by sea or air do not make an event border-related: "Pakistan-origin dry dates" shipped through Jebel Ali, or "firecrackers from China" found at Mundra port. "From" a neighbour counts as a route only when the seizure was not at an airport, a port or at sea, the release names no third country the goods passed through (such as the UAE), and, in a coastal district, no port, container, cargo, consignment or vessel. Goods from China count only in a land-border district.

Land-border districts used by the index (…)

Compiled by hand from state maps and the coverage of the Border Area Development and Vibrant Villages programmes. It is a reference list, not a survey; corrections are welcome. Coastal districts follow the same approach.

Values

"Stated value" is the figure an agency publishes, usually an illicit-market or international-market estimate ("worth Rs 10 crore"). Agencies estimate it in different ways and the same drug can be valued very differently in two releases. Darpan copies the figure, sums it as published, and never derives a value from a quantity. An amount for property seized with a case ("assets worth 50 crore", "vehicles worth Rs 36 lakh") is not a value of contraband and is not counted. The value of seized cash or counterfeit notes is their amount, so it is not counted again as a value.

Duplicates

One seizure can appear in several releases: a regional PIB office reissues a Delhi release, or two ministries report the same interdiction. Releases within five days of each other are merged when the title is reissued (nearly identical wording and the same numbers), or when they share a category, an agency and a known place (or were both at sea) and their quantity or stated value agrees within 1%. Two gold seizures of 8.3 kg and 8.5 kg in different districts stay separate. A merged event keeps every source link.

News layer

Seizures reported in Indian news are found through the GDELT DOC 2.0 API with one query per calendar month for English articles from Indian outlets that mention a seizure and a border or enforcement agency. GDELT returns at most 250 articles a query, newest first, and that limit is reached in every full month: nine in ten articles in a month's sample come from after its 10th to 22nd day. The layer is therefore a sample that leans to the second half of each month, not a census, and month-to-month changes in it say little. Only the headline is read. Headlines are not stored or shown because they often name people; each news event links to its article.

A news event is kept only when the headline names a quantity, a value or a central enforcement agency, and not a foreign agency. Political commentary, court stories, theft cases, raids that name nothing seized, headlines that tally several days ("in 10 days"), and liquor cases (state excise work) unless a border force or a border route is named are dropped. Reports of the same seizure by several outlets are merged. News events are labelled "reported in news" everywhere and are never added to official counts.

Privacy

Darpan records events, quantities and places, never people. Release bodies are read to extract figures and are not stored. The only text kept from a release is its title, after names that follow an honorific or words such as "alias" or "kingpin" are replaced with "[name withheld]". Public officials acting in their official role may be named. The nationality of people in a title is replaced with "foreign national"; the flag of a vessel is kept. Every export is scanned for phone, Aadhaar-like, PAN, passport and vehicle numbers and for honorific names before it is published, and the run stops if any is found.

There are no tables or filters by nationality, religion, caste, ethnicity or language, and no counts of people. Linked sources may name people; Darpan does not repeat them. See the doctrine.

Known gaps
  • It counts publishing, not enforcement. Agencies decide what reaches PIB, and the mix changes over time. Mumbai Customs airport seizures dominate Maharashtra; PIB Delhi carried few Directorate of Revenue Intelligence seizures in 2024 and many in 2026.
  • Most state police, BSF frontier and Coast Guard district seizures never reach PIB and are missing unless a news report is picked up.
  • CBI, BSF, Coast Guard, NCB, DRI and CBIC websites could not be read from the build network (see Sources). The index will add them when they can be read.
  • Only English releases are read. Hindi and regional-language releases are not.
  • Rules make mistakes: a quantity can be attached to the wrong item, a route can be read as the seizure place, or a release that summarises several operations can be read as one. Each event links to its source so it can be checked.
  • Seizure dates appear in only some releases; months use the release date.
  • Quantities and values are as published and are not verified. Drug weight may include packaging, and "tablets" may be counted by weight or by number in different releases.
  • The land-border district list is compiled by hand and may contain errors.
Corrections

If an event is wrong, write to press@trinetra.in (subject "Darpan correction") with the event id (shown under Details on the events page) and the source that shows the error. We check the claim against the official release, fix the rule or the record, rebuild the index and list the change below. We aim to answer within seven days.

We correct facts: quantities, units, places, dates, categories and source links. Events are removed only when the source release is withdrawn or does not report a seizure. Because Darpan does not name people, there is nothing to remove about a person; requests about linked sources should go to their publishers.

Correction log

  • 21 Oct 2026, review of every official event. Eleven events are no longer marked border-related: the goods came from a neighbouring country by sea or air (Pakistan-origin dates and rock salt shipped through the UAE, Chinese firecrackers and e-cigarettes found at ports). Two releases that total a few days of airport seizures ("in last two weeks") are now treated as statements of totals. Twenty-two events gained quantities that their releases give in a later sentence ("The recovered narcotics weighed 6261 grams") or in a form the rules did not read before, including foreign currency, which now carries its stated rupee amount; a seizure in the Western Indian Ocean is no longer placed in Mumbai, and a weight in a multi-case release is no longer attached to two iPhones. In the news layer, counts after verbs such as "recovers" are read correctly, counts of people are no longer read as items, and liquor and theft cases are left out.
Data files

Everything on these pages is built from files anyone can download. They are rebuilt on every run; the manifest lists each file with its size, the time the files were written (generated_at) and the time the data in them was read (data_as_of). A rebuild from the cache keeps the older read time, and that is the time the pages show.

FileWhat it holds
events.csvBoth layers, one row per event. The columns are listed below.
events.jsonOfficial events with every item (category, kind, quantity, unit), places, zone, border reasons and all source links.
news.jsonThe "reported in news" layer and the status of each month's GDELT query. No headlines.
summary.jsonHeadline totals, totals by kind of item, zones, agencies, largest seizures, screening counts.
monthly.jsonEvents, border-related events, categories and quantities by month, for both layers.
states.json, districts.jsonEvents, quantities, values and agencies by state and by district.
sources.jsonSource status, PIB coverage by month, and the GDELT month log.
reference.jsonThe land-border and coastal district lists.
feed.xmlAn Atom feed of the 50 newest official events, for feed readers.
manifest.jsonProvenance: sources, licences, files, sizes, counts and run time.

Columns of events.csv

ColumnMeaning
idIndex id: pib- and the PIB release number, or n- and a hash of the article address for the news layer
layerofficial or news
dateRelease date (official) or first-seen date (news), India Standard Time, YYYY-MM-DD
event_dateDay of the seizure when the release gives it, else empty
categoriesCategories separated by |: narcotics, gold, cattle, currency, arms, wildlife, drones, other
summaryItems with quantities in standard units, then the stated value if any
titleRelease title with personal names withheld (official layer only)
state, districtPlace of the seizure as named, empty when not stated or in several states
zoneland_border, coastal, inland, airport, port, sea, multiple, or empty
border, border_reasonsyes or no, and the reasons separated by |
agenciesAgencies named, separated by |
value_inrStated value in rupees as published, empty when none is given
source_name, source_urlPIB office and ministry, or the news outlet's domain, and the link
Licence and citation

The compiled data (events, aggregates, CSV) is published under CC BY 4.0. Credit "Trinetra Darpan, compiled from PIB releases" and link to this page. Press releases remain the work of the Government of India and are linked, not copied. News articles belong to their publishers. District names and coordinates come from Wikidata (CC0). The news layer uses the GDELT Project under its terms of use.

Suggested citation:

Trinetra Darpan, public transparency index of frontier enforcement, data as of the date shown on each page. https://trinetrahq.com/darpan/
Reproduce

The pipeline is plain Python. From the repository's pipeline/ folder (tests from the repository root):

# fetch new data and rebuild
python3 -m trinetra.darpan run
# rebuild from cached responses only
python3 -m trinetra.darpan run --offline
# run the tests (from the repository root)
python3 -m pytest tests/test_darpan.py -q

Requests are spaced (one every 2.5 seconds to PIB, one a minute to GDELT) and every response is cached so that a rebuild does not touch the network. PIB's firewall rejects user agents that include a contact URL, so PIB requests identify as TrinetraResearch/0.3. Exports are listed with their sizes in manifest.json.