Inventory View

Overview

The Inventory Viewer in Actions Center provides visibility into the ingestion health, place matching status, and serving eligibility of your Point of Interest (POI) local inventory.

This viewer displays issues independent of individual ingestions—stateful issues representing the active serving status of each service provider incorporating any possible failure modes (policy, warnings, errors, etc.) that may occur.

Use this tool to:

  • Search and inspect all ingested service providers and their live serving states.
  • Diagnose data validation errors and content policy violations.
  • Submit and track appeals for any policy violations.
  • Inspect service provider matching diagnostics and submit manual match proposals.
  • Review raw JSON payloads from your latest feed ingestions.

Inventory Table Columns

The list view displays all uploaded service providers from your Point of Interest (POI) feed, organized hierarchically by entity. You can filter by Local POI ID, Matching Status, Integration, and Surface.

Summary Table Columns Description
Local POI ID The unique identifier for the local property provided in the feed (poi_id).
Local POI Name The localized name of the local property extracted from the feed.
Matching Status Indicates whether the POI has been matched to a Google Maps listing:
• Yes (Green badge): Successfully matched to a Google Maps place.
• No (Red badge): Unmatched; requires review or a match proposal.
Integration This is the Local Aggregator Unit integration.
Surface The target serving surface (e.g. Search).
Serving Status The real-time serving eligibility state:
• Enabled (Green indicator): Eligible and actively servable on Google surfaces.
• Disabled (Red indicator): Blocked from serving due to validation errors, policy violations, or unmatched status.
Errors Count of active issues with a severity of Error. The existence of any error for a property means that property won't be eligible to serve on any surface.
Warnings Count of active issues with a severity of Warning. Properties with warnings are still eligible to serve.
Match Info Contains the Edit match button, which opens the interactive match fix panel.

POI Details View

Clicking any POI ID in the list view navigates to the entity's dedicated details page.

The details view consists of four expandable sections:

1. Basic Info

Summarizes high-level entity metadata:

  • POI Name: Name of the establishment as parsed from data[].name.localizations.
  • POI ID: Unique partner entity identifier (poi_id).
  • Data source: The exact feed filename from which this entity was ingested.

2. Serving Status

Breaks down serving eligibility per integration and target surface:

  • Integration & Surface: Vertical and target surface (e.g., Local Aggregator Unit on Search).
  • Serving Status: Current Enabled or Disabled status.
  • Issues: Displays issue badges for all active errors or warnings (e.g., Unmatched entity, Policy Violation). Clicking an issue badge opens the Issue Details Panel.
  • Appeals: Displays override or appeal states (Under review, Approved, or Rejected).

3. Matching Information

Displays place matching diagnostics:

  • Match input: The formatted physical address parsed from your feed (street_address, locality, region, postal_code, country).
  • Match type: The matching resolution mechanism (e.g. Location).
  • Match namespace: The vertical your match changes will apply to (e.g. Local Aggregator Unit).
  • Match status: Yes (Green) or No (Red).
  • Match output: The resolved Google Maps place name, address, and place ID.
  • Edit match: Button to open the match proposal dialog.

4. Raw JSON

Provides an interactive code viewer with line numbers and syntax highlighting displaying the full parsed JSON payload (item_proto) for rapid schema debugging and verification. The data values presented here will reflect the values received from the POI feed.

Issues & Triage Workflow

Entities flagged with issues are either disabled (if flagged with an ERROR) or degraded (if flagged with a WARNING). Entity issues with a warning are not currently appealable, and warnings can be resolved by fixing the underlying issue.

Issue Types: Appealable versus Non-Appealable

  1. Non-Appealable Issues (Technical & Data Quality Validations):
    • Caused by schema errors, missing required fields, invalid coordinates, broken URLs, or duplicate IDs.
    • Resolution: Partners must correct the underlying data in their source feed and upload an updated feed file.
  2. Appealable Issues (Content & Policy Violations):
    • Triggered when property text (name) or image assets fail automated content safety filters.
    • Resolution: If the content complies with the platform policies, partners can click the Appeal button next to the issue in Actions Center to submit an appeal. Partners must provide a reason and justification, and our appeals team will review and approve or deny the requests. You'll be notified using the tool and email on decisions made.

