Performance marketing for AI-era growth – backed by models, not gut feeling.
TL;DR
  • 95 rows = 19 universities × 5 school-leaving certificates (Russian attestat with EGE, Turkish lise diploma, Serbian matura, EU school-leaving certificates, UK A-level).
  • Mainland: 68 of 80 mainland rows accept "a high school diploma" without naming the certificate; 10 of 16 mainland universities name at least one certificate. At the 3 Hong Kong universities 11 of 15 rows give a minimum grade.
  • Visa-free short stays never cover study: all 7 passports need an X1 visa for the mainland, and 1 of 7 (TR) has no visa-free entry to the mainland at all.
  • The China Scholastic Competency Assessment (CSCA), an entrance test for international applicants, is required at 14 of 16 mainland universities (admission_cycle.csv).
  • 13 rows on the switch from HSK 2.0 to HSK 3.0: a larger vocabulary is needed for the same level number, while university thresholds keep their wording.
Download

data.csv. 95 rows, 14 columns.

admission_cycle.csv. 19 rows, 15 columns.

apostille.csv. 8 rows, 12 columns.

hsk_status.csv. 13 rows, 8 columns.

language_realism_evidence.csv. 11 rows, 10 columns.

language_requirements.csv. 38 rows, 16 columns.

prep_programmes.csv. 24 rows, 18 columns.

visa_by_passport.csv. 14 rows, 21 columns.

work_rules.csv. 12 rows, 10 columns.

sources.csv. 132 rows, 6 columns.

data.json: the rows of data.csv as JSON.

schema.json: JSON Schema of data.json.

datapackage.json: Frictionless Data descriptor of every CSV.

Also on Kaggle · Hugging Face

Scope

16 mainland universities in the ARWU 2026 top 100 plus 3 in Hong Kong (HKU and CityUHK are in the top 100, CUHK is kept as a reference).

Codebook

data.csv, 95 rows. Unique key: university_id + certificate.

ColumnTypeValues / unitWhat it holds
university_idstringtext (19 distinct)Stable slug of the university, the same id as in the other Long Bet datasets (e.g. tsinghua-university).
certificatestringeu_school_leaving, rs_matura, ru_attestat_ege, tr_lise_diplomasi, uk_a_levelSchool-leaving certificate: ru_attestat_ege (Russian attestat with EGE), tr_lise_diplomasi (Turkish lise diploma), rs_matura (Serbian matura), eu_school_leaving (EU school-leaving certificates such as Abitur, baccalaureat, maturita), uk_a_level.
acceptedstringconditional, not_stated, yes, yes_generic_hs_diplomayes = the certificate is named as accepted; yes_generic_hs_diploma = any high school diploma accepted, certificate not named; conditional = accepted with an extra step; not_stated.
certificate_namedstringtext (16 distinct); null in 69Name of the certificate as written on the page, when named.
extra_requirementsstringtext (22 distinct); null in 3Tests, language and other requirements on top of the certificate.
document_rulesstringtext (19 distinct); null in 4Rules on transcripts, translations, notarisation and apostille.
min_gradesstringtext (14 distinct); null in 81Minimum grades for this certificate, when published.
intakestringtext (11 distinct)Intake the page refers to.
statusstringfoundfound = the fact was read on the source page; not_found = the page was checked and the fact is not there: the row records what was looked for, source_url gives the URL tried and note says what was missing.
source_urlstringtext (23 distinct)Page(s) where the fact is stated, "; "-separated, primary pages first. For not_found rows: the page(s) tried.
source_typestringofficialofficial = university, government, embassy, airport or ranking publisher page; law = legal act; secondary = media, Wikipedia, agencies, aggregators.
checked_atstringtext (2 distinct)Date the row was last read on the source, ISO 8601.
confidencestringpartial, verifiedverified = read on an official or legal page for the current cycle; partial = official but older cycle or incomplete, or a reputable secondary source; estimate = derived or calculated, method in note. Empty for not_found rows.
notestringtext (43 distinct)Caveats in English. "Updated 2026-10-23:" marks text added by the second verification pass of 23 October 2026.

Table 1. Columns of data.csv.

admission_cycle.csv, 19 rows. Unique key: university_id.

