Menu
productDuplicate
Duplicates a product. If you need to duplicate a large product, such as one that has many variants that are active at several locations, you might encounter timeout errors.
Use it in a workflow
- Add a step and choose the Shopify connector.
- Pick the productDuplicate action (under Product).
- Fill in the fields below, then reference the result from later steps as
{{productduplicate.response.data}}.
Query
This is the mutation the action sends by default. Edit it in the step's Query field to change which fields come back.
mutation ProductDuplicate($productId: ID!, $newTitle: String!, $newStatus: ProductStatus, $includeImages: Boolean, $includeTranslations: Boolean, $synchronous: Boolean) {
productDuplicate(
productId: $productId
newTitle: $newTitle
newStatus: $newStatus
includeImages: $includeImages
includeTranslations: $includeTranslations
synchronous: $synchronous
) {
imageJob {
done
id
query {
appDiscountTypes
availableBackupRegions
availableCarrierServices
availableLocales
backupRegion
businessEntities
catalogOperations
collectionConditionMetafieldDefinitions
collectionRulesConditions
consentPolicyRegions
currentAppInstallation
currentStaffMember
deliveryPromiseSettings
financeAppAccessPolicy
financeKycInformation
fulfillmentConstraintRules
giftCardConfiguration
inventoryProperties
locationsAvailableForDeliveryProfiles
metafieldDefinitionTypes
onlineStore
pendingOrdersCount
primaryMarket
privacySettings
publicApiVersions
serverPixel
shop
shopBillingPreferences
shopifyPaymentsAccount
storeCreditConfiguration
taxonomy
}
}
newProduct {
availablePublicationsCount {
count
precision
}
bodyHtml
bundleConsolidatedOptions {
name
selections
}
category {
ancestorIds
childrenIds
fullName
id
isArchived
isLeaf
isRoot
level
name
parentId
}
combinedListing {
parentProduct
}
combinedListingRole
compareAtPriceRange {
maxVariantCompareAtPrice
minVariantCompareAtPrice
}
createdAt
customProductType
defaultCursor
descriptionHtml
descriptionPlainSummary
featuredImage {
altText
height
id
originalSrc
src
thumbhash
width
}
featuredMedia {
alt
id
mediaContentType
mediaErrors
mediaWarnings
preview
status
}
feedback {
appFeedback
details
summary
}
giftCardSettings {
crossCurrencyRedeemable
issuanceCurrency
}
giftCardTemplateSuffix
handle
hasOnlyDefaultVariant
hasOutOfStockVariants
hasVariantsThatRequiresComponents
id
isGiftCard
legacyResourceId
mediaCount {
count
precision
}
onlineStorePreviewUrl
onlineStoreUrl
priceRange {
maxVariantPrice
minVariantPrice
}
priceRangeV2 {
maxVariantPrice
minVariantPrice
}
productCategory {
productTaxonomyNode
}
productComponentsCount {
count
precision
}
productType
publishedAt
publishedOnCurrentChannel
publishedOnCurrentPublication
requiresSellingPlan
resourcePublicationOnCurrentPublication {
isPublished
publication
publishDate
publishable
}
sellingPlanGroupCount
sellingPlanGroupsCount {
count
precision
}
seo {
description
title
}
standardizedProductType {
productTaxonomyNode
}
status
storefrontId
tags
templateSuffix
title
totalInventory
totalVariants
tracksInventory
updatedAt
variantsCount {
count
precision
}
vendor
}
productDuplicateOperation {
id
newProduct {
availablePublicationsCount
bodyHtml
bundleConsolidatedOptions
category
combinedListing
combinedListingRole
compareAtPriceRange
createdAt
customProductType
defaultCursor
descriptionHtml
descriptionPlainSummary
featuredImage
featuredMedia
feedback
giftCardSettings
giftCardTemplateSuffix
handle
hasOnlyDefaultVariant
hasOutOfStockVariants
hasVariantsThatRequiresComponents
id
isGiftCard
legacyResourceId
mediaCount
onlineStorePreviewUrl
onlineStoreUrl
priceRange
priceRangeV2
productCategory
productComponentsCount
productType
publishedAt
publishedOnCurrentChannel
publishedOnCurrentPublication
requiresSellingPlan
resourcePublicationOnCurrentPublication
sellingPlanGroupCount
sellingPlanGroupsCount
seo
standardizedProductType
status
storefrontId
tags
templateSuffix
title
totalInventory
totalVariants
tracksInventory
updatedAt
variantsCount
vendor
}
product {
availablePublicationsCount
bodyHtml
bundleConsolidatedOptions
category
combinedListing
combinedListingRole
compareAtPriceRange
createdAt
customProductType
defaultCursor
descriptionHtml
descriptionPlainSummary
featuredImage
featuredMedia
feedback
giftCardSettings
giftCardTemplateSuffix
handle
hasOnlyDefaultVariant
hasOutOfStockVariants
hasVariantsThatRequiresComponents
id
isGiftCard
legacyResourceId
mediaCount
onlineStorePreviewUrl
onlineStoreUrl
priceRange
priceRangeV2
productCategory
productComponentsCount
productType
publishedAt
publishedOnCurrentChannel
publishedOnCurrentPublication
requiresSellingPlan
resourcePublicationOnCurrentPublication
sellingPlanGroupCount
sellingPlanGroupsCount
seo
standardizedProductType
status
storefrontId
tags
templateSuffix
title
totalInventory
totalVariants
tracksInventory
updatedAt
variantsCount
vendor
}
status
userErrors {
field
message
}
}
shop {
accountOwner {
accountType
active
email
exists
firstName
id
initials
isShopOwner
lastName
locale
name
phone
privateData
}
alerts {
action
description
}
allProductCategories {
productTaxonomyNode
}
allProductCategoriesList {
ancestorIds
childrenIds
fullName
id
isArchived
isLeaf
isRoot
level
name
parentId
}
analyticsToken
billingAddress {
address1
address2
city
company
coordinatesValidated
country
countryCode
countryCodeV2
firstName
formattedArea
id
lastName
latitude
longitude
name
phone
province
provinceCode
zip
}
channelDefinitionsForInstalledChannels {
channelDefinitions
channelName
}
checkoutApiSupported
contactEmail
countriesInShippingZones {
countryCodes
includeRestOfWorld
}
createdAt
currencyCode
currencyFormats {
moneyFormat
moneyInEmailsFormat
moneyWithCurrencyFormat
moneyWithCurrencyInEmailsFormat
}
customerAccounts
customerAccountsV2 {
customerAccountsVersion
loginLinksVisibleOnStorefrontAndCheckout
loginRequiredAtCheckout
url
}
description
domains {
host
id
localization
marketWebPresence
sslEnabled
url
}
email
enabledPresentmentCurrencies
entitlements {
b2b
markets
}
features {
avalaraAvatax
branding
bundles
buyerExperienceDepositEnabled
captcha
captchaExternalDomains
cartTransform
deliveryProfiles
directConnectionCatalogAssignmentEnabled
dynamicRemarketing
eligibleForSubscriptionMigration
eligibleForSubscriptions
giftCards
harmonizedSystemCode
internationalDomains
internationalPriceOverrides
internationalPriceRules
legacySubscriptionGatewayEnabled
liveView
marketDrivenShipping
onboardingVisual
paypalExpressSubscriptionGatewayStatus
reports
sellsSubscriptions
shopifyPlus
showMetrics
storefront
subCountryMarketsEnabled
unifiedMarkets
usingShopifyBalance
}
fulfillmentServices {
callbackUrl
fulfillmentOrdersOptIn
handle
id
inventoryManagement
location
requiresShippingMethod
serviceName
trackingSupport
type
}
ianaTimezone
id
limitedPendingOrderCount {
atMax
count
}
marketingSmsConsentEnabledAtCheckout
merchantApprovalSignals {
identityVerified
verifiedByShopify
verifiedByShopifyTier
}
myshopifyDomain
name
navigationSettings {
id
title
url
}
orderNumberFormatPrefix
orderNumberFormatSuffix
paymentSettings {
supportedDigitalWallets
}
plan {
displayName
partnerDevelopment
publicDisplayName
shopifyPlus
}
primaryDomain {
host
id
localization
marketWebPresence
sslEnabled
url
}
publicationCount
resourceLimits {
locationLimit
maxProductOptions
maxProductVariants
redirectLimitReached
}
richTextEditorUrl
searchFilters {
productAvailability
}
setupRequired
shipsToCountries
shopAddress {
address1
address2
city
company
coordinatesValidated
country
countryCode
countryCodeV2
firstName
formattedArea
id
lastName
latitude
longitude
name
phone
province
provinceCode
zip
}
shopOwnerName
shopPolicies {
body
createdAt
id
title
type
updatedAt
url
}
storefrontUrl
taxShipping
taxesIncluded
timezoneAbbreviation
timezoneOffset
timezoneOffsetMinutes
transactionalSmsDisabled
unitSystem
updatedAt
url
weightUnit
}
userErrors {
field
message
}
}
}
Variables
Pass these as a JSON object in the step's Variables field.
{
"productId": "string",
"newTitle": "string",
"newStatus": "ACTIVE",
"includeImages": false,
"includeTranslations": false,
"synchronous": false
}
Response
Read the result with {{productduplicate.response.data.data.productDuplicate}}. If the API returns errors, the step fails and they are at {{productduplicate.response.data.errors}}.
Need more? See the Shopify guide for connection setup and behaviour shared by every action.
Was this page helpful?