Shopify-Produkte aus Google Tabellen erstellen

Fortgeschritten

Dies ist ein CRM-Bereich Automatisierungsworkflow mit 13 Nodes. Hauptsächlich werden If, Graphql, GoogleSheets, ManualTrigger, SplitInBatches und andere Nodes verwendet. Batch-Erstellung von Shopify-Produkten aus Google Tabellen mit Bestandsverwaltung

Voraussetzungen
  • Google Sheets API-Anmeldedaten
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "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": "Workflow starten",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -540,
        20
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "54ce8605-f90e-4666-85e5-cdbc0dba8077",
      "name": "Google Tabellenblatt, Produkte abrufen",
      "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": "Wenn Produkt existiert",
      "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": "Elemente durchlaufen",
      "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, Setzen 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": "Abgeschlossen",
      "type": "n8n-nodes-base.noOp",
      "position": [
        460,
        -220
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "44572b5d-e19b-48e3-b80d-6d6ec7ae0273",
      "name": "Notizzettel",
      "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": "Notizzettel1",
      "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": "Notizzettel2",
      "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
          }
        ]
      ]
    },
    "Shopify, Set InventoryLevel": {
      "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": "Shopify, Set InventoryLevel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Fortgeschritten - Kundenbeziehungsmanagement

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Fortgeschritten
Anzahl der Nodes13
Kategorie1
Node-Typen7
Schwierigkeitsbeschreibung

Für erfahrene Benutzer, mittelkomplexe Workflows mit 6-15 Nodes

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34