ColumnTypeValues / unitWhat it holds
university_idstringtext (19 distinct)Stable slug of the university, the same id as in the other Long Bet datasets (e.g. tsinghua-university).
intakestringtext (11 distinct)Intake the page refers to.
application_openstringtext (15 distinct); null in 2Application opening date (ISO 8601 where the page gives one date; text where routes or rounds differ).
application_deadlinestringtext (19 distinct)Application deadline (ISO date where the page gives one date; text where there are several rounds).
results_datestringtext (15 distinct); null in 4When decisions are published.
study_startstringtext (12 distinct); null in 5Start of study.
csca_requiredstringfalse, optional, trueChina Scholastic Competency Assessment (CSCA): true required, false not required, optional accepted as evidence.
own_examstringtext (18 distinct); null in 1University entrance exam or interview.
intl_quota_or_competitionstringtext (2 distinct); null in 15Published quota or competition figures for international applicants.
statusstringfoundfound = the fact was read on the source page; not_found = the page was checked and the fact is not there: the row records what was looked for, source_url gives the URL tried and note says what was missing.
source_urlstringtext (19 distinct)Page(s) where the fact is stated, "; "-separated, primary pages first. For not_found rows: the page(s) tried.
source_typestringofficial, secondaryofficial = university, government, embassy, airport or ranking publisher page; law = legal act; secondary = media, Wikipedia, agencies, aggregators.
checked_atstringtext (2 distinct)Date the row was last read on the source, ISO 8601.
confidencestringpartial, verifiedverified = read on an official or legal page for the current cycle; partial = official but older cycle or incomplete, or a reputable secondary source; estimate = derived or calculated, method in note. Empty for not_found rows.
notestringtext (19 distinct)Caveats in English. "Updated 2026-10-23:" marks text added by the second verification pass of 23 October 2026.

Table 2. Columns of admission_cycle.csv.

apostille.csv, 8 rows. Unique key: record_id.

ColumnTypeValues / unitWhat it holds
record_idstringtext (8 distinct)Row id: <party_a slug>__<topic>__<n>.
topicstringbilateral_in_force, china_mainland_accession, hong_kong_status, mainland_hong_kong, objectionTopic: bilateral_in_force, mainland_hong_kong, hong_kong_status, objection and others.
party_astringtext (2 distinct)Jurisdiction on one side (China mainland or Hong Kong SAR).
party_bstringtext (6 distinct); null in 2Other party (country or group of countries).
sincestringtext (3 distinct); null in 1Date the Apostille Convention applies between the parties, ISO 8601.
detailstringtext (8 distinct)What applies.
statusstringfoundfound = the fact was read on the source page; not_found = the page was checked and the fact is not there: the row records what was looked for, source_url gives the URL tried and note says what was missing.
source_urlstringtext (3 distinct)Page(s) where the fact is stated, "; "-separated, primary pages first. For not_found rows: the page(s) tried.
source_typestringofficial, secondaryofficial = university, government, embassy, airport or ranking publisher page; law = legal act; secondary = media, Wikipedia, agencies, aggregators.
checked_atstringtext (1 distinct)Date the row was last read on the source, ISO 8601.
confidencestringpartial, verifiedverified = read on an official or legal page for the current cycle; partial = official but older cycle or incomplete, or a reputable secondary source; estimate = derived or calculated, method in note. Empty for not_found rows.
notestringtext (7 distinct); null in 1Caveats in English. "Updated 2026-10-23:" marks text added by the second verification pass of 23 October 2026.

Table 3. Columns of apostille.csv.

visa_by_passport.csv, 14 rows. Unique key: passport + destination.

ColumnTypeValues / unitWhat it holds
passportstringtext (7 distinct)Passport, ISO 3166-1 alpha-2 (RU, TR, RS, DE, FR, IT, PL).
destinationstringhong_kong, mainlandmainland or hong_kong.
short_stay_visa_free_daysinteger0 to 90Visa-free stay for short visits. Unit: days (0 = a visa is needed). Never covers study.
short_stay_basisstringtext (6 distinct)Legal basis of the visa-free stay.
study_visa_typestringtext (2 distinct)Visa or entry permit needed for a bachelor programme.
where_to_applystringtext (6 distinct)Where the study visa is applied for.
visa_fee_amount_localinteger2 to 2500Consular visa fee, single entry. Unit: visa_fee_currency (one-off).
visa_fee_currencystringtext (5 distinct); null in 1ISO 4217 currency of the visa fee; null when the source does not state it.
visa_fee_periodstringone_offAlways one_off.
service_fee_amount_localstringtext (6 distinct); null in 8Visa centre service fee, as text with its currency (standard, express, urgent).
processing_daysstringtext (2 distinct); null in 6Processing time.
passport_validitystringtext (2 distinct)Passport validity required.
documentsstringtext (2 distinct)Documents for the study visa.
criminal_record_rulestringtext (2 distinct)Whether a criminal-record certificate is required and by whom.
residence_permitstringtext (3 distinct)Residence permit after arrival: deadline, fee, validity.
statusstringfoundfound = the fact was read on the source page; not_found = the page was checked and the fact is not there: the row records what was looked for, source_url gives the URL tried and note says what was missing.
source_urlstringtext (9 distinct)Page(s) where the fact is stated, "; "-separated, primary pages first. For not_found rows: the page(s) tried.
source_typestringofficial, secondaryofficial = university, government, embassy, airport or ranking publisher page; law = legal act; secondary = media, Wikipedia, agencies, aggregators.
checked_atstringtext (1 distinct)Date the row was last read on the source, ISO 8601.
confidencestringestimate, partial, verifiedverified = read on an official or legal page for the current cycle; partial = official but older cycle or incomplete, or a reputable secondary source; estimate = derived or calculated, method in note. Empty for not_found rows.
notestringtext (9 distinct)Caveats in English. "Updated 2026-10-23:" marks text added by the second verification pass of 23 October 2026.

