Créer des produits Shopify à partir d'une feuille Google
Intermédiaire
Ceci est unCRMworkflow d'automatisation du domainecontenant 13 nœuds.Utilise principalement des nœuds comme If, Graphql, GoogleSheets, ManualTrigger, SplitInBatches. Création en masse de produits Shopify à partir de Google Sheets et gestion des stocks
Prérequis
- •Informations d'identification Google Sheets API
Nœuds utilisés (13)
Catégorie
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
"id": "NO1Jrg2IkMTiquxb",
"meta": {
"instanceId": "eeebdb47cbe0bf5bc137514a863458fd2f9ab992b2ebeb2c6062100cdade81e7",
"templateCredsSetupCompleted": true
},
"name": "Create Shopify Products from Google Sheet",
"tags": [
{
"id": "cWC39BXOsHlOhwEC",
"name": "google-sheet",
"createdAt": "2025-06-11T02:39:38.743Z",
"updatedAt": "2025-06-11T02:39:38.743Z"
},
{
"id": "vMF1giVsFs9aUam0",
"name": "shopify",
"createdAt": "2025-06-11T02:39:27.034Z",
"updatedAt": "2025-06-11T02:39:27.034Z"
}
],
"nodes": [
{
"id": "0d76a8c0-fd78-47d8-899d-6a084317ab28",
"name": "Démarrer le workflow",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-540,
20
],
"parameters": {},
"typeVersion": 1
},
{
"id": "54ce8605-f90e-4666-85e5-cdbc0dba8077",
"name": "Google Sheet, Récupérer les produits",
"type": "n8n-nodes-base.googleSheets",
"position": [
-40,
20
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1164444657,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1IxiuRiu6XKBkEa1NIUebBWn73jIKUrgE9Sqj4XtQgBk/edit#gid=1164444657",
"cachedResultName": "Products"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1IxiuRiu6XKBkEa1NIUebBWn73jIKUrgE9Sqj4XtQgBk",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1IxiuRiu6XKBkEa1NIUebBWn73jIKUrgE9Sqj4XtQgBk/edit?usp=drivesdk",
"cachedResultName": "Shopify Test Store Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "GQE41DhnGDDJ8Hfq",
"name": "Google Sheets account"
}
},
"executeOnce": true,
"typeVersion": 4.6
},
{
"id": "c750de2c-71c4-4eed-a6d2-6f0fa8cfe114",
"name": "Shopify, ProductQuery",
"type": "n8n-nodes-base.graphql",
"position": [
500,
40
],
"parameters": {
"query": "query Products ($handle: String! ) {\n productByHandle(handle: $handle) {\n id\n title\n variants(first:20) {\n edges {\n node {\n id\n title\n sku\n price \n inventoryItem {\n id\n }\n }\n }\n }\n updatedAt\n createdAt\n }\n}",
"endpoint": "https://store99563.myshopify.com/admin/api/2025-04/graphql.json",
"variables": "={\n \"handle\" : \"{{ $json.slug }}\"\n}",
"authentication": "headerAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "mHtpN3u5aCWsxWih",
"name": "Shopify GraphQL Header Auth account"
}
},
"typeVersion": 1.1
},
{
"id": "2f350bac-d1d5-4d69-b18b-a2f802594599",
"name": "Si le produit existe",
"type": "n8n-nodes-base.if",
"position": [
740,
40
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "81228bbc-7111-40ec-8b37-3c9878945c4d",
"operator": {
"type": "object",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.data.productByHandle }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "fe218fdb-6c58-49d5-b3c2-b34bbf14b54c",
"name": "Shopify, CreateProduct",
"type": "n8n-nodes-base.graphql",
"position": [
960,
200
],
"parameters": {
"query": "mutation productCreate($product: ProductCreateInput!, $media: [CreateMediaInput!]) {\n productCreate(product: $product, media: $media) {\n product {\n id\n title\n descriptionHtml\n vendor\n productType\n status\n handle\n variants(first:10) {\n edges {\n node {\n id\n sku\n displayName\n inventoryItem {\n id\n sku\n tracked\n requiresShipping\n }\n }\n }\n }\n media(first: 10) {\n edges {\n node {\n alt\n mediaContentType\n status\n id\n preview {\n image {\n url\n }\n status\n }\n }\n }\n }\n options {\n id\n name\n position\n optionValues {\n id\n name\n hasVariants\n }\n }\n }\n userErrors {\n field\n message\n }\n }\n}",
"endpoint": "https://store99563.myshopify.com/admin/api/2025-04/graphql.json",
"variables": "={\n \"product\": {\n \"title\": \" {{ $('Loop Over Items').item.json.title }} \",\n \"descriptionHtml\": \"{{ $('Loop Over Items').item.json.description }}\",\n \"vendor\" : \"{{ $('Loop Over Items').item.json.company }}\",\n \"productType\": \"{{ $('Loop Over Items').item.json.category }}\",\n \"status\": \"{{ $('Loop Over Items').item.json.status }}\",\n \"handle\": \"{{ $('Loop Over Items').item.json.slug }}\"\n },\n \"media\" : [{\n \"alt\" : \"alt tag\",\n \"mediaContentType\" : \"IMAGE\",\n \"originalSource\" : \"https://placehold.co/800x600.png\"\n }]\n}",
"authentication": "headerAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "mHtpN3u5aCWsxWih",
"name": "Shopify GraphQL Header Auth account"
}
},
"typeVersion": 1.1
},
{
"id": "65032b74-36a8-46ee-b1a1-eaddcec9be1b",
"name": "Boucler sur les éléments",
"type": "n8n-nodes-base.splitInBatches",
"position": [
240,
20
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "099ed035-6a41-4abb-8bed-011d8a6e4cc5",
"name": "Shopify, GetLocations",
"type": "n8n-nodes-base.graphql",
"position": [
-280,
20
],
"parameters": {
"query": "query {\n locations(first:1, reverse:true) {\n edges {\n node {\n id\n name\n address {\n address1\n address2\n city\n country\n zip\n province\n }\n }\n }\n }\n}",
"endpoint": "https://store99563.myshopify.com/admin/api/2025-04/graphql.json",
"authentication": "headerAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "mHtpN3u5aCWsxWih",
"name": "Shopify GraphQL Header Auth account"
}
},
"executeOnce": true,
"typeVersion": 1.1
},
{
"id": "be29e4ea-51fb-4e8b-a2c2-b4b2e590fd2a",
"name": "Shopify, Enable InventoryTracking",
"type": "n8n-nodes-base.graphql",
"position": [
1160,
200
],
"parameters": {
"query": "mutation inventoryItemUpdate($id: ID!, $input: InventoryItemInput!) {\n inventoryItemUpdate(id: $id, input: $input) {\n inventoryItem {\n id\n unitCost {\n amount\n }\n tracked\n }\n userErrors {\n message\n }\n }\n}",
"endpoint": "https://store99563.myshopify.com/admin/api/2025-04/graphql.json",
"variables": "={\n \"id\": \"{{ $json.data.productCreate.product.variants.edges[0].node.inventoryItem.id }}\",\n \"input\": {\n \"tracked\": true,\n \"requiresShipping\": true\n }\n}",
"authentication": "headerAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "mHtpN3u5aCWsxWih",
"name": "Shopify GraphQL Header Auth account"
}
},
"typeVersion": 1.1
},
{
"id": "a22761aa-b55d-41a6-b853-d165ae9aa89c",
"name": "Shopify, Set InventoryLevel",
"type": "n8n-nodes-base.graphql",
"position": [
1360,
200
],
"parameters": {
"query": "mutation inventorySetOnHandQuantities($input: InventorySetOnHandQuantitiesInput!) {\n inventorySetOnHandQuantities(input: $input) {\n userErrors {\n field\n message\n }\n }\n}",
"endpoint": "=https://store99563.myshopify.com/admin/api/2025-04/graphql.json",
"variables": "={\n \"input\" : {\n \"reason\": \"correction\",\n \"setQuantities\" :[{\n \"inventoryItemId\":\"{{ $json.data.inventoryItemUpdate.inventoryItem.id }}\",\n \"locationId\": \"{{ $('Shopify, GetLocations').item.json.data.locations.edges[0].node.id }}\",\n \"quantity\" : {{ $('Loop Over Items').item.json.stock_on_hand }}\n }]\n }\n}",
"authentication": "headerAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "mHtpN3u5aCWsxWih",
"name": "Shopify GraphQL Header Auth account"
}
},
"typeVersion": 1.1
},
{
"id": "2b69fe40-d04e-4e60-b1e4-f19290b97edc",
"name": "Terminé",
"type": "n8n-nodes-base.noOp",
"position": [
460,
-220
],
"parameters": {},
"typeVersion": 1
},
{
"id": "44572b5d-e19b-48e3-b80d-6d6ec7ae0273",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-540,
-680
],
"parameters": {
"width": 800,
"height": 660,
"content": "## Create Products in Shopify from a Google Sheet\n\nThis workflow creates products in your Shopify store from a google sheet. It also enables inventory tracking and sets the quantity of an inventory item at your store's default location. \n\nThis is a great way to get test data into test or staging stores to try out apps, update template or try out new designs. \n\nThis Automation will only import new products. It will skip existing products if the slug matches an existing product's handle (Shopify's term for a slug).\n \n### Setup Notes\n\nThe Google Sheet has the following columns\ntitle - free text\ndescription - free text\ncompany - free text\ncategory - free text\nstatus - ACTIVE, DRAFT or ARCHIVE\nslug - used in the product url, text with no spaces, can also use hyphen.\nprice - sale price of the products\ncompare_at_price - compare at price for products\nsku - unique code for each product\nstock_on_hand - quantity of this item available for purchase.\n\nUse those labels in the first row of your sheet and N8N will create one object per row with the column names as object fields. \n\n### Update GraphQL nodes with your Shopify store URL\n\n1) Replace the URL in all GraphQL nodes with the URL for your Shopify store. \n2) These GraphQL requests all use the Shopify 2025-04 GraphQL Admin API. \n"
},
"typeVersion": 1
},
{
"id": "56b55c86-ec42-4154-a44f-c8cf50cbcc0f",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
420,
-40
],
"parameters": {
"width": 480,
"height": 340,
"content": "## Check to see if product exists\n"
},
"typeVersion": 1
},
{
"id": "1c3e5c1d-fad0-4059-9fe2-cc1ea3b9ca52",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
920,
60
],
"parameters": {
"width": 600,
"height": 400,
"content": "## Create the Product\n- Create product.\n- Enable inventory tracking \n- Set inventory quantity"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "292ad12e-25e6-495f-9361-f63996ac146a",
"connections": {
"0d76a8c0-fd78-47d8-899d-6a084317ab28": {
"main": [
[
{
"node": "099ed035-6a41-4abb-8bed-011d8a6e4cc5",
"type": "main",
"index": 0
}
]
]
},
"65032b74-36a8-46ee-b1a1-eaddcec9be1b": {
"main": [
[
{
"node": "2b69fe40-d04e-4e60-b1e4-f19290b97edc",
"type": "main",
"index": 0
}
],
[
{
"node": "c750de2c-71c4-4eed-a6d2-6f0fa8cfe114",
"type": "main",
"index": 0
}
]
]
},
"2f350bac-d1d5-4d69-b18b-a2f802594599": {
"main": [
[
{
"node": "65032b74-36a8-46ee-b1a1-eaddcec9be1b",
"type": "main",
"index": 0
}
],
[
{
"node": "fe218fdb-6c58-49d5-b3c2-b34bbf14b54c",
"type": "main",
"index": 0
}
]
]
},
"099ed035-6a41-4abb-8bed-011d8a6e4cc5": {
"main": [
[
{
"node": "54ce8605-f90e-4666-85e5-cdbc0dba8077",
"type": "main",
"index": 0
}
]
]
},
"c750de2c-71c4-4eed-a6d2-6f0fa8cfe114": {
"main": [
[
{
"node": "2f350bac-d1d5-4d69-b18b-a2f802594599",
"type": "main",
"index": 0
}
]
]
},
"fe218fdb-6c58-49d5-b3c2-b34bbf14b54c": {
"main": [
[
{
"node": "be29e4ea-51fb-4e8b-a2c2-b4b2e590fd2a",
"type": "main",
"index": 0
}
]
]
},
"a22761aa-b55d-41a6-b853-d165ae9aa89c": {
"main": [
[
{
"node": "65032b74-36a8-46ee-b1a1-eaddcec9be1b",
"type": "main",
"index": 0
}
]
]
},
"54ce8605-f90e-4666-85e5-cdbc0dba8077": {
"main": [
[
{
"node": "65032b74-36a8-46ee-b1a1-eaddcec9be1b",
"type": "main",
"index": 0
}
]
]
},
"be29e4ea-51fb-4e8b-a2c2-b4b2e590fd2a": {
"main": [
[
{
"node": "a22761aa-b55d-41a6-b853-d165ae9aa89c",
"type": "main",
"index": 0
}
]
]
}
}
}Foire aux questions
Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Intermédiaire - CRM
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Chorus -> HubSpot - Transfert des résumés d'appels
Transmission automatisée des résumés d'appels de Chorus AI vers HubSpot CRM
If
Code
Filter
+
If
Code
Filter
18 NœudsRivers Colyer
CRM
Génération de propositions_Enregistrement automatique des brouillons
Utiliser GPT-4o d'Azure pour générer des propositions commerciales et les sauvegarder comme brouillon Gmail depuis Sheets
If
Code
Gmail
+
If
Code
Gmail
16 NœudsRahul Joshi
CRM
Bloc de résumé d'article WordPress généré par IA
Bloc de résumé d'article WordPress généré par IA
If
Set
Slack
+
If
Set
Slack
32 NœudsDataki
Intelligence Artificielle
Facebook页面评论gestionbot:回复、suppression、封禁etnotification
AI驱动deFacebook评论gestion:automatique回复、suppression、封禁etnotification
If
Set
Code
+
If
Set
Code
59 NœudsSpaGreen Creative
Réseaux sociaux
基于AIde潜在client信息增强(Bright Data MCPetGoogle Sheets)
基于AIde潜在client信息增强:utilisationBright Data MCPetGoogle Sheets
If
Set
Wait
+
If
Set
Wait
51 NœudsCyril Nicko Gaspar
Ventes
Préparation automatique de la refinement agile avec Gmail, OpenAI et Google Sheets
Utiliser Gmail, OpenAI et Google Sheets pour automatiser la préparation du raffinement Agile
If
Set
Gmail
+
If
Set
Gmail
51 NœudsWillemijn
Produit
Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds13
Catégorie1
Types de nœuds7
Description de la difficulté
Auteur
Richard Uren
@elrichoLiens externes
Voir sur n8n.io →
Partager ce workflow