Source research

One Court System, Thirty-Two Domains: What Crawlers Get From China's Provincial High Courts

Yesterday we measured the eleven national endpoints under court.gov.cn and said plainly that provincial and municipal court sites were out of scope. That exclusion was the interesting part. Every research guide we have read stops at the same place: it lists the national portals, notes that local courts also maintain websites, and moves on. Nobody publishes what those local sites return.

This matters more than the national layer does, because the national layer is a small number of well-known hosts and the provincial layer is where the court system actually is. Each province, autonomous region and directly-administered municipality has a high court, and each of those runs a public website. If you are assembling a picture of what the Chinese judiciary publishes, thirty-two sites you have never tested are a larger blind spot than eleven you have.

So we tested them. On 29 August 2026, from one machine, we requested each provincial high court's front page over HTTPS and over plain HTTP, requested its robots.txt, followed redirects to the end, recorded status codes and byte counts, and stripped scripts, comments and tags to count how much text a crawler is left holding. Thirty-two hosts, about a hundred and thirty requests, a few minutes.

Scope and units, stated once. This page covers the thirty-two provincial-level high courts, including the Xinjiang Production and Construction Corps court, as linked from the Supreme People's Court's own home page. Intermediate and basic courts are far more numerous and were not measured. Every observation is from a single network vantage point on a single day; Chinese government infrastructure varies by origin, and several of these hosts sit behind edge delivery networks. Nothing here is a statement about what any of these sites permits — see the closing section.

The first finding is that there is no list

We expected to start from a directory. There isn't one. There is no *.court.gov.cn namespace covering the provinces, no index page enumerating provincial courts with their addresses, no machine-readable registry. The nearest thing to an authoritative enumeration is the set of outbound links on the Supreme People's Court's own home page, which is where our list came from.

Having taken it from there, we then had to confirm that each host was the court we thought it was, so we read every page title. All thirty-two identify themselves — 河北省高级人民法院, 四川省高级人民法院, and so on — which is how we know the mapping is right rather than assumed. Two of those titles arrived unreadable, for reasons covered further down.

What the list shows is that the Chinese court system has no shared web namespace at the provincial level at all:

PropertyMeasured, 29 August 2026
Provincial-level courts measured32
Distinct registrable domains32 — one per court, no sharing
Hosted under court.gov.cn0
Under .gov.cn at all31 of 32
Front page reachable (either scheme)32 of 32
HTTPS returning 2xx22 of 32
Serving a parseable robots.txt1 of 32

Thirty-two courts, thirty-two second-level domains, and no two of them built on the same naming convention. Some are transparent: www.hebeicourt.gov.cn, www.gdcourts.gov.cn — note the plural on one and not the other. Some use the pinyin abbreviation for the province plus a word for court: jsfy.gov.cn, nxfy.gov.cn. Some are opaque unless you already know: Zhejiang is zjsfgkw.gov.cn, Chongqing is cqfygzfw.gov.cn, Sichuan is scssfw.gov.cn, Qinghai is qhwsfy.gov.cn. Jilin's court sits on e-court.gov.cn, a domain whose name says nothing about Jilin. Gansu's is chinagscourt.gov.cn.

Two collisions are worth flagging for anyone building a lookup table. Shanxi and Shaanxi — different provinces, identical romanisation without tone marks — both use the host prefix sxgy, on shanxify.gov.cn and sxfywcourt.gov.cn respectively. And Shanghai's high court is not on a .gov.cn domain at all: it is www.hshfy.sh.cn, the only one of the thirty-two outside the government namespace.

For a research guide, the practical consequence is that the provincial layer cannot be described by a pattern. It has to be enumerated, and the enumeration has to be maintained, because there is no upstream source to inherit it from.

A third of them cannot be fetched over HTTPS — for one reason

Twenty-two of the thirty-two answered HTTPS with a 2xx status. The other ten did not, and nine of those ten failed in exactly the same way: the TLS handshake completed, but the certificate presented was issued for a different name than the one requested. A strict client refuses the connection at that point.

The certificates tell you why. Eight of the nine presented a certificate for *.edgenext.com; the ninth presented one for www.baishan.com. These are content delivery networks. What we are looking at is nine provincial high courts fronted by an edge network on which no certificate has been installed for the court's own hostname, so the edge falls back to serving its own default. The tenth failure, Heilongjiang, was a connection timeout rather than a certificate problem.

CourtHostHTTPS resultCertificate presented
Inner Mongoliagy.nmgfy.gov.cnRefused*.edgenext.com
Jilinjlfy.e-court.gov.cnRefused*.edgenext.com
Anhuiahfy.ahcourt.gov.cnRefused*.edgenext.com
Hubeihubeigy.hbfy.gov.cnRefusedwww.baishan.com
Hunanhngy.hunancourt.gov.cnRefused*.edgenext.com
Chongqingcqgy.cqfygzfw.gov.cnRefused*.edgenext.com
Sichuanscfy.scssfw.gov.cnRefused*.edgenext.com
Shaanxisxgy.sxfywcourt.gov.cnRefused*.edgenext.com
XPCCbtfy.btcourt.gov.cnRefused*.edgenext.com
Heilongjiangwww.hljcourt.gov.cnTimed out

