You can use the Inventories sub-API to indicate that your product
information varies by region. For example, you might sell different products in
different places, or charge different prices for the same products based on
where they're purchased.

See [Regional availability and pricing](https://support.google.com/merchants/answer/9698880)
for more information.

Regional information is for products you sell online. See [Add in-store
information to your local products](https://developers.google.com/merchant/api/guides/inventories/add-local-inventory)
for details on in-store products.

Here are the steps to add regional information to your online products:

## Create regions

Before you can add regional information to a product, you need to set up regions
for your Merchant Center account. You can use Merchant API
[`regions`](https://developers.google.com/merchant/api/reference/rest/inventories_v1/accounts.products.regionalInventories#RegionalInventory.FIELDS.region)
resource to create new regions.

See the [Regions guide](https://developers.google.com/merchant/api/guides/accounts/regions) for a code
sample, and more information on managing your regions.

## Verify you have online products

If you need to add online products to your account, use Merchant API to
[insert new products](https://developers.google.com/merchant/api/reference/rest/products_v1/accounts.productInputs/insert)
or [create a data source](https://support.google.com/merchants/answer/14990942).

> [!IMPORTANT]
> **Important:** Regional inventory data is supplemental and does not replace your primary product data. Before you submit regional inventory updates, upload your product data to a primary data source. The regional inventory data needs to be attached to the existing product.

## Insert regional information

After you have online products in your Merchant Center account, you can add
regional information like `region`, `price`, and `availability`.

Here's a sample you can use to add regional information to a product with
[`regionalInventories.insert`](https://developers.google.com/merchant/api/reference/rest/inventories_v1/accounts.products.regionalInventories/insert):

### Java

    import com.google.api.gax.core.FixedCredentialsProvider;
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.shopping.merchant.inventories.v1.InsertRegionalInventoryRequest;
    import com.google.shopping.merchant.inventories.v1.RegionalInventory;
    import com.google.shopping.merchant.inventories.v1.RegionalInventoryAttributes;
    import com.google.shopping.merchant.inventories.v1.RegionalInventoryAttributes.Availability;
    import com.google.shopping.merchant.inventories.v1.RegionalInventoryServiceClient;
    import com.google.shopping.merchant.inventories.v1.RegionalInventoryServiceSettings;
    import com.google.shopping.type.Price;
    import shopping.merchant.samples.utils.Authenticator;
    import shopping.merchant.samples.utils.Config;

    /** This class demonstrates how to insert a regional inventory for a given product */
    public class InsertRegionalInventorySample {

      private static String getParent(String accountId, String productId) {
        return String.format("accounts/%s/products/%s", accountId, productId);
      }

      public static RegionalInventory insertRegionalInventory(Config config, String productId, String regionId)
          throws Exception {
        GoogleCredentials credential = new Authenticator().authenticate();

        RegionalInventoryServiceSettings regionalInventoryServiceSettings =
            RegionalInventoryServiceSettings.newBuilder()
                .setCredentialsProvider(FixedCredentialsProvider.create(credential))
                .build();

        String parent = getParent(config.getAccountId().toString(), productId);

        try (RegionalInventoryServiceClient regionalInventoryServiceClient =
            RegionalInventoryServiceClient.create(regionalInventoryServiceSettings)) {

          Price price = Price.newBuilder().setAmountMicros(33_450_000).setCurrencyCode("USD").build();

          InsertRegionalInventoryRequest request =
              InsertRegionalInventoryRequest.newBuilder()
                  .setParent(parent)
                  .setRegionalInventory(
                      RegionalInventory.newBuilder()
                          .setRegion(regionId)
                          .setRegionalInventoryAttributes(
                              RegionalInventoryAttributes.newBuilder()
                                  .setAvailability(Availability.OUT_OF_STOCK)
                                  .setPrice(price)
                                  .build())
                          .build())
                  .build();

          System.out.println("Sending insert RegionalInventory request");
          RegionalInventory response = regionalInventoryServiceClient.insertRegionalInventory(request);
          System.out.println("Inserted RegionalInventory Name below");
          System.out.println(response.getName());
          return response;
        }
      }

      public static void main(String[] args) throws Exception {
        Config config = Config.load();
        // An ID assigned to a product by Google. In the format
        // contentLanguage~feedLabel~offerId
        String productId = "en~label~1111111111";
        // The ID uniquely identifying each region.
        String regionId = "1111111";
        insertRegionalInventory(config, productId, regionId);
      }
    }

### cURL

      curl --location
      'https://merchantapi.googleapis.com/inventories/v1/accounts/987654321/products/{en~US~12345}/regionalInventories:insert' \
      --header 'Content-Type: application/json' \
      --header 'Authorization: Bearer {API_TOKEN}' \
      --data '{
         "region": "123456",
         "regionalInventoryAttributes": {
           "price": {
             "amountMicros": "33450000",
             "currencyCode": "USD"
           },
           "availability": "OUT_OF_STOCK"
         }
      }'

### PHP

    use Google\ApiCore\ApiException;
    use Google\Shopping\Merchant\Inventories\V1\RegionalInventory;
    use Google\Shopping\Merchant\Inventories\V1\Client\RegionalInventoryServiceClient;
    use Google\Shopping\Merchant\Inventories\V1\InsertRegionalInventoryRequest;
    use Google\Shopping\Merchant\Inventories\V1\RegionalInventoryAttributes;
    use Google\Shopping\Merchant\Inventories\V1\RegionalInventoryAttributes\Availability;
    use Google\Shopping\Type\Price;

    /**
     * Class to insert a `RegionalInventory` to a given product in your
     * merchant account.
     *
     * Replaces the full `RegionalInventory` resource if an entry with the same
     * [`region`]
     * [google.shopping.merchant.inventories.v1.RegionalInventory.region]
     * already exists for the product.
     *
     * It might take up to 30 minutes for the new or updated `RegionalInventory`
     * resource to appear in products.
     */

    class InsertRegionalInventory
    {
        // ENSURE you fill in the merchant account and product ID for the sample to
        // work.
        private const PARENT = 'accounts/[INSERT_ACCOUNT_HERE]/products/[INSERT_PRODUCT_HERE]';
        // ENSURE you fill in region ID for the sample to work.
        private const REGIONAL_INVENTORY_REGION = 'INSERT_REGION_HERE';

        /**
         * Inserts a regional inventory underneath the parent product.
         *
         * @param string $parent The account and product where this inventory will be inserted.
         *     Format: `accounts/{account}/products/{product}`
         * @param string $regionalInventoryRegion
         *     ID of the region for this
         *     `RegionalInventory` resource. See the [Regional availability and
         *     pricing](https://support.google.com/merchants/answer/9698880) for more details.
         */
        public function insertRegionalInventorySample(string $parent, string $regionalInventoryRegion): void
        {
            // Gets the OAuth credentials to make the request.
            $credentials = Authentication::useServiceAccountOrTokenFile();

            // Creates options config containing credentials for the client to use.
            $options = ['credentials' => $credentials];

            // Creates a client.
            $regionalInventoryServiceClient = new RegionalInventoryServiceClient($options);

            // Creates a price object.
            $price = new Price(
                [
                    'currency_code' => "USD",
                    'amount_micros' => 33450000,
                ]
            );

            // Creates a new regional inventory object.
            $regionalInventory = (new RegionalInventory())
                ->setRegion($regionalInventoryRegion)
                ->setRegionalInventoryAttributes((new RegionalInventoryAttributes())
                    ->setAvailability(Availability::IN_STOCK)
                    ->setPrice($price));

            $request = (new InsertRegionalInventoryRequest())
                ->setParent($parent)
                ->setRegionalInventory($regionalInventory);

            // Calls the API and catches and prints any network failures/errors.
            try {
                /** @var RegionalInventory $response */
                $response = $regionalInventoryServiceClient->insertRegionalInventory($request);
                printf('Response data: %s%s', $response->serializeToJsonString(), PHP_EOL);
            } catch (ApiException $ex) {
                printf('Call failed with message: %s%s', $ex->getMessage(), PHP_EOL);
            }
        }

        /**
         * Helper to execute the sample.
         */
        public function callSample(): void
        {
            // Makes the call to insert the regional inventory to the parent product
            // for the given region.
            $this->insertRegionalInventorySample($this::PARENT, $this::REGIONAL_INVENTORY_REGION);
        }

    }


    $sample = new InsertRegionalInventory();
    $sample->callSample();

### Python

    from examples.authentication import configuration
    from examples.authentication import generate_user_credentials
    from google.shopping import merchant_inventories_v1
    from google.shopping.merchant_inventories_v1.types import RegionalInventoryAttributes

    # ENSURE you fill in the product ID and region ID for the sample to
    # work.
    _ACCOUNT = configuration.Configuration().read_merchant_info()
    # ENSURE you fill in the product ID for the sample to work.
    _PRODUCT = "PRODUCT_ID"
    _PARENT = f"accounts/{_ACCOUNT}/products/{_PRODUCT}"
    # ENSURE you fill in region ID for the sample to work.
    _REGION = "REGION_ID"


    def insert_regional_inventory():
      """Inserts a `RegionalInventory` to a given product.

      Replaces the full `RegionalInventory` resource if an entry with the same
      `region` already exists for the product.

      It might take up to 30 minutes for the new or updated `RegionalInventory`
      resource to appear in products.
      """

      # Gets OAuth Credentials.
      credentials = generate_user_credentials.main()

      # Creates a client.
      client = merchant_inventories_v1.RegionalInventoryServiceClient(
          credentials=credentials
      )

      # Creates a regional inventory and populate its attributes.
      regional_inventory = merchant_inventories_v1.RegionalInventory()
      regional_inventory.region = _REGION
      regional_inventory.regional_inventory_attributes.availability = (
          RegionalInventoryAttributes.Availability.IN_STOCK
      )
      regional_inventory.regional_inventory_attributes.price = {
          "currency_code": "USD",
          "amount_micros": 33450000,
      }

      # Creates the request.
      request = merchant_inventories_v1.InsertRegionalInventoryRequest(
          parent=_PARENT,
          regional_inventory=regional_inventory,
      )

      # Makes the request and catch and print any error messages.
      try:
        response = client.insert_regional_inventory(request=request)

        print("Insert successful")
        print(response)
      except RuntimeError as e:
        print("Insert failed")
        print(e)


    if __name__ == "__main__":
      insert_regional_inventory()

This call returns exactly the same values you submit, and might not fully
represents the final inventory data.

It might take up to 30 minutes for the new `RegionalInventory` to appear in the
product.

For more ways to add regional inventory information, see the
**Regional product inventory data sources** section at the end of [Create a
product data source](https://support.google.com/merchants/answer/14990942).

## Sign up for free listings on Google

To list your products for free on Google, [set up free product
listings](https://support.google.com/merchants/answer/9455788). After you set up free
listings, eligible products with `RegionalInventory` can show on Google's
Shopping tab, based on the regional information you provide.