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 */
}

AccessPointsCoordinatesMustBeSufficientlyPrecise

Latitude value 51.3588 has a precision of four (4) decimal places.

Pass ScenarioFailure Scenario
Sample Input
Location
{
"accessPoints": [
{
"coordinates": {
"latitude": "51.3588",
"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 */
}

DisplayNamesHasSuspectedPresenceOfDummyCharacters

Pass ScenarioFailure Scenario
Sample Input
Location
{
"displayNames": [
{
"name": "Test Location Record",
"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 */
}

KeywordServiceHasSuspectedPresenceOfDummyCharacters

First listed keyword includes dummy characters.

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

KeywordsServiceKeywordMustNotBeEmpty

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 */
}

Multi-property

ListMustNotContainNulls

Scenario One

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

Scenario Two

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

Scenario Three

Pass ScenarioFailure Scenario
Sample Input
Location
{
"categories": [ "dining.bar.darts_bar", null, "dining.bar.dive_bar" ]
/* 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 */
}

PhoneNumbersDescriptions_ExpectedLangTagForCountryNotPresent

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 - Main Address
{
"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 */
}

Listed entry has "en" primary language tag.

Location - Phone Numbers
{
"phoneNumbers": [
{
"phoneNumber": "+12225551212",
"type": "LANDLINE",
"primary": false,
"descriptions": [
{
"text": "Main phone number to call for all inquiries",
"locale": "en"
}
]
}
]
/* other location details */
}

PhoneNumbersDescriptionsLocaleMustBeDistinct

Scenario One
One listed entry has en primary language tag but is indistinguishable from the entry with en-US.

Pass ScenarioFailure Scenario
Sample Input
Location
{
"phoneNumbers": [
{
"phoneNumber": "+12225551212",
"type": "LANDLINE",
"primary": false,
"descriptions": [
{
"text": "Main phone number to call for all inquiries",
"locale": "en-US"
},
{
"text": "Main phone number to call for all enquiries",
"locale": "en"
}
]
}
]
/* other location details */
}

Scenario Two
All listed entries have en primary language tag

Pass ScenarioFailure Scenario
Sample Input
Location
{
"phoneNumbers": [
{
"phoneNumber": "+12225551212",
"type": "LANDLINE",
"primary": false,
"descriptions": [
{
"text": "Main phone number to call for all inquiries",
"locale": "en"
},
{
"text": "Main number for all inquiries",
"locale": "en"
}
]
}
]
/* other location details */
}

Scenario Three
All listed entries have en primary language tag and region subtags are distinct.

Pass ScenarioFailure Scenario
Sample Input
Location
{
"phoneNumbers": [
{
"phoneNumber": "+12225551212",
"type": "LANDLINE",
"primary": false,
"descriptions": [
{
"text": "Main phone number to call for all inquiries",
"locale": "en-US"
},
{
"text": "Main phone number to call for all enquiries",
"locale": "en-GB"
}
]
}
]
/* other location details */
}

PhoneNumbersDescriptionsTextMustNotBeDummyCharacters

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

PhoneNumbersDescriptionsTextMustNotBeEmpty

Pass ScenarioFailure Scenario
Sample Input
Location
{
"phoneNumbers": [
{
"phoneNumber": "+12225551212",
"type": "LANDLINE",
"primary": false,
"descriptions": [
{
"text": "",
"locale": "en"
}
]
}
]
/* 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 */
}

UrlsUrlMustIncludeAppStoreId

Scenario One

Pass ScenarioFailure Scenario
Sample Input
Location
{
"urls": [
{
"url": "https://www.provider.com/us/app/location-name-app",
"type": "IOS_APP"
}
]
/* other location details */
}

Scenario Two

Pass ScenarioFailure Scenario
Sample Input
Location
{
"urls": [
{
"url": "https://www.provider.com/us/app/location-name-app/id",
"type": "IOS_APP"
}
]
/* other location details */
}

Scenario Three

Pass ScenarioFailure Scenario
Sample Input
Location
{
"urls": [
{
"url": "https://www.provider.com/us/app/location-name-app/id123456789",
"type": "IOS_APP"
}
]
/* other location details */
}

UrlsMustBeDistinct

Pass ScenarioFailure Scenario
Sample Input
Location
{
"urls": [
{
"url": "http://example.com",
"type": "HOMEPAGE"
},
{
"url": "http://example.com",
"type": "YELP"
}
]
/* 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 */
}

UrlsAppStoreUrlMustHaveExpectedAuthority

Pass ScenarioFailure Scenario
Sample Input
Location
{
"urls": [
{
"url": "https://play.google.com/store/search?q=yelp&c=apps",
"type": "IOS_APP"
}
]
/* other location details */
}