All ten served their front page normally over plain HTTP. So these sites are up, and a person in a browser reaches them after clicking through a warning, or never sees a warning because they arrived over HTTP in the first place. What breaks is the automated path. A pipeline that requires valid TLS records ten of thirty-two provincial high courts as unreachable, and the failure looks like the site being down rather than like a certificate that was never installed.

The reverse case exists too, in smaller numbers. Henan answered HTTPS cleanly but failed on plain HTTP; Shandong answered HTTP with a 500 and HTTPS with a 200; Gansu answered plain HTTP with a 405. Whichever single scheme you standardise on, you will wrongly conclude that some of these courts have no website.

Thirty-one of thirty-two publish no robots.txt

This is the sharpest result in the set. We requested robots.txt from every host, over both schemes, and treated a response as a robots file only if it parsed as one rather than arriving as HTML.

Exactly one provincial high court publishes a robots file. Shandong's is twenty-two bytes:

User-agent: *
allow:/

Lowercase directive name, CRLF line endings, and a rule that permits everything. It is valid — directive names are case-insensitive — and it is the only crawl instruction any of the thirty-two provincial high courts publishes. The other thirty-one returned an HTML error page with HTTP 404.

Two things follow, and they are easy to conflate. The first is mechanical: under the robots exclusion standard, a 404 on robots.txt means no restrictions are expressed, and a conforming crawler proceeds. So the machine-readable position of thirty-one provincial high courts is silence, and silence is permissive by default.

The second is that silence is not permission. These sites have terms of use, they sit under Chinese law, and a status code is not a licence. We say the same thing about the national portals and we will say it again at the bottom of this page: the absence of a Disallow tells you what a crawler will do, not what you are entitled to do. The gap between those two sentences is where most data-sourcing risk lives.

Two million bytes, a hundred thousand characters

Across all thirty-two front pages we received 2,369,333 bytes of HTML. Stripping scripts, styles, comments and tags left 115,904 characters of visible text — 4.89 per cent. The median site yielded 3,604 characters; the thinnest was Shanghai at 1,346 and the richest Sichuan at 6,556.

That ratio is nearly identical to the 3.64 per cent we measured across the national endpoints the day before, and it has the same cause. These are portal pages: news carousels, notice lists, service tiles, all assembled by client-side script from JSON the crawler never requests. A crawler that does not execute JavaScript comes away with a masthead and a footer.

Encoding adds a second failure mode at this layer that we did not see nationally. Two of the thirty-two — Shanghai and Heilongjiang — returned titles that do not decode as UTF-8, arriving as sequences like Ϻи߼Ժ. The pages are served in a legacy Chinese encoding without a declaration that survives to the byte stream. A human browser guesses correctly. A pipeline that assumes UTF-8, as most do, silently ingests two provincial high courts as mojibake and will not raise an error while doing it.

What the provincial layer is actually for

The obvious question after all this is whether these sites hold judgments. Mostly they do not — they point at the ones that do. Twenty-seven of the thirty-two front pages reference China Judgements Online or carry the phrase for judgment documents; nineteen reference the enforcement disclosure portal.

Read structurally, the provincial layer is a signpost layer. It carries local notices, court news, hearing schedules, service links and provincial-level guidance, and for actual decision text it forwards to the national portals. That is a coherent design, and it is worth stating in plain terms because it corrects a natural assumption. Thirty-two provincial court websites are not thirty-two additional judgment sources, and a research guide that lists them alongside China Judgements Online without saying so implies a symmetry that does not exist.

It also means the failures above matter less for corpus building than they first appear, and more for something else: provenance. If you need to confirm that a court exists under the name a judgment gives, or find its jurisdiction, or cite the court's own publication of a notice, the provincial site is the primary source — and it is the primary source that a tenth of the time will not answer an automated request, and twice in thirty-two will hand you unreadable bytes.

A correction to yesterday’s count

Building this list forced a check on our own previous page. Yesterday we published an inventory of eleven official endpoints under court.gov.cn. The provincial hostnames used here came from the Supreme People’s Court’s own home page, and extracting them meant reading every outbound link on that page — which showed that eleven is not the size of the national set.

