---
title: Products and pricing
description: >-
  Build apps that manage the product catalog, change how buyers can purchase,
  and adjust pricing at checkout.
source_url:
  html: 'https://shopify.dev/docs/apps/build/products-and-pricing'
  md: 'https://shopify.dev/docs/apps/build/products-and-pricing.md'
---

# Products and pricing

This section covers the APIs and extension points for working with a store's catalog, changing how buyers can purchase products, and adjusting prices at checkout.

Pages in this section are organized by the merchant problem they solve. A bundling app and a subscriptions app both write to the product catalog, but they solve different problems and use different parts of the platform.

***

## Product merchandising

[Product merchandising](https://shopify.dev/docs/apps/build/product-merchandising) covers reading and writing what the store sells. Beyond [products and collections](https://shopify.dev/docs/apps/build/product-merchandising/products-and-collections), Shopify has purpose-built models for common merchandising patterns:

* [Product bundles](https://shopify.dev/docs/apps/build/product-merchandising/bundles) sell several products as one purchasable unit, with inventory tracked against the components.
* [Combined listings](https://shopify.dev/docs/apps/build/product-merchandising/combined-listings) present separate products as one listing with shared options.
* [Unlisted products](https://shopify.dev/docs/apps/build/product-merchandising/unlisted-products) exist in the catalog without appearing in the storefront.

Use these models instead of building your own with metafields and custom logic. Shopify needs to understand the structure to price and fulfill these products correctly at checkout.

***

## Purchase options

[Purchase options](https://shopify.dev/docs/apps/build/purchase-options) change the terms of a sale. The same product can be sold once, [on a subscription](https://shopify.dev/docs/apps/build/purchase-options/subscriptions), or [deferred as a pre-order or Try Before You Buy](https://shopify.dev/docs/apps/build/purchase-options/deferred).

Selling plans define the terms. Merchants create and edit those plans with [purchase options extensions](https://shopify.dev/docs/apps/build/purchase-options/purchase-options-extensions), which add an admin UI extension to the product and variant pages.

How you present the plans to customers depends on where the sale happens. Online, you present them in the storefront or theme. In person, staff can add a subscription to a Shopify POS order with [a POS UI extension](https://shopify.dev/docs/apps/build/pos/tutorials/build-subscription-extension). In both cases, customers manage their subscriptions afterwards through a [customer portal](https://shopify.dev/docs/apps/build/purchase-options/customer-portal).

If your app manages subscriptions, then it also needs to handle the [contracts](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/contracts), [billing cycles](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/billing-cycles), and [fulfillments](https://shopify.dev/docs/apps/build/purchase-options/subscriptions/fulfillments) that follow the first order.

***

## Discounts

[Discounts](https://shopify.dev/docs/apps/build/discounts) run as [Shopify Functions](https://shopify.dev/docs/apps/build/functions) inside Shopify's checkout, so your pricing logic applies reliably at the moment of purchase without a round trip to your backend. Because it runs while the buyer is checking out, discount logic needs to be fast and deterministic.

***

## Shopify Collective

[Shopify Collective](https://shopify.dev/docs/apps/build/collective) connects retailers and suppliers so merchants can sell products they don't hold. Apps can share and import products, define shipping rates, and manage fulfillment orders between the two stores.

***

## Next steps

* Read the [GraphQL Admin API product reference](https://shopify.dev/docs/api/admin-graphql/latest/objects/Product) for the objects behind all of this.
* Attach your own attributes to products and orders with [custom data](https://shopify.dev/docs/apps/build/custom-data).
* If you're changing what buyers see in checkout, then start from [Checkout](https://shopify.dev/docs/apps/build/checkout).

***
