Skip to main content

Sample Inputs

Access Points​

AccessPointsCoordinatesMustBeWithinValidRange​

The valid range is -90 to 90 for latitude and -180 to 180 for longitude. Latitude value 91.358834 is not within the valid range.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"accessPoints": [
{
"coordinates": {
"latitude": "91.358834",
"longitude": "4.893834"
},
"source": "MANUALLY_PLACED",
"navigation": "DRIVING"
}
]
/* other location details */
}

AccessPointsLatLongMustNotBeZero​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"accessPoints": [
{
"coordinates": {
"latitude": "0.358835",
"longitude": "0.893834"
},
"source": "MANUALLY_PLACED",
"navigation": "DRIVING"
}
]
/* other location details */
}

AppStoreUrlMustHaveExpectedAuthority​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://play.google.com/store/search?q=yelp&c=apps",
"relationship": "AUTHORIZED"
}
]
}
/* other location details */
}

AppStoreUrlsMustMatchWhenRelationshipIsOwner​

More than one (1) Quicklink's relationship is an OWNER. Respective appStoreUrl values do not match. Given that a quicklink relationship describes the nature of the association between the app and a location, it is suspicious that there are different applications available in the App Store, supporting different quicklinks, for the same location.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_delivery",
"quicklinkUrl": "https://www.yelp.com/order/dai-due-austin-5",
"appStoreUrl": "https://apps.apple.com/us/app/uber-eats-food-delivery/id1058959277",
"relationship": "OWNER"
},
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "OWNER"
}
]
}
/* other location details */
}

CategoryMayHaveOneAuthorizedAndOneOwnerRelationship​

Scenario One
More than one (1) instance of the same category is present but only a single Quicklink is AUTHORIZED

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "AUTHORIZED"
},
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.grubhub.com/menu/dai-due-austin",
"appStoreUrl": "https://apps.apple.com/us/app/grubhub-food-delivery/id302920553",
"relationship": "OTHER"
}
]
}
/* other location details */
}

Scenario Two
More than one (1) instance of the same category. Neither Quicklink is AUTHORIZED or OWNER.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "OTHER"
},
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.grubhub.com/menu/dai-due-austin",
"appStoreUrl": "https://apps.apple.com/us/app/grubhub-food-delivery/id302920553",
"relationship": "OTHER"
}
]
}
/* other location details */
}

Scenario Three
More than one (1) instance of the same category is present and more than one Quicklink is AUTHORIZED

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "AUTHORIZED"
},
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.grubhub.com/menu/dai-due-austin",
"appStoreUrl": "https://apps.apple.com/us/app/grubhub-food-delivery/id302920553",
"relationship": "AUTHORIZED"
}
]
}
/* other location details */
}

Scenario Four
More than one (1) instance of the same category is present and one Quicklink is AUTHORIZED and the other is OWNER

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "AUTHORIZED"
},
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.dai-due.com/menu/",
"appStoreUrl": "https://apps.apple.com/us/app/dai-due-austin/id302920990",
"relationship": "OWNER"
}
]
}
/* other location details */
}

AppStoreUrlMustNotMatchQuicklinkUrl​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"relationship": "AUTHORIZED"
}
]
}
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "AUTHORIZED"
}
]
}
/* other location details */
}

CategoryMayBeAssociatedWithAppStoreUrlExactlyOnce​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/order/falafel_house/new_brunswick",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "AUTHORIZED"
},
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.falafel_house/new_brunswick",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "OTHER"
}
]
}
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/order/falafel_house/new_brunswick",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "AUTHORIZED"
},
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.falafel_house/new_brunswick",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "AUTHORIZED"
}
]
}
/* other location details */
}

DifferentAuthorizedQuicklinksWithNonDistinctQuicklinkUrls​

More than one AUTHORIZED provider is present possessing a distinct appStoreUrl. Their respective quicklinkUrl values are not distinct.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "AUTHORIZED"
},
{
"category": "quicklinks.restaurant_order_takeout",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://apps.apple.com/us/app/grubhub-food-delivery/id302920553",
"relationship": "AUTHORIZED"
}
]
}
/* other location details */
}