Table 4. Columns of visa_by_passport.csv.

work_rules.csv, 12 rows. Unique key: region + topic.

ColumnTypeValues / unitWhat it holds
regionstringhong_kong, mainlandmainland (mainland China) or hong_kong (Hong Kong SAR).
topicstringgeneral_rule, illegal_employment, illegal_employment_penalty, internship, off_campus_permission, on_campus, part_time_work, post_graduation_work, summer, temporary_relaxationRule topic, e.g. part_time_work, internship, off_campus_permission.
rulestringtext (12 distinct)The rule, in words.
legal_basisstringtext (9 distinct)Law, regulation or scheme the rule is based on.
statusstringfoundfound = the fact was read on the source page; not_found = the page was checked and the fact is not there: the row records what was looked for, source_url gives the URL tried and note says what was missing.
source_urlstringtext (7 distinct)Page(s) where the fact is stated, "; "-separated, primary pages first. For not_found rows: the page(s) tried.
source_typestringlaw, officialofficial = university, government, embassy, airport or ranking publisher page; law = legal act; secondary = media, Wikipedia, agencies, aggregators.
checked_atstringtext (1 distinct)Date the row was last read on the source, ISO 8601.
confidencestringpartial, verifiedverified = read on an official or legal page for the current cycle; partial = official but older cycle or incomplete, or a reputable secondary source; estimate = derived or calculated, method in note. Empty for not_found rows.
notestringtext (9 distinct); null in 3Caveats in English. "Updated 2026-10-23:" marks text added by the second verification pass of 23 October 2026.

Table 5. Columns of work_rules.csv.

language_requirements.csv, 38 rows. Unique key: university_id + track.

ColumnTypeValues / unitWhat it holds
university_idstringtext (19 distinct)Stable slug of the university, the same id as in the other Long Bet datasets (e.g. tsinghua-university).
trackstringen_taught, zh_taughtProgramme track: zh_taught, en_taught (run by the university), en_taught_joint_institute, en_taught_international_college.
track_offeredstringno, yes; null in 1yes if the university offers this track to international bachelor applicants, no if not.
intake_cyclestringtext (5 distinct); null in 2Intake or cycle the requirement was published for.
hsk_level_requiredstringtext (6 distinct); null in 8HSK level required at application or enrolment; none = not required.
hsk_min_scorestringtext (6 distinct); null in 26Minimum HSK score as published (text: some pages give alternatives).
hsk_section_minstringtext (3 distinct); null in 34Minimum score per HSK section, when published.
hsk_scalestringtext (4 distinct); null in 23Which HSK version the threshold refers to (2.0 or 3.0), as far as the page says.
english_test_requiredstringtext (21 distinct); null in 9English test and minimum score required.
hsk_required_to_graduatestringtext (7 distinct); null in 7Chinese-language requirement to graduate.
statusstringfound, not_foundfound = the fact was read on the source page; not_found = the page was checked and the fact is not there: the row records what was looked for, source_url gives the URL tried and note says what was missing.
source_urlstringtext (31 distinct)Page(s) where the fact is stated, "; "-separated, primary pages first. For not_found rows: the page(s) tried.
source_typestringofficialofficial = university, government, embassy, airport or ranking publisher page; law = legal act; secondary = media, Wikipedia, agencies, aggregators.
checked_atstringtext (2 distinct)Date the row was last read on the source, ISO 8601.
confidencestringpartial, verified; null in 2verified = read on an official or legal page for the current cycle; partial = official but older cycle or incomplete, or a reputable secondary source; estimate = derived or calculated, method in note. Empty for not_found rows.
notestringtext (38 distinct)Caveats in English. "Updated 2026-10-23:" marks text added by the second verification pass of 23 October 2026.

