{"title":"Catalog objects","slug":"catalog-objects","url":"https://support.storeconnect.com/articles/catalog-objects","url_markdown":"https://support.storeconnect.com/articles/catalog-objects.md","subtitle":null,"summary":"The Salesforce objects behind a StoreConnect catalog: products, categories, variants, bundles, traits, media, tags, and pricing. Use it to find the right object before you query, import, or extend the catalog.","type":"Developer_Documentation","video_url":"","keywords":"catalog objects, product2, product category, product variant, bundle, component group, trait, trait type, trait value, media, tag, pricebook, pricebookentry, taxonomy, supplier, data model, salesforce schema","last_modified":"2026-09-15T02:32:04+0000","body_markdown":"The catalog is the largest group of objects in StoreConnect, and almost all of it\nhangs off one record. Use this article to find the object you need before you\nwrite a query, plan an import, or add a field.\n\n## Product2 is the center\n\n[Product2](product2-object-reference) is the standard Salesforce product object,\nwhich StoreConnect extends heavily. Everything a shopper can buy is a **Product2**\nrecord, including things that do not look like products at first: a variant is a\nproduct, a bundle is a product, and a subscription is a product with a billing\nschedule.\n\nThirty-nine objects point at **Product2**, which is why its\n[Referenced by](product2-object-reference) table is the fastest way to find\nanything catalog related.\n\nFour relationships do most of the work:\n\n- **A product sits in categories.** Not directly. A\n  [Product Product Category](products-product-categories-object-reference) join\n  record connects the two, so one product can appear in many categories and one\n  category can hold many products. Categories nest through\n  [Product Category Hierarchy](product-category-hierarchy-object-reference).\n- **A variant is a product pointing at another product.** A\n  [Product Variant](product-variant-object-reference) record links a variant to\n  its master, and the variant's own traits say what makes it different.\n- **A bundle is a product made of other products.**\n  [Product Component](product-component-object-reference) names each part,\n  [Component Group](component-group-object-reference) groups the parts a shopper\n  chooses between, and\n  [Component Pricing](component-pricing-object-reference) overrides prices inside\n  the bundle.\n- **A price lives outside the product.** The product record holds no price. A\n  [Pricebook Entry](pricebookentry-object-reference) does, one per product per\n  [price book](pricebook2-object-reference). To be sellable, a product needs an\n  active entry in the store's default price book, in the store's currency.\n\n## Traits are four objects, not one\n\nTraits are how a catalog becomes filterable, and they are the part of the schema\nmost people misread. The value a shopper filters on is spread across four records.\n\nRead the chain from the bottom up. A\n[Trait Category](trait-category-object-reference) such as **Dimensions** holds\n[Trait Types](trait-type-object-reference) such as **Width**. Each type has\n[Trait Values](trait-value-object-reference) such as `30cm`. The\n[Trait](trait-object-reference) record is the one that matters: it joins a value\nto a product. No **Trait** record, and the product is not filterable by that\nvalue, however many trait values exist.\n\n:::tip\nApplying the same specification shape to many products is what\n[Product Trait Template](product-trait-template-object-reference) is for. Its\n[items](product-trait-template-item-object-reference) become **Trait** records on\nthe product when the template is applied.\n:::\n\n## Objects in this domain\n\n| Object | API name | Purpose |\n|--------|----------|---------|\n| [Product2](product2-object-reference) | `Product2` | Every sellable item: simple products, variants, bundles, and subscriptions |\n| [Product Category](product-category-object-reference) | `s_c__Product_Category__c` | A group of products, used for storefront navigation and for scoping promotions and pricing |\n| [Product Category Hierarchy](product-category-hierarchy-object-reference) | `s_c__Product_Category_Hierarchy__c` | Nests one category inside another, forming the category tree |\n| [Product Product Category](products-product-categories-object-reference) | `s_c__Products_Product_Categories__c` | Places a product in a category. A product can sit in many |\n| [Product Variant](product-variant-object-reference) | `s_c__Product_Variant__c` | Links a variant product to its master, forming a variant set such as sizes of one shirt |\n| [Related Product](related-product-object-reference) | `s_c__Related_Product__c` | Links two products so one appears as a related item on the other's page |\n| [Related Product Category](related-product-category-object-reference) | `s_c__Related_Product_Category__c` | Links two categories so one appears as a related category on the other's page |\n| [Product Component](product-component-object-reference) | `s_c__Product_Component__c` | One component product inside a bundle, and the quantity of it |\n| [Component Group](component-group-object-reference) | `s_c__Component_Group__c` | A set of components in a bundle the shopper chooses between |\n| [Component Pricing](component-pricing-object-reference) | `s_c__Component_Pricing__c` | Overrides a component's price when it is bought as part of a bundle |\n| [Pricebook](pricebook2-object-reference) | `Pricebook2` | A named set of prices. A store has a default price book and can have others for account pricing |\n| [Pricebook Entry](pricebookentry-object-reference) | `PricebookEntry` | The price of one product in one price book, including sale price and cost |\n| [Media](media-object-reference) | `s_c__Media__c` | The record behind every image, video, file, and document used anywhere in the store |\n| [Product Media](product-media-object-reference) | `s_c__Product_Media__c` | Attaches a media record to a product, and sets its display order |\n| [Product Purchasable Media](product-purchasable-media-object-reference) | `s_c__Product_Purchasable_Media__c` | Deprecated. Attached media a shopper could download after purchase |\n| [Trait Category](trait-category-object-reference) | `s_c__Trait_Category__c` | A group of trait types, such as **Dimensions** holding width, height, and depth |\n| [Trait Type](trait-type-object-reference) | `s_c__Trait_Type__c` | One kind of trait, such as width, color, or size |\n| [Trait Value](trait-value-object-reference) | `s_c__Trait_Value__c` | One allowed value for a trait type, such as `Large` |\n| [Trait](trait-object-reference) | `s_c__Trait__c` | Assigns a trait value to a product. This is the record that makes a product searchable and filterable by that value |\n| [Product Trait Template](product-trait-template-object-reference) | `s_c__Product_Trait_Template__c` | A reusable set of traits, applied to products that share the same shape of specification |\n| [Product Trait Template Item](product-trait-template-item-object-reference) | `s_c__Product_Trait_Template_Item__c` | One trait inside a template, created on the product when the template is applied |\n| [Tag](tag-object-reference) | `s_c__Tag__c` | A simple label attachable to products, pages, and articles |\n| [Product Tag](product-tag-object-reference) | `s_c__Product_Tag__c` | Attaches a tag to a product |\n| [Taxonomy](taxonomy-object-reference) | `s_c__Taxonomy__c` | A named collection of product categories, used to run more than one category tree |\n| [Supplier Account](product-supplier-object-reference) | `s_c__Product_Supplier__c` | Links a product to the account that supplies it |\n\n## Where it meets other domains\n\n- **Orders and checkout.** A [cart item](cart-item-object-reference) and an\n  [order item](orderitem-object-reference) both point at **Product2**, and\n  promotions and discounts scope themselves to products and categories. See\n  [order and checkout objects](order-and-checkout-objects).\n- **Fulfillment and inventory.** Stock is counted per product per location, so\n  [Stock Level](stock-level-object-reference) points at **Product2**. See\n  [fulfillment and inventory objects](fulfillment-and-inventory-objects).\n- **Store design.** A content block can be attached to a product or a category,\n  through [Content Block Product](content-blocks-products-object-reference) and\n  [Content Block Product Category](content-blocks-product-categories-object-reference).\n  See [store design objects](store-design-objects).\n- **The storefront.** Most catalog objects have a Liquid counterpart. Each object\n  reference article ends with an **On the storefront** section naming the drop\n  that renders it and which field arrives as which attribute.\n\nSeveral of the records above are join objects. If you are querying or importing\nthrough one, [junction objects](junction-objects) explains what that means for\nSOQL, Data Loader, and the order you create records in."}