At least eleven further hosts under court.gov.cn are linked directly from the SPC home page and appear nowhere in yesterday’s inventory: data, gtpt, rmft, peixun, pccz, ssfw, tiaojie, jubao, zxfw, rmfygg and dyjfalk. Yesterday’s page covered the hosts a research guide would name: the ones carrying decisions, dockets, hearings and the Gazette. That was a defensible selection, but the page presented those eleven as the national endpoints rather than as the eleven we had chosen to measure. The accurate statement is that the national layer under court.gov.cn is at least twice the size of the inventory we published, and that our page described a subset without saying so.

We are not publishing measurements for the additional eleven today, and the reason is worth recording. Our first pass returned an identical transport failure for all eleven, which is not the shape a real finding has. Requesting the same hosts individually a few minutes later returned a 502, a 301 and a 200. The uniform failure was almost certainly ours: several of these names resolve to the same web application firewall address as China Judgements Online, and a burst of requests from a single client is the obvious explanation. So those hosts remain unmeasured, which is a different claim from unreachable, and we would rather leave a gap than publish a number we could not reproduce ten minutes later.

That is also the practical caution for anyone reproducing this work: pace the requests, and treat a set of identical failures as a defect in the measurement before treating it as a fact about the target.

The full inventory

All thirty-two, as measured on 29 August 2026. “Front page served over” records the scheme that returned the page; where it reads HTTP only, HTTPS was refused or timed out. Byte and character counts are of the served markup.

Province / regionHostFront page served overHTML bytesVisible text charsrobots.txt
Beijingbjgy.bjcourt.gov.cnHTTPS57,7822,405none (404)
Tianjintjfy.tjcourt.gov.cnHTTPS111,0574,364none (404)
Hebeiwww.hebeicourt.gov.cnHTTPS89,2964,551none (404)
Shanxisxgy.shanxify.gov.cnHTTPS49,6622,126none (404)
Inner Mongoliagy.nmgfy.gov.cnHTTP only54,5202,509none (404)
Liaoningln.lncourt.gov.cnHTTPS58,6632,691none (404)
Jilinjlfy.e-court.gov.cnHTTP only94,1623,803none (404)
Heilongjiangwww.hljcourt.gov.cnHTTP only55,6881,680none (404)
Shanghaiwww.hshfy.sh.cnHTTPS44,6191,346none (404)
Jiangsuwww.jsfy.gov.cnHTTPS71,4975,669none (404)
Zhejiangwww.zjsfgkw.gov.cnHTTPS66,6751,971none (404)
Anhuiahfy.ahcourt.gov.cnHTTP only81,2153,474none (404)
Fujianfjfy.fjcourt.gov.cnHTTPS70,9352,732none (404)
Jiangxijxgy.jxfy.gov.cnHTTPS51,3812,559none (404)
Shandongwww.sdcourt.gov.cnHTTPS110,8013,755allow-all (22 B)
Henanwww.hncourt.gov.cnHTTPS65,4123,869none (404)
Hubeihubeigy.hbfy.gov.cnHTTP only45,1562,243none (404)
Hunanhngy.hunancourt.gov.cnHTTP only105,0634,683none (404)
Guangdongwww.gdcourts.gov.cnHTTPS67,5785,593none (404)
Guangxigxfy.gxcourt.gov.cnHTTPS92,8005,808none (404)
Hainanwww.hicourt.gov.cnHTTPS66,6033,604none (404)
Chongqingcqgy.cqfygzfw.gov.cnHTTP only55,8223,919none (404)
Sichuanscfy.scssfw.gov.cnHTTP only83,3816,556none (404)
Guizhouwww.guizhoucourt.gov.cnHTTPS73,1612,936none (404)
Yunnanfy.yngy.gov.cnHTTPS106,2915,884none (404)
Tibetxzgy.xzcourt.gov.cnHTTPS42,5222,234none (404)
Shaanxisxgy.sxfywcourt.gov.cnHTTP only121,2785,342none (404)
Gansuwww.chinagscourt.gov.cnHTTPS79,2224,810none (404)
Qinghaiqhgy.qhwsfy.gov.cnHTTPS59,1492,519none (404)
Ningxiawww.nxfy.gov.cnHTTPS67,1602,030none (404)
Xinjiangxjfy.xjcourt.gov.cnHTTPS126,6596,270none (404)
XPCC (Xinjiang Corps)btfy.btcourt.gov.cnHTTP only44,1231,969none (404)

How to write this into a research guide

If you maintain a guide to Chinese legal research and want an entry for the provincial layer that will still be true when a reader tests it, four sentences do most of the work.

Reproduce it

Nothing here needs privileged access, and the value of the method is that it can be re-run rather than that our numbers can be cited indefinitely. For each host, request the front page over both schemes and robots.txt over both, recording status, bytes and the final URL after redirects. Then:

What this page does not settle

It is a single vantage point on a single day. Several of these hosts sit behind edge networks that vary by origin, so a reader in another country may get different codes, and the certificate observations in particular describe a configuration that can be corrected at any time without notice.

