This workflow corresponds to n8n.io template #8179 — we link there as the canonical source.
This workflow follows the Agent → Googlegemini 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 →
{
"id": "txsxi3EjP4dwobow",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Shopify AI Product Description Generation & Translation",
"tags": [],
"nodes": [
{
"id": "f1434b43-9e37-4d44-8a46-9b532bc0d0cf",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-1104,
32
],
"parameters": {},
"typeVersion": 1
},
{
"id": "c47ad83d-995d-4b15-bad2-f2e5dabcdd4b",
"name": "Get many products",
"type": "n8n-nodes-base.shopify",
"position": [
-896,
32
],
"parameters": {
"limit": 2,
"resource": "product",
"operation": "getAll",
"authentication": "accessToken",
"additionalFields": {}
},
"credentials": {
"shopifyAccessTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "4fc52ebc-edf9-4fec-b4fc-212670823194",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
240,
-64
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "body_html",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "body_html",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "vendor",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "vendor",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "product_type",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "product_type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "created_at",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "created_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "handle",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "handle",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "updated_at",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "updated_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "published_at",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "published_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "template_suffix",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "template_suffix",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "published_scope",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "published_scope",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tags",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "tags",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "admin_graphql_api_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "admin_graphql_api_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "variants",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "variants",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "options",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "options",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "images",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "images",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "image",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "image",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1IFS_wfLKgEtjA5ltPhLApGDltKH6d2nHdri6NONkiZE/edit#gid=0",
"cachedResultName": "Hoja 1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1IFS_wfLKgEtjA5ltPhLApGDltKH6d2nHdri6NONkiZE",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1IFS_wfLKgEtjA5ltPhLApGDltKH6d2nHdri6NONkiZE/edit?usp=drivesdk",
"cachedResultName": "ia products details output"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "9eeaafab-0d88-4f1d-90f7-fa8136c8397a",
"name": "Analyze image",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
-688,
32
],
"parameters": {
"text": "=Analyze the provided image and return an objective, clear, and detailed description of the product shown.\n\nRequirements:\n\nFocus only on the main product (ignore background or decorations).\n\nDescribe only what is visible and verifiable in the image.\n\nInclude details about:\n\nProduct type (shoe, bag, cap, t-shirt).\n\nApparent materials (leather, fabric, canvas, knit, etc.).\n\nMain and secondary colors.\n\nVisible patterns or prints (plain, stripes, logos, embroidery).\n\nDistinctive elements (closure, laces, buckles, pockets, stitching, sole).\n\nUse a descriptive and neutral tone:\n\nExamples: \u201csmooth finish\u201d, \u201cwith top closure\u201d, \u201cwith visible stitching\u201d.\n\nDo not invent information that is not visible in the image (do not assume size, brand, comfort, or usage).\n\nWrite the answer in a short and concise paragraph (3\u20135 sentences).",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-flash-lite",
"cachedResultName": "models/gemini-2.5-flash-lite"
},
"options": {},
"resource": "image",
"imageUrls": "={{ $json.images[0].src }}",
"operation": "analyze"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "640eda46-69f2-4482-bbe4-8c99f5348e4a",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-416,
-64
],
"parameters": {
"text": "=AI Generated Vision Description of Product: Analyze the image at the URL: {{ $('Get many products').item.json.images[0].src }}\n\nBrand: {{ $('Get many products').item.json.vendor }}\nProduct Name: {{ $('Get many products').item.json.title }}\nUser Provided Description: {{ $('Get many products').item.json.body_html }}\nProduct Type: {{ $('Get many products').item.json.product_type }}\n\nVision Description: {{ $json.content.parts[0].text }}",
"options": {
"systemMessage": "=<system_prompt>\nYOU ARE A PROFESSIONAL MULTILINGUAL E-COMMERCE COPYWRITING AI FOR FOOTWEAR. GENERATE PRODUCT COPY FOR **ES, DE, EN, FR, IT, PT**.\n\nSOURCES (priority):\n1) Product name \u2192 category/keywords/core attributes. \n2) User draft \u2192 tone and context. \n3) Vision description (analyzed) \u2192 visible traits (apparent materials, colors, finishes, sole, closure). \n\nGENERAL RULES & ANTI-HALLUCINATION: \n- Do not invent technologies, materials, sizes, or brand if not provided in the sources. \n- Professional online shoe store tone; conversion-oriented, without exaggerations. \n- HTML allowed ONLY in `shopify_description`: <div>, <h2>, <h3>, <p>, <ul>, <ol>, <li>, <strong>, <em>, <br>. No <script>, no inline styles, no tables. \n- Intro paragraph + 3\u20136 bullets max; titles \u2264 80 characters. \n- Do not include SKU, locator, or other internal metadata. \n\nFOOTWEAR TERMINOLOGY (apply per language): \n- **DE**: Sneaker / Turnschuh, Obermaterial (tige / upper), Sohle / Au\u00dfensohle, Schn\u00fcrung / Klettverschluss, Stiefel (boots), Sandalen, Slipper. \n- **EN**: sneaker / shoe, upper, outsole, lace-up / closure, boots, sandals, espadrilles, dress shoes, casual shoes, slip-ons. \n- **FR**: basket / chaussure, tige, semelle ext\u00e9rieure, lacets / fermeture, bottes, sandales, espadrilles, chaussures habill\u00e9es, souliers, mules. \n- **IT**: sneaker / scarpa, tomaia, suola / suola esterna, chiusura / lacci, stivali, sandali, espadrillas, scarpe eleganti, ballerine, sabot. \n- **PT**: t\u00e9nis / sapato, cabedal, sola / sola exterior, fecho / atacadores, botas, sand\u00e1lias, alpargatas, sapatos de vestir, mocassins, chinelos. \n\nHANDLES/SLUGS PER LANGUAGE: \n- Lowercase; words separated with `-`; no symbols; normalize accents. \n- DE: \u00e4\u2192ae, \u00f6\u2192oe, \u00fc\u2192ue, \u00df\u2192ss; FR/IT/PT: remove diacritics; ES: \u00e1\u2192a, \u00e9\u2192e, \u00ed\u2192i, \u00f3\u2192o, \u00fa\u2192u, \u00f1\u2192n. \n- Max. 80 characters. Avoid repeating the brand in the handle unless it is part of the product name. \n\nSTRICT OUTPUT FORMAT (mandatory): \n\nReturn **exclusively** a JSON object with no text before or after. \nDo not wrap the response inside any other key (e.g. do not use \"output\" or similar). \nThe root object must contain exactly 6 keys: es, de, en, fr, it, pt. \nEach language must include exactly 3 keys: shopify_product_name, shopify_description, handle. \nUse double quotes for JSON. Inside HTML strings, use single quotes for attributes. \nReturn the JSON minified on a single line (no line breaks, no Markdown). \nIt is forbidden to use different keys (e.g. not \"shop_description\"). \nIf some data is missing, return an empty string, but always keep the key. \n\nGOAL: RETURN **EXCLUSIVELY** THIS MULTILINGUAL JSON:\n{\n \"es\": {\"shopify_product_name\": \"...\", \"shopify_description\": \"...\", \"handle\": \"...\"},\n \"de\": {\"shopify_product_name\": \"...\", \"shopify_description\": \"...\", \"handle\": \"...\"},\n \"en\": {\"shopify_product_name\": \"...\", \"shopify_description\": \"...\", \"handle\": \"...\"},\n \"fr\": {\"shopify_product_name\": \"...\", \"shopify_description\": \"...\", \"handle\": \"...\"},\n \"it\": {\"shopify_product_name\": \"...\", \"shopify_description\": \"...\", \"handle\": \"...\"},\n \"pt\": {\"shopify_product_name\": \"...\", \"shopify_description\": \"...\", \"handle\": \"...\"}\n}\n</system_prompt>\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "97c2a425-b417-437f-a2a4-667d0381637c",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-432,
240
],
"parameters": {
"options": {
"temperature": 0.4,
"maxOutputTokens": 4048
}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "cbfc55dc-3109-4c8d-9387-8819f30239f2",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-256,
240
],
"parameters": {
"jsonSchemaExample": "{\n \"es\": {\"shopify_product_name\": \"\", \"shopify_description\": \"\", \"handle\": \"\"},\n \"de\": {\"shopify_product_name\": \"\", \"shopify_description\": \"\", \"handle\": \"\"},\n \"en\": {\"shopify_product_name\": \"\", \"shopify_description\": \"\", \"handle\": \"\"},\n \"fr\": {\"shopify_product_name\": \"\", \"shopify_description\": \"\", \"handle\": \"\"},\n \"it\": {\"shopify_product_name\": \"\", \"shopify_description\": \"\", \"handle\": \"\"},\n \"pt\": {\"shopify_product_name\": \"\", \"shopify_description\": \"\", \"handle\": \"\"}\n}"
},
"typeVersion": 1.3
},
{
"id": "d6e790a0-c1fa-4623-be86-3cd382c00e2a",
"name": "Expand Languages & Sanitize",
"type": "n8n-nodes-base.code",
"position": [
-32,
-64
],
"parameters": {
"jsCode": "// Entrada: $json.output con claves es,de,en,fr,it,pt\nconst langs = ['es','de','en','fr','it','pt'];\n\nconst productId = $('Get many products').first().json.id;\nconst handleES = $('Get many products').first().json.handle\nconst items = [];\n$input.first().json.output.es\n\nfor (const lang of langs) {\nconst node = $input.first().json.output[lang];\nif (!node) continue;\nitems.push({\njson: {\nproduct_id: Number(productId),\nlang,\nhandle: node.handle,\nshopify_product_name: node.shopify_product_name,\nshopify_description: node.shopify_description,\n// Para comodidad, tambi\u00e9n retornamos los campos ES por si quieres compararlos\nbase_handle_es: handleES\n}\n});\n}\n\n\nreturn items;"
},
"typeVersion": 2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "db699da8-51d3-4a4e-b9bf-be4b2e4f2147",
"connections": {
"AI Agent": {
"main": [
[
{
"node": "Expand Languages & Sanitize",
"type": "main",
"index": 0
}
]
]
},
"Analyze image": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Get many products": {
"main": [
[
{
"node": "Analyze image",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Google Gemini Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Expand Languages & Sanitize": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Get many products",
"type": "main",
"index": 0
}
]
]
}
}
}
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.
googleApigooglePalmApishopifyAccessTokenApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Use for free
Source: https://n8n.io/workflows/8179/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow transforms your Telegram bot into an intelligent creative assistant. It can chat conversationally, fetch trending image prompts from PromptHero for inspiration, or perform a deep "remix"
This Shopify AI automation is an advanced n8n-powered workflow that transforms Shopify product collections into SEO-optimized blog articles with images, while maintaining full visibility and control t
This workflow acts as an AI-powered "Viral Architect" for YouTube creators. Simply send a video topic (e.g., "Kling 2.6") to your Telegram bot, and it will scrape top-performing competitor thumbnails,
This workflow automates Facebook posting and appointment booking directly from a Telegram bot, making it especially useful for pet grooming businesses that want to keep their social media active while
This workflow automates batch video publishing prep from a Google Drive folder with AI-generated, platform-specific copy and a simple approval queue in Google Sheets. Perfect for Agencies, content cre