QuicklinkUrlsMatch​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.dai-due.com/menu/",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "OWNER"
},
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.dai-due.com/menu/",
"relationship": "OWNER"
}
]
}
/* other location details */
}

OwnerProvidedQuicklinksWithNonDistinctQuicklinkUrls​

More than one OWNER provided Quicklink is present possessing the same appStoreUrl. Their respective quicklinkUrl values are not distinct.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.dai-due.com/menu/",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "OWNER"
},
{
"category": "quicklinks.restaurant_order_takeout",
"quicklinkUrl": "https://www.dai-due.com/menu/",
"appStoreUrl": "https://apps.apple.com/us/app/dai-due-austin/id302920990",
"relationship": "OWNER"
}
]
}
/* other location details */
}

QuicklinksListMustNotIncludeNulls​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [ null ]
}
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [ { null } ]
}
/* other location details */
}

Scenario Three

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"actionLinkDetails": {
"quicklinks": [
{
"category": "quicklinks.restaurant_order_food",
"quicklinkUrl": "https://www.yelp.com/menu/dai-due-austin-5",
"appStoreUrl": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350",
"relationship": "AUTHORIZED"
},
{ null }
]
}
/* other location details */
}

Location Attributes​

LocationAttributesNameMustBeDistinct​

Provided name values are not distinct.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"locationAttributes": [
{
"name": "crossbusiness.services.delivery",
"value": "true"
},
{
"name": "crossbusiness.services.delivery",
"value": "false"
}
]
/* other location details */
}

Location Status​

OnlyClosedDateMustBePresent​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"locationStatus": {
"status": "CLOSED",
"closedDate": "2026-03-23",
"reopenDate": "2026-03-23"
}
/* other location details */
}

Categories​

CategoriesMustBeDistinct​

Duplicate (non-distinct) category values.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"categories": [ "shopping.food_mart.convenience_store", "shopping.food_mart.convenience_store" ]
/* other location details */
}

CategoryMustBePrecise​

Scenario One
Only a parent node is provided. A parent is also referred to as a Level 0 value or a first dot delimited (".") value.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"categories": [ "shopping" ]
/* other location details */
}

Scenario Two
A parent node and a more precise category value is provided. The parent node is imprecise and also redundant in this scenario.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"categories": [ "shopping", "shopping.store.beauty_supply_store.cosmetics_store" ]
/* other location details */
}

Scenario Three

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"categories": [ "shopping.store.beauty_supply_store.cosmetics_store" ]
/* other location details */
}

ListShouldExcludeRedundantCategory​

shopping.food_mart.grocery_store is redundant. Value is already present in shopping.food_mart.grocery_store.discount_grocery_store

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"categories": [ "shopping.food_mart.grocery_store", "shopping.food_mart.grocery_store.discount_grocery_store" ]
/* other location details */
}

TopLevelCategoryChanged​

In the latest submission the top level category, also referred to as the first dot delimited (".") value, is shopping.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"categories": [ "shopping.food_mart", "dining.bakery.donut_shop", "dining.bakery.pastry_shop" ]
/* other location details */
}

When each first dot delimited value in the latest submission is compared to all first period delimited values in the stored record, shopping is not detected.

"categories": [ "dining.bakery.donut_shop", "dining.bakery.pastry_shop" ]

TopLevelCategoryUnmatched​

In the latest submission the top level category, also referred to as the first period delimited (".") value, is shopping.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"categories": [ "shopping.food_mart" ]
/* other location details */
}

When the first period delimited value in the latest submission is compared to all first period delimited values in the stored record, no match is detected.

"categories": [ "dining.bakery.donut_shop", "dining.bakery.pastry_shop" ]

Display Names​

DisplayNamesIncludesNounSynonymousWithOperations​

name includes Headquarters.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Headquarters Beercade",
"locale": "en",
"primary": true
}
]
/* other location details */
}

