How can a ChatGPT ad group use only part of a product feed?

The Citead team, updated

In short. Use an ad group's product_set with the campaign feed ID and filters to select a product subset.

Definition: A product set is the optional ad group object that selects which products the group can use from its campaign's product feed. It contains the feed identifier and filters, so one catalog can supply different product subsets to different ad groups.

Key facts

  • OpenAI's Product Feeds documentation says a product set selects products from the campaign's feed and can filter by brand, category, price range, or another supported attribute.
  • The Ad Groups reference says product_set is optional, its product_feed_id must match the campaign's product feed, and its filters must not repeat a field within one product set.
  • Multiple conditions are combined: each product must satisfy the filters together. An empty filters array inspects the feed without additional filtering.
  • A product can carry a custom label in ads_metadata, and an ad group can filter on the corresponding ads_metadata.<field> when the integration supports it.
  • Updating a product set sends the complete desired filter list. Sending the matching feed identifier with "filters": [] removes the product filters.

How does the ad group inherit the catalog?

The campaign owns the product feed. An ad group inherits that feed, so omitting product_set leaves the group using the campaign's catalog without extra product filters. To use a subset, supply product_set and repeat the campaign's product_feed_id inside it. OpenAI's feed guide states that the same filters can be used when creating a new ad group or updating an existing one.

The object has two practical parts: the feed identifier identifies the catalog, and filters describes the conditions. The feed identifier cannot point to a different catalog from the campaign. The Ad Groups reference also says that an omitted product_set inherits the campaign feed and that the object is included only to specify product filters.

{
  "product_set": {
    "product_feed_id": "fd_123",
    "filters": [
      {
        "field": "brand",
        "operator": "in",
        "values": ["Acme"]
      },
      {
        "field": "price",
        "operator": "lte",
        "values": ["100"]
      }
    ]
  }
}

How are products matched?

Each filter has a field, an operator, and a values array. The reference lists in, gt, gte, lt, and lte as the operators. Values are strings, including numeric comparison values. The documented filter fields include title, body, item_id, offer_id, price, target_url, image_url, product_category, brand, seller_name, external_seller_id, star_rating, condition, and age_group. The comparison operators gt, gte, lt, and lte apply only to price or star_rating.

Conditions in one product set work together. OpenAI's example combines brand equal to Acme through in with price no greater than 100 through lte; a product must meet both conditions. The reference says the same field cannot be repeated within one product set, so separate conditions should use distinct fields.

How can you preview and change the subset?

Before creating or updating an ad group, query the feed with the intended filters. The feed guide's example uses the feed products query and a limit of 20. Review the returned products before saving the product set. If the result is empty, the guide recommends querying with an empty filter list first, then adding conditions one at a time. After catalog changes to prices, brands, categories, or other filtered attributes, review the selection again.

{
  "filters": [
    {
      "field": "brand",
      "operator": "in",
      "values": ["Acme"]
    },
    {
      "field": "price",
      "operator": "lte",
      "values": ["100"]
    }
  ],
  "limit": 20
}

For an existing ad group, an update replaces the desired filter list, so retained filters must be sent again. The Ad Groups reference says to include the full product_set object when changing a product-feed campaign's feed or filters, then retrieve the ad group if the resulting product set is needed because the immediate update response can omit it.

FAQ

Can one catalog serve different ad groups?

Yes. OpenAI's feed guide states that different ad groups can select different subsets of the same catalog by applying filters in each group's product_set.

What happens if product_set is omitted?

The ad group inherits the campaign's feed and uses it without additional product filters. The campaign still determines which feed the ad group uses.

Can a custom label represent a subset?

Yes, when the integration supports feed-defined metadata. Add a supported label under a product's ads_metadata, then filter the ad group's product_set on that metadata field. The label is a product-selection value, not a user-location setting.

Sources

  1. OpenAI Developers, "Product Feeds", null
  2. OpenAI Developers, "Ad Groups", null

Check how a page reads to answer engines. Open the GEO score analyzer

Test a page and see what to fix first

The analysis usually takes less than 10 seconds and needs no account.

400,000+ pages scored in the public benchmark