You must have a Merchant Center account in good standing and approved products
for free listings in your account. To get started, see these Help Center
articles:

- [Get started with Google Merchant Center](https://support.google.com/merchants/answer/12159157)
- [How to upload products to your Merchant Center](https://support.google.com/merchants/answer/11586438)
- [Free listings for products](https://support.google.com/merchants/answer/13889434)

Once you have your Merchant Center set up with products, you must complete
requirements in this section before building the API integration.

- [**Merchant Center settings**](https://developers.google.com/merchant/ucp/guides/overview/merchant-center#merchant-center-settings): Configure return policies and customer support information.
- [**Product restrictions**](https://developers.google.com/merchant/ucp/guides/overview/merchant-center#product-restrictions): Review categories of products that are ineligible for checkout.
- [**Product data**](https://developers.google.com/merchant/ucp/guides/overview/merchant-center#product-data): Signal UCP checkout eligibility, provide consumer notices, map product identifiers, and structure variant options.
- [**Recommendations**](https://developers.google.com/merchant/ucp/guides/overview/merchant-center#recommendations): Best practices for real-time pricing, inventory freshness, and variant handling.

## Merchant Center settings

Ensure the following settings are configured in your Google Merchant Center
account:

### Return policy

You must define your return policies in Merchant Center, as it is a Merchant of
Record requirement and will be referenced on the checkout screen. The configured
policies apply globally to your account, although you can use the
`return_policy_label` feed attribute to restrict a given return policy to a
subset of products. You can also submit return policies using the `returns`
attribute to provide return policy information at a product level. The `returns`
attribute will allow you to define a return policy entirely within your product
feed without requiring a corresponding entry in your Merchant Center returns
settings.

If your Merchant Center account is an [advanced
account](https://support.google.com/merchants/answer/15623991),
your return policies must be configured at each individual sub-account.

You must include return cost, return speed (window), and a link to the full
policy. Read more about [configuring returns at the account
level](https://support.google.com/merchants/answer/14011730) or
[submitting returns in your product feed using the `returns`
attribute](https://support.google.com/merchants/answer/17081382).

### Customer support info

You must set your customer support information in Merchant Center. This
information is used to generate the "Contact Merchant" link on the order
confirmation page.

You are required to provide **at least one** contact method:

- Customer service website URL
- Customer service email address
- Customer service phone number

See the [add customer support information to Merchant
Center](https://support.google.com/merchants/answer/13661344) Help
Center article for more details.

## Product restrictions

The following categories of products are ineligible for checkout. Ensure these
items have `native_commerce(checkout_eligibility)` empty or set to `FALSE`.

**Financial products and recurring billing models**

- Subscriptions: products requiring recurring billing cycles.
- Installments: transactions requiring merchant-mandated payment plans or financing.

**Customized goods and fulfillment options**

- Personalized goods: items requiring custom design decisions (e.g., engravings, monograms).
- Non-new or final sale items: refurbished goods, used items, and items marked as "Final Sale" (no returns).
- Pre-order items: products with future release dates and deferred fulfillment.
- Bundled services: items requiring additional contracts, such as warranties, installation, or setup.
- Special shipping: items requiring non-standard delivery fees (e.g., freight, premium delivery).
- Gifting: transactions requiring split-invoice logistics or hidden pricing for recipients.
- In-store activation: products that must be physically activated at a retail location.

**Policy and safety restrictions**

- Age restricted: items requiring ID verification (e.g., Alcohol, Tobacco).
- Prohibited content: weapons, adult content, healthcare/pharmaceuticals, counterfeits, or any other category blocked by standard Google Shopping Policy.

**Digital goods and services**

- Services: lessons, online classes, and travel packages (unless integrated using specific Travel rails).
- Rentals: movie rentals, equipment rentals, or leasing.
- Virtual items: in-game currency, MMORPG goods, or skins.
- Software dependencies: goods that require the user to install specific software prior to completing the purchase.

## Product data

You must update your product feed to signal eligibility and provide compliance
data. This information is required to enable checkout through UCP with Google,
as it allows agents to determine product eligibility, calculate accurate total
costs, and display mandatory legal warnings to the user.

> [!NOTE]
> **Note:** These attributes should be provided through your product feed. To avoid impacting your primary product data, use a supplemental feed.

### Agentic checkout eligibility

This opts a product into the checkout experience on Google.

This is provided using a product attribute
`native_commerce(checkout_eligibility)` containing a single boolean. If set to
`FALSE` or missing, the product won't be eligible for checkout (defaults to
`FALSE`).

> [!NOTE]
> **Note:** If you are already using the `native_commerce` attribute in your feed, it remains supported as an alias to checkout eligibility.

### Cart eligibility

Cart transfer operates on an opt-out model, meaning eligible products are
included by default unless explicitly excluded.

- **Default participation:** products approved for free listings in Google Merchant Center are automatically eligible for cart transfer once `dev.ucp.shopping.cart` is declared in [your UCP profile](https://developers.google.com/merchant/ucp/guides/overview/ucp-profile).
- **Selective exclusion (opt-out):** to exclude specific products from cart transfer on Google surfaces, set the `native_commerce(cart_eligibility)` product attribute to `FALSE` in your feed.
- **Inclusion rule:** if this attribute is omitted or set to `TRUE`, the eligible catalog item remains available for cart transfer.

> [!NOTE]
> **Note:** If you are using both direct checkout and cart transfer features, you must use the composite format: `native_commerce(checkout_eligibility:cart_eligibility)`. Values are separated by a colon (e.g., `FALSE:TRUE`).

> [!IMPORTANT]
> **Important:** The `native_commerce` attribute group is fully overwritten with each upload and does not support incremental updates. You must include all applicable flags in every update, or missing flags will be erased and set to blank.

### Consumer notices

This is mandatory for items with regulatory warning requirements (e.g.,
California Proposition 65). You are responsible for compliance with all
applicable laws, including consumer notice requirements. These warnings are
displayed prominently on the Checkout screen when you provide them.

Provide the `consumer_notice` attribute group with two sub-attributes:

- `notice_type`: Must be one of `legal_disclaimer`, `safety_warning`, or `prop_65`.
- `notice_message`: String (max 1000 chars). HTML tags `<b>`, `<br>`, `<i>`,
  and `<a href>` are accepted.

  > [!NOTE]
  > **Note:** When using `<a href>` in a feed file, use the backslash escape character for the colon in the URL (`http\://`) to avoid attribute validation errors.

If you have multiple consumer notices on the same product, send each one as its
own type:text pair under a repeated `consumer_notice` header.

### Product identifier

The `id` in your product feed must match the product ID expected by your
Checkout API. If they match, no action is required. Otherwise, use the
`merchant_item_id` custom attribute to map them.

When `merchant_item_id` is defined, it will take precedence over `id` in Agentic
requests.

### Variant option

If your product is available in multiple variations (such as size, color, or
material), it is **strongly recommended** to submit the
[`variant_option`](https://support.google.com/merchants/answer/17085214)
attribute alongside
[`item_group_id`](https://support.google.com/merchants/answer/6324507)
and
[`item_group_title`](https://support.google.com/merchants/answer/17085146).

Google uses `variant_option` to construct the on-page item selector in UCP and
to allow merchants to customize variant selection for users. Providing
complete variant data also prevents automated transactability discrepancies that
can suppress the checkout button.

The `variant_option` group contains two sub-attributes:

- `name`: the variant dimension (such as `size` or `color`). Maximum 250 characters.
- `value`: the specific option value (such as `medium` or `blue`). Maximum 250 characters.

> [!NOTE]
> **Note:** You can repeat `variant_option` up to 30 times per item. Continue to submit standard attributes like `color` and `size`, and ensure variant details match the product title and description.

### How to add the attributes to your products

The following examples outline different options to provide the product to
Merchant Center.

#### Feeds

As a best practice, create a [supplemental data
source](https://support.google.com/merchants/answer/14990942?ref_topic=12672304&sjid=4390850458317057610-NC#supplementaldatasource).
You *can* add this to your primary feed, but proceed with caution as incorrect
formatting may impact regular product ingestion.

> [!NOTE]
> **Note:** Ensure complex strings (like the Prop 65 message) don't contain characters that break your file format (like extra commas in a CSV) unless properly escaped. Sub-attributes for `variant_option` are formatted as comma-separated `name:value` pairs. For multiple consumer notices or variant options, the attribute header can also appear repeatedly.

Text file format:

| ID | item_group_id | `native_commerce(checkout_eligibility:cart_eligibility)` | variant_option | consumer_notice |
|---|---|---|---|---|
| **11111** | GROUP_TEE | TRUE:TRUE | size:small,color:red | prop_65:This example has \<b\>every\</b\> allowed \<i\>style\</i\> of text. \<br\> See this \<a href="http\\://developers.google.com/merchant/ucp/guides/overview/merchant-center#consumer-notices"\>example\</a\> for formatting. |
| **22222** | GROUP_TEE | TRUE:FALSE | size:medium,color:blue |   |
| **33333** |   | FALSE:TRUE |   |   |

XML format:

    <item>
      <g:id>11111</g:id>
      <g:item_group_id>GROUP_TEE</g:item_group_id>
      <g:native_commerce>
        <g:checkout_eligibility>TRUE</g:checkout_eligibility>
        <g:cart_eligibility>TRUE</g:cart_eligibility>
      </g:native_commerce>
      <g:variant_option>
        <g:name>size</g:name>
        <g:value>small</g:value>
      </g:variant_option>
      <g:variant_option>
        <g:name>color</g:name>
        <g:value>red</g:value>
      </g:variant_option>
      <g:consumer_notice>
        <g:notice_type>prop_65</g:notice_type>
        <g:notice_message>
          This product can expose you to chemicals...
        </g:notice_message>
      </g:consumer_notice>
    </item>
    <item>
      <g:id>22222</g:id>
      <g:item_group_id>GROUP_TEE</g:item_group_id>
      <g:native_commerce>
        <g:checkout_eligibility>TRUE</g:checkout_eligibility>
        <g:cart_eligibility>FALSE</g:cart_eligibility>
      </g:native_commerce>
      <g:variant_option>
        <g:name>size</g:name>
        <g:value>medium</g:value>
      </g:variant_option>
      <g:variant_option>
        <g:name>color</g:name>
        <g:value>blue</g:value>
      </g:variant_option>
      <g:consumer_notice>
        <g:notice_type>safety_warning</g:notice_type>
        <g:notice_message>Click here to see the &lt;a href=https://www.example.com&gt;Safety Warning&lt;/a&gt; for this product.</g:notice_message>
      </g:consumer_notice>
    </item>
    <item>
      <g:id>33333</g:id>
      <g:native_commerce>
        <g:checkout_eligibility>FALSE</g:checkout_eligibility>
        <g:cart_eligibility>TRUE</g:cart_eligibility>
      </g:native_commerce>
    </item>

#### Merchant API

Provide the attributes as custom attributes. You can add them to your existing
[accounts.productInputs.insert](https://developers.google.com/merchant/api/reference/rest/products_v1/accounts.productInputs/insert).

Example for [insert](https://developers.google.com/merchant/api/reference/rest/products_v1/accounts.productInputs/insert):

    "customAttributes": [
      {
        "name": "native_commerce",
        "groupValues": [
          {
            "name": "checkout_eligibility",
            "value": "true"
          },
          {
            "name": "cart_eligibility",
            "value": "true"
          }
        ]
      },
      {
        "name": "variant_option",
        "groupValues": [
          {
            "name": "name",
            "value": "size"
          },
          {
            "name": "value",
            "value": "small"
          }
        ]
      },
      {
        "name": "variant_option",
        "groupValues": [
          {
            "name": "name",
            "value": "color"
          },
          {
            "name": "value",
            "value": "red"
          }
        ]
      },
      {
        "name": "consumer_notice",
        "groupValues": [
          {
            "name": "notice_type",
            "value": "prop_65"
          },
          {
            "name": "notice_message",
            "value": "This product can expose you to chemicals..."
          }
        ]
      },
      {
        "name": "merchant_item_id",
        "value": "some_checkout_item_id_1"
      }
    ]

#### Content API (deprecated)

Provide the attributes as custom attributes. They must be included in a
[products.insert](https://developers.google.com/shopping-content/reference/rest/v2.1/products/insert) containing the full product, because
[products.update](https://developers.google.com/shopping-content/reference/rest/v2.1/products/update) does not support updating
customAttributes.

Example:

    "customAttributes": [
      {
        "name": "native_commerce",
        "groupValues": [
          {
            "name": "checkout_eligibility",
            "value": "true"
          },
          {
            "name": "cart_eligibility",
            "value": "true"
          }
        ]
      },
      {
        "name": "variant_option",
        "groupValues": [
          {
            "name": "name",
            "value": "size"
          },
          {
            "name": "value",
            "value": "small"
          }
        ]
      },
      {
        "name": "variant_option",
        "groupValues": [
          {
            "name": "name",
            "value": "color"
          },
          {
            "name": "value",
            "value": "red"
          }
        ]
      },
      {
        "name": "consumer_notice",
        "groupValues": [
          {
            "name": "notice_type",
            "value": "prop_65"
          },
          {
            "name": "notice_message",
            "value": "This product can expose you to chemicals..."
          }
        ]
      },
      {
        "name": "merchant_item_id",
        "value": "some_checkout_item_id_1"
      }
    ]

## Recommendations

To keep your catalog fresh and maintain checkout availability:

- **Migrate to Merchant API:** use the [Merchant
  API](https://developers.google.com/merchant/api) for catalog updates to keep pricing, availability, and product details synchronized in real time.
- **Send supplemental price and inventory updates:** if you use scheduled feeds instead of the API, send real-time price and availability updates through the Merchant API or Content API supplemental feeds to prevent checkout price mismatches.
- **Provide variant attributes:** always submit `variant_option` with `item_group_id` for multi-variant items to power the variant selector and reduce transactability risk.