Local Aggregator Unit Issue Catalog

The following table outlines the complete set of validation errors and policy issue codes for Local Aggregator Unit integrations:

Issue Description Severity Issue Code Affected Field / Args Is it Appealable? Action / Relevant Policy
Missing POI ID ERROR MISSING_REQUIRED_FIELD poi_id No Provide a unique poi_id. See POI Feed Specification.
Missing default locale for "name" field ERROR MISSING_REQUIRED_FIELD name.default_locale No Specify a valid BCP 47 language code for the default locale. See Multilingual Support.
No default localization found for "name" field ERROR MISSING_REQUIRED_FIELD name.localizations No Provide a value for the localized name of the POI matching the declared default_locale language.
Missing default locale for "description" field ERROR MISSING_REQUIRED_FIELD description.default_locale No Specify a valid BCP 47 default locale for the property description.
No default localization found for "description" field ERROR MISSING_REQUIRED_FIELD description.localizations No Provide description text matching the declared default_locale language.
Missing default locale for "display_address" field ERROR MISSING_REQUIRED_FIELD display_address.default_locale No Specify a valid BCP 47 default locale for the display address.
No default localization found for "display_address" field ERROR MISSING_REQUIRED_FIELD display_address.localizations No Provide formatted address text matching the declared default_locale language.
Exceeded maximum image count WARNING EXCEEDED_MAX_COUNT images No Limit image entries to a maximum of 5 images per POI. Excess images are dropped.
Invalid latitude coordinate ERROR INVALID_LATLNG location.latitude No Enter a valid latitude between -90.0 and +90.0. See Geo-coordinates Definition.
Invalid longitude coordinate ERROR INVALID_LATLNG location.longitude No Enter a valid longitude between -180.0 and +180.0. See Geo-coordinates Definition.
Missing latitude coordinate ERROR MISSING_REQUIRED_FIELD location.latitude No Provide the latitude value to complete the coordinate pair. See Geo-coordinates Definition.
Missing longitude coordinate ERROR MISSING_REQUIRED_FIELD location.longitude No Provide the longitude value to complete the coordinate pair. See Geo-coordinates Definition.
Missing or unstructured address ERROR MISSING_REQUIRED_FIELD location.address No Provide a structured postal address including street, locality, postal code, and country.
Malformed or invalid URL ERROR INVALID_ATTRIBUTE_VALUE url No Ensure the landing page URL uses a supported HTTP/HTTPS protocol and valid syntax.
Invalid or unreachable image ERROR INVALID_IMAGE image.url No Verify that image URLs are publicly reachable and don't require authentication or return 4xx/5xx errors.
Duplicate POI ID ERROR DUPLICATE_ENTITY poi_id No Ensure each poi_id is unique across the feed payload. Remove duplicate entries.
Unmatched entity ERROR UNMATCHED_ENTITY POI No Match the POI to a Google Maps place listing using the POI Entity Matching tool.
Image policy violation ERROR SAFE_SEARCH_POLICY_VIOLATION_IMAGE image Yes Remove or replace the flagged image, or click Appeal to submit a justification. See Google Search content image Policy.
Text policy violation - Default Name ERROR SAFE_SEARCH_POLICY_VIOLATION_TEXT name.localizations.*.text Yes Remove or replace the flagged name text, or click Appeal. See Google Search content text policy.
Text policy violation - Non-Default Name WARNING SAFE_SEARCH_POLICY_VIOLATION_TEXT name.localizations.*.text No Remove or replace the flagged name text. See Google Search content text policy.
Text policy violation - Description WARNING SAFE_SEARCH_POLICY_VIOLATION_TEXT description.localizations.*.text No Remove or replace the flagged description text. See Google Search content text policy.
Text policy violation - Display Address WARNING SAFE_SEARCH_POLICY_VIOLATION_TEXT display_address.localizations.*.text No Remove or replace the flagged display address text. See Google Search content text policy.
Missing default locale for Establishment Category ERROR MISSING_REQUIRED_FIELD local_data.establishment_category.default_locale No Provide a value for the localized establishment category of the POI matching the declared default_locale language.
Missing business hours open day ERROR MISSING_REQUIRED_FIELD local_data.business_hours.time_ranges.open_day No Provide a valid business hours open day.
Missing business hours open time ERROR MISSING_REQUIRED_FIELD local_data.business_hours.time_ranges.open_time No Provide valid business hours open time.
Missing business hours close day ERROR MISSING_REQUIRED_FIELD local_data.business_hours.time_ranges.close_day No Provide a valid business hours close day.
Missing business hours close time ERROR MISSING_REQUIRED_FIELD local_data.business_hours.time_ranges.close_time No Provide a valid business hours close time.
Business hours open time is greater than close time ERROR NOT_LESS_THAN_FIELD local_data.business_hours.time_ranges.open_time, local_data.business_hours.time_ranges.close_time No Provide a valid pair of open and close time, ensuring the open time is lower than close time.
Price range min value is greater than max value ERROR INVALID_PRICE_RANGE local_data.price_range.min_price, local_data.price_range.max_price No Provide a valid price range, with the minimum price lower than the maximum price.
Missing Brand Id ERROR MISSING_REQUIRED_FIELD local_data.brand_landing_pages.brand_id No Provide a valid brand id.
Duplicated Brand Id within a POI ERROR DUPLICATE_UNIQUE_PROPERTY local_data.brand_landing_pages.brand_id No Ensure each brand_id is unique across the POI payload. Remove duplicate entries.
Missing brand default URL ERROR MISSING_REQUIRED_FIELD local_data.brand_landing_pages.default_url No Provide a valid brand default URL.
Malformed or invalid Brand URL ERROR INVALID_ATTRIBUTE_VALUE local_data.brand_landing_pages.default_url No Ensure the brand default URL uses a supported HTTP/HTTPS protocol and valid syntax.
Missing brand localized landing page URL ERROR MISSING_REQUIRED_FIELD local_data.brand_landing_pages.localized_landing_pages.url No Provide a valid URL for the localized landing page.
Malformed or invalid brand localized landing page URL ERROR INVALID_ATTRIBUTE_VALUE local_data.brand_landing_pages.localized_landing_pages.url No Ensure the localized landing page URL uses a supported HTTP/HTTPS protocol and valid syntax.
Duplicated brand localized landing page URL ERROR DUPLICATE_UNIQUE_PROPERTY local_data.brand_landing_pages.localized_landing_pages.url No Ensure each url is unique across the POI localized landing pages. Remove duplicate entries.
Missing brand localized landing page locale ERROR MISSING_REQUIRED_FIELD local_data.brand_landing_pages.localized_landing_pages.locales No Provide a valid set of locales for the localized landing page.
Duplicated brand localized landing page locale ERROR DUPLICATE_UNIQUE_PROPERTY local_data.brand_landing_pages.localized_landing_pages.locales No Ensure each locale is unique across the POI localized landing pages. Remove duplicate entries.
Text policy violation - Non-Default Establishment Category WARNING SAFE_SEARCH_POLICY_VIOLATION_TEXT local_data.establishment_category.localizations.*.text No Remove or replace the flagged establishment category text. See Google Search content text policy.