DisplayNamesLocaleMustBeDistinct​

Scenario One
Non-matching display names possess matching locale values.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Malibu Ice Cream",
"locale": "en-US",
"primary": true
},
{
"name": "Malibu Ice Cream & Custard",
"locale": "en-US",
"primary": false
},
{
"name": "Ice Cream & Custard",
"locale": "en-US",
"primary": false
}
]
/* other location details */
}

Scenario Two
Non-matching display names.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Malibu Ice Cream",
"locale": "en-US",
"primary": true
},
{
"name": "Malibu Ice Cream & Custard",
"locale": "en",
"primary": false
},
{
"name": "Ice Cream & Custard",
"locale": "en",
"primary": false
}
]
/* other location details */
}

Scenario Three
Matching display names possessing the matching locale values.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Malibu Ice Cream",
"locale": "en-US",
"primary": true
},
{
"name": "Malibu Ice Cream & Custard",
"locale": "en-US",
"primary": false
},
{
"name": "Malibu Ice Cream & Custard",
"locale": "en-US",
"primary": false
}
]
/* other location details */
}

Scenario Four
Matching display names possessing matching locale values.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Malibu Ice Cream",
"locale": "en-US",
"primary": true
},
{
"name": "Malibu Ice Cream & Custard",
"locale": "en",
"primary": false
},
{
"name": "Malibu Ice Cream & Custard",
"locale": "en",
"primary": false
}
]
/* other location details */
}

Scenario Five
Matching display names possessing dissimilar locale values. en is not considered to be a duplicate of en-US. The data is interpreted to mean that the (US) English version should be targeted at readers of content in the US. Whereas, in all other places in the world where English is spoken (GB, Australia, New Zealand, etc) the alternative should be presented. The fact that the name values themselves match is not the concern of this validation.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Malibu Ice Cream",
"locale": "en-US",
"primary": true
},
{
"name": "Malibu Ice Cream & Custard",
"locale": "en-US",
"primary": false
},
{
"name": "Malibu Ice Cream & Custard",
"locale": "en",
"primary": false
}
]
/* other location details */
}

DisplayNamesLocaleMustNotBeEmpty​

locale is empty string.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Headquarters Beercade",
"locale": "",
"primary": true
}
]
/* other location details */
}

DisplayNamesNameMustNotBeDummyCharacters​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Test",
"locale": "en",
"primary": true
}
]
/* other location details */
}

DisplayNamesLocaleNotMatchedByKeywordsOtherLocale​

Scenario One
locale is en

Pass ScenarioFailure Scenario
✓
Sample Input
Location - Display Names
{
"displayNames": [
{
"name": "Headquarters Beercade",
"locale": "en",
"primary": true
}
]
/* other location details */
}

Display Names listed locale is not matched in Location Keywords listed locale

Location - Keywords
{
"locationKeywords": {
"other": [
{
"keyword": "Service de blanchisserie",
"locale": "fr"
}
]
}
/* other location details */
}

Scenario Two
locale is "en"

Pass ScenarioFailure Scenario
✓
Sample Input
Location - Display Names
{
"displayNames": [
{
"name": "Headquarters Beercade",
"locale": "en",
"primary": true
}
]
/* other location details */
}

Display Names listed locale matches the primary language tag in Location Keywords listed locale

Location - Keywords
{
"locationKeywords": {
"other": [
{
"keyword": "Laundry Service",
"locale": "en-US"
}
]
}
/* other location details */
}

DisplayNamesPrimaryFlagMustBePresent​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Malibu Ice Cream",
"locale": "en-US",
"primary": true
}
]
/* other location details */
}

Scenario Two
Single display name is flagged primary.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Malibu Ice Cream",
"locale": "en",
"primary": true
},
{
"name": "Malibu Ice Cream & Custard",
"locale": "en",
"primary": false
},
{
"name": "Ice Cream & Custard",
"locale": "en-US",
"primary": false
}
]
/* other location details */
}

