Pattern PXM publishes your approved product content straight into your own Shopify store through the Shopify Admin API. PXM can create products and update titles, descriptions, variants, images, metafields and prices, and set starting inventory when products are created.
Publishing from PXM keeps your storefront in step with your marketplaces, without retyping content in Shopify admin.
How Shopify works with PXM
One-way: content flows from PXM to Shopify. Changes made in Shopify admin aren't copied back to PXM, and the next job that sends a field overwrites it.
Handle and SKU: PXM finds the Shopify product by its Handle and each variant by its SKU.
One store, one connection: each Shopify store, including a dev or test store, is its own connection and PXM channel, usually with one template built from that store's schema and metafields.
Publish types: Create and Partial update.
Before you start
Who does what: the store owner or a staff account with full admin access creates and installs a custom app in Shopify (Step 1), and your Pattern PXM CSM guides you through connecting and authorizing your store (Step 2). Then you (or Pattern) set up the channel and template in PXM.
Your role: setting up channels and templates and publishing to Shopify need the Admin or Super Admin role. If you don't have one of these roles, ask an Admin to publish for you, or export your content with a Custom Export template. See User Roles and Permissions in Pattern PXM.
Only approved values are sent. Draft values don't publish until they're approved, and approving a value doesn't publish it. Someone still has to publish it to the channel.
Only mapped, selected fields are sent. A field reaches the channel only when it's mapped on the channel's template and selected in the job.
Step 1: Create a custom app in the Shopify Dev Dashboard
Shopify now creates custom apps in its Dev Dashboard. In Shopify admin, go to Settings > Apps > Develop apps > Build apps in Dev Dashboard.
Create an app with a clear name, for example "Pattern PXM Integration".
Set the App URL to https://shopify.dev/apps/default-app-home. Shopify requires a value, so don't leave it blank.
Select the Admin API scopes Pattern PXM needs: read and write access for products, inventory, files, metaobjects and locations, or the scopes your Pattern PXM CSM confirms.
Release an app version (for example 1.0.0). The app can't be installed until a version is released.
Install the app on your store.
For the full click-by-click steps, see Shopify Connection Setup Instructions.
Keep your app details private. Never put them in product fields, templates or jobs.
Step 2: Connect with your Pattern PXM CSM
Your Pattern PXM CSM guides you through connecting and authorizing your store. Once the connection is complete, your Shopify store appears as a choice under API Channels when you create a channel in PXM. It doesn't appear under Settings > SYSTEM > INTEGRATIONS.
Step 3: Create the Shopify channel
In Pattern PXM, open Settings in the left navigation, then go to MARKETPLACES > CHANNELS.
Click CREATE CHANNEL (bottom right).
Under API Channels, choose your Shopify connection.
Choose a Default Media Stack, then create the channel. A default media stack is required. If you don't have one yet, create it under Settings > Assets > Media Stack Group.
Repeat for each store, and give each channel a clear name (for example "Shopify US" and "Shopify CA") so you always publish to the right store.
Under each channel name, a green Marketplace · [name] line means the channel is connected through the API, and grey No API connection means a spreadsheet channel. CHANNEL STATUS shows ACTIVE or INACTIVE (No active template). A new channel stays inactive until at least one of its templates is active, and an inactive channel can't be picked when you publish. For more on channels, see Creating a Channel in PXM.
A Shopify-specific media stack (for example "Shopify") works best, because image order comes from media stack position.
Pre-release view; your screen may differ slightly.
Step 4: Sync and map the Shopify template
Go to Syndicate > TEMPLATES > API TEMPLATES, filter Channel to your Shopify channel, and open your store's template.
Click EDIT on a template. Fields marked with an asterisk (*) are mandatory, and some fields carry a RECOMMENDED tag. Use the search and filters at the top of the template to find fields.
Each row shows the TEMPLATE ATTRIBUTE, EXAMPLE VALUES, the MAPPED ATTRIBUTE and ACTION. Click MAP and choose a PXM attribute, a default value or a media stack position. A dash (—) means the field isn't mapped yet.
Click SYNC MY TEMPLATE whenever your store adds metafields or Shopify changes its schema. PXM also refreshes templates weekly.
Map the core fields listed below. When you click MAP, choose Map Product Attribute, Set Default Value, Map a Media Stack or Map File Attribute.
Click SAVE TO THIS TEMPLATE to save the mapping on this template, or APPLY TO ALL CHANNEL TEMPLATES to copy the same mapping pattern to the channel's other templates.
Pre-release view; your screen may differ slightly.
A template stays inactive until every starred (*) field is mapped. For a full walkthrough of the template editor, see Channel & Marketplace Templates in PXM.
Core Shopify fields
Handle*: the product's Shopify handle, from a dedicated PXM attribute. See Handles below.
Is Parent Product*: true for a parent product, false for a variant. A product without variants is a parent.
Title (RECOMMENDED): the Shopify product name. Include it in every Create and Partial update. It can come from a separate web title attribute if your PXM product name is a SKU or item ID.
Variant > Inventory Item > SKU: the SKU. Map it on every template; PXM uses it with the Handle to find the variant.
Description Html: the product description.
Vendor, Product Type, Tags, and Seo | Title and Seo | Description: optional; map them if you manage them in PXM.
Product Options and Variant Option Values: only for products with variants.
Variant Price, the compare-at price and Variant Inventory Quantity: map them if PXM should set price and starting inventory. For ongoing stock updates, check with your Pattern PXM CSM.
Status: Draft, Active or Archived, set on the parent. The parent's status controls whether the product page is live; Shopify ignores status sent from a variant.
Media | Original Source rows and Variant | Media | Original Source: your images. See Images below.
Metafields: your store's product and variant metafields, once the template is synced.
Give Shopify-only attributes clear names (for example "Shopify Handle") so content doesn't go to the wrong channel.
You only need to map the fields you plan to update from PXM. For a field that always takes the same value, use Set Default Value instead of a PXM attribute. If some product categories need different defaults or fields, use a separate template for each.
Step 5: Test, then roll out
Publish one or two test products: a Create on a new handle, sent with Status set to Draft, or a Partial update on one field of an existing product.
Confirm the job reaches HISTORY as Accepted, then check the product in Shopify admin.
Check the product in Shopify admin: title, description, variants, images, metafields, price and inventory.
Roll out once the test lands.
Publish to Shopify
In Products, select the products you want to send, then click PUBLISH TO CHANNEL (bottom right).
In Channel*, choose your Shopify channel. CONTINUE TO REVIEW stays disabled until a channel is picked.
Complete the publish options: the publish type (Create or Partial update); the store, if you have more than one; the template; and the media stack. Labels and order can vary by account.
Select only the fields you're changing. Fields you don't select stay as they are on the channel.
Review the content and fix any errors inline. You can filter the review columns by Required, Recommended or Errored, and use a column's pencil icon to edit down the column.
Submit the job, then follow it under Syndicate > JOBS.
Check the product in Shopify admin.
Handle and Is Parent Product are selected for you. Select Variant > Inventory Item > SKU yourself on every job.
Parents and variants are separate products in PXM. Publish the parent, the variants, or both, depending on what changed.
Create builds the product with the handle you send. Include Handle, Is Parent Product, SKU and Title, and send Status as Draft so a new product doesn't go live before its price, inventory and images are checked.
Partial update changes only the fields you select. Include Handle, Is Parent Product, SKU and Title, plus the fields you're changing.
Leave image fields out unless you're updating images. A selected image field with no value can clear images in Shopify.
Handles
Handles use lowercase letters, numbers and single hyphens, with no spaces (for example green-tea-500ml). Each must be unique in the store.
For products already in Shopify, export the handles from Shopify admin and import them into a dedicated PXM attribute before your first job.
Don't change a handle in PXM after a Create. PXM would create a second product. To rename a handle, change it in Shopify admin first, then in PXM, so they match.
If you have several storefronts, use a separate handle attribute and template mapping for each one.
Products, variants and options
The parent carries product-level content: Handle, Title, description, Vendor, Product Type, Tags, Status, Product Options and product images. Each variant carries its SKU, option values, price, inventory, variant image and variant metafields.
Map Product Options | Name (for example Size) on the parent and Variant | Option Values | Name and Value on each variant, in the right position (option 1, 2 or 3).
To add variants: give each option combination (for example Black / Medium) its own SKU, then set its option values, price and inventory, and optionally a variant image.
Keep option names and values consistent across products (for example always "Size", never "Sizes").
Products without variants: send them as a parent with one SKU, and map Variant Price and Variant Inventory Quantity. Leave variant option and variant media fields out, or variant tiles can appear on the storefront.
Changing a variant's SKU: Shopify rejects a new SKU with the same option value as an existing variant. Remove or deactivate the old SKU in Shopify first.
Color swatches need three steps: add the color as a variant option value, add the same value to the matching category metafield (for example Color), and map that metafield to the variant.
Metafields
Product and variant metafields can be mapped once they appear on the synced template. Which metafields can be sent can vary by account; check with your Pattern CSM. Metaobjects and list-type variant metafields can't be sent through the standard template, so test one product before a bulk job.
If a metafield is missing from the template, click SYNC MY TEMPLATE.
For storefront filters, use two attributes: a display attribute for the text shown on the product page, and a Pick List filter attribute that matches what Shopify filters on. Don't send a comma-separated string to a list metafield.
PDFs: create a Shopify metafield that accepts a list of URLs, sync the template, then put the PDF's PXM link in the attribute mapped to it. Keep PDFs out of the media stack.
Images
Add the images, in order, to your Shopify media stack with Edit Media.
On the template, map each Media | Original Source row to a media stack position, and set Media | Media Content Type (image, video or 3D model).
Map Variant | Media | Original Source to media stack position 1 for variant images. The first image for a variant is its main image.
Choose that media stack when you publish.
Pre-release view; your screen may differ slightly.
Use Media | Alt only for alt text, never for an image URL.
When a Partial update includes product images, send the full set of images you want on the product, in order. Leave image fields out of the job if you aren't changing images, and check the product in Shopify admin afterward. Replaced files can stay under Content > Files; delete them there if you don't need them.
Images arrive in Shopify with Pattern PXM file names rather than the original file names.
Each job can send about 10 product images, plus one image for each variant. If your store uses larger carousels, check with your Pattern PXM CSM during template setup.
Images aren't required to create or update a product. JPEG and PNG files work best.
Status, collections, price and inventory
Activate a new product once its price, inventory and images are checked, in Shopify admin or with a Partial update of Status.
Add products to manual collections in Shopify admin. Tags, Product Type and Vendor publish from PXM when they're mapped.
Values are sent exactly as they are in PXM; they aren't translated into other display values during publishing.
Shopify content doesn't flow back into PXM. To bring Shopify data into PXM, import it or use the Pattern PXM Open API.
If another system (such as an ERP) manages price or inventory in Shopify, leave those fields unmapped so PXM doesn't overwrite them.
Track your jobs
Syndicate > JOBS has four tabs: DRAFT, ACTION REQUIRED, IN PROGRESS and HISTORY. Filter Channel to your Shopify channel.
A new job can take up to about 10 minutes to appear. Click REFRESH (bottom right) to update the list.
IN PROGRESS means the job was sent and PXM is waiting on Shopify. "0 of N" means it's still processing.
HISTORY holds finished jobs. Expand a job to see PRODUCTS IN THIS JOB and each product's Item Status, or click DOWNLOAD REPORT for the detailed results.
ACTION REQUIRED holds jobs that Shopify rejected in full or in part. A rejected job shows REJECTED with FIX ISSUES: open it, correct the highlighted errors and resubmit.
A job is a snapshot of your content and template when it was created. If either changes afterwards, start a new job.
Job statuses are Accepted, Partial Accepted, Rejected, Canceled and API Failure. API Failure means PXM couldn't deliver the job to Shopify; it isn't a product rejection.
# OF PRODUCTS shows accepted out of total, for example 3/5.
Accepted isn't the same as correct. Shopify accepts incomplete data rather than rejecting it, so check the product in Shopify admin, especially images, variants and metafields.
If Pattern manages syndication for you, failed jobs can stay in IN PROGRESS while the Pattern team works on them.
If a job stays IN PROGRESS for more than about 2 hours, contact your Pattern CSM rather than waiting longer.
Pre-release view; your screen may differ slightly.
Common errors and fixes
First check the basics: the right channel and store, an active template, a green connection line, and Handle, Is Parent Product and SKU mapped, filled in and selected.
Connection fails or shows as invalid: check that an app version is released and the app is installed on your store, then contact your Pattern PXM CSM. See Shopify Connection Setup Instructions.
There's no access token to copy: Shopify moved custom apps to the Dev Dashboard and no longer shows access tokens. Follow Step 1, and your Pattern PXM CSM guides you through connecting.
Permission (403) error: the app is missing Admin API scopes. Add the scopes in Step 1, release a new version and reinstall the app.
Validation error on Handle or Is Parent Product: map and fill both fields. Is Parent Product must be true or false.
The wrong product changed, or a duplicate was created: the handle doesn't match Shopify, or it changed after the Create. Fix the handle in PXM to match Shopify, and delete the duplicate in Shopify admin.
A new SKU is rejected: it uses the same option value as an existing variant. Remove or deactivate the old SKU in Shopify first.
A product without variants shows variant tiles: leave variant option and variant media fields out of its jobs.
No price, or sold out, after a Create: map and send Variant Price and Variant Inventory Quantity.
Images disappeared after an update: a selected image field with no value can clear images. Resend the images, and leave image fields out unless you're updating them.
Media fails in Shopify admin even though the job succeeded: a PDF was in the media stack. Remove it and link it through a metafield.
A metafield isn't on the template: click SYNC MY TEMPLATE. If it still doesn't appear, contact your Pattern CSM.
A filter or list metafield is empty or wrong: a comma-separated string was sent. Map each value as its own field, with a Pick List attribute for the filter.
An empty color swatch: follow the three color swatch steps above.
A React error #441 on the publish screen: refresh the page or clear your browser cache.
Still stuck? Contact your Pattern CSM with the Job ID, the Shopify channel, an example handle and SKU, the exact error and when it happened.
FAQ
Why doesn't Shopify show an access token?
Shopify no longer shows access tokens for new custom apps. Create the app in the Dev Dashboard, and your Pattern PXM CSM guides you through connecting and authorizing your store.
Is there a Full update for Shopify?
Use Create for new products and Partial update for everything else. Partial update changes only the fields you select, so the rest of the product stays as it is. If you include images, the product's image set is replaced (see Images).
Where do I set the price for a product without variants?
On Variant Price. Shopify stores the price on a default variant even when a product has no variants.
Can one job update several Shopify stores?
Each store has its own channel, so run a job for each store, even when they share the same template.
Can I control the image order?
Product images follow their media stack position. Check the final carousel order in Shopify admin after your test job.
Is there a spreadsheet option?
Yes. A Shopify spreadsheet template under Syndicate > TEMPLATES > SPREADSHEET TEMPLATES produces a file in Shopify's import format, which you import in Shopify admin. It doesn't support bulk metafield updates, so use the API template whenever your store is connected.