Issue Codes

The following sections provide detailed causes and remediation steps for each issue code.

Missing required field

Issue Code: MISSING_REQUIRED_FIELD
Severity: Error (Blocks Serving)
Appealable: No (Resolve by updating your POI feed)

This error occurs when an ingested entity is missing one or more mandatory attributes required by the Point of Interest Feed Specification.

Check the Issue Details panel to identify which specific property is missing, then apply the corresponding fix:

1. Missing POI ID (poi_id)

  • Cause: The poi_id field is empty, null, or missing from the root entity object.
  • Remediation: Provide a persistent, unique string identifier for the property.
{
  "poi_id": "test_restaurant_1"
}

2. Missing Default Locale Or Localized Name (name)

  • Cause: The name object is missing the default_locale string or the localizations array with a matching locale.
  • Remediation: Provide both the default_locale and at least one localization entry matching that locale.
{
  "name": {
    "localizations": [
      {
        "locale": "en",
        "text": "Tasty Bites Test Restaurant"
      }
    ],
    "default_locale": "en"
  }
}

3. Missing Default Locale or Localized Address (display_address)

  • Cause: The display_address object is missing the default_locale string or the localizations array.
  • Remediation: Provide both the default_locale and at least one localization entry matching that locale for the formatted street address.
{
  "display_address": {
    "localizations": [
      {
        "locale": "en",
        "text": "1600 Amphitheatre Pkwy, Mountain View, CA 94043"
      }
    ],
    "default_locale": "en"
  }
}

