AutomationFlowsAI & RAG › E-commerce Auto Sync — Shopify ↔ Amazon + Claude Descriptions

E-commerce Auto Sync — Shopify ↔ Amazon + Claude Descriptions

E-Commerce Auto Sync — Shopify ↔ Amazon + Claude Descriptions. Uses shopify, httpRequest, googleSheets. Scheduled trigger; 13 nodes.

Cron / scheduled trigger★★★★☆ complexity13 nodesShopifyHTTP RequestGoogle Sheets
AI & RAG Trigger: Cron / scheduled Nodes: 13 Complexity: ★★★★☆ Added:

This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "E-Commerce Auto Sync \u2014 Shopify \u2194 Amazon + Claude Descriptions",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 2
            }
          ]
        }
      },
      "id": "b2c3d4e5-0001-4f5a-9b0c-222222222201",
      "name": "Schedule \u2014 Every 2 Hours",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        240,
        340
      ]
    },
    {
      "parameters": {
        "resource": "product",
        "operation": "getAll",
        "returnAll": false,
        "limit": 50,
        "options": {
          "fields": "id,title,body_html,variants,inventory_quantity,sku,tags"
        }
      },
      "id": "b2c3d4e5-0002-4f5a-9b0c-222222222202",
      "name": "Shopify \u2014 Fetch Products",
      "type": "n8n-nodes-base.shopify",
      "typeVersion": 1,
      "position": [
        480,
        240
      ],
      "credentials": {
        "shopifyApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "getAll",
        "returnAll": false,
        "limit": 50,
        "options": {
          "marketplaceIds": "={{ $env.AMAZON_MARKETPLACE_ID }}"
        }
      },
      "id": "b2c3d4e5-0003-4f5a-9b0c-222222222203",
      "name": "Amazon SP-API \u2014 Fetch Listings",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        480,
        440
      ],
      "parameters_extra_note": "Uses Amazon Selling Partner API via signed HTTP requests"
    },
    {
      "parameters": {
        "mode": "combine",
        "mergeByFields": {
          "values": [
            {
              "field1": "sku",
              "field2": "sellerSku"
            }
          ]
        },
        "joinMode": "enrichInput1",
        "options": {}
      },
      "id": "b2c3d4e5-0004-4f5a-9b0c-222222222204",
      "name": "Merge \u2014 Match SKU Inventory",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3,
      "position": [
        720,
        340
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "inventory-mismatch",
              "leftValue": "={{ $json.variants[0].inventory_quantity }}",
              "rightValue": "={{ $json.fulfillableQuantity }}",
              "operator": {
                "type": "number",
                "operation": "notEquals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "b2c3d4e5-0005-4f5a-9b0c-222222222205",
      "name": "IF \u2014 Inventory Mismatch?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        960,
        340
      ]
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "language": "python",
        "pythonCode": "items = _input.all()\nresults = []\nfor item in items:\n    shopify_qty = item.json.get('variants', [{}])[0].get('inventory_quantity', 0)\n    amazon_qty = item.json.get('fulfillableQuantity', 0)\n    master_qty = min(shopify_qty, amazon_qty) if shopify_qty and amazon_qty else max(shopify_qty, amazon_qty)\n    \n    results.append({\n        'json': {\n            'sku': item.json.get('sku', item.json.get('sellerSku', '')),\n            'title': item.json.get('title', ''),\n            'shopify_qty': shopify_qty,\n            'amazon_qty': amazon_qty,\n            'synced_qty': master_qty,\n            'shopify_product_id': item.json.get('id', ''),\n            'amazon_asin': item.json.get('asin', ''),\n            'needs_description': not item.json.get('body_html', '').strip() or len(item.json.get('body_html', '')) < 100\n        }\n    })\nreturn results"
      },
      "id": "b2c3d4e5-0006-4f5a-9b0c-222222222206",
      "name": "Python \u2014 Compute Master Inventory",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1200,
        240
      ]
    },
    {
      "parameters": {
        "resource": "product",
        "operation": "update",
        "productId": "={{ $json.shopify_product_id }}",
        "updateFields": {
          "variants": [
            {
              "inventory_quantity": "={{ $json.synced_qty }}"
            }
          ]
        }
      },
      "id": "b2c3d4e5-0007-4f5a-9b0c-222222222207",
      "name": "Shopify \u2014 Update Inventory",
      "type": "n8n-nodes-base.shopify",
      "typeVersion": 1,
      "position": [
        1440,
        180
      ],
      "credentials": {
        "shopifyApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "PATCH",
        "url": "=https://sellingpartnerapi.amazon.com/listings/2021-08-01/items/{{ $env.AMAZON_SELLER_ID }}/{{ $json.sku }}",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={ \"productType\": \"PRODUCT\", \"patches\": [{ \"op\": \"replace\", \"path\": \"/attributes/fulfillment_availability\", \"value\": [{ \"fulfillment_channel_code\": \"DEFAULT\", \"quantity\": {{ $json.synced_qty }} }] }] }",
        "options": {}
      },
      "id": "b2c3d4e5-0008-4f5a-9b0c-222222222208",
      "name": "Amazon \u2014 Update Inventory",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1440,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "needs-desc",
              "leftValue": "={{ $json.needs_description }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "b2c3d4e5-0009-4f5a-9b0c-222222222209",
      "name": "IF \u2014 Needs AI Description?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1200,
        480
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.anthropic.com/v1/messages",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "anthropic-version",
              "value": "2023-06-01"
            },
            {
              "name": "content-type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"model\": \"claude-sonnet-4-20250514\",\n  \"max_tokens\": 1024,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Write a high-converting, SEO-optimized product description for global e-commerce. Product: {{ $json.title }}. SKU: {{ $json.sku }}. Include: compelling headline, 3 bullet benefits, technical specs paragraph, and CTA. Output HTML suitable for Shopify.\"\n    }\n  ]\n}",
        "options": {}
      },
      "id": "b2c3d4e5-0010-4f5a-9b0c-222222222210",
      "name": "Claude API \u2014 Generate Description",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1440,
        480
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "language": "python",
        "pythonCode": "items = _input.all()\nresults = []\nfor item in items:\n    content_blocks = item.json.get('content', [])\n    description = ''\n    for block in content_blocks:\n        if block.get('type') == 'text':\n            description = block.get('text', '')\n            break\n    \n    results.append({\n        'json': {\n            'sku': item.json.get('sku', ''),\n            'shopify_product_id': item.json.get('shopify_product_id', ''),\n            'generated_description': description,\n            'sync_status': 'complete',\n            'synced_at': '{{ $now.toISO() }}'\n        }\n    })\nreturn results"
      },
      "id": "b2c3d4e5-0011-4f5a-9b0c-222222222211",
      "name": "Python \u2014 Parse Claude Response",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1680,
        480
      ]
    },
    {
      "parameters": {
        "resource": "product",
        "operation": "update",
        "productId": "={{ $json.shopify_product_id }}",
        "updateFields": {
          "body_html": "={{ $json.generated_description }}"
        }
      },
      "id": "b2c3d4e5-0012-4f5a-9b0c-222222222212",
      "name": "Shopify \u2014 Publish AI Description",
      "type": "n8n-nodes-base.shopify",
      "typeVersion": 1,
      "position": [
        1920,
        480
      ],
      "credentials": {
        "shopifyApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "={{ $env.SYNC_LOG_SHEET_ID }}",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "SyncLog",
          "mode": "name"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "sku": "={{ $json.sku }}",
            "synced_qty": "={{ $json.synced_qty }}",
            "sync_status": "={{ $json.sync_status || 'inventory_synced' }}",
            "synced_at": "={{ $now.toISO() }}"
          }
        },
        "options": {}
      },
      "id": "b2c3d4e5-0013-4f5a-9b0c-222222222213",
      "name": "Google Sheets \u2014 Log Sync",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        1680,
        240
      ]
    }
  ],
  "connections": {
    "Schedule \u2014 Every 2 Hours": {
      "main": [
        [
          {
            "node": "Shopify \u2014 Fetch Products",
            "type": "main",
            "index": 0
          },
          {
            "node": "Amazon SP-API \u2014 Fetch Listings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Shopify \u2014 Fetch Products": {
      "main": [
        [
          {
            "node": "Merge \u2014 Match SKU Inventory",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Amazon SP-API \u2014 Fetch Listings": {
      "main": [
        [
          {
            "node": "Merge \u2014 Match SKU Inventory",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge \u2014 Match SKU Inventory": {
      "main": [
        [
          {
            "node": "IF \u2014 Inventory Mismatch?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF \u2014 Inventory Mismatch?": {
      "main": [
        [
          {
            "node": "Python \u2014 Compute Master Inventory",
            "type": "main",
            "index": 0
          },
          {
            "node": "IF \u2014 Needs AI Description?",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Python \u2014 Compute Master Inventory": {
      "main": [
        [
          {
            "node": "Shopify \u2014 Update Inventory",
            "type": "main",
            "index": 0
          },
          {
            "node": "Amazon \u2014 Update Inventory",
            "type": "main",
            "index": 0
          },
          {
            "node": "Google Sheets \u2014 Log Sync",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF \u2014 Needs AI Description?": {
      "main": [
        [
          {
            "node": "Claude API \u2014 Generate Description",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Claude API \u2014 Generate Description": {
      "main": [
        [
          {
            "node": "Python \u2014 Parse Claude Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Python \u2014 Parse Claude Response": {
      "main": [
        [
          {
            "node": "Shopify \u2014 Publish AI Description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": ""
  },
  "staticData": null,
  "tags": [
    {
      "name": "ecommerce",
      "createdAt": "2026-06-08T00:00:00.000Z",
      "updatedAt": "2026-06-08T00:00:00.000Z",
      "id": "tag-ecommerce"
    },
    {
      "name": "shopify-amazon",
      "createdAt": "2026-06-08T00:00:00.000Z",
      "updatedAt": "2026-06-08T00:00:00.000Z",
      "id": "tag-shopify-amazon"
    }
  ],
  "triggerCount": 1,
  "updatedAt": "2026-06-08T12:00:00.000Z",
  "versionId": "wf2-v1.0.0",
  "meta": {
    "templateCredsSetupCompleted": false
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

E-Commerce Auto Sync — Shopify ↔ Amazon + Claude Descriptions. Uses shopify, httpRequest, googleSheets. Scheduled trigger; 13 nodes.

Source: https://github.com/36412749-collab/n8n-ai-agent-scraping-booster/blob/main/n8n_workflow_2_ecommerce_auto_sync.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Linkedin Workflow. Uses httpRequest, googleSheets. Scheduled trigger; 39 nodes.

HTTP Request, Google Sheets
AI & RAG

BSW Growth Agent · Lite (Free Tier). Uses googleSheets, googleDrive, httpRequest, gmail. Scheduled trigger; 21 nodes.

Google Sheets, Google Drive, HTTP Request +1
AI & RAG

Founder's Discovery Engine. Uses googleSheets, googleDrive, httpRequest, gmail. Scheduled trigger; 21 nodes.

Google Sheets, Google Drive, HTTP Request +1
AI & RAG

R25 | The Ultimate Publishing Agent. Uses scheduleTrigger, googleSheets, httpRequest, stickyNote. Scheduled trigger; 15 nodes.

Google Sheets, HTTP Request
AI & RAG

This workflow is a plug-and-play customer contact automation system designed for Magento 2 store owners, marketers, and CRM teams. It fetches customer records registered within the last 24 hours (from

Google Contacts, Google Sheets, HTTP Request