It is not a legal conclusion. We did not log in, did not test rate limits, did not read terms of use, and did not evaluate whether any of this material may be collected or reused. Status codes are not permissions, and a missing robots.txt is not a licence.

We did not render pages. Text counts are of served markup, which is what a crawler receives, not what a browser displays. We did not measure intermediate or basic courts, which are far more numerous, and we do not extrapolate from thirty-two provincial sites to them. We have not measured any other data provider's coverage of this layer and make no comparison to one.

And our own record has gaps we have published: a large block of our corpus carries damaged dates and empty cause-of-action fields, a further block is marked as withheld from publication and has no full text, and our own retrieval does not normalise between traditional and simplified Chinese. Those are open engineering items on our side, not solved problems. We are the party selling the data, and a fair reading of this page is that the free official layer is less usable by machine than its published-ness suggests — which is an argument that happens to favour us, so weigh it accordingly and re-run the measurement yourself.

Frequently asked questions

Do China's provincial high courts have official websites, and where are they?

All thirty-two provincial-level high courts — the thirty-one provinces, autonomous regions and directly-administered municipalities plus the Xinjiang Production and Construction Corps court — maintain a public website, and all thirty-two were reachable on 29 August 2026. There is no shared namespace: each sits on its own registrable domain, none of them under court.gov.cn, and Shanghai's is not under .gov.cn at all but on www.hshfy.sh.cn. There is also no official directory enumerating them. The nearest authoritative list is the set of outbound links on the Supreme People's Court's own home page, which is where the list used here came from. Naming conventions do not generalise: Hebei is www.hebeicourt.gov.cn while Zhejiang is www.zjsfgkw.gov.cn and Jilin's court sits on e-court.gov.cn, a domain whose name does not mention Jilin.

Can I fetch Chinese provincial court websites over HTTPS?

Not all of them. On 29 August 2026, twenty-two of thirty-two answered HTTPS with a 2xx status and ten did not. Nine of those ten failed identically: the TLS handshake completed but the certificate presented was issued for a delivery network rather than the court, eight for *.edgenext.com and one for www.baishan.com, so a strict client refuses the connection. The tenth, Heilongjiang, timed out. All ten served the same front page normally over plain HTTP. The asymmetry runs the other way too — Henan answered HTTPS but failed over plain HTTP, Shandong returned 500 over HTTP and 200 over HTTPS, and Gansu returned 405 over HTTP. A pipeline that standardises on one scheme will record some of these courts as having no website at all.

What does the robots.txt of a Chinese provincial court website say?

Thirty-one of the thirty-two publish no robots.txt: the request returns an HTML error page with HTTP 404. Exactly one does. Shandong's is twenty-two bytes containing a catch-all user-agent group and a lowercase allow directive permitting everything. Under the robots exclusion standard a 404 means no restrictions are expressed and a conforming crawler proceeds, so the machine-readable position of thirty-one provincial high courts is silence. Silence is not permission. These sites carry terms of use and sit under Chinese law; a status code describes what a crawler will do, not what a collector is entitled to do.

Do provincial court websites publish judgment texts?

Mostly they point at the portals that do rather than holding decisions themselves. Twenty-seven of the thirty-two front pages measured on 29 August 2026 reference China Judgements Online or carry the phrase for judgment documents, and nineteen reference the enforcement disclosure portal. Structurally the provincial layer is a signpost layer carrying local notices, court news, hearing schedules and service links, forwarding to the national portals for decision text. Thirty-two provincial court websites are therefore not thirty-two additional judgment sources, and a guide that lists them next to China Judgements Online without saying so implies a symmetry that does not hold. Where they are primary is provenance: confirming a court exists under the name a judgment gives, or citing the court's own publication of a notice.

How much usable text do these sites return to a crawler?

Very little relative to their size. Across all thirty-two front pages the sites returned 2,369,333 bytes of HTML yielding 115,904 characters of visible text once scripts, styles, comments and tags were removed, about 4.89 per cent. The median site yielded 3,604 characters, the thinnest 1,346 and the richest 6,556. The cause is the same as at the national level: these are portal pages whose news lists and service tiles are assembled by client-side script from data the crawler never requests. Encoding adds a second failure mode — two of the thirty-two, Shanghai and Heilongjiang, return titles that do not decode as UTF-8, so a pipeline assuming UTF-8 ingests them as mojibake without raising an error.

Verify the official layer yourself. Then decide what you still need.

SinoVerdict licenses PRC judgment data to teams building legal AI — bulk delivery, a REST API and an MCP endpoint over a 160M+ record corpus, English-indexed, with case-number citations to the original judgments and the known gaps documented before anything is signed. Tell us which questions your product has to answer and we will show you, on your slice and with counts, which of them the record supports and which it does not. Write to chenjiaxin@wenshucha.com or use the form.

Request trial access