4. Missing Default Locale or Localized Description (description)

  • Cause: When the description object is included, either default_locale or the matching localization is missing.
  • Remediation: Provide both the default_locale and at least one localization entry matching that locale for the description.
{
  "description": {
    "localizations": [
      {
        "locale": "en",
        "text": "A mock restaurant for testing the POI feed ingestion."
      }
    ],
    "default_locale": "en"
  }
}

5. Missing Geographic Coordinates (location.latitude / location.longitude)

  • Cause: The location object is missing either the latitude or longitude numerical value.
  • Remediation: Provide both latitude and longitude as floating-point numbers in standard WGS84 decimal degrees.
{
  "location": {
    "latitude": 37.422,
    "longitude": -122.084
  }
}

6. Missing Structured Postal Address (location.address)

  • Cause: The location.address object is missing mandatory address components (country, locality, or postal_code).
  • Remediation: Populate the structured postal address object per ISO standards.
{
  "location": {
    "address": {
      "country": "US",
      "locality": "Mountain View",
      "postal_code": "94043",
      "street_address": "1600 Amphitheatre Pkwy"
    }
  }
}

7. Missing Default Locale for Establishment Category (local_data.establishment_category.default_locale)

  • Cause: The local_data.establishment_category object is present, but default_locale is missing, empty, or does not match any entry in the localizations array.
  • Remediation: Specify a valid BCP 47 language tag for default_locale and supply at least one localized string matching that locale.
{
  "local_data": {
    "establishment_category": {
      "default_locale": "en",
      "localizations": [
        {
          "locale": "en",
          "text": "Restaurant"
        }
      ]
    }
  }
}

8. Missing Business Hours Open Day (local_data.business_hours.time_ranges.open_day)

  • Cause: An entry in local_data.business_hours.time_ranges is missing open_day or it is set to DAY_OF_WEEK_UNSPECIFIED.
  • Remediation: Provide a valid day-of-week string (e.g., "MONDAY", "TUESDAY", etc.).
{
  "local_data": {
    "business_hours": {
      "time_ranges": [
        {
          "open_day": "MONDAY",
          "open_time": { "hours": 11, "minutes": 0 },
          "close_day": "MONDAY",
          "close_time": { "hours": 21, "minutes": 0 }
        }
      ]
    }
  }
}

9. Missing Business Hours Open Time (local_data.business_hours.time_ranges.open_time)

  • Cause: An entry in local_data.business_hours.time_ranges is missing the open_time object.
  • Remediation: Specify open_time with hours (0–23) and minutes (0–59).
{
  "local_data": {
    "business_hours": {
      "time_ranges": [
        {
          "open_day": "MONDAY",
          "open_time": { "hours": 11, "minutes": 0 },
          "close_day": "MONDAY",
          "close_time": { "hours": 21, "minutes": 0 }
        }
      ]
    }
  }
}

