> Caution:
> Starting in API version 2023-04, the [`PriceList.contextRule`](/docs/api/admin-graphql/unstable/objects/PriceList#field-pricelist-contextrule) field will be deprecated. If you have an existing app that uses the `contextRule` field, then you should [migrate to catalogs](/docs/apps/build/markets/migrate-to-catalogs).
Catalogs are used to determine the products that are published to customers in different contexts. For example, a business-to-business (B2B) catalog might specify that customers ordering for a specific B2B company location can purchase only the t-shirt products in the store at a 30% discount.
In this guide, you'll learn how to build price lists and publications, and associate them with catalogs to control prices and publishing for a specific B2B company location.
## Requirements
- Your app can make [authenticated requests](/docs/api/admin-graphql#authentication) to the GraphQL Admin API.
- Your app has the `write_products` [access scope](/docs/api/usage/access-scopes). Learn how to [configure your access scopes using Shopify CLI](/docs/apps/build/cli-for-apps/app-configuration).
- You've created [products](/docs/api/admin-graphql/latest/mutations/productcreate) and [product variants](/docs/api/admin-graphql/latest/mutations/productvariantcreate) in your store.
- You're familiar with the concept of [catalogs](/docs/apps/build/markets/catalogs-different-markets).
- You've [created a company](/docs/apps/build/b2b/start-building#step-1-create-a-company) and [created a B2B catalog](/docs/apps/build/b2b/start-building#step-2-create-a-b2b-catalog).
## Step 1: Associate a price list with the catalog
You can associate a price list with the catalog to determine the prices that are shown to customers ordering for that B2B company location. If a price list isn't associated with the catalog, then customers ordering for this B2B company location receive the initial variant prices converted to the market currency.
### Create a new price list
Use the [`priceListCreate`](/docs/api/admin-graphql/unstable/mutations/priceListCreate) mutation to create a new price list for the catalog. You can set the name, a percentage-based adjustment, a currency, and the ID of the catalog to associate.
### Associate an existing price list
Use the [`priceListUpdate`](/docs/api/admin-graphql/unstable/mutations/pricelistupdate) mutation to associate an existing price list with a catalog. You can also make changes to the name, currency, or percentage-based adjustments with the `priceListUpdate` mutation.
## Step 2: Associate a publication
> Caution:
> If a publication isn't associated with a B2B catalog, then customers logged into their B2B accounts won't see any products for that location.
The publication determines which products are published to customers that are eligible for the catalog.
If you have an existing publication, then you can use the [`catalogUpdate`](/docs/api/admin-graphql/unstable/mutations/catalogupdate) mutation to associate a publication or make other changes to a catalog.
To create and associate a new publication, use the [`publicationCreate`](/docs/api/admin-graphql/unstable/mutations/publicationcreate) mutation:
### Add products and collections to the publication
After you create a publication, you can add products and collections to the publication with the [`publicationUpdate`](/docs/api/admin-graphql/unstable/mutations/publicationupdate) mutation:
## Step 3: Set fixed prices for specific product variants
Use the [`priceListFixedPricesAdd`](/docs/api/admin-graphql/latest/mutations/priceListFixedPricesAdd) mutation to set a fixed price for specific product variants.
If a product variant is [published to the catalog](#step-2-associate-a-publication-optional) and doesn’t have a set fixed price, then its price is automatically calculated using the percentage-based adjustment that’s specified in the [`PriceListParent`](/docs/api/admin-graphql/latest/objects/pricelistparent) object.
> Warning:
> The `priceListFixedPricesAdd` mutation accepts a maximum of 250 prices for each request and acts as an add and replace operation. If a fixed price for a given variant already exists on the price list, then it’s replaced.
### Delete fixed prices
To delete a partial set of fixed prices on a price list, you can use the [`priceListFixedPricesDelete`](/docs/api/admin-graphql/unstable/mutations/priceListFixedPricesDelete) mutation. After a fixed price is deleted, the price for the affected product variant is automatically calculated using the price list parent's percentage-based adjustment.
To delete fixed prices, you need to specify the variant ID. You can specify a maximum of 250 variant IDs in the array.
## Next steps
- Learn how to calculate and send invoices for [draft orders for B2B customers](/docs/apps/build/b2b/draft-orders).