The first step in implementing Shopping ads is to create a Shopping campaign.
Shopping campaigns enable users to see ads that show an image of the product,
including title, price, store name, and more. When creating a Shopping campaign,
you need to set its budget, bidding strategy, and shopping settings.

Before you can create a Shopping campaign, you need to [link your Google Ads account
to your Google Merchant Center account](https://developers.google.com/google-ads/api/docs/shopping-ads/merchant-center). Once you've linked accounts, you can
use the Google Merchant Center account ID when specifying the shopping settings.

> [!TIP]
> **Tip:** For automated cross-channel retail campaigns, consider using [Performance
> Max for retail](https://developers.google.com/google-ads/api/performance-max/retail) in addition to or instead of standard Shopping campaigns.

## Standard Shopping campaigns

This is the campaign required to create [Product Shopping ads](https://support.google.com/google-ads/answer/6275294). Product
Shopping ads let you include an image, title, price, and your store or business
name inside your ads, without the need for you to create unique ads for each
product you sell.

Follow these steps to set up a standard Shopping campaign:

1. Set the campaign's [`advertising_channel_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.md.txt#advertising_channel_type) to [`SHOPPING`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdvertisingChannelTypeEnum.AdvertisingChannelType.md.txt#shopping).
2. Create a [`ShoppingSetting`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt), set the fields, then add it to the campaign.
3. Create a portfolio bid strategy *or* set a campaign-level bid strategy.
4. Create a new campaign budget *or* set an existing shared budget.
5. Declare whether the campaign serves political ads targeting the European Union by setting [`contains_eu_political_advertising`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.md.txt#contains_eu_political_advertising) (such as `DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING` or `CONTAINS_EU_POLITICAL_ADVERTISING`).

You can use an [average daily budget or a campaign total budget](https://developers.google.com/google-ads/api/docs/campaigns/budgets/overview.md.txt). Campaign
total budgets are only available for campaigns with a set start and end date
(configured on the `Campaign` using [`start_date_time`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.md.txt#start_date_time) and
[`end_date_time`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.md.txt#end_date_time)). See [Create campaign budgets](https://developers.google.com/google-ads/api/docs/campaigns/budgets/create-budgets.md.txt) for details on
creating budgets.

For standard Shopping campaigns, [`ShoppingSetting`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt) supports the following
fields.

### Required fields

[`merchant_id`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt#merchant_id)
:   The Merchant Center ID of the account that contains the
    products to advertise.

[`campaign_priority`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt#campaign_priority)
:   The priority of the Shopping campaign. Campaigns with
    numerically higher priorities take precedence over those with lower
    priorities. Allowed values are between 0 and 2, inclusive.

### Optional fields

[`feed_label`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt#feed_label)

:   A string used for feed label as defined in your Merchant
    Center. This field should be used in the case that you need to select
    products from a specific [Merchant Center feed](https://support.google.com/merchants/answer/7439882). If not specified, then
    the campaign uses all available feeds in the Merchant Center.

    Use the `feed_label` field instead of the deprecated `sales_country` field
    (two-letter country code `XX` format).
    For more information, see the [feed label](https://support.google.com/merchants/answer/12453549) support article.

    Note that submitting a country code in a `feed_label` doesn't automatically
    enable ads to serve in that country; you must first [set up geographic
    location targeting](https://support.google.com/google-ads/answer/1722043).

[`enable_local`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt#enable_local)

:   The option to enable ads for products sold in local
    stores for this campaign.

[`ignore_brand_exclusion_in_shopping_ads`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt#ignore_brand_exclusion_in_shopping_ads)

:   **Available in v24 and later.** A boolean that, when set to `true`, ignores
    brand exclusions for Shopping ads in this campaign.

[`advertising_partner_ids`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt#advertising_partner_ids%5B%5D)

:   An immutable list of Google Ads account IDs of advertising partners
    cooperating within the campaign. Available for accounts with an
    [advertising partner link](https://developers.google.com/google-ads/api/reference/rpc/v26/ProductLink.md.txt#advertising_partner).

A bid strategy can be set up as a portfolio bid strategy or a campaign bid
strategy.

- **[Portfolio bid strategy](https://support.google.com/google-ads/answer/6263072)** : An automated [bid strategy](https://developers.google.com/google-ads/api/reference/rpc/v26/BiddingStrategy.md.txt) that can
  be shared across campaigns, ad groups, and keywords. Created using the
  [`BiddingStrategyService`](https://developers.google.com/google-ads/api/reference/rpc/v26/BiddingStrategyService.md.txt).

  The following portfolio bid strategies are supported:
  - [`target_spend`](https://support.google.com/google-ads/answer/6309038)
  - [`target_roas`](https://support.google.com/google-ads/answer/6309035)
  - [`maximize_conversion_value`](https://developers.google.com/google-ads/api/reference/rpc/v26/MaximizeConversionValue.md.txt)
  - [`maximize_conversions`](https://developers.google.com/google-ads/api/reference/rpc/v26/MaximizeConversions.md.txt)
- **Campaign bid strategy** : A bid strategy set directly on the campaign. This
  can include [automated bidding strategies](https://support.google.com/google-ads/answer/2979071) compatible with Shopping
  campaigns.

  The following campaign bid strategies are supported:
  - [`manual_cpc`](https://support.google.com/google-ads/answer/2390250)
  - [`target_spend`](https://support.google.com/google-ads/answer/6309038)
  - [`target_roas`](https://support.google.com/google-ads/answer/6309035)
  - [`maximize_conversion_value`](https://developers.google.com/google-ads/api/reference/rpc/v26/MaximizeConversionValue.md.txt)

### Network settings

Standard Shopping campaigns don't support the
[`network_settings.target_content_network`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.NetworkSettings.md.txt#target_content_network) field.

Setting this field to `true` on a standard Shopping campaign in a mutate request
generates a [`CANNOT_TARGET_CONTENT_NETWORK`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignErrorEnum.CampaignError.md.txt#cannot_target_content_network) error.

For more details, see [Changes in Network Settings for Google Ads Standard
Shopping Campaigns](https://ads-developers.googleblog.com/2022/02/changes-in-network-settings-for-standard-shopping-campaigns.html).

### Code example

The following code creates a standard Shopping campaign by configuring its
advertising channel type, `ShoppingSetting`, bidding strategy, campaign budget,
and EU political advertising status:


### Java

```java
private String addStandardShoppingCampaign(
    GoogleAdsClient googleAdsClient,
    long customerId,
    String budgetResourceName,
    long merchantCenterAccountId) {

  // Configures the shopping settings.
  ShoppingSetting shoppingSetting =
      ShoppingSetting.newBuilder()
          // Sets the priority of the campaign. Higher numbers take priority over lower numbers.
          // For Shopping product ad campaigns, allowed values are between 0 and 2, inclusive.
          .setCampaignPriority(0)
          .setMerchantId(merchantCenterAccountId)
          // Enables local inventory ads for this campaign.
          .setEnableLocal(true)
          .build();

  // Create the standard shopping campaign.
  Campaign campaign =
      Campaign.newBuilder()
          .setName("Interplanetary Cruise #" + getPrintableDateTime())
          // Configures settings related to shopping campaigns including advertising channel type
          // and shopping setting.
          .setAdvertisingChannelType(AdvertisingChannelType.SHOPPING)
          .setShoppingSetting(shoppingSetting)
          // Recommendation: Sets the campaign to PAUSED when creating it to prevent
          // the ads from immediately serving. Set to ENABLED once you've added
          // targeting and the ads are ready to serve.
          .setStatus(CampaignStatus.PAUSED)
          // Sets the bidding strategy to Manual CPC
          // Recommendation: Use one of the automated bidding strategies for Shopping campaigns
          // to help you optimize your advertising spend. More information can be found here:
          // https://support.google.com/google-ads/answer/6309029.
          .setManualCpc(ManualCpc.getDefaultInstance())
          // Sets the budget.
          .setCampaignBudget(budgetResourceName)
          // Declares whether this campaign serves political ads targeting the EU.
          .setContainsEuPoliticalAdvertising(DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING)
          .build();

  // Creates a campaign operation.
  CampaignOperation operation = CampaignOperation.newBuilder().setCreate(campaign).build();

  // Issues a mutate request to add the campaign.
  try (CampaignServiceClient campaignServiceClient =
      googleAdsClient.getLatestVersion().createCampaignServiceClient()) {
    MutateCampaignsResponse response =
        campaignServiceClient.mutateCampaigns(
            Long.toString(customerId), Collections.singletonList(operation));
    MutateCampaignResult result = response.getResults(0);
    System.out.printf(
        "Added a standard shopping campaign with resource name: '%s'%n",
        result.getResourceName());
    return result.getResourceName();
  }
}

      
```

### C#

```c#
private string AddStandardShoppingCampaign(GoogleAdsClient client, long customerId,
    string budgetResourceName, long merchantCenterAccountId)
{
    // Get the CampaignService.
    CampaignServiceClient campaignService =
        client.GetService(Services.V26.CampaignService);

    // Configures the shopping settings.
    ShoppingSetting shoppingSetting = new ShoppingSetting()
    {
        // Sets the priority of the campaign. Higher numbers take priority over lower
        // numbers. For Shopping Product Ad campaigns, allowed values are between 0 and 2,
        // inclusive.
        CampaignPriority = 0,

        MerchantId = merchantCenterAccountId,

        // Enables local inventory ads for this campaign.
        EnableLocal = true
    };

    // Create the standard shopping campaign.
    Campaign campaign = new Campaign()
    {
        Name = "Interplanetary Cruise #" + ExampleUtilities.GetRandomString(),

        // Configures settings related to shopping campaigns including advertising channel
        // type and shopping setting.
        AdvertisingChannelType = AdvertisingChannelType.Shopping,

        ShoppingSetting = shoppingSetting,

        // Recommendation: Set the campaign to PAUSED when creating it to prevent
        // the ads from immediately serving. Set to ENABLED once you've added
        // targeting and the ads are ready to serve
        Status = CampaignStatus.Paused,

        // Sets the bidding strategy to Manual CPC.
        // Recommendation: Use one of the automated bidding strategies for Shopping
        // campaigns to help you optimize your advertising spend. More information can be
        // found here: https://support.google.com/google-ads/answer/6309029
        ManualCpc = new ManualCpc(),

        // Sets the budget.
        CampaignBudget = budgetResourceName,

        // Declare whether or not this campaign contains political ads targeting the EU.
        ContainsEuPoliticalAdvertising = EuPoliticalAdvertisingStatus.DoesNotContainEuPoliticalAdvertising,
    };

    // Creates a campaign operation.
    CampaignOperation operation = new CampaignOperation()
    {
        Create = campaign
    };

    // Issues a mutate request to add the campaign.
    MutateCampaignsResponse response =
        campaignService.MutateCampaigns(customerId.ToString(),
            new CampaignOperation[] { operation });
    MutateCampaignResult result = response.Results[0];
    Console.WriteLine("Added a standard shopping campaign with resource name: '{0}'.",
        result.ResourceName);
    return result.ResourceName;
}
      
```

### PHP

```php
    private static function addStandardShoppingCampaign(
        GoogleAdsClient $googleAdsClient,
        int $customerId,
        string $budgetResourceName,
        int $merchantCenterAccountId
    ) {
        // Creates a standard shopping campaign.
        $campaign = new Campaign(
            [
            'name' => 'Interplanetary Cruise Campaign #' . Helper::getPrintableDatetime(),
            // Configures settings related to shopping campaigns including advertising channel type
            // and shopping setting.
            'advertising_channel_type' => AdvertisingChannelType::SHOPPING,
            // Configures the shopping settings.
            'shopping_setting' => new ShoppingSetting(
                [
                // Sets the priority of the campaign. Higher numbers take priority over lower
                // numbers. For Shopping product ad campaigns, allowed values are between 0 and 2,
                // inclusive.
                'campaign_priority' => 0,
                'merchant_id' => $merchantCenterAccountId,
                // Enables local inventory ads for this campaign
                'enable_local' => true
                ]
            ),
            // Recommendation: Set the campaign to PAUSED when creating it to prevent
            // the ads from immediately serving. Set to ENABLED once you've added
            // targeting and the ads are ready to serve.
            'status' => CampaignStatus::PAUSED,
            // Sets the bidding strategy to Manual CPC.
            // Recommendation: Use one of the automated bidding strategies for Shopping campaigns
            // to help you optimize your advertising spend. More information can be found here:
            // https://support.google.com/google-ads/answer/6309029.
            'manual_cpc' => new ManualCpc(),
            // Sets the budget.
            'campaign_budget' => $budgetResourceName,
            // Declare whether or not this campaign serves political ads targeting the EU.
            'contains_eu_political_advertising' =>
                EuPoliticalAdvertisingStatus::DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING
            ]
        );

        // Creates a campaign operation.
        $campaignOperation = new CampaignOperation();
        $campaignOperation->setCreate($campaign);

        // Issues a mutate request to add campaigns.
        $campaignServiceClient = $googleAdsClient->getCampaignServiceClient();
        $response = $campaignServiceClient->mutateCampaigns(
            MutateCampaignsRequest::build($customerId, [$campaignOperation])
        );

        /**
 * @var Campaign $addedCampaign
*/
        $addedCampaign = $response->getResults()[0];
        printf(
            "Added a standard shopping campaign with resource name '%s'.%s",
            $addedCampaign->getResourceName(),
            PHP_EOL
        );

        return $addedCampaign->getResourceName();
    }
      
```

### Python

```python
def add_standard_shopping_campaign(
    client: GoogleAdsClient,
    customer_id: str,
    budget_resource_name: str,
    merchant_center_account_id: int,
) -> str:
    """Creates a new standard shopping campaign in the specified client account."""
    campaign_service: CampaignServiceClient = client.get_service(
        "CampaignService"
    )

    # Create standard shopping campaign.
    campaign_operation: CampaignOperation = client.get_type("CampaignOperation")
    campaign: Campaign = campaign_operation.create
    campaign.name = f"Interplanetary Cruise Campaign {uuid.uuid4()}"

    # Configures settings related to shopping campaigns including advertising
    # channel type and shopping setting.
    campaign.advertising_channel_type = (
        client.enums.AdvertisingChannelTypeEnum.SHOPPING
    )
    campaign.shopping_setting.merchant_id = merchant_center_account_id

    # Sets the priority of the campaign. Higher numbers take priority over lower
    # numbers. For standard shopping campaigns, allowed values are between 0 and
    # 2, inclusive.
    campaign.shopping_setting.campaign_priority = 0

    # Enables local inventory ads for this campaign.
    campaign.shopping_setting.enable_local = True

    # Recommendation: Set the campaign to PAUSED when creating it to prevent the
    # ads from immediately serving. Set to ENABLED once you've added targeting
    # and the ads are ready to serve.
    campaign.status = client.enums.CampaignStatusEnum.PAUSED

    # Sets the bidding strategy to Manual CPC.
    # Recommendation: Use one of the automated bidding strategies for Shopping
    # campaigns to help you optimize your advertising spend. More information
    # can be found here: https://support.google.com/google-ads/answer/6309029
    campaign.manual_cpc = client.get_type("ManualCpc")

    # Sets the budget.
    campaign.campaign_budget = budget_resource_name

    # Declare whether or not this campaign serves political ads targeting the
    # EU. Valid values are:
    #   CONTAINS_EU_POLITICAL_ADVERTISING
    #   DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING
    campaign.contains_eu_political_advertising = (
        client.enums.EuPoliticalAdvertisingStatusEnum.DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING
    )

    # Add the campaign.
    campaign_response = campaign_service.mutate_campaigns(
        customer_id=customer_id, operations=[campaign_operation]
    )

    campaign_resource_name: str = campaign_response.results[0].resource_name

    print(
        "Added a standard shopping campaign with resource name "
        f"'{campaign_resource_name}'."
    )

    return campaign_resource_name
      
```

### Ruby

```ruby
def add_standard_shopping_campaign(
    client, customer_id, budget_name, merchant_center_id)

  operation = client.operation.create_resource.campaign do |campaign|
    campaign.name = "Interplanetary Cruise Campaign ##{(Time.new.to_f * 1000).to_i}"

    # Shopping campaign specific settings
    campaign.advertising_channel_type = :SHOPPING

    campaign.shopping_setting = client.resource.shopping_setting do |shopping_setting|
      shopping_setting.merchant_id = merchant_center_id
      shopping_setting.campaign_priority = 0
      shopping_setting.enable_local = true
    end

    campaign.status = :PAUSED

    # Sets the bidding strategy to Manual CPC.
    campaign.manual_cpc = client.resource.manual_cpc

    campaign.campaign_budget = budget_name

    # Declare whether or not this campaign serves political ads targeting the EU.
    # Valid values are CONTAINS_EU_POLITICAL_ADVERTISING and
    # DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING.
    c.contains_eu_political_advertising = :DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING
  end

  service = client.service.campaign
  response = service.mutate_campaigns(
    customer_id: customer_id,
    operations: [operation],
  )

  campaign_name = response.results.first.resource_name

  puts "Added a standard shopping campaign with resource name #{campaign_name}."

  campaign_name
end
      
```

### Perl

```perl
sub add_standard_shopping_campaign {
  my ($api_client, $customer_id, $budget_resource_name,
    $merchant_center_account_id)
    = @_;

  # Create a standard shopping campaign.
  my $campaign = Google::Ads::GoogleAds::V26::Resources::Campaign->new({
      name => "Interplanetary Cruise Campaign #" . uniqid(),
      # Configure settings related to shopping campaigns including advertising
      # channel type and shopping setting.
      advertisingChannelType => SHOPPING,
      shoppingSetting        =>
        Google::Ads::GoogleAds::V26::Resources::ShoppingSetting->new({
          merchantId => $merchant_center_account_id,
          # Set the priority of the campaign. Higher numbers take priority over
          # lower numbers. For standard shopping campaigns, allowed values are
          # between 0 and 2, inclusive.
          campaignPriority => 0,
          # Enable local inventory ads for this campaign.
          enableLocal => "true"
        }
        ),
      # Recommendation: Set the campaign to PAUSED when creating it to prevent
      # the ads from immediately serving. Set to ENABLED once you've added
      # targeting and the ads are ready to serve.
      status => Google::Ads::GoogleAds::V26::Enums::CampaignStatusEnum::PAUSED,
      # Set the bidding strategy to Manual CPC.
      # Recommendation: Use one of the automated bidding strategies for shopping
      # campaigns to help you optimize your advertising spend. More information
      # can be found here: https://support.google.com/google-ads/answer/6309029.
      manualCpc => Google::Ads::GoogleAds::V26::Common::ManualCpc->new(),
      # Set the budget.
      campaignBudget => $budget_resource_name,
      # Declare whether or not this campaign serves political ads targeting the EU.
      # Valid values are CONTAINS_EU_POLITICAL_ADVERTISING and
      # DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING.
      containsEuPoliticalAdvertising =>
        DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING
    });

  # Create a campaign operation.
  my $campaign_operation =
    Google::Ads::GoogleAds::V26::Services::CampaignService::CampaignOperation->
    new({create => $campaign});

  # Add the campaign.
  my $campaign_resource_name = $api_client->CampaignService()->mutate({
      customerId => $customer_id,
      operations => [$campaign_operation]})->{results}[0]{resourceName};

  printf "Added a standard shopping campaign with resource name: '%s'.\n",
    $campaign_resource_name;

  return $campaign_resource_name;
}
      
```

### curl

> [!NOTE]
> **Note:** While a direct REST code sample for this step isn't provided here, you can achieve this using a manual REST request.   
>
> Refer to the Google Ads API REST interface documentation and the method-specific reference pages. You will need to construct the JSON payload based on the proto definitions.   
>
> Key Resources:
>
> - [Using REST](https://developers.google.com/google-ads/api/rest/overview.md.txt)
> - [REST Interface Structure](https://developers.google.com/google-ads/api/rest/design/overview.md.txt)
> - [JSON Field Mappings](https://developers.google.com/google-ads/api/rest/design/json-mappings.md.txt)
> - Consult the [REST API Reference](https://developers.google.com/google-ads/api/reference/rpc/latest/overview) for the specific service and method.

<br />

## Comparison Listing campaigns

[Comparison Listing campaigns](https://support.google.com/google-ads/answer/9262823) are available to Comparison Shopping Services
(CSSs) participating in the CSS program in CSS program countries. These
campaigns let CSSs advertise a group of products from their website.

Comparison Listing campaigns have the following requirements:

- The Google Ads account must be associated with a CSS's main multi-client account in Merchant Center. If the account is not eligible for Comparison Listing campaigns, you might receive a `MERCHANT_NOT_ALLOWED_FOR_COMPARISON_LISTING_ADS` error.
- The campaign's [`advertising_channel_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.md.txt#advertising_channel_type) must be [`SHOPPING`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdvertisingChannelTypeEnum.AdvertisingChannelType.md.txt#shopping).
  - The campaign's [`advertising_channel_sub_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.md.txt#advertising_channel_sub_type) must be [`SHOPPING_COMPARISON_LISTING_ADS`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdvertisingChannelSubTypeEnum.AdvertisingChannelSubType.md.txt#shopping_comparison_listing_ads).
  - The campaign's [`shopping_setting`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt) requires that the [`merchant_id`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt#merchant_id) be set to the CSS's Merchant Center account ID.
  - Only the [`manual_cpc`](https://support.google.com/google-ads/answer/2390250) bidding strategy is supported.
- Ad groups must have their [`type`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroup.md.txt#type) set to [`SHOPPING_COMPARISON_LISTING_ADS`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupTypeEnum.AdGroupType.md.txt#shopping_comparison_listing_ads).
  - To serve ads, each ad group must include a product partition tree containing at least one [`listing group`](https://developers.google.com/google-ads/api/reference/rpc/v26/ListingGroupInfo.md.txt). The simplest tree structure is a single root node that includes all products in the ad group. For details, see the [listing group guide](https://developers.google.com/google-ads/api/docs/shopping-ads/create-listing-groups.md.txt).

## Vehicle ads

You can use standard Shopping campaigns to serve [vehicle ads](https://support.google.com/google-ads/answer/11189169) for vehicle
inventory uploaded to Merchant Center.

To create a Shopping campaign with a vehicle feed:

1. Follow the [standard Shopping campaign setup](https://developers.google.com/google-ads/api/docs/shopping-ads/create-campaign.md.txt#standard-shopping-campaigns).
2. Set the campaign's [`listing_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.md.txt#listing_type) to [`VEHICLES`](https://developers.google.com/google-ads/api/reference/rpc/v26/ListingTypeEnum.ListingType.md.txt#vehicles) (available for Shopping campaigns in v26 and later). This field is immutable (`CREATE_ONLY`) and can only be set during campaign creation.
3. Configure [`shopping_setting`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt) with the [`merchant_id`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.ShoppingSetting.md.txt#merchant_id) of your Merchant Center account containing the approved vehicle inventory feed.
4. Set up your downstream campaign resources ([ad groups](https://developers.google.com/google-ads/api/docs/shopping-ads/create-ad-group.md.txt), [ad group
   ads](https://developers.google.com/google-ads/api/docs/shopping-ads/create-ad-group-ad), and [listing groups](https://developers.google.com/google-ads/api/docs/shopping-ads/create-listing-groups.md.txt)) using the standard Shopping campaign structure.

> [!TIP]
> **Tip:** For automated cross-channel retail campaigns that also support vehicle feeds, consider using [Performance Max for retail](https://developers.google.com/google-ads/api/performance-max/retail.md.txt#vehicle-ads).