Scenario Three

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Malibu Ice Cream",
"locale": "en",
"primary": true
},
{
"name": "glace et crème pâtissière",
"locale": "fr"
}
]
/* other location details */
}

DisplayNamesNameHasSuspectedNounSynonymousWithOperations​

name is Headquarters

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Headquarters",
"locale": "en",
"primary": true
}
]
/* other location details */
}

DisplayNamesNameHasSuspectedUnintentionalSequentialWordRepetition​

name includes &&

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"displayNames": [
{
"name": "Mark's && Spencer's",
"locale": "en",
"primary": true
}
]
/* other location details */
}

LocationPrimaryDisplayNamesNameNotMatchedWithBrandName​

Scenario One​

Pass ScenarioFailure Scenario
✓
Sample Input

Where primary display names share the same en primary language tag, names match.

Location
{
"locationDetails": {
"displayNames": [
{
"name": "Truluck's",
"locale": "en",
"primary": true
}
]
/* other location details */
}
}
Brand
{
"brandDetails": {
"displayNames": [
{
"name": "Truluck's",
"locale": "en-US",
"primary": true
}
]
/* other brand details */
}
}

Scenario Two​

Pass ScenarioFailure Scenario
✓
Sample Input

Where primary display names share the same en primary language tag, names do not match.

Location
{
"locationDetails": {
"displayNames": [
{
"name": "Eddie V's - Austin",
"locale": "en",
"primary": true
}
]
/* other location details */
}
}
Brand
{
"brandDetails": {
"displayNames": [
{
"name": "Eddie V's Prime Seafood",
"locale": "en",
"primary": true
}
]
/* other brand details */
}
}

Scenario Three​

Pass ScenarioFailure Scenario
✓
Sample Input
  • Where primary display names share the same es primary language tag, names match.
  • en language tag is not listed on the brand. The location primary display name with this language tag is not considered by this validation.
Location
{
"locationDetails": {
"displayNames": [
{
"name": "Eddie V's Prime Seafood",
"locale": "es",
"primary": true
},
{
"name": "Eddie V's - Austin",
"locale": "en",
"primary": true
}
]
/* other location details */
}
}
Brand
{
"brandDetails": {
"displayNames": [
{
"name": "Eddie V's Prime Seafood",
"locale": "es",
"primary": true
}
]
/* other brand details */
}
}

Scenario Four​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"locationDetails": {
"displayNames": [
{
"name": "中国银行",
"locale": "zh",
"primary": true
},
{
"name": "Bank of China",
"locale": "en",
"primary": true
}
]
/* other location details */
}
}
Brand
{
"brandDetails": {
"displayNames": [
{
"name": "中国银行",
"locale": "zh",
"primary": true
},
{
"name": "Bank of China",
"locale": "en",
"primary": true
}
]
/* other brand details */
}
}

Scenario Five​

Pass ScenarioFailure Scenario
✓
Sample Input
  • Similar to scenario three, en language tag is not listed on the brand. The primary display name with this language tag is not considered by this validation.
Location
{
"locationDetails": {
"displayNames": [
{
"name": "Pikelotes",
"locale": "es",
"primary": true
},
{
"name": "RaNdOmLeTtErSaNdNuMbErS",
"locale": "en",
"primary": true
}
]
/* other location details */
}
}
Brand
{
"brandDetails": {
"displayNames": [
{
"name": "Pikelotes",
"locale": "es",
"primary": true
}
]
/* other brand details */
}
}

Scenario Six​

Pass ScenarioFailure Scenario
✓
Sample Input
  • Where primary display names share the same zh primary language tag, names match.
  • Brand's en language tag is not listed on the location. The absence of this language tag on the location is not considered by this validation.
Location
{
"locationDetails": {
"displayNames": [
{
"name": "中国银行",
"locale": "zh",
"primary": true
}
]
/* other location details */
}
}
Brand
{
"brandDetails": {
"displayNames": [
{
"name": "中国银行",
"locale": "zh",
"primary": true
},
{
"name": "Bank of China",
"locale": "en",
"primary": true
}
]
/* other brand details */
}
}

