products
Retrieves a list of products in a store. Products are the items that merchants can sell in their store.
Use the products query when you need to:
- Build a browsing interface for a product catalog.
- Create product searching, sorting, and filtering experiences.
- Implement product recommendations.
- Sync product data with external systems.
The products query supports pagination
to handle large product catalogs and saved searches
for frequently used product queries.
The products query returns products with their associated metadata, including:
- Basic product information (for example, title, description, vendor, and type)
- Product options and product variants, with their prices and inventory
- Media attachments (for example, images and videos)
- SEO metadata
- Product categories and tags
- Product availability and publishing statuses
Learn more about working with Shopify's product model.
ProductConnection arguments
- after (String)
- before (String)
- first (Int)
- last (Int)
- query (String)
- reverse (Boolean)
- savedSearchId (ID)
- sortKey (ProductSortKeys)
- Anchor to afterafter•String
The elements that come after the specified cursor.
- Anchor to beforebefore•String
The elements that come before the specified cursor.
- Anchor to firstfirst•Int
The first
nelements from the paginated list.- Anchor to lastlast•Int
The last
nelements from the paginated list.- Anchor to queryquery•String
A filter made up of terms, connectives, modifiers, and comparators.
name type description acceptable_values default_value example_use default string Filter by a case-insensitive search of multiple fields in a document. - query=Bob Norman
-query=title:green hoodiebarcode string Filter by the product variant barcodefield. - bundles boolean Filter by a [product bundle](https://shopify.dev/docs/apps/build/product-merchandising/bundles). A product bundle is a set of two or more related products, which are commonly offered at a discount. - bundles:truecategory_id string Filter by the product category ID ( product.category.id). A product category is the category of a productfrom Shopify's Standard Product Taxonomy. - collection_id id Filter by the collection idfield. - combined_listing_role string Filter by the role of the product in a combined listing. - parent
-child
-- created_at time Filter by the date and time when the product was created. -
-
-delivery_profile_id id Filter by the delivery profile idfield. - error_feedback string Filter by products with publishing errors. gift_card boolean Filter by the product field. - handle string Filter by a comma-separated list of product handles. - handle:the-minimal-snowboardhas_only_composites boolean Filter by products that have only composite variants. - has_only_default_variant boolean Filter by products that have only a default variant. A default variant is the only variant if no other variants are specified. - has_variant_with_components boolean Filter by products that have variants with associated components. - id id Filter by idrange.- id:1234
-id:>=1234
-id:<=1234inventory_total integer Filter by inventory count. -
-
-is_price_reduced boolean Filter by products that have a reduced price. For more information, refer to the object. - metafields.{namespace}.{key} mixed Filters resources by metafield value. Format: metafields.{namespace}.{key}:{value}. Learn more aboutquerying by metafield value. -
-out_of_stock_somewhere boolean Filter by products that are out of stock in at least one location. - price bigdecimal Filter by the product variant pricefield. - price:100.57product_configuration_owner string Filter by the app idfield. - product_publication_status string Filter by channel approval process status of the resource on a channel, such as the online store. The value is a composite of the channel appID( Channel.app.id) and one of the valid values. For simple visibility checks, use published_statusinstead. -
- `*{channel_app_id}-rejected * {channel_app_id}-needs_action`
-
- `*{channel_app_id}-published * {channel_app_id}-demoted*{channel_app_id}-scheduled *{channel_app_id}-provisionally_published` - product_type string Filter by a comma-separated list of [product types](https://help.shopify.com/manual/products/details/product-type). | | publication_ids | string | Filter by a comma-separated list of publication IDs that are associated with the product. | | | -| | publishable_status | string | Deprecated: This parameter is deprecated as of 2025-12 and will be removed in a future API version. Use published_status for visibility checks. Filter by the publishable status of the resource on a channel. The value is a composite of the channelappID (Channel.app.id) and one of the valid status values. | -
-
-
-| | -
-| | published_at | time | Filter by the date and time when the product was published to the online store and other sales channels. | | | -
-
-| | published_status | string | Filter resources by their visibility and publication state on a channel. Online store channel filtering: -: Returns all resources in the online store channel, regardless of publication status. -published/visible: Returns resources that are published to the online store. -unpublished: Returns resources that are not published to the online store. Channel-specific filtering using a channel ID, channel handle, channelappID (Channel.app.id), or app handle with suffixes: -: Returns resources published to the specified channel. -: Same as(kept for backwards compatibility). -: Returns resources added to the channel but not yet published. -: Returns resources not added to the channel or not published. Other: -unavailable: Returns resources not published to any channel. | -
-published
-visibleunpublished
-
-
-
-
-
-
-
-
-unavailable| | -
-
-
-
-| | sku | string | Filter by the product variantskufield. Learn more about SKUs. | | | -| | status | string | Filter by a comma-separated list of statuses. You can use statuses to manage inventory. Shopify only displays products with anstatus in online stores, sales channels, and apps. | -active
-archived
-draft|active| -status:active,draft| | tag | string | Filter objects by thetagfield. | | | -| | tag_not | string | Filter by objects that don’t have the specified tag. | | | -| | title | string | Filter by the producttitlefield. | | | -title:The Minimal Snowboard| | tracks_inventory | boolean | Filter by products that have inventory tracking enabled. | | | -| | updated_at | time | Filter by the date and time when the product was last updated. | | | -
-
-| | variant_id | id | Filter by the product variantidfield. | | | -| | variant_title | string | Filter by the product varianttitlefield. | | | -| | vendor | string | Filter by the origin or source of the product. Learn more about vendors and managing vendor information. | | | -vendor:Snowdevil
-| You can apply one or more filters to a query. Learn more about Shopify API search syntax.
- Anchor to reversereverse•BooleanDefault:false
Reverse the order of the underlying list.
- Anchor to savedSearchIdsaved•ID
Search Id The ID of a saved search. The search’s query string is used as the query argument.
- Anchor to sortKeysort•Product
Key Sort Keys Default:ID Sort the underlying list using a key. If your query is slow or returns an error, then try specifying a sort key that matches the field used in the search.
Anchor to Possible returnsPossible returns
- edges ([ProductEdge!]!)
- nodes ([Product!]!)
- pageInfo (PageInfo!)
- Anchor to edgesedges•[Product
Edge!]! non-null The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
- Anchor to nodesnodes•[Product!]!non-null
A list of nodes that are contained in ProductEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
- Anchor to pageInfopage•Page
Info Info! non-null An object that’s used to retrieve cursor information about the current page.