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:
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:
Learn more about working with Shopify's product model.
ProductConnection!The elements that come after the specified cursor.
The elements that come before the specified cursor.
A filter made up of terms, connectives, modifiers, and comparators. You can apply one or more filters to a query. Learn more about Shopify API search syntax.
Filter by a case-insensitive search of multiple fields in a document.
Example:
query=Bob Norman
query=title:green hoodie
Filter by the product variant barcode
field.
Example:
barcode:ABC-abc-1234
Filter by a product bundle. A product bundle is a set of two or more related products, which are commonly offered at a discount.
Filter by the collection id
field.
Example:
collection_id:108179161409
Filter by the role of the product in a combined listing.
Valid values:
parent
child
no_role
Example:
combined_listing_role:parent
Filter by the date and time when the product was created.
Example:
created_at:>'2020-10-21T23:39:20Z'
created_at:<now
created_at:<='2024'
Filter by the delivery profile id
field.
Example:
delivery_profile_id:108179161409
Filter by products with publishing errors.
Filter by a comma-separated list of product handles.
Example:
handle:the-minimal-snowboard
Filter by products that have only composite variants.
Example:
has_only_composites:true
Filter by products that have only a default variant. A default variant is the only variant if no other variants are specified.
Example:
has_only_default_variant:true
Filter by products that have variants with associated components.
Example:
has_variant_with_components:true
Filter by id
range.
Example:
id:1234
id:>=1234
id:<=1234
Filter by inventory count.
Example:
inventory_total:0
inventory_total:>150
inventory_total:>=200
Filter by products that have a reduced price. For more information, refer to the CollectionRule
object.
Example:
is_price_reduced:true
Filters resources by metafield value. Format: metafields.{namespace}.{key}:{value}
. Learn more about querying by metafield value.
Example:
metafields.custom.on_sale:true
metafields.product.material:"gid://shopify/Metaobject/43458085"
Filter by products that are out of stock in at least one location.
Example:
out_of_stock_somewhere:true
Filter by the product variant price
field.
Filter by the app id
field.
Example:
product_configuration_owner:10001
Filter by the publication status of the resource on a channel, such as the online store. The value is a composite of the channel app
ID (Channel.app.id
) and one of the valid values.
Valid values:
approved
rejected
needs_action
awaiting_review
published
demoted
scheduled
provisionally_published
Example:
product_publication_status:189769876-approved
Filter by a comma-separated list of product types.
Example:
product_type:snowboard
Filter by a comma-separated list of publication IDs that are associated with the product.
Example:
publication_ids:184111530305,184111694145
Filter by the publishable status of the resource on a channel, such as the online store. The value is a composite of either the channel app
ID (Channel.app.id
) or channel name
and one of the valid values.
Valid values:
online_store_channel
published
unpublished
visible
unavailable
hidden
intended
visible
Example:
publishable_status:published
publishable_status:189769876-visible
publishable_status:pos-hidden
Filter by the date and time when the product was published to the online store and other sales channels.
Example:
published_at:>2020-10-21T23:39:20Z
published_at:<now
published_at:<=2024
Filter by the published status of the resource on a channel, such as the online store.
Valid values:
unset
pending
approved
not approved
Example:
published_status:approved
Filter by a comma-separated list of statuses. You can use statuses to manage inventory. Shopify only displays products with an ACTIVE
status in online stores, sales channels, and apps.
Valid values:
ACTIVE
DefaultARCHIVED
DRAFT
Example:
status:ACTIVE,DRAFT
Filter objects by the tag
field.
Filter by objects that don’t have the specified tag.
Filter by the product title
field.
Example:
title:The Minimal Snowboard
Filter by the date and time when the product was last updated.
Example:
updated_at:>'2020-10-21T23:39:20Z'
updated_at:<now
updated_at:<='2024'
Filter by the product variant id
field.
Example:
variant_id:45779434701121
Filter by the product variant title
field.
Example:
variant_title:'Special ski wax'
Reverse the order of the underlying list.
The ID of a saved search. The search’s query string is used as the query argument.
The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
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.
query GetProducts { products(first: 10) { nodes { id title } } }
curl -X POST \ https://your-development-store.myshopify.com/admin/api/2025-07/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query GetProducts { products(first: 10) { nodes { id title } } }" }'
const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query GetProducts { products(first: 10) { nodes { id title } } }`, ); const data = await response.json();
const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query GetProducts { products(first: 10) { nodes { id title } } }`, });
session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query GetProducts { products(first: 10) { nodes { id title } } } QUERY response = client.query(query: query)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4