# Media Actions Quality Checklists

The following page lists a number of fundamental checks to validate a Media
Actions feed. Many of them help verify the structural integrity of the feed,
while a few specify how certain elements of the feed should behave. To
speed up the process of feed validation and feedback, verify each item in
the following checklist and then submit your feed file(s) to Google. If
feasible, think of these as test cases that your team needs to pass every
time you want to deploy a feed.

> [!NOTE]
> **Note:** The quality checklists seek to be as generic as possible. Since not every check might apply to your use case, feel free to ignore checks that don't apply to you. For example, if you are a `Movie` only provider, checks for `TVSeries` won't apply to you. If you don't provide deep links to Google, then those checks don't apply to you.

## Common Checklist

Checks that apply regardless of the type of catalog you provide in the
Media Actions feed.

<button type="button" style="float: right; translate: 0px -50px;"> [Download checklist](https://developers.google.com/static/actions/media/tools/Media_Actions_Quality_Checklists.pdf) </button>

<br />

| Item(s) |
| Feed contents |
|---|
| The feed includes all content from your catalog. |
| The content in your feed matches the content available on your service. If you update your catalog, the feed must reflect those updates. |
| All entities in the feed have a unique ID (`@id`). |
| All entities in the feed have a unique URL (`url`). |
| All URLs (`url`) in the feed are canonical. |
| `@id`, `url`, and `urlTemplate` use the same domain in the feed. |
| The feed doesn't contain stale entities which are entities with `availabilityEndDate` set in the past, or entities that are no longer available on your app or platform. |
| All entities in the feed have a unique deep link (`urlTemplate`). |
| All deep links (`urlTemplate`) and URLs (`url`) in the feed are production URLs, and not QA or DEV URLs. |
| The feed includes deep links (`urlTemplate`) to all supported platforms (Web, iOS, Android, Android TV, and Chromecast) in agreement with the `mediaOffered` and `contentToBeAnnounced` properties. |
| Make sure `contentRating` is provided for all adult content. |
| If content requires users to log in, the content must autoplay on all platforms within one click after login. |
| If a user initiates content on a mobile platform (Android and iOS), but your app isn't installed on the user's device, the platform directs the user to the App Store or Play Store and prompts the user to install the app. |

## Video on demand Checklist

Checks that generally apply to Video on demand catalog providers.

<button type="button" style="float: right; translate: 0px -50px;"> [Download checklist](https://developers.google.com/static/actions/media/tools/Media_Actions_Quality_Checklists.pdf) </button>

| Item(s) |
| Feed contents |
|---|
| All supported entity types (`Movie`, `TVEpisode`, `TVSeason`, and `TVSeries`) are present in the feed. |
| All `TVEpisode` entities correspond to valid `TVSeries` entities in the feed. |
| Multiple `TVEpisodes` with the same `episodeNumber` in one `TVSeason` do not exist. |
| If a TV show supports seasons, all `TVSeason` entities have corresponding valid `TVSeries` entities in the feed. |
| Multiple `TVSeasons` with the same `seasonNumber` in one `TVSeries` do not exist. |
| The category property of a `TVSeries` is set to the least-restrictive access requirement of its content. For instance, if a `TVSeries` has some `TVEpisode` entities that don't require a user to log in, and some `TVEpisode` entities that do require a user to login, set this `TVSeries` to be `nologinrequired`. |
| Media Action Specifications don't allow for standalone short-form content as part of the feed today. Make sure no short-form content, such as trailers, is miscategorized into `Movie`, `TVSeries`, `TVEpisode`, `SportsEvent`, or other top-level entities. |
| Trailers are short-form content, and the Media Action Specifications allow you to provide trailer information as part of the `TVSeries`, `TVSeason`, `TVEpisode`, and `Movie` entities using the `trailer` property. Don't provide trailers in the Media Actions feeds for a standalone `Movie`, `TVSeries`, or other top-level entities. |
| For `Movie` and `TVEpisode`, `SportsEvent` content must autoplay on all platforms. |
| For `TVSeries` and `TVSeason`, content must autoplay on Chromecast and Android TV. On other platforms, playback must be within one click (autoplay is the best option). |

## Live TV Checklist

Checks that generally apply to Live TV and Video on demand catalog
providers.

<button type="button" style="float: right; translate: 0px -50px;"> [Download checklist](https://developers.google.com/static/actions/media/tools/Media_Actions_Quality_Checklists.pdf) </button>

<br />

| Item(s) |
| Feed contents |
|---|
| All supported entity types (`Movie`, `TVEpisode`, `TVSeason`, `TVSeries`, `BroadcastService`, `BroadcastEvents`, `TelevisionChannel`, `Organization`, `CableOrSatelliteService`, and `SportsEvent`) are present in the feed. |
| All `TVEpisode` entities have corresponding valid ` TVSeries` entities in the feed. |
| If a TV show supports seasons, all `TVSeason` entities have corresponding valid `TVSeries` entities in the feed. |
| Multiple `TVEpisodes` with the same `episodeNumber` in one `TVSeason` do not exist. |
| Media Action Specifications don't allow you to provide short-form content (other than trailers) as part of the feed today. Make sure no short-form content is miscategorized into `Movie`, `TVSeries`, `TVEpisode`, `SportsEvent`, or other top-level entities. |
| Trailers are considered short-form content and the Media Action Specifications allow you to provide trailer information as part of the `TVSeries`, `TVSeason`, `TVEpisode`, and `Movie` entities using the `trailer` property. Trailers should not be provided in the Media Actions feeds as standalone `Movies`, `TVSeries`, or other top-level entities. |
| Multiple `TVSeasons` with the same `seasonNumber` in one `TVSeries` do not exist. |
| The category property of an entity with a `potentialAction` (for example, a deeplink) is set to the least-restrictive access requirement of its content. For instance, if a `TVSeries` has a number of `TVEpisodes` that are `nologinrequired` and a few that require a login, set this `TVSeries` to be `nologinrequired`. |
| All `BroadcastService` entities have corresponding and valid `Organization` entities in the feed. |
| All `CableOrSatelliteService` entities have corresponding and valid `Organization` entities in the feed. |
| All `TelevisionChannel` entities have corresponding and valid `CableOrSatellite` entities in the feed. |
| All `TelevisionChannel` entities have corresponding and valid `BroadcastService` entities in the feed. |
| All `BroadcastEvent` entities have corresponding and valid `BroadcastService` entities in the feed. |
| If `workPerformed` or `broadcastOfEvent` is added, then all `BroadcastEvent` entities have corresponding TVM (`TVSeries`, `TVSeason`, `TVEpisode` and `Movie`) entities in the feed. |
| Local channels have been handled properly in the feed. In this case, there must be a relationship of one `Organization` entity to many `BroadcastService` entities. |
| Channels with time-shifted but same programming are handled properly in the feed. In this case, there should be a relationship of one `Organization` entity to many `BroadcastService` entities. |
| Channels with similar programming, but dissimilar video quality in terms of streaming, are handled properly in the feed. In this case, there should be a relationship of one `Organization` entity to many `BroadcastService` entities. |
| For every `BroadcastService` entity, 14 days (or at least seven days) of EPG content is provided. |
| For every `BroadcastService` entity in the EPG, a 24-7 EPG schedule is provided without any overlaps or gaps. |
| For every `BroadcastService` entity, make sure there is a `logo` with a transparent background available that can be used on a dark (black) background, preferably in a one-to-one aspect ratio. |
| Make sure that every `BroadcastEvent` entity in the feed has at least one 16x9 image accompanying it. The image can be available on either the `BroadcastEvent` entity itself or on a linked `TVEpisode`, `TVSeries`, `Movie`, or `SportsEvent` entity. |
| For `Movie`, `TVEpisode`, and `SportsEvent` entities, content must autoplay on all platforms. |
| For `TVSeries` and `TVSeason`, content must autoplay on Chromecast and Android TV. On other platforms, playback needs to be within one click (autoplay is the best option). |

## Music Checklist

Checks that generally apply to Music catalog providers.

<button type="button" style="float: right; translate: 0px -50px;"> [Download checklist](https://developers.google.com/static/actions/media/tools/Media_Actions_Quality_Checklists.pdf) </button>

<br />

| Item(s) |
| Feed contents |
|---|
| All the supported entity types (`MusicGroup`, `MusicAlbum`, `MusicRecording` and `MusicPlaylist`) are present in the feed. |
| All `MusicRecording` entities must have corresponding and valid `MusicGroup` entities in the feed. |
| All `MusicRecording` entities must have corresponding and valid `MusicAlbum` entities in the feed, if applicable. |
| All `MusicAlbum` entities must have corresponding and valid `MusicGroup` entities in the feed. |
| The content on all entities must autoplay on all platforms. On iOS, playback can be within one click. |
| Apps or platforms that require a sign-in play their content immediately after sign-in. |

## Radio Checklist

Checks that generally apply to Radio catalog providers.

<button type="button" style="float: right; translate: 0px -50px;"> [Download checklist](https://developers.google.com/static/actions/media/tools/Media_Actions_Quality_Checklists.pdf) </button>

<br />

| Item(s) |
| Feed contents |
|---|
| The supported entity type (`RadioBroadcastService`) is present in the feed. |
| Network information given through the `broadcastAffiliateOf ` or `parentService` properties are valid networks and not logical groupings. |
| The relationship between a radio station and its parent network must be provided through the `broadcastAffiliateOf` or ` parentService` property. |
| The `alternateName` property must include legitimate alternate names for a station, and not keywords to influence triggering. |
| For terrestrial AM or FM radio stations, the `areaServed` property includes the area where the station serves. |
| For all entities, the content must autoplay on all platforms. On iOS, playback can be within one click. |
| Apps or platforms that require a sign-in play their content immediately after sign-in. |