Scenario Seven​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"locationDetails": {
"displayNames": [
{
"name": "Au Bon Pain",
"locale": "en",
"primary": true
}
]
/* other location details */
}
}
Brand
{
"brandDetails": {
"displayNames": [
{
"name": "Pret A Manger",
"locale": "fr",
"primary": true
}
]
/* other brand details */
}
}

Keywords​

KeywordsOtherKeywordMustNotBeDummyCharacters​

First listed keyword has dummy characters.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"locationKeywords": {
"other": [
{
"keyword": "test",
"locale": "en"
},
{
"keyword": "Wash & Fold",
"locale": "en"
}
]
}
/* other location details */
}

KeywordsProductsKeywordHasSuspectedUnintentionalSequentialWordRepetition​

Second listed keyword includes unintentional sequential characters.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"locationKeywords": {
"services": [
{
"keyword": "Laundry Service",
"locale": "en"
},
{
"keyword": "Wash & & Fold",
"locale": "en"
}
]
}
/* other location details */
}

KeywordsServices_ExpectedLangTagForCountryNotPresent​

Scenario: Location's countryCode is NL (Netherlands). The expectation is that certain features with descriptive information would have at least one (1) language tag that is equal to nl.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"mainAddress": {
"fullAddress": "Den Texstraat 16, Amsterdam, 1017 ZA, NL",
"structuredAddress": {
"thoroughfare": "Den Texstraat",
"subThoroughfare": "16",
"fullThoroughfare": "Den Texstraat 16",
"locality": "Amsterdam",
"administrativeArea": "North Holland",
"countryCode": "NL",
"postCode": "1017 ZA"
},
"locale": "en"
}
/* other location details */
}

All listed entries have a language tag of "en".

Location - Keywords
{
"locationKeywords": {
"services": [
{
"keyword": "Laundry Service",
"locale": "en"
},
{
"keyword": "Wash & Fold",
"locale": "en"
}
]
}
/* other location details */
}

KeywordsServicesKeywordMustNotBeEmpty​

First listed keyword is empty.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"locationKeywords": {
"services": [
{
"keyword": "",
"locale": "en"
},
{
"keyword": "Wash & Fold",
"locale": "en"
}
]
}
/* other location details */
}

KeywordValueDuplicatedAcrossLists​

Laundry Service is duplicated.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"locationKeywords": {
"services": [
{
"keyword": "Laundry Service",
"locale": "en"
},
{
"keyword": "Wash & Fold",
"locale": "en"
}
],
"other": [
{
"keyword": "Laundry Service",
"locale": "en"
}
]
}
/* other location details */
}

Opening Hours by Day​

HoursAreWithin06:00To11:00Range​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "07:00",
"endTime": "10:30"
}
]
}
]
/* other location details */
}

MajorityOfHoursNotWithin08:00To20:00Range​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "17:00",
"endTime": "02:00"
}
]
}
]
/* other location details */
}

OpeningHoursStartTimeMustNotMatchEndTime​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "10:00"
}
]
}
]
/* other location details */
}

OpeningHoursDaysTimesMustNotMatch​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "12:00"
},
{
"startTime": "10:00",
"endTime": "12:00"
}
]
}
]
/* other location details */
}

OpeningHoursDaysTimesMustNotOverlap​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "12:30"
},
{
"startTime": "12:00",
"endTime": "17:00"
}
]
}
]
/* other location details */
}

SuspiciouslyShortClosureBetweenTimesInDay​

Scenario One
Zero time interval between listed times

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "12:00"
},
{
"startTime": "12:00",
"endTime": "17:00"
}
]
}
]
/* other location details */
}

Scenario Two
Fifteen minute interval between listed times

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "12:00"
},
{
"startTime": "12:15",
"endTime": "17:00"
}
]
}
]
/* other location details */
}

