Methodology
How we work, in enough detail to be checked
This page describes our method at the level of specific fields and parameters, because a method that cannot be reproduced cannot be criticised, and a method that cannot be criticised is not research. It also states plainly what our evidence cannot tell us. That section is the most important one on this page.
Procedure
-
Sources of evidence
Our primary source is the Lumen Database, an independent research project at the Berkman Klein Center for Internet & Society at Harvard University, which collects and analyses legal complaints and requests for the removal of online material. We use it alongside two secondary sources: the periodic transparency reports published by platforms operating in Indonesia, and public statements, regulations, and filings issued by Indonesian authorities.
The secondary sources serve as a cross-check on magnitude. Where a platform's own report states that it received a given number of Indonesian government requests in a period, and our extraction from the notice archive finds far fewer, that gap is itself a finding about archive coverage and is reported as such.
-
Notice types in scope
We analyse three notice types, which correspond to state action:
GovernmentRequest— demands originating with government bodies.LawEnforcementRequest— demands from law-enforcement agencies, which additionally carry arequest_typedistinguishing an agency letter from a subpoena, warrant, records-preservation demand, or civil subpoena.CourtOrder— orders issued by courts.
We exclude
DMCAnotices from the primary corpus. They dominate the archive by volume and concern private copyright enforcement rather than state action, and admitting them would bury the signal we are looking for under orders of magnitude more noise. We treatDefamation,PrivateInformation, andDataProtectionnotices as out of primary scope on similar reasoning, while noting that demands concerning Indonesian public figures sometimes arrive under these headings; where our sampling encounters them, we record the fact rather than silently discarding it.That exclusion is not absolute. Copyright claims are sometimes used as a pretext to remove criticism, reporting, or other lawful speech, and a demand of that kind is an act of suppression whatever heading it arrives under. We therefore keep a bounded secondary line of inquiry: where a copyright claim concerning Indonesia is brought to our attention and its apparent purpose is to remove speech rather than to enforce a genuine right, we examine it and report it separately from the main counts, never folded into them. We do not sweep the copyright corpus looking for such cases, because we have no reliable way to detect them at scale. Saying so is more useful than implying a coverage we do not have.
-
Identifying records concerning Indonesia
No single field reliably identifies an Indonesian matter, so we triangulate three and treat their disagreement as information rather than noise:
jurisdictions— a list supplied by whoever submitted the notice. Useful, but inconsistently populated, because it depends on the submitter's own practice.entities_country_codes— searches the country codes recorded for all entities attached to a notice, catching records where the sending or receiving party is Indonesian even when the jurisdiction field is empty.country_code_facet— filters on the submitter's country code, used as a coarse check rather than a primary filter.
We use
language_facetset toidas a supplementary signal only. Many demands concerning Indonesia are drafted in English, so language is a weak indicator and we never rely on it alone. Every record entering the corpus is tagged with which of these signals matched it, and we publish the resulting overlap table so readers can see how much our count depends on each. -
Reading the legal basis
The archive serves notice fields under names that vary by notice type, and the fields carrying statutory citations are the ones our third research question depends on. For court orders, the submitted regulations appear as
laws_referenced. For law-enforcement requests, the submitted regulation list appears asregulations. The explanatory text submitted with a notice appears asexplanationfor all three of our types.Citations in these fields are free text written by many different hands, so the same provision appears in many spellings and formats. We extract citations with a published coding scheme, normalise them to a canonical form, and publish the normalisation table alongside each output so that a reader who disagrees with a mapping can see exactly what we did and redo it differently.
-
Measuring the recipient's response
The archive records what the recipient platform did as
action_taken, valuedYes,No, orPartial. This is a direct measurement of compliance and requires no inference on our part, which is why our fifth research question is framed around it.Two cautions travel with every use of this field. It reflects what the submitting platform reported, not an independent verification. And it is frequently absent, so we always report the proportion of records where it is missing rather than quietly computing percentages over the subset that happens to have it.
-
Building time series
Date filtering uses
date_received_facet, expressed as a Unix epoch millisecond range. We record and report which date field a given series is built on, because the date a notice was received differs from the date it was sent, and mixing them produces artefacts that look like trends.We partition extraction into fixed date windows rather than paginating deeply through one large result set. This is partly good practice and partly necessity: the archive's search index will not return results past the ten-thousandth, so a query broad enough to exceed that ceiling silently truncates. Very broad queries can also fail outright. Windowing keeps every individual query small, makes each one independently re-runnable, and turns the ceiling into a non-issue.
Results are retrieved sorted by date received rather than by relevance. Relevance scores are meaningful for finding documents and meaningless for counting them, and sorting by relevance while paginating invites double-counting.
-
Query discipline
We access the archive through its documented JSON interface, requesting
.jsonendpoints or sending anAccept: application/jsonheader. Specifically:- Requests carry a descriptive
User-Agentthat identifies this collective and gives a contact address, so that the archive's operators can always tell who is making a request and reach us if our traffic causes a problem. - Authenticated requests send the token in an
X-Authentication-Tokenheader rather than in the query string, keeping credentials out of logs and out of shared query strings. - We leave at least one second between requests, in line with the documented rate limit, and we do not run parallel workers against the archive.
- We send
Accept-Encoding: gzip, because authenticated result sets can be large and bandwidth costs the host money. - We back off and retry on rate-limit responses rather than hammering, and we treat an authorisation failure as a configuration bug to be fixed rather than retried.
- Topic identifiers are resolved from the archive's own topic listing rather than hard-coded, so that our filters do not silently drift as the taxonomy changes.
Extractions are date-stamped and versioned. The archive grows and is edited, so a count is only meaningful with the date it was taken, and every figure we publish carries one.
- Requests carry a descriptive
-
Coding and error estimation
Classification that requires judgement — whether a demand concerns journalism, which provision a loose citation refers to — is double-coded by two members working independently. We report inter-coder agreement and publish the disagreements rather than resolving them invisibly. For automated steps such as entity-name normalisation, we hand-review a random sample and report the observed error rate, so readers know the precision of the numbers rather than assuming it.
-
What our evidence cannot tell us
These limitations are not caveats added at the end of a finished argument. They constrain what we are willing to claim in the first place.
- The archive is not a census. It contains only notices that recipients voluntarily submit. Submission is concentrated among a few large platforms, so absence of records is not evidence of absence of demands. Every count we publish is a documented floor.
- Coverage varies by recipient, not only by volume. Different submitters share different categories of notice. Google shares removal requests it receives from government bodies other than courts, which is why state demands concerning Indonesia are visible in the archive at all. Cloudflare shares copyright notices and court orders it receives, so an administrative demand sent to Cloudflare without a court order behind it does not appear. The same ministry request can therefore be visible or invisible depending only on who received it, and our counts are shaped by that before any analysis begins.
- Records are redacted. Personal information and some URLs are withheld or truncated before publication. Our analysis works with what remains, and we do not attempt to reconstruct what was removed.
- Jurisdiction fields are submitter-supplied. Our Indonesia filter is therefore a construct, not a fact, which is why we publish the overlap table showing how each signal contributed.
- Free-text fields are inconsistent. Agency names and legal citations are written differently by different submitters. Normalisation improves comparability and introduces its own error, which we measure and report.
- Compliance is self-reported. The action recorded against a notice is what the platform stated, and often nothing was stated at all.
- We cannot establish intent or causation. The records show what was demanded and what was recorded as done. They do not show why a body made a demand, whether pressure was applied outside the record, or what would have happened otherwise. We describe patterns and decline to infer motive.
-
Reproducibility and correction
Every output is published with the query parameters used, the extraction dates, the normalisation and coding tables, and the analysis code, so that a reader with their own archive access can reproduce our figures. We publish aggregate results and derived tables; we do not redistribute bulk copies of the underlying records, both because the archives ask researchers not to and because it is unnecessary for verification.
When we find an error, we correct it in place, mark the correction visibly with its date, and describe what changed. Corrections are listed on the publications page rather than made quietly. Anyone may write to us to dispute a finding; the route is on the contact page.
Attribution
Our use of the Lumen Database is governed by its API Terms of Use, which permit access for research purposes and require this notice, which appears in the footer of every page on this site:
This product uses the Lumen API but is not endorsed or certified by Lumen.
Lumen data is made available under a public-domain dedication and Lumen's own text under Creative Commons Attribution. Neither the Berkman Klein Center nor the Lumen project has reviewed, approved, or endorsed our research, and any errors in it are ours alone.