10. Missing Business Hours Close Day (local_data.business_hours.time_ranges.close_day)

  • Cause: An entry in local_data.business_hours.time_ranges is missing close_day or it is set to DAY_OF_WEEK_UNSPECIFIED.
  • Remediation: Provide a valid day-of-week string (e.g., "MONDAY", "TUESDAY", etc.).
{
  "local_data": {
    "business_hours": {
      "time_ranges": [
        {
          "open_day": "MONDAY",
          "open_time": { "hours": 11, "minutes": 0 },
          "close_day": "MONDAY",
          "close_time": { "hours": 21, "minutes": 0 }
        }
      ]
    }
  }
}

11. Missing Business Hours Close Time (local_data.business_hours.time_ranges.close_time)

  • Cause: An entry in local_data.business_hours.time_ranges is missing the close_time object.
  • Remediation: Specify close_time with hours (0–23) and minutes (0–59).
{
  "local_data": {
    "business_hours": {
      "time_ranges": [
        {
          "open_day": "MONDAY",
          "open_time": { "hours": 11, "minutes": 0 },
          "close_day": "MONDAY",
          "close_time": { "hours": 21, "minutes": 0 }
        }
      ]
    }
  }
}

12. Missing Brand ID (local_data.brand_landing_pages.brand_id)

  • Cause: An entry in local_data.brand_landing_pages has an empty, null, or missing brand_id.
  • Remediation: Provide a non-empty string identifier matching your registered partner brand configuration.
{
  "local_data": {
    "brand_landing_pages": [
      {
        "brand_id": "tasty_bites_brand",
        "default_url": "https://www.tastybitestest.com"
      }
    ]
  }
}

13. Missing Brand Default URL (local_data.brand_landing_pages.default_url)

  • Cause: An entry in local_data.brand_landing_pages is missing default_url or it is an empty string.
  • Remediation: Provide a valid fallback HTTP/HTTPS landing page URL for users whose locale is not matched by localized URLs.
{
  "local_data": {
    "brand_landing_pages": [
      {
        "brand_id": "tasty_bites_brand",
        "default_url": "https://www.tastybitestest.com"
      }
    ]
  }
}

14. Missing Brand Localized Landing Page URL (local_data.brand_landing_pages.localized_landing_pages.url)

  • Cause: An item inside localized_landing_pages has a missing or empty url field.
  • Remediation: Provide a valid, fully-qualified HTTP/HTTPS URL for the localized landing page.
{
  "local_data": {
    "brand_landing_pages": [
      {
        "brand_id": "tasty_bites_brand",
        "default_url": "https://www.tastybitestest.com",
        "localized_landing_pages": [
          {
            "url": "https://www.tastybitestest.com/en",
            "locales": ["en-US", "en-GB"]
          }
        ]
      }
    ]
  }
}

15. Missing Brand Localized Landing Page Locale (local_data.brand_landing_pages.localized_landing_pages.locales)

  • Cause: An item inside localized_landing_pages has a missing or empty locales array.
  • Remediation: Provide at least one valid BCP 47 language or locale code (e.g., ["en-US"]) in the locales array.
{
  "local_data": {
    "brand_landing_pages": [
      {
        "brand_id": "tasty_bites_brand",
        "default_url": "https://www.tastybitestest.com",
        "localized_landing_pages": [
          {
            "url": "https://www.tastybitestest.com/en",
            "locales": ["en-US", "en-GB"]
          }
        ]
      }
    ]
  }
}

Exceeded maximum image count

Issue Code: EXCEEDED_MAX_COUNT
Severity: Warning
Appealable: No (Resolve by updating feed payload)

