App Store keywords: 100 bytes or 100 characters?

Updated · LocalePilot

The App Store Connect Keywords field is limited to 100… bytes or characters, depending on which Apple page you read. For an English list the two are the same; for French, Japanese or Thai they are not.

Count your keywords in bytes right in your browser with a free tool, without signup or upload.

What Apple says (and what people observe)

Apple's own pages give different answers:

  • The App Store Connect reference describes the Keywords field as: "You can provide up to 100 bytes of content."
  • The Creating Your Product Page page talks about 100 characters.
  • On the developer forums, in 2022, an Apple team member tested Thai keywords through the API: 100 characters went through, 106 were rejected. And 100 Thai characters weigh far more than 100 bytes.

The reference documentation says bytes, yet at least one observation shows characters being counted. Until Apple settles it, you have to pick a rule.

Why the difference matters

In UTF-8, unaccented Latin letters take one byte, an accented letter two, a Japanese or Thai character three.

KeywordCharactersBytes
shopping88
épicerie89
supermarché1112
Einkaufsliste1313
買い物リスト618
รายการ618

In English, both counts give the same number. In French or Spanish, a full list differs by a few bytes, while in Japanese or Thai the same field holds three times less text if you count bytes.

Counting it yourself

In a terminal, on your fastlane file ($(cat …) drops the trailing newline):

printf '%s' "$(cat fastlane/metadata/fr-FR/keywords.txt)" | wc -c   # bytes
printf '%s' "$(cat fastlane/metadata/fr-FR/keywords.txt)" | wc -m   # characters

wc -m counts characters according to your terminal's locale; with a non-UTF-8 locale it returns the same number as wc -c. In Dart:

import 'dart:convert';

final keywords = 'courses,épicerie,liste,famille,partagée';
print(utf8.encode(keywords).length); // 41 bytes
print(keywords.runes.length);        // 39 characters

The rule we apply

Count bytes. The reference documentation says so, and it's the strictest option: a field that fits in 100 bytes necessarily fits in 100 characters, so it will never be rejected. LocalePilot applies it on its App Store listing screen, which shows for example "94 / 100 bytes" as you type.

For Japanese, Chinese, Korean or Thai, this rule may leave room unused. If those markets matter to you, try a longer list in App Store Connect: it rejects an over-long field immediately, so you'll know what goes through today.

What doesn't depend on the unit

  • Separate keywords with commas and no spaces: every space after a comma costs a byte for nothing.
  • Most ASO guides advise against repeating in keywords what your name and subtitle already say.
  • With fastlane, each localization has its own fastlane/metadata/<locale>/keywords.txt. Translating the English list word for word rarely gives you the terms people actually type: start from search in the target language.

Frequently asked questions

How many bytes is an accented letter?

Two in UTF-8 (é, è, à, ç…). A Japanese, Chinese or Thai character takes three.

Should I put spaces after commas?

No: separate keywords with commas and no spaces, every space costs room.

Where is the keywords file with fastlane?

In fastlane/metadata/<locale>/keywords.txt, one file per language.