SuspiciousWeekdayTimeVariance​

Scenario One
THURSDAY variance from the observed norm among other days is suspicious

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "17:00"
}
]
},
{
"day": "TUESDAY",
"times": [
{
"startTime": "10:00",
"endTime": "17:00"
}
]
},
{
"day": "WEDNESDAY",
"times": [
{
"startTime": "10:00",
"endTime": "17:00"
}
]
},
{
"day": "THURSDAY",
"times": [
{
"startTime": "10:00",
"endTime": "13:00"
}
]
},
{
"day": "FRIDAY",
"times": [
{
"startTime": "10:00",
"endTime": "17:00"
}
]
}
]
/* other location details */
}

SuspiciousWeekendRestriction​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "SATURDAY",
"times": [
{
"startTime": "10:00",
"endTime": "17:00"
}
]
}
]
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "SATURDAY",
"times": [
{
"startTime": "10:00",
"endTime": "17:00"
}
]
},
{
"day": "SUNDAY",
"times": [
{
"startTime": "10:00",
"endTime": "17:00"
}
]
}
]
/* other location details */
}

OpeningHoursByDayListMustNotIncludeNulls​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [ { null } ]
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [ null ]
/* other location details */
}

Scenario Three

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": []
/* other location details */
}

OpeningHoursByDayTimesListMustNotIncludeNulls​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [{ null }]
},
{
"day": "TUESDAY",
"times": [
{
"startTime": "10:00",
"endTime": "22:00"
}
]
}
]
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": [ null ]
},
{
"day": "TUESDAY",
"times": [
{
"startTime": "10:00",
"endTime": "22:00"
}
]
}
]
/* other location details */
}

Scenario Three

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"openingHoursByDay": [
{
"day": "MONDAY",
"times": []
},
{
"day": "TUESDAY",
"times": [
{
"startTime": "10:00",
"endTime": "22:00"
}
]
}
]
/* other location details */
}

Phone Numbers​

AtLeastOnePrimaryPhoneNumberShouldBePresent​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"phoneNumbers": [
{
"phoneNumber": "+12225551212",
"type": "LANDLINE",
"primary": false
}
]
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"phoneNumbers": [
{
"phoneNumber": "+12225551212",
"type": "LANDLINE",
"primary": false
},
{
"phoneNumber": "+18000000000",
"type": "TOLL_FREE",
"primary": false
}
]
/* other location details */
}

MustOnlyHaveOnePrimaryPhoneNumber​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"phoneNumbers": [
{
"phoneNumber": "+12225551212",
"type": "LANDLINE",
"primary": true
},
{
"phoneNumber": "+18000000000",
"type": "TOLL_FREE",
"primary": true
}
]
/* other location details */
}

PhoneNumberTypeMustBeDistinct​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"phoneNumbers": [
{
"phoneNumber": "+12225551212",
"type": "LANDLINE",
"primary": true
},
{
"phoneNumber": "+18000000000",
"type": "LANDLINE",
"primary": false
}
]
/* other location details */
}

Service Hours​

ServiceHoursDaysTimesMustNotMatch​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"serviceHours": [
{
"category": "servicehours.retail.pharmacy_hours",
"hoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "10:00"
},
{
"startTime": "10:00",
"endTime": "10:00"
}
]
}
]
}
]
/* other location details */
}

ServiceHoursDaysTimesMustNotOverlap​

First listed entry's endTime ("12:30") overlaps second listed entry's startTime ("12:00") by 30 minutes.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"serviceHours": [
{
"category": "servicehours.retail.pharmacy_hours",
"hoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "12:30"
},
{
"startTime": "12:00",
"endTime": "18:00"
}
]
}
]
}
]
/* other location details */
}

ServiceHoursHoursByDayDayMustBeDistinct​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"serviceHours": [
{
"category": "servicehours.retail.pharmacy_hours",
"hoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "12:30"
}
]
},
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "12:30"
}
]
}
]
}
]
/* other location details */
}

