All |
Name |
- There are no other app listings with the same name.
- The name doesn't include a version number.
- The name matches the name on the OAuth consent screen.
- The name isn't vague or too generic.
- The name is 50 characters or less.
- (Recommended) The name uses title case.
- (Recommended) The name doesn't have punctuation,
especially parentheses.
|
All |
Description |
- All provided links work and point to the correct information.
For example, a link provided for a privacy policy points to a page
describing the privacy policy.
- All provided links work and point to the correct information.
For example, a link provided for a privacy policy points to a page
describing the privacy policy.
- If the app interacts with a third-party service, the description
explains what the third-party service does, how the app interacts with
it, and optionally links to the relevant website.
- The short and detailed descriptions are easy to understand.
- The short and detailed descriptions aren't identical.
- (Recommended) The full set of attributes per language
(name, short description, and detailed description) are defined
correctly without language mismatch.
|
All |
Functionality |
- There are no obvious bugs and all actions, including edge cases,
are fully functional. Loading times are handled with loading
indicators.
- The app demonstrates clear interactions with Google APIs.
- The app provides a new or extended functionality that isn't
equivalent to what's already included in Google products.
- The app isn't meant for advertisement or spamming purposes.
- The app is fully functional and not meant for testing
purposes—it's not a work in progress.
- If the app interacts with features that are available to users
or paid users, a test account on the developer's system is provided
for Google's review team.
|
All |
User experience |
- The app, including its name, doesn't use Google brand assets,
trademarks, or Google branded content.
- Authorization and login is required only once. The app uses
one-click SSO or ideally zero-click SSO.
- After an admin grants permissions for the Oauth 2.0 scopes for
the domain, individual users aren't prompted for scope permissions
again.
- Users doesn't have to input login credentials after signing into
their Google account. At most, they have to click a "Sign in with
Google" button to get access.
- There are consistent, obvious, and understandable terms for
button labels, menu items, titles, etc. For example, instead of
Yes or No, labels refer to action names
like Delete and Cancel.
- If login is required, the logout functionality works properly.
Tokens are revoked and login can start from scratch.
- Apparent feedback is always displayed, such as confirmation or
error messages, for actions.
- There are no broken image links or fuzzy images.
|
All |
Graphics |
- Icons are sized correctly, square, and have transparent
backgrounds. See Graphic
assets.
- The icon properly represents the app's name and/or functionality.
- The icon is in color (not gray scaled).
- The icon doesn't use Google’s trademarks.
- Screenshots and images are not blurry, hard to read, or
inappropriate, and accurately represent the app.
- (Recommended) Screenshots clearly show how to use the app
and what it does.
|
All |
OAuth |
- The app has passed OAuth verification, uses the narrowest OAuth
scopes possible, and all scopes integrate correctly with Google
Services APIs.
|
Google Chat bot |
Name |
- The buttons to communicate with the bot are available from the
description.
- The bot name starts with A-Z (uppercase) or 0-9. It can't start
with a symbol.
- The bot name doesn't contain the word "Bot" in it.
|
Google Chat bot |
User experience |
- The bot sends an unprompted welcome message every time a user
starts a direct message or the bot is added to a room. And, the
welcome message is different from the "Help" command.
- The bot supports the "Help" command and helps users get started
using the bot.
- The bot always responds when spoken to in a room or direct chat.
- Messages use correct spelling, capitalization, punctuation, and
grammar. Messages don't contain malicious, offensive or abusive
material.
- Messages use clear, concise, and consistent formatting for text
and/or cards according to the Google requirements.
- If a response takes longer than 2 seconds, the bot sends a
message explaining the delay.
- Bots that send notifications let users turn the notifications
off.
- Bot UI is responsive on mobile.
- Users can add the bot to a room via @mentioning.
- Users can remove the bot from a room using the View
member menu.
- The bot indicates to the user everything that is necessary to
interact with it.
- The Cards format the bot uses meets Google requirements. See
Create interactive cards.
- The bot is available from the Find a bot option
in the Chat menu.
- External URLs that the bot interacts with don't belong to a
staging or development environment.
- The @mention is required in every message to the bot in rooms.
That's the only way the bot knows that it needs to respond.
|
Google Chat bot |
Graphics |
- The bot has a recognizable and clear avatar.
|
Drive app |
Functionality |
- The app doesn't use Chrome extensions to provide functionality by
manipulating the Drive HTML directly.
|
Drive app |
User experience |
- If the app stores files in Drive, it allows users to pick a folder
or creates and reuses an app-specific folder. Configuration data can
be stored in an App Data folder. The app doesn't dump files into the
user's My Drive folder.
- The app only stores files in Drive that are connected to the
documented functionality of the app.
|
Editor Add-on |
Functionality |
- "Expected and required actions are included in the add-on, and it
provides all the tools needed to complete its workflow. For example:
- If the add-on applies styling to the entire document, it also
has an option to apply the styling only to selected text.
- If the add-on uploads spreadsheet data to a webservice feed,
it has a link to that feed for easy navigation.
- If the add-on requires the user to have an account, it
provides links or info to easily create a new account if the
user doesn't already have one.
- The add-on has menu items under the Add-ons tab.
Even if the add-on is just custom functions, it still includes
proper documentation.
- The add-on correctly uses
onInstall() and
onOpen() to populate its menu. The menu items populate
when the add-on is first installed and when a different file is
opened. See
Editor add-on authorization.
- Authorization modes are setup correctly. See
Authorization modes.
|
Editor Add-on |
User experience |
- The add-on provides all the information necessary to have a basic
understanding of the product and how to use it.
- The add-on's code doesn't use libraries excessively, because
libraries can cause the add-on to lose performance.
- Errors are avoided if possible and handled properly if not:
- Error messages are displayed in a dialog window, not a JS alert or
the default red bar. They communicate the problem and explain
what the user needs to do to fix it in plain, simple language.
- When possible, if the user is doing something wrong, a button is
displayed that fixes the issue for them.
- For more information, see the
add-ons style guide.
- Links to outside pages open in new windows and go to the correct
pages.
- The add-on is intuitive and designed well. This means:
- It's always clear what to do and how to do it.
- The add-on is accessible and easy to understand. Unnecessarily
technical terms and jargon are avoided.
- Workflows are clear and facilitated as much as possible.
- The user and their content is as safe as possible.
- The add-on follows the
Google UI Style Guide and uses the
Google CSS Package.
- The add-on only uses one blue primary action per display.
- The add-on displays one dialog at a time. It doesn't overlap or
have multiple up at a time.
- The add-on's UI fits neatly in allocated spaces:
- Text and labels aren't cut off with “...”
- The user doesn't have to do a lot of vertical scrolling.
- Content width doesn't extend beyond 300px so that it doesn't
have a horizontal scrollbar.
- The add-on requires confirmation or displays warnings for all
sensitive actions. For example, if the add-on is about to
overwrite all the content in a spreadsheet, the user is warned
and confirms the action before it happens.
- Design changes can remove the need for problems like these.
For example, a Sheets add-on imports data which creates a
risk of overwriting existing content. The risk can be
removed entirely by creating a new sheet for the data as
the default action.
- Users can't trigger actions multiple times while an action is
loading. For example, buttons are disabled or hidden while an action is
loading.
|
Google Workspace Add-on |
Name |
(Calendar add-ons)
- If the add-on uses
calendar.name or
common.name , the name in the manifest is identical to
the name provided in the app listing.
- If the add-on uses
calendar.conferenceSolution , the
conference solution name doesn't contain “Google Calendar.”
- (Recommended) If the add-on uses
calendar.conferenceSolution , the conference solution
name doesn't exceed 30 characters.
|
Google Workspace Add-on |
Functionality |
- The add-on uses the correct widgets for the desired functionality.
See
Widgets. For example, use a switch to select a boolean value.
(Calendar add-ons)
- Login functionality is mobile-friendly.
- Secondary calendars and delegation are supported, or if not
supported, handled gracefully. For example, a conference creation
doesn't fail if the user
selects a different calendar they have edit access to when
creating an event.
- Recurring events work correctly.
- If the add-on uses
calendar.conferenceSolution , at
least one conference solution is provided.
- If the add-on provides conferencing solutions, appropriate
conference data fields are used. For example, video conference
links, phone numbers, SIP links,
access codes, and other supported attributes use structured data
fields and aren't provided in the notes field.
- If the add-on provides conferencing solutions, it only edits
conference details and no other event fields.
- If the add-on provides conferencing solutions, the conference
creation takes less than 5 seconds.
(Gmail add-ons)
- If the add-on uses
UrlFetchApp or
OpenLinkUrl :
- The URL is valid.
- The URL uses HTTPS not HTTP.
- The full domain is specified.
- The path is not empty. For example,
https://altostrat/
is okay, but https://altostrat isn't.
- Wildcards can't be used in UrlFetchApp.
|
Google Workspace Add-on |
User experience |
- The add-on has a homepage. If your Google Workspace add-on is a
converted a Gmail add-on, a default homepage is applied.
- The add-on's card behavior functions properly. For example, there
aren't duplicated cards; Back, refresh, and update buttons work
accordingly.
- After the user authorizes the add-on, it displays a customized
homepage card to welcome the user with a button for login
(if needed), logo, and brief description of the add-on.
- If the login button is present, when it's triggered, it presents
a customized login page from the third-party vendor that clearly
indicates there's a third-party service working outside of
Google Workspace.
- The add-on's UI fits neatly in allocated spaces:
- Text and labels aren't cut off with “...”
- The user doesn't have to do a lot of vertical scrolling.
- Content width doesn't extend beyond 300px so that it doesn't
have a horizontal scrollbar.
- The add-on's code doesn't use libraries excessively, because
libraries can cause the add-on to lose performance.
(Calendar add-ons)
- If the add-on provides conferencing solutions, the conferences
created are valid and displayed correctly on the third-party
conferencing website.
(Drive add-ons)
- If the app stores files in Drive, it allows users to pick a folder
or creates and reuses an app-specific folder. Configuration data can
be stored in an App Data folder. The app doesn't dump files into the
user's My Drive folder.
- The add-on only stores files in Drive that are connected to the
documented functionality of the add-on.
(Gmail add-ons)
- The add-on doesn't mention or link to Chrome extensions without
justification.
- The More actions menu more_vert
contains universal actions that work properly. For example, Log
out, About, Support, etc.
|
Google Workspace Add-on |
Graphics |
(Calendar add-ons)
- The logo for the conferencing solution is a public URL. See
Provide conference solution logos.
- If the add-on uses
calendar.conferenceSolution , the
logo of the conference solution follows the
calendar.logoUrl requirements. See
Calendar manifest resource.
- If the add-on uses
calendar.logoUrl or
common.logoUrl , the logo is identical to the icon
provided in the app listing.
- If the add-on uses
calendar.logoUrl or
common.logoUrl , the URL of the logo starts as
follows: https://lh3.googleusercontent.com/
|
Google Workspace Add-on |
OAuth |
(Drive add-ons)
- (Recommended) If you want to receive limited-metadata,
the add-on includes the
drive.addons.metadata.readonly scope.
|
Web app |
Functionality |
- The universal navigation URL points to a web app. A simple
webpage without functionality is not considered a web app.
|