Location categories validation rules for precision, distinctness, country restrictions, and attribute compatibility
Category
CategoriesListMustNotIncludeNulls
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that a list does not include null |
CategoriesMustBeDistinct
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that each category is distinct | Link |
CategoriesMustBePresent
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that categories are present |
CategoriesMustBeValid
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that category is valid | Link |
CategoryMustNotBeDeprecated
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that category is not deprecated |
CategoriesMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that categories is not an empty string |
CategoriesMustNotBeEmptyArray
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that categories is not an empty array |
CategoryMustBePrecise
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that a value is not a parent node category | Link |
Parent Nodes
| Name |
|---|
travel_and_leisure |
association_or_organization |
beauty_and_spa |
transportation |
civil_service |
commercial_sector |
shopping |
dining |
consumer_sector |
health_care |
natural_features |
Example Validation Report
{
"code": "VALIDATION__CategoryMustBePrecise",
"severity": "VIOLATION",
"message": "'{{field}}' value '{{value}}' is a parent node. Re-submit with more precise category",
"context": {
"field": "categories",
"value": "shopping"
},
"details": {
"createdDate": "2026-03-20T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.categories"
}
],
"compared": [],
"expected": []
}
}
CountOfItemsInCategoriesListExceedsThreshold
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that the count of items in categories does not exceed twenty (20) |
ListShouldExcludeRedundantCategory
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that a top level category is excluded when already included as period delimited value in another category | Link |
LocationHasSensitiveCategory
| Preconditions |
|---|
orgId resolves to organization that is location owner |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that location category is not "sensitive" and subject to review |
Example Validation Report
{
"code": "VALIDATION__LocationHasSensitiveCategory",
"severity": "WARNING",
"message": "Location category '{{value}}' is subject to review",
"context": {
"value": "travel_and_leisure.adult_entertainment_venue.strip_club"
},
"details": {
"createdDate": "2026-10-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.categories[3]",
"value": "travel_and_leisure.adult_entertainment_venue.strip_club"
}
],
"compared": [],
"expected": []
}
}
PrimaryCategoryRequiresReview
| Preconditions |
|---|
| Brand type is "regular" or "umbrella" |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the primary category exactly matches any brand category |
Example Validation Report
{
"code": "VALIDATION__PrimaryCategoryRequiresReview",
"severity": "WARNING",
"message": "'{{value}}' requires review",
"context": {
"value": "dining.dessert_shop.ice_cream_shop.gelato_shop"
},
"details": {
"createdDate": "2026-10-01T21:00:59.865Z",
"submitted": [
{
"field": "$.locationDetails.categories[0]",
"value": "dining.dessert_shop.ice_cream_shop.gelato_shop"
}
],
"compared": [],
"expected": []
}
}
Change Detection
TopLevelCategoryChanged
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that each top level category in the latest submittal matches a top level category in the previous submittal | Link |
TopLevelCategoryUnmatched
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that a top level category in the previous submittal is matched in the latest submittal | Link |
Cross-feature
UnexpectedCategoryForLocationAttribute
| Preconditions |
|---|
locationAttributes is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that a listed locationAttributes value is only accompanied by values in a categories list that are expected |
Example Validation Report
{
"code": "VALIDATION__UnexpectedCategoryForLocationAttribute",
"severity": "VIOLATION",
"message": "Location attribute '{{name}}' is accompanied by unexpected location category",
"context": {
"name": "accolades.golf_digest.100_greatest_courses_in_admin_area_type"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.locationAttributes[0]",
"value": {
"name": "accolades.golf_digest.100_greatest_courses_in_admin_area_type",
"value": "true"
}
},
{
"field": "$.locationDetails.categories[0]",
"value": "commercial_sector.wholesaler.industrial_supplier"
},
{
"field": "$.locationDetails.categories[1]",
"value": "commercial_sector.wholesaler.industrial_supplier.industrial_equipment_supplier.forklift_service"
}
],
"compared": [],
"expected": []
}
}
InvalidCategoryForCountry
| Preconditions |
|---|
structuredAddress is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that category is valid for use with the corresponding country identified by countryCode |
| Category | Code |
|---|---|
shopping.food_mart.convenience_store.spatkauf | DE |
dining.cafe.cannabis_cafe | IL, NL |
civil_service.government_office.government_department.law_enforcement_agency.police_department.police_box | JP, SG |
InvalidCategoryForDerivedCountry
| Preconditions |
|---|
displayPoint is present |
structuredAddress is not present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that category is valid for use with the corresponding country derived from the displayPoint |