We monitor 175 App Store storefronts to answer one question —

Is Perfect Keyboard censored by Apple?

Gone.

Perfect Keyboard is gone from every App Store storefront we test. It was last seen available on Mar 14, 2019.

1,222 tests on record·⚠ last verified 3 months ago — treat as historical

Why it is unavailable

Five things can put an app out of one App Store. Each is weighed below against what can be seen from outside — open a card for the reasoning.

  • A government or a court demanded itLikely

    and Apple complied. Apple publishes a count of these per country each year and never says which apps they were. Apple's 2025 App Store Transparency Report

  • Apple applied a rule, unaskedLikely

    either its own review guidelines, or its own reading of a local law, with nobody having demanded anything. This is the largest category in Apple's own removal figures by a wide margin, and it covers distribution permits as well as content — Apple kept a free Bible app out of mainland China in 2021 for want of one. Apple's 2025 App Store Transparency Report

  • The developer withheld itUnlikely

    freely, or under legal advice of their own, or because Apple's guidelines require that kind of app to be limited to certain countries. Switching a country off is easy for a developer to do in Apple's own tools: it needs no new version of the app, and it leaves no public trace other than the app being unavailable.

  • Something brokeUnlikely

    a rejected update, a lapsed certificate, a payment or licensing problem, a mistake nobody has got round to noticing.

  • A local rule about paying for itRuled out

    gambling licences, financial rules, tax — the kind of law that governs a transaction. Apple can obey every one of them by refusing the payment, which is why this is the only restriction we would accept and the only one that cannot touch a free app.

    • It is free, so Apple sells nothing here.
How this is weighed, and what it cannot tell you

Weighed from the evidence under each card, not from a model. There is no published figure for how Apple's removals divide up, so these are ordered words rather than percentages. For scale on the same-day counts: across the whole record an app leaves a storefront with fewer than two others, so a dozen at once is not a dozen coincidences.

None of this is certain, and a citation does not make it so: Apple naming a Chinese agency tells you what Apple said, not everything that happened. What can be said is that the readings alone cannot separate these five — a developer switching off a country and a government ordering it removed arrive at Apple's catalogue looking identical — and that nobody has ever measured how they divide across the App Store. The one careful study of the question was done on Google's store, using an error message Apple does not emit.

Apple publishes no record of which apps are unavailable in which of its App Stores. For the removals it makes on a government's demand it publishes the agency and the law behind every one — 2,045 of the 166,899 apps it removed during 2025 — and never which app. Where a reason reaches the public at all, it is usually because a developer chose to say so. Apple's App Store Transparency Report

Know of a statement, notice or order we have missed? Tell us →

Perfect Keyboard

Developer: Zhan Huang · Category: Utilities · Released: May 2, 2016 · Rating: 4.5★

View in App Store ↗
0stores where available
146stores where blocked
6.35Bpeople behind the block
146of 175 stores tested
1,222tests on record

Other Utilities apps missing from India

Everything missing from India →

Life of this app

  1. May 2, 2016Released on the App Store
  2. Mar 14, 2019First tested by AppleCensorship
  3. Mar 14, 2019Last seen available anywhere
  4. Mar 23, 2021Gone from 146 storefronts
  5. Jun 20, 2026Most recent test

Testing history

One column per month, every month from the first reading to the last. Height follows how many readings we took that month; red is the share of them that found the app unavailable. An empty month is one nobody tested.

2019-032026-06

Found availableFound unavailable

Availability by storefront

Every storefront we test, current status first. Data is a measurement, not a promise: each row carries its own date.