This error occurs when a POI entity payload contains more than 5 image objects in the images array.

Remediation:

  • Trim the images array so that it contains at most 5 high-quality, representative photos of the local property.
  • Any images exceeding the limit of 5 will be discarded.

Invalid geographic coordinates

Issue Code: INVALID_LATLNG
Severity: Error (Blocks Serving)
Appealable: No (Resolve by updating feed payload)

This error occurs when the geographic coordinates provided in location.latitude or location.longitude fall outside valid spherical bounds or represent unpopulated null coordinates.

Common Causes & Remediation:

  • Out-of-Bounds Latitude: Latitude must be a floating-point number between -90.0 and 90.0 inclusive.
  • Out-of-Bounds Longitude: Longitude must be a floating-point number between -180.0 and 180.0 inclusive.
  • Null Island (0,0): Submitting 0.0, 0.0 or placeholder integers (such as 999, 999) triggers coordinate rejection.
  • Swapped Coordinates: Verify that latitude and longitude are not inverted in your serialization pipeline.

Valid Payload Example:

{
  "location": {
    "latitude": 37.422,
    "longitude": -122.084
  }
}

Malformed or invalid URL

Issue Code: INVALID_ATTRIBUTE_VALUE
Severity: Error (Blocks Serving)
Appealable: No (Resolve by updating feed payload)

This error occurs when an attribute value fails schema validation, most commonly when a partner landing page URL or image URL is syntactically invalid.