Table 6. Columns of language_requirements.csv.

prep_programmes.csv, 24 rows. Unique key: university_id + prep_programme_name.

ColumnTypeValues / unitWhat it holds
university_idstringtext (19 distinct)Stable slug of the university, the same id as in the other Long Bet datasets (e.g. tsinghua-university).
prep_programme_namestringtext (21 distinct)Name of the preparatory (pre-university, foundation) programme; text starting with none = no such programme found.
providerstringtext (2 distinct); null in 5Who runs it.
language_of_prepstringtext (7 distinct); null in 6Language of instruction of the preparatory programme.
duration_monthsstringtext (9 distinct); null in 5Duration. Unit: months (range as text).
cost_amount_localinteger7000 to 56000; null in 10Tuition of the preparatory programme. Unit: currency per period.
currencystringtext (1 distinct); null in 6ISO 4217 currency of cost_amount_local.
periodstringone_off, per_semester, per_year; null in 7Period the amount refers to, e.g. per_year, per_month, one_off.
intake_cyclestringtext (17 distinct); null in 2Intake or cycle the requirement was published for.
entry_levelstringtext (16 distinct); null in 8Language or academic level needed to start.
target_levelstringtext (10 distinct); null in 12Level the programme leads to, or the condition to enter the bachelor.
progression_guaranteedstringtext (14 distinct); null in 6Whether finishing the programme guarantees a bachelor place, as stated.
statusstringfound, not_foundfound = the fact was read on the source page; not_found = the page was checked and the fact is not there: the row records what was looked for, source_url gives the URL tried and note says what was missing.
source_urlstringtext (22 distinct)Page(s) where the fact is stated, "; "-separated, primary pages first. For not_found rows: the page(s) tried.
source_typestringofficial, secondaryofficial = university, government, embassy, airport or ranking publisher page; law = legal act; secondary = media, Wikipedia, agencies, aggregators.
checked_atstringtext (2 distinct)Date the row was last read on the source, ISO 8601.
confidencestringpartial, verified; null in 1verified = read on an official or legal page for the current cycle; partial = official but older cycle or incomplete, or a reputable secondary source; estimate = derived or calculated, method in note. Empty for not_found rows.
notestringtext (24 distinct)Caveats in English. "Updated 2026-10-23:" marks text added by the second verification pass of 23 October 2026.

Table 7. Columns of prep_programmes.csv.

hsk_status.csv, 13 rows. Unique key: topic.

ColumnTypeValues / unitWhat it holds
topicstringtext (13 distinct)Topic of the HSK 2.0 to HSK 3.0 transition, e.g. hsk3_released, last_hsk2_sitting.
valuestringtext (13 distinct)The fact, in words.
statusstringfoundfound = the fact was read on the source page; not_found = the page was checked and the fact is not there: the row records what was looked for, source_url gives the URL tried and note says what was missing.
source_urlstringtext (12 distinct)Page(s) where the fact is stated, "; "-separated, primary pages first. For not_found rows: the page(s) tried.
source_typestringofficial, secondaryofficial = university, government, embassy, airport or ranking publisher page; law = legal act; secondary = media, Wikipedia, agencies, aggregators.
checked_atstringtext (1 distinct)Date the row was last read on the source, ISO 8601.
confidencestringpartial, verifiedverified = read on an official or legal page for the current cycle; partial = official but older cycle or incomplete, or a reputable secondary source; estimate = derived or calculated, method in note. Empty for not_found rows.
notestringtext (13 distinct)Caveats in English. "Updated 2026-10-23:" marks text added by the second verification pass of 23 October 2026.

Table 8. Columns of hsk_status.csv.

language_realism_evidence.csv, 11 rows. Unique key: claim.

ColumnTypeValues / unitWhat it holds
claimstringtext (11 distinct)Statement about how realistic the language route is.
figurestringtext (10 distinct); null in 1The number behind the statement, as published.
populationstringtext (11 distinct)Whom the figure refers to.
evidence_typestringofficial_statistic, university_statementofficial_statistic or university_statement.
statusstringfoundfound = the fact was read on the source page; not_found = the page was checked and the fact is not there: the row records what was looked for, source_url gives the URL tried and note says what was missing.
source_urlstringtext (11 distinct)Page(s) where the fact is stated, "; "-separated, primary pages first. For not_found rows: the page(s) tried.
source_typestringofficial, secondaryofficial = university, government, embassy, airport or ranking publisher page; law = legal act; secondary = media, Wikipedia, agencies, aggregators.
checked_atstringtext (1 distinct)Date the row was last read on the source, ISO 8601.
confidencestringestimate, partial, verifiedverified = read on an official or legal page for the current cycle; partial = official but older cycle or incomplete, or a reputable secondary source; estimate = derived or calculated, method in note. Empty for not_found rows.
notestringtext (11 distinct)Caveats in English. "Updated 2026-10-23:" marks text added by the second verification pass of 23 October 2026.