Test now
AfghanistanAFUnavailableSep 3, 20242 years ago
AlbaniaALUnavailableJul 3, 20224 years ago
AlgeriaDZUnavailableAug 3, 20193 years ago
AngolaAOUnavailableDec 5, 20194 years ago
AnguillaAIUnavailableNov 7, 20193 years ago
Antigua & BarbudaAGUnavailableNov 11, 20203 years ago
ArgentinaARUnavailableMay 29, 20214 years ago
ArmeniaAMUnavailableJan 30, 20203 years ago
AustraliaAUUnavailableNov 2, 20194 years ago
AustriaATUnavailableAug 11, 20192 years ago
BahamasBSUnavailableNov 23, 20193 years ago
BahrainBHUnavailableAug 3, 20193 years ago
BarbadosBBUnavailableDec 27, 20224 years ago
BelarusBYUnavailableNov 17, 20194 years ago
BelgiumBEUnavailableJan 30, 20204 years ago
BelizeBZUnavailableJun 15, 20203 years ago
BeninBJUnavailableNov 23, 20194 years ago
BermudaBMUnavailableAug 11, 20194 years ago
BhutanBTUnavailableAug 25, 20213 years ago
BrazilBRUnavailableAug 6, 202315 months ago
BruneiBNUnavailableMar 17, 20214 years ago
BulgariaBGUnavailableJul 11, 20204 years ago
Burkina FasoBFUnavailableJul 19, 20214 years ago
CambodiaKHUnavailableNov 5, 20213 years ago
CameroonCMUnavailableMay 9, 20242 years ago
Cayman IslandsKYUnavailableAug 19, 20193 years ago
ChadTDUnavailableAug 15, 20242 years ago
ChileCLUnavailableNov 2, 20192 years ago
China (Mainland)CNUnavailableAug 3, 20196 months ago
ColombiaCOUnavailableOct 4, 20193 months ago
Costa RicaCRUnavailableNov 8, 20194 years ago
CyprusCYUnavailableAug 25, 20204 years ago
CzechiaCZUnavailableJun 14, 20203 years ago
DenmarkDKUnavailableDec 5, 20193 years ago
DominicaDMUnavailableNov 16, 20204 years ago
Dominican RepublicDOUnavailableNov 17, 20194 years ago
DR CongoCDUnavailableJun 24, 20224 years ago
EcuadorECUnavailableJan 31, 20203 years ago
EgyptEGUnavailableMay 31, 20204 years ago
El SalvadorSVUnavailableNov 8, 20214 years ago
EstoniaEEUnavailableApr 23, 20212 years ago
EswatiniSZUnavailableJul 7, 20224 years ago
FijiFJUnavailableApr 1, 20222 years ago
FinlandFIUnavailableAug 3, 20192 years ago
FranceFRUnavailableNov 1, 20194 years ago
GabonGAUnavailableOct 1, 20224 years ago
GambiaGMUnavailableOct 1, 20194 years ago
GhanaGHUnavailableMar 23, 20213 years ago
GreeceGRUnavailableDec 23, 20224 years ago
GrenadaGDUnavailableOct 20, 20213 years ago
GuatemalaGTUnavailableOct 28, 20233 years ago
Guinea-BissauGWUnavailableMar 21, 20204 years ago
GuyanaGYUnavailableNov 25, 20227 months ago
HondurasHNUnavailableJul 4, 20224 years ago
Hong KongHKUnavailableNov 1, 20193 years ago
HungaryHUUnavailableMay 29, 20203 years ago
IcelandISUnavailableOct 1, 20192 years ago
IndiaINUnavailableAug 3, 20193 months ago
IndonesiaIDUnavailableFeb 3, 20204 years ago
IrelandIEUnavailableJan 19, 20204 years ago
IsraelILUnavailableOct 10, 20192 years ago
ItalyITUnavailableOct 10, 20194 years ago
JamaicaJMUnavailableJul 7, 20214 years ago
JapanJPUnavailableJul 6, 20224 years ago
JordanJOUnavailableMar 23, 20214 years ago
KazakhstanKZUnavailableJul 12, 20214 years ago
KenyaKEUnavailableJun 4, 20222 years ago
KosovoXKUnavailableNov 23, 202510 months ago
KuwaitKWUnavailableJan 31, 20203 years ago
KyrgyzstanKGUnavailableNov 1, 20192 years ago
LaosLAUnavailableMar 18, 20213 years ago
LebanonLBUnavailableNov 9, 20192 years ago
LiberiaLRUnavailableSep 7, 20212 years ago
LithuaniaLTUnavailableMar 13, 202116 months ago
LuxembourgLUUnavailableJan 25, 20223 years ago
MacaoMOUnavailableAug 5, 20194 years ago
MadagascarMGUnavailableApr 5, 20216 months ago
MalawiMWUnavailableJun 19, 20204 years ago
MalaysiaMYUnavailableAug 12, 20198 months ago
MaliMLUnavailableSep 6, 20212 years ago
MauritaniaMRUnavailableApr 3, 20212 years ago
MauritiusMUUnavailableMay 5, 20213 years ago
MexicoMXUnavailableNov 16, 20202 years ago
MicronesiaFMUnavailableJan 20, 20204 years ago
MoldovaMDUnavailableMay 31, 20233 years ago
MontserratMSUnavailableApr 3, 20212 years ago
MoroccoMAUnavailableJul 2, 20224 years ago
MozambiqueMZUnavailableApr 9, 20229 months ago
Myanmar (Burma)MMUnavailableNov 25, 20229 months ago
NauruNRUnavailableJul 4, 20243 months ago
NepalNPUnavailableMay 8, 20212 years ago
NetherlandsNLUnavailableMar 1, 20202 years ago
NicaraguaNIUnavailableMar 20, 20212 years ago
NigeriaNGUnavailableOct 21, 20214 years ago
North MacedoniaMKUnavailableMay 24, 202110 months ago
NorwayNOUnavailableAug 5, 20194 years ago
OmanOMUnavailableNov 11, 20202 years ago
PalauPWUnavailableJul 2, 20224 years ago
PanamaPAUnavailableJan 10, 20223 years ago
Papua New GuineaPGUnavailableFeb 23, 20222 years ago
ParaguayPYUnavailableJun 19, 20213 years ago
PeruPEUnavailableJul 19, 20233 years ago
PhilippinesPHUnavailableFeb 19, 20204 years ago
PolandPLUnavailableDec 12, 20259 months ago
PortugalPTUnavailableAug 19, 20192 years ago
QatarQAUnavailableMay 31, 20203 years ago
Republic of the CongoCGUnavailableMar 7, 20234 years ago
RomaniaROUnavailableNov 9, 20194 years ago
RussiaRUUnavailableMay 24, 20212 years ago
RwandaRWUnavailableJul 4, 20224 years ago
São Tomé & PríncipeSTUnavailableJul 11, 20204 years ago
SenegalSNUnavailableDec 29, 20213 years ago
SerbiaRSUnavailableNov 19, 20233 years ago
SeychellesSCUnavailableMar 1, 20202 years ago
Sierra LeoneSLUnavailableMar 13, 20212 years ago
SingaporeSGUnavailableSep 6, 20213 years ago
SlovakiaSKUnavailableJan 10, 20223 years ago
SloveniaSIUnavailableAug 12, 20193 years ago
Solomon IslandsSBUnavailableOct 31, 20213 years ago
South KoreaKRUnavailableApr 17, 20232 years ago
SpainESUnavailableApr 1, 20222 years ago
Sri LankaLKUnavailableJan 2, 20223 years ago
St. Kitts & NevisKNUnavailableJul 26, 20204 years ago
St. LuciaLCUnavailableSep 6, 20213 years ago
St. Vincent & GrenadinesVCUnavailableMar 21, 20214 years ago
SurinameSRUnavailableAug 25, 20212 years ago
SwitzerlandCHUnavailableOct 1, 20233 years ago
TaiwanTWUnavailableMar 5, 20222 years ago
TajikistanTJUnavailableApr 3, 20214 years ago
TanzaniaTZUnavailableJul 14, 20213 years ago
TongaTOUnavailableJul 3, 20224 years ago
Trinidad & TobagoTTUnavailableAug 15, 20212 years ago
TunisiaTNUnavailableOct 26, 20203 years ago
TürkiyeTRUnavailableAug 3, 20194 years ago
TurkmenistanTMUnavailableMay 29, 20203 years ago
Turks & Caicos IslandsTCUnavailableApr 26, 20213 years ago
UgandaUGUnavailableJan 12, 20234 years ago
UkraineUAUnavailableNov 8, 20192 years ago
United Arab EmiratesAEUnavailableOct 8, 20223 months ago
United KingdomGBUnavailableNov 1, 20194 years ago
United StatesUSUnavailableAug 3, 20193 months ago
UruguayUYUnavailableMay 30, 20203 years ago
UzbekistanUZUnavailableOct 26, 20213 years ago
VenezuelaVEUnavailableJun 19, 20202 years ago
ZambiaZMUnavailableApr 16, 20232 years ago
ZimbabweZWUnavailableOct 8, 20203 months ago
AzerbaijanAZNot tested0
BoliviaBONot tested0
Bosnia & HerzegovinaBANot tested0
BotswanaBWNot tested0
British Virgin IslandsVGNot tested0
CanadaCANot tested0
Cape VerdeCVNot tested0
Côte d’IvoireCINot tested0
CroatiaHRNot tested0
GeorgiaGENot tested0
GermanyDENot tested0
IraqIQNot tested0
LatviaLVNot tested0
LibyaLYNot tested0
MaldivesMVNot tested0
MaltaMTNot tested0
MongoliaMNNot tested0
MontenegroMENot tested0
NamibiaNANot tested0
New ZealandNZNot tested0
NigerNENot tested0
PakistanPKNot tested0
Saudi ArabiaSANot tested0
South AfricaZANot tested0
SwedenSENot tested0
ThailandTHNot tested0
VanuatuVUNot tested0
VietnamVNNot tested0
YemenYENot tested0

Testing asks Apple whether it will sell this app in that storefront, right now, by the same method the crawler has used since 2019. Your browser asks Apple directly, so the answer describes what Apple serves your connection — and if your browser cannot reach Apple at all, we ask on your behalf and say so. The result is a link: open it to see Apple's own answer and check ours. Readings are added to the record above; roughly a quarter of the readings taken each day come from people testing.

How we test

Availability is checked against Apple's own catalog servers for every storefront, the same way the App Store app asks. "Unavailable" means Apple's servers say the app cannot be offered in that country — it does not say who asked for the removal. Removals initiated by the developer and removals demanded by governments look the same from outside; the history and context on this page are how we tell them apart.