Requirements:

  • Protocol: URLs must explicitly specify http:// or https:// (HTTPS is strongly recommended).
  • Encoding: URLs containing special characters, spaces, or non-ASCII characters must be properly percent-encoded (RFC 3986).
  • Canonical Domain: Ensure the domain is fully qualified (for example, https://example.com/local/123, not example.com/local/123 or www.example).

Valid Payload Example:

{
  "url": "https://www.tastybitestest.com/en"
}

Invalid or unreachable image

Issue Code: INVALID_IMAGE
Severity: Error (Blocks Serving)
Appealable: No (Resolve by updating feed payload)

This error occurs during the asynchronous image fetching stage when Google's crawler cannot download, decode, or verify the media asset from image.url.

Common Causes & Remediation:

  • HTTP Errors (404 / 403 / 500): The image URL returns a non-200 HTTP status code. Ensure images are publicly accessible without authentication, cookie walls, or IP allowlisting restrictions.
  • Robots.txt Blocking: Ensure your Content Delivery Network (CDN) allows the Googlebot and Googlebot-Image user agents.
  • Unsupported File Format: Images must be in standard raster formats (JPEG, PNG, WebP). Animated GIFs, SVGs, and raw camera formats are not supported. See our image guidelines for more details.
  • SSL Certificate Failures: Verify that the image host server has a valid SSL certificate chain.

Duplicate POI ID

Issue Code: DUPLICATE_ENTITY
Severity: Error (Blocks Serving)
Appealable: No (Resolve by updating feed payload)

This error occurs when the same poi_id string appears more than once within a single feed fileset.

Remediation:

  • Ensure every local listing in your feed has a unique, deterministic poi_id.
  • If a local property has multiple room types or rates, consolidate them under a single root POI entity rather than emitting duplicate entity records with identical IDs.

Unmatched entity

Issue Code: UNMATCHED_ENTITY
Severity: Error (Blocks Serving)
Appealable: No (Use POI Entity Matching tools or correct entity metadata)

This issue indicates that Google's matching pipeline was unable to reconcile your local listing with a canonical place in Google Maps.

How to Resolve:

  1. Verify Core Attributes: Ensure the local's name, display_address, location.address, url, telephone, and location.latitude/location.longitude precisely reflect the physical property location.
  2. Inspect Match Information: Look at the Match Info column in the Inventory View to see candidate places.
  3. Use the POI Match Fix Tool: Click Edit Match in the Actions Center to manually search for and confirm the correct Google Place ID. Detailed instructions are available in the POI Entity Matching guide.

Google Search Image policy violation

Issue Code: SAFE_SEARCH_POLICY_VIOLATION_IMAGE
Severity: ERROR (Blocks Serving)
Appealable: Yes

See the Relevant Policy Issue Codes Here: Google Search content image Policy

If you believe the image was flagged in error (false positive), click Create Appeal in the Issue Details panel.

Google Search Content Text policy violation - Name

Issue Code: SAFE_SEARCH_POLICY_VIOLATION_TEXT
Severity: ERROR (Blocks Serving)
Affected Field: name.localizations.*.text
Appealable: Yes

See the Relevant Policy Issue Codes Here: Google Search content text Policy

If you believe the text was flagged in error (false positive), click Create Appeal in the Issue Details panel.

Google Search Content Text policy violation - Description

Issue Code: SAFE_SEARCH_POLICY_VIOLATION_TEXT
Severity: Warning
Affected Field: description.localizations.*.text
Appealable: No (Resolve by updating feed payload)

See the Relevant Policy Issue Codes Here: Google Search content text Policy

Google Search Content Text policy violation - Display Address

Issue Code: SAFE_SEARCH_POLICY_VIOLATION_TEXT
Severity: Warning
Affected Field: display_address.localizations.*.text
Appealable: No (Resolve by updating feed payload)

See the Relevant Policy Issue Codes Here: Google Search content text Policy

Business hours open time is greater than close time

Issue Code: NOT_LESS_THAN_FIELD
Severity: Error (Blocks Serving)
Affected Fields: local_data.business_hours.time_ranges.open_time, local_data.business_hours.time_ranges.close_time
Appealable: No (Resolve by updating feed payload)

This error occurs when the business hours open_time is later than or equal to close_time for the same day interval.

Common Causes & Remediation:

  • Same-Day Inversion: Ensure open_time is earlier than close_time (e.g., 09:00 to 17:00).
  • Overnight Shifts: If an establishment opens on one day and closes past midnight into the next day (e.g., 21:00 to 02:00), set close_day to the following day (e.g., open_day: "FRIDAY", close_day: "SATURDAY").

Valid Payload Example:

{
  "local_data": {
    "business_hours": {
      "time_ranges": [
        {
          "open_day": "MONDAY",
          "open_time": { "hours": 9, "minutes": 0 },
          "close_day": "MONDAY",
          "close_time": { "hours": 17, "minutes": 0 }
        }
      ]
    }
  }
}

Price range min value is greater than max value

Issue Code: INVALID_PRICE_RANGE
Severity: Error (Blocks Serving)
Affected Fields: local_data.price_range.min_price, local_data.price_range.max_price
Appealable: No (Resolve by updating feed payload)

This error occurs when the min_price exceeds the max_price in value, or if min_price and max_price specify different currency codes.

Common Causes & Remediation:

  • Inverted Values: Ensure min_price is lower than or equal to max_price.
  • Currency Mismatch: Verify that both min_price.currency_code and max_price.currency_code match the same ISO 4217 three-letter currency code (e.g., "USD").

Valid Payload Example:

{
  "local_data": {
    "price_range": {
      "min_price": {
        "currency_code": "USD",
        "units": 15,
        "nanos": 0
      },
      "max_price": {
        "currency_code": "USD",
        "units": 45,
        "nanos": 0
      }
    }
  }
}

Duplicate unique property within a POI

Issue Code: DUPLICATE_UNIQUE_PROPERTY
Severity: Error (Blocks Serving)
Appealable: No (Resolve by updating feed payload)

This error occurs when a field or sub-element required to be unique across a single POI entity contains duplicated entries.

Check the Issue Details panel to identify which property violates uniqueness:

1. Duplicated Brand ID within a POI (local_data.brand_landing_pages.brand_id)

  • Cause: The same brand_id string appears in multiple brand_landing_pages entries for a single POI.
  • Remediation: Consolidate all landing pages for that brand into a single brand_landing_pages object.

Valid Payload Example:

{
  "local_data": {
    "brand_landing_pages": [
      {
        "brand_id": "brand_zenchef",
        "default_url": "https://bookings.zenchef.com/results?rid=287722"
      },
      {
        "brand_id": "brand_opentable",
        "default_url": "https://www.opentable.com/r/287722"
      }
    ]
  }
}

2. Duplicated Brand Localized Landing Page URL (local_data.brand_landing_pages.localized_landing_pages.url)

  • Cause: The exact same landing page URL is defined multiple times under localized_landing_pages for the same brand.
  • Remediation: Ensure each URL entry is distinct, or associate multiple locales under a single URL entry's locales array.

Valid Payload Example:

{
  "local_data": {
    "brand_landing_pages": [
      {
        "brand_id": "brand_zenchef",
        "default_url": "https://bookings.zenchef.com/results?rid=287722",
        "localized_landing_pages": [
          {
            "url": "https://bookings.zenchef.com/en/results?rid=287722",
            "locales": ["en-US"]
          },
          {
            "url": "https://bookings.zenchef.com/fr/results?rid=287722",
            "locales": ["fr-FR"]
          }
        ]
      }
    ]
  }
}

3. Duplicated Brand Localized Landing Page Locale (local_data.brand_landing_pages.localized_landing_pages.locales)

  • Cause: The same locale code (e.g., "en-US") is repeated across multiple entries in localized_landing_pages for the same brand.
  • Remediation: Assign each locale tag to exactly one localized landing page.

Valid Payload Example:

{
  "local_data": {
    "brand_landing_pages": [
      {
        "brand_id": "brand_zenchef",
        "default_url": "https://bookings.zenchef.com/results?rid=287722",
        "localized_landing_pages": [
          {
            "url": "https://bookings.zenchef.com/en/results?rid=287722",
            "locales": ["en-US", "en-GB"]
          },
          {
            "url": "https://bookings.zenchef.com/fr/results?rid=287722",
            "locales": ["fr-FR"]
          }
        ]
      }
    ]
  }
}

Malformed or invalid Brand URL

Issue Code: INVALID_ATTRIBUTE_VALUE
Severity: Error (Blocks Serving)
Appealable: No (Resolve by updating feed payload)
Affected Fields: local_data.brand_landing_pages.default_url, local_data.brand_landing_pages.localized_landing_pages.url

This error occurs when a brand default URL or localized landing page URL fails URI syntax validation.

Requirements:

  • Protocol: Must explicitly specify http:// or https:// (https:// is required for production serving).
  • Syntax: Must be a valid, percent-encoded, RFC 3986-compliant URL with a fully qualified domain name.

Valid Payload Example:

{
  "local_data": {
    "brand_landing_pages": [
      {
        "brand_id": "tasty_bites_brand",
        "default_url": "https://www.tastybitestest.com/en",
        "localized_landing_pages": [
          {
            "url": "https://www.tastybitestest.com/en/reservation",
            "locales": ["en-US"]
          }
        ]
      }
    ]
  }
}

Google Search Content Text policy violation - Establishment Category

Issue Code: SAFE_SEARCH_POLICY_VIOLATION_TEXT
Severity: Warning
Appealable: No
Affected Field: local_data.establishment_category.localizations.*.text

This warning occurs when non-default localized establishment category text fails automated SafeSearch content filters.

Remediation:

  • Policy Compliance: Remove or replace the flagged establishment category text with standard business category terms that adhere to the Google Search content text policy

Valid Payload Example:

{
  "local_data": {
    "establishment_category": {
      "default_locale": "en",
      "localizations": [
        {
          "locale": "en",
          "text": "Restaurant"
        },
        {
          "locale": "fr",
          "text": "Restaurant gastronomique"
        }
      ]
    }
  }
}