Table 9. Columns of language_realism_evidence.csv.

sources.csv, 132 rows. Unique key: source_id. One row per distinct URL in the columns whose name ends in source_url: source_id, url, title (publisher and host), source_type, accessed_at (latest date a row citing it was checked), used_for (file, column and number of rows).

Method

Data for 13 mainland and 3 Hong Kong universities were collected between 9 and 23 October 2026 from official pages of the universities (admission and international-office pages, fee tables, catalogues), governments, embassies and visa centres, ranking publishers and, for stable facts only, secondary sources; a second verification pass on 23 October 2026 re-read the rows with gaps. An independent re-check of 69 random rows against the source found 64 matching; the 5 differences were corrected or given a lower confidence before release. The three universities that entered the ARWU top 100 in 2026 (Southeast University, Harbin Institute of Technology, Tianjin University) were collected on 8 November 2026 into the same columns; an independent re-check of 20 random rows of that collection found no difference: 8 matching, 6 matching on a secondary or previous-cycle page (marked partial), 6 whose page could not be opened automatically. A second check of 20 other random rows of the three universities, read in a browser on the same day, found 15 matching, 1 matching in part, 1 whose page is no longer online and 3 differences (Southeast University's 2027 admission brochure had replaced the 2025 language and calendar rules; Tianjin University names A-Level results in its scholarship notice); the 3 were corrected before release.

Every row carries its provenance: source_url (the page where the fact is stated; several pages "; "-separated), source_type (official, law, secondary), checked_at (date read), confidence (verified, partial, estimate) and note. status is found or not_found: a not_found row records what was checked and not found, with the URL tried in source_url and the reason in note; its value columns are empty. Empty means unknown; no value is guessed.

Text added by the second verification pass starts with "Updated 2026-10-23:". Ids follow the other Long Bet datasets (university_id slugs).

data.csv crosses each university with five school-leaving certificates and records whether the admission pages name the certificate, accept "a high school diploma" in general, or add conditions; min_grades is filled only where a minimum is published. admission_cycle.csv gives the latest published calendar (mostly the 2026 intake; 2027 where already out). Visa rows cover seven passports (RU, TR, RS, DE, FR, IT, PL) for the mainland and Hong Kong; fees are those of the visa centre or embassy in the passport country. hsk_status.csv documents the switch from HSK 2.0 to HSK 3.0 (new test standard from 2026-2027) because university thresholds are written in HSK levels whose vocabulary changes.

Known limitations

How to verify

Open the source_url of a row and compare with checked_at. Fees, deadlines, visa fees and scholarship terms change every cycle and are the first values to re-check; rankings change once a year. not_found rows show which page was tried, so a later check can start there. Every URL is listed once in sources.csv.

Where these numbers are used
China: The Second Look (Article 7) The article whose tables are built from this dataset.
Studying in China: Tuition, Living Costs, Year Totals and Scholarships (2026) Tuition by track, published living-cost items, an estimated full year and the scholarships and government quotas open to international bachelor students.
Subject Strength of 19 Chinese Universities: GRAS 2026, ARWU Indicators and Highly Cited Researchers 2025 Places of the 19 universities in all 57 GRAS 2026 subjects, top-10 counts by region, ARWU indicator means 2010-2026 and Highly Cited Researcher counts without names.
Bachelor Programmes Open to International Students at Chinese Universities (2026) Every bachelor programme in the international catalogues of the universities, with language of instruction and a STEM flag, plus counts per university.

Cite this
Atamanova, M. (2026). China and Hong Kong Entry Rules for International Bachelor Applicants (2026) [Data set]. https://mariascales.com/research/long-bet/data/china-entry-rules/

License

CC BY 4.0 (Creative Commons Attribution 4.0 International, https://creativecommons.org/licenses/by/4.0/) for this compilation: free to share and adapt with attribution, see Cite this.

About the author

Maria Atamanova is a Senior Growth & Performance Marketing Manager and applied mathematician. Twelve years of growth in apps, e-commerce, EdTech and AI data platforms.

The method here – define the criteria, build the dataset, test every obvious answer – is the same one I use for growth teams; see the case studies.