ServiceHoursStartTimeMustNotMatchEndTime​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"serviceHours": [
{
"category": "servicehours.retail.pharmacy_hours",
"hoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "10:00"
}
]
}
]
}
]
/* other location details */
}

TopLevelServiceHourCategoryChanged​

In the latest submission the top level category is retail.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"serviceHours": [
{
"category": "servicehours.retail.photoshop_hours",
"hoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "17:00"
}
]
}
]
}
]
/* other location details */
}

When the first period delimited value in the latest submission is compared to the first period delimited values in the stored record, retail is not detected.

"categories": "servicehours.retail.pharmacy_hours"

Special Hours​

DateInRangeHasNoCorrespondingDaySpecified​

Scenario One
Each calendar date derived from the specified startDate and endDate range corresponds with a day listed in hoursByDay.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "TUESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "WEDNESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "THURSDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "FRIDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "SATURDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "SUNDAY",
"times": [
{
"startTime": "09:00",
"endTime": "14:00"
}
]
}
],
"startDate": "2026-12-22",
"endDate": "2026-12-27",
"closed": false,
"descriptions": [
{
"text": "Hours during week of Christmas",
"locale": "en-GB"
}
]
}
]
/* other location details */
}

Scenario Two
The startDate corresponds with a Tuesday on the calendar. "TUESDAY" is not listed in hoursByDay.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "WEDNESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "THURSDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "FRIDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "SATURDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "SUNDAY",
"times": [
{
"startTime": "09:00",
"endTime": "14:00"
}
]
}
],
"startDate": "2026-12-22",
"endDate": "2026-12-27",
"closed": false,
"descriptions": [
{
"text": "Hours during week of Christmas",
"locale": "en-GB"
}
]
}
]
/* other location details */
}

SpecialHoursDateRangeExceedsNinetyDays​

Scenario One
Quantity of days in date range 2026-12-24 to 2026-12-24 exceeds ninety (90) days.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "FRIDAY",
"times": [
{
"startTime": "09:00",
"endTime": "12:00"
}
]
}
],
"startDate": "2026-12-24",
"endDate": "2026-12-24",
"closed": "false",
"descriptions": [
{
"text": "Early Closing Christmas Eve",
"locale": "en-US"
}
]
}
]
/* other location details */
}

Scenario Two
Quantity of days derived from startDate and endDate for the second (1) Special Hours listing is greater than 90 days.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "SUNDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "MONDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "TUESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "WEDNESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "THURSDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "FRIDAY",
"times": [
{
"startTime": "09:00",
"endTime": "14:00"
}
]
}
],
"startDate": "2026-12-18",
"endDate": "2026-12-24",
"closed": false,
"descriptions": [
{
"text": "Hours during week of Christmas",
"locale": "en-GB"
}
]
},
{
"startDate": "2026-12-25",
"endDate": "2026-12-25",
"closed": true,
"descriptions": [
{
"text": "Closed Christmas Day",
"locale": "en-GB"
}
]
}
]
/* other location details */
}

SpecialHoursDatesMustNotOverlap​

Scenario One
Special Hours listings overlap on 2026-12-25. Dates are inclusive

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "FRIDAY",
"times": [
{
"startTime": "09:00",
"endTime": "12:00"
}
]
}
],
"startDate": "2026-12-24",
"endDate": "2026-12-25",
"closed": "false",
"descriptions": [
{
"text": "Early Closing Christmas Eve",
"locale": "en-US"
}
]
},
{
"startDate": "2026-12-25",
"endDate": "2026-12-25",
"closed": "true",
"descriptions": [
{
"text": "Closed Christmas Day",
"locale": "en-US"
}
]
}
]
/* other location details */
}

Scenario Two
Corrected version of Special Hours from scenario one

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "FRIDAY",
"times": [
{
"startTime": "09:00",
"endTime": "12:00"
}
]
}
],
"startDate": "2026-12-24",
"endDate": "2026-12-24",
"closed": "false",
"descriptions": [
{
"text": "Early Closing Christmas Eve",
"locale": "en-US"
}
]
},
{
"startDate": "2026-12-25",
"endDate": "2026-12-25",
"closed": "true",
"descriptions": [
{
"text": "Closed Christmas Day",
"locale": "en-US"
}
]
}
]
/* other location details */
}

Scenario Three
Special Hours listings overlap on 2026-12-20

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "SUNDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "MONDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "TUESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
}
],
"startDate": "2026-12-18",
"endDate": "2026-12-20",
"closed": false,
"descriptions": [
{
"text": "Hours at beginning of Christmas week",
"locale": "en-GB"
}
]
},
{
"hoursByDay": [
{
"day": "WEDNESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "THURSDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "FRIDAY",
"times": [
{
"startTime": "09:00",
"endTime": "14:00"
}
]
}
],
"startDate": "2026-12-20",
"endDate": "2026-12-24",
"closed": false,
"descriptions": [
{
"text": "Hours during 3 days before Christmas",
"locale": "en-GB"
}
]
},
{
"startDate": "2026-12-25",
"endDate": "2026-12-25",
"closed": true,
"descriptions": [
{
"text": "Closed Christmas Day",
"locale": "en-GB"
}
]
}
]
/* other location details */
}

SpecifiedDayMustCoincideWithDateInRange​

Scenario One
FRIDAY is not coincident with any date in date range 2026-12-24 to 2026-12-24.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "FRIDAY",
"times": [
{
"startTime": "09:00",
"endTime": "12:00"
}
]
}
],
"startDate": "2026-12-24",
"endDate": "2026-12-24",
"closed": "false",
"descriptions": [
{
"text": "Early Closing Christmas Eve",
"locale": "en-US"
}
]
}
]
/* other location details */
}

Scenario Two
MONDAY is not coincident with any date in date range

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "TUESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "WEDNESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "THURSDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
}
],
"startDate": "2026-12-25",
"endDate": "2026-12-27",
"closed": false
}
]
/* other location details */
}

Scenario Three
Each day is coincident with a date in the date range. The date range includes calendar days not specified. However, their absence is not the concern of this validation.

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "TUESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "WEDNESDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
},
{
"day": "THURSDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
}
],
"startDate": "2026-12-28",
"endDate": "2026-12-31",
"closed": false
}
]
/* other location details */
}

SpecialHoursStartTimeMustNotMatchEndTime​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "10:00",
"endTime": "10:00"
}
]
}
],
"startDate": "2026-10-14",
"endDate": "2026-10-14",
"closed": false
}
]
/* other location details */
}

HoursByDayMustNotBePresentWhenClosed​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [],
"startDate": "2026-12-26",
"endDate": "2026-12-26",
"closed": true,
"descriptions": [
{
"text": "Closed on Boxing Day",
"locale": "en-GB"
}
]
}
]
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"specialHours": [
{
"hoursByDay": [
{
"day": "MONDAY",
"times": [
{
"startTime": "08:00",
"endTime": "18:00"
}
]
}
],
"startDate": "2026-12-26",
"endDate": "2026-12-26",
"closed": true,
"descriptions": [
{
"text": "Closed on Boxing Day",
"locale": "en-GB"
}
]
}
]
/* other location details */
}

URLs​

UrlsListMustNotContainNulls​

Scenario One

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"urls": [
{
"url": "http://example.com",
"type": "HOMEPAGE"
},
{ null }
]
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"urls": [ null ]
/* other location details */
}

UrlsMustBeDistinct​

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"urls": [
{
"url": "http://example.com",
"type": "HOMEPAGE"
},
{
"url": "http://example.com",
"type": "FACEBOOK"
}
]
/* other location details */
}

UrlShouldHaveExpectedAuthority​

Expected authority for the URL is facebook.com

Pass ScenarioFailure Scenario
✓
Sample Input
Location
{
"urls": [
{
"url": "http://example.com/my_page",
"type": "FACEBOOK"
}
]
/* other location details */
}