Générateur de blogs AI pour les produits Shopify : utilisant Google Gemini et Google Sheets
Ceci est unMiscellaneous, Multimodal AIworkflow d'automatisation du domainecontenant 22 nœuds.Utilise principalement des nœuds comme If, Code, Limit, Shopify, HttpRequest. Générateur de blogs AI pour les produits Shopify avec Google Gemini et Google Sheets
- •Informations d'identification Admin API Shopify
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Informations d'identification Google Sheets API
- •Clé API Google Gemini
Nœuds utilisés (22)
Catégorie
{
"meta": {
"instanceId": "818217039c98483edc5f2e50a5e7ea3ae47b57a621c9a4429b9c0454fe5f315c",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "f8ecb7bb-88d1-445b-b33d-d35fe3151234",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1776,
-480
],
"parameters": {
"width": 1728,
"height": 416,
"content": "# Shopify Product-to-Blog Automation with AI & Google Sheets\n## This workflow automates the process of turning Shopify product data into SEO-optimized blog posts. It:\n\n- Fetches product details from Shopify.\n- Cleans and formats descriptions & images.\n- Stores raw and refined data in Google Sheets.\n- Uses an AI agent (Google Gemini) to generate blog \n content (title, intro, features, reviews, SEO fields).\n- Publishes the blog post to the Shopify Blog automatically.\n- Updates Google Sheets with blog status and article ID for tracking.\n\n## It’s a hands-free system for content marketing:\n### Where every new product can become a polished, SEO-ready blog post \n### without manual writing."
},
"typeVersion": 1
},
{
"id": "a660e92e-f367-4187-98b4-754c14c008b8",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1776,
-32
],
"parameters": {
"width": 1728,
"height": 480,
"content": ""
},
"typeVersion": 1
},
{
"id": "83e6e157-fb98-4bad-a9e9-c043d6f7db16",
"name": "Début de la création",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-1088,
-240
],
"parameters": {},
"typeVersion": 1
},
{
"id": "701f86cb-5169-4b09-9d74-2f1d7ac445af",
"name": "Obtenir tous les détails du produit",
"type": "n8n-nodes-base.shopify",
"position": [
-864,
-240
],
"parameters": {
"resource": "product",
"operation": "getAll",
"returnAll": true,
"authentication": "accessToken",
"additionalFields": {}
},
"credentials": {
"shopifyAccessTokenApi": {
"id": "UYgX73aiHW2gyQq6",
"name": "Admin_Manish"
}
},
"typeVersion": 1
},
{
"id": "db453c4b-34ac-4a59-91be-51fde818984f",
"name": "Détails du produit vers la feuille",
"type": "n8n-nodes-base.googleSheets",
"position": [
-640,
-240
],
"parameters": {
"columns": {
"value": {
"title": "={{ $('Get All Product Details').item.json.title }}",
"Images": "={{ $('Get All Product Details').item.json.images }}",
"handle": "={{ $('Get All Product Details').item.json.handle }}",
"product_id": "={{ $('Get All Product Details').item.json.id }}",
"description": "={{ $('Get All Product Details').item.json.body_html }}"
},
"schema": [
{
"id": "product_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "product_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "description",
"type": "string",
"display": true,
"required": false,
"displayName": "description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "handle",
"type": "string",
"display": true,
"required": false,
"displayName": "handle",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Images",
"type": "string",
"display": true,
"required": false,
"displayName": "Images",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"product_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit#gid=0",
"cachedResultName": "row_data"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit?usp=drivesdk",
"cachedResultName": "shopify_blog_n8n"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "GL43UggUq5EHLIyU",
"name": "n8n.verified@gmail.com"
}
},
"typeVersion": 4.7
},
{
"id": "c9653b2e-3560-4986-8459-8632aecd557b",
"name": "Corriger le format d'entrée",
"type": "n8n-nodes-base.code",
"position": [
-416,
-240
],
"parameters": {
"jsCode": "// Function to process ALL input items (multiple products)\nconst allItems = $input.all();\nconst processedItems = [];\n\n// Function to process a single product\nfunction processProductData(inputData) {\n try {\n const result = {\n product_id: null,\n title: null,\n handle: null,\n description: '', // keep original HTML\n cleanDescription: '', // plain text\n imageSources: [], // Always an array\n totalImages: 0,\n error: null\n };\n\n // Add fields as is\n if (inputData.product_id !== undefined && inputData.product_id !== null) {\n result.product_id = inputData.product_id;\n }\n if (inputData.title !== undefined && inputData.title !== null) {\n result.title = inputData.title;\n }\n if (inputData.handle !== undefined && inputData.handle !== null) {\n result.handle = inputData.handle;\n }\n\n // Process description\n if (inputData.description) {\n // 1. Keep original HTML (Shopify supports this)\n result.description = inputData.description;\n\n // 2. Generate plain text version\n let cleanDescription = inputData.description\n .replace(/<[^>]*>/g, '') // strip tags\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/ /g, ' ')\n .replace(/\\n+/g, '\\n')\n .replace(/[ \\t]+/g, ' ')\n .replace(/\\n /g, '\\n')\n .trim();\n\n // escape for JSON safety\n cleanDescription = cleanDescription\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n');\n\n result.cleanDescription = cleanDescription;\n }\n\n // Process images - ENSURE IT'S AN ARRAY\n if (inputData.Images && Array.isArray(inputData.Images)) {\n result.imageSources = inputData.Images\n .filter(image => image && image.src && image.src.trim() !== '')\n .map(image => image.src.trim())\n .filter((src, index, array) => array.indexOf(src) === index);\n\n result.totalImages = result.imageSources.length;\n }\n // Handle case where Images might be a string\n else if (inputData.Images && typeof inputData.Images === 'string') {\n try {\n const parsedImages = JSON.parse(inputData.Images);\n if (Array.isArray(parsedImages)) {\n result.imageSources = parsedImages\n .filter(image => image && image.src && image.src.trim() !== '')\n .map(image => image.src.trim())\n .filter((src, index, array) => array.indexOf(src) === index);\n\n result.totalImages = result.imageSources.length;\n }\n } catch (parseError) {\n console.log('Error parsing Images string:', parseError);\n result.imageSources = [];\n result.totalImages = 0;\n }\n }\n\n return result;\n\n } catch (error) {\n return {\n product_id: inputData.product_id || null,\n title: inputData.title || null,\n handle: inputData.handle || null,\n description: '',\n cleanDescription: '',\n imageSources: [],\n totalImages: 0,\n error: error.message\n };\n }\n}\n\n// Process each item\nfor (let i = 0; i < allItems.length; i++) {\n const processedItem = processProductData(allItems[i].json);\n processedItems.push({ json: processedItem });\n}\n\n// Return all processed items\nreturn processedItems;\n"
},
"typeVersion": 2
},
{
"id": "da3c0cba-80d7-4ebb-a9fc-91d1dc900fcd",
"name": "Mettre à jour la feuille",
"type": "n8n-nodes-base.googleSheets",
"position": [
-192,
-240
],
"parameters": {
"columns": {
"value": {
"title": "={{ $json.title }}",
"handle": "={{ $json.handle }}",
"Image_1": "={{ $json.imageSources[0] }}",
"Image_2": "={{ $json.imageSources[1] }}",
"Image_3": "={{ $json.imageSources[2] }}",
"Image_4": "={{ $json.imageSources[3] }}",
"blog_id": "118631235877",
"product_id": "={{ $json.product_id }}",
"blog_status": "unused",
"description": "={{ $json.cleanDescription }}"
},
"schema": [
{
"id": "product_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "product_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "blog_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "blog_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "blog_status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "blog_status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "description",
"type": "string",
"display": true,
"required": false,
"displayName": "description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "handle",
"type": "string",
"display": true,
"required": false,
"displayName": "handle",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image_1",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Image_1",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image_2",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Image_2",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image_3",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Image_3",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image_4",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Image_4",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"product_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 25757113,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit#gid=25757113",
"cachedResultName": "refined_input"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit?usp=drivesdk",
"cachedResultName": "shopify_blog_n8n"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "GL43UggUq5EHLIyU",
"name": "n8n.verified@gmail.com"
}
},
"typeVersion": 4.7
},
{
"id": "a9a6b7b7-2948-4827-ac71-6abd55da8b5a",
"name": "Filtrer les doublons",
"type": "n8n-nodes-base.if",
"position": [
-1664,
32
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "9e037f0f-ed95-41e5-b229-80befb372ff7",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.blog_status }}",
"rightValue": "=unused"
},
{
"id": "55aa4e25-b574-4c48-97f8-80ff6b402724",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.blog_status }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "3f421a55-3e62-44ff-8f75-822691bb0a03",
"name": "Salle magique",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1216,
16
],
"parameters": {
"text": "=Input fields provided: \n- Title: {{ $json.title }}\n- Description: {{ $json.description }}",
"options": {
"systemMessage": "=You are an expert content writer who creates concise, high-converting product blog posts for Shopify stores. \n\nYour output must follow this exact structure, using HTML tags for formatting, and adhering to ideal word/character counts for readability and engagement.\n\nWrite a blog post using the following structure:\n\n1. **Title** (within <h1> tags) \n- Make it catchy and relevant to the product title, approximately 8–12 words and 50–70 characters. \n\n2. **Introduction** (within <p> tags) \n- Write 40–60 words (250–350 characters) that hook the reader by highlighting a relatable problem, followed by a quick product benefit summary.\n\n3. **Key Features** (within <ul> and <li> tags) \n- List the top 4–6 features in short, scannable bullet points totaling 50–100 words (300–600 characters).\n\n4. **Customer Reviews / Experience** (within <blockquote> or <div> tags) \n- Include 2–3 short, authentic-sounding customer testimonials or experiences, total 80–120 words (450–700 characters).\n\n5. **Use Case Callout** (within <p> tags, optionally with <strong>) \n- Briefly define who the product is ideal for, in 40–60 words (250–350 characters).\n\n6. **Call to Action** (within <p> tags) \n- Close with a clear invitation to buy or learn more, about 20–40 words (120–250 characters).\n\nAdditionally, at the end of the output provide: \n- An excerpt summary (max 160 characters) without tags \n- A page title suitable for SEO (under 60 characters) \n- A meta description (140–160 characters) summarizing the blog content for search engines \n\n---\n\nOutput the content with proper HTML markup and all requested fields exactly like this JSON: \n\n{\n \\\"blog_title\\\": \\\"[Your formatted <h1> title here without tags]\\\",\n \\\"content\\\": \\\"[Full HTML content as a string with tags as per the structure above]\\\",\n \\\"excerpt\\\": \\\"[SEO-friendly excerpt summary]\\\",\n \\\"page_title\\\": \\\"[SEO page title]\\\",\n \\\"meta_description\\\": \\\"[SEO meta description]\\\" \n}\n\nWrite the response ONLY as this JSON object without any additional commentary or text.\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "a22f016d-fc40-4b8f-8d63-55c888175601",
"name": "Gemini",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-1456,
304
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "rJcvhJlIc3a5dpyu",
"name": "gimini_myFirstProject_manipritraj"
}
},
"typeVersion": 1
},
{
"id": "4d2eacd5-3f48-4c63-898b-3246c7a118d3",
"name": "Analyseur de sortie",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-1344,
304
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"blog_title\": \"blog_title\",\n \"content\": \"content_html\",\n \"excerpt\": \"excerpt\",\n \"page_title\": \"page_title\",\n \"meta_description\": \"meta_description\"\n}\n"
},
"typeVersion": 1.3
},
{
"id": "41194322-ba19-45b8-acb8-b5b9cb9dbebd",
"name": "Gemini1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-1072,
304
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "rJcvhJlIc3a5dpyu",
"name": "gimini_myFirstProject_manipritraj"
}
},
"typeVersion": 1
},
{
"id": "c7623b7a-0575-4ab9-b4cb-6647374aa87d",
"name": "Limite = 1",
"type": "n8n-nodes-base.limit",
"position": [
-1440,
16
],
"parameters": {},
"typeVersion": 1
},
{
"id": "a615f9c7-7adf-4b9c-8188-f26f4d5407e9",
"name": "Mettre à jour le contenu du blog",
"type": "n8n-nodes-base.googleSheets",
"position": [
-832,
16
],
"parameters": {
"columns": {
"value": {
"content": "={{ $json.output.content }}",
"excerpt": "={{ $json.output.excerpt }}",
"blog_title": "={{ $json.output.blog_title }}",
"page_title": "={{ $json.output.page_title }}",
"product_id": "={{ $('Limit = 1').item.json.product_id }}",
"URL _handle": "={{ $('Limit = 1').item.json.handle }}",
"blog_status": "generated",
"meta_description": "={{ $json.output.meta_description }}"
},
"schema": [
{
"id": "product_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "product_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "blog_title",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "blog_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "content",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "excerpt",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "excerpt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "page_title",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "page_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "meta_description",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "meta_description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "URL _handle",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "URL _handle",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "blog_status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "blog_status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "article_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "article_id",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"product_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1548183235,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit#gid=1548183235",
"cachedResultName": "blog_post"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit?usp=drivesdk",
"cachedResultName": "shopify_blog_n8n"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "GL43UggUq5EHLIyU",
"name": "n8n.verified@gmail.com"
}
},
"typeVersion": 4.7
},
{
"id": "c4f97660-c407-4b82-80e9-1fb3a5057bfe",
"name": "Corriger le format du contenu",
"type": "n8n-nodes-base.code",
"position": [
-640,
16
],
"parameters": {
"jsCode": "// Get input JSON\nlet input = $input.first().json;\n\n// Function to convert raw HTML into Shopify-safe JSON string\nfunction makeJsonSafe(html) {\n return html\n .replace(/\\\\/g, \"\\\\\\\\\") // escape backslashes\n .replace(/\"/g, '\\\\\"') // escape quotes\n .replace(/\\n/g, \"\\\\n\") // escape line breaks\n .replace(/\\r/g, \"\"); // remove carriage returns (Windows line breaks)\n}\n\n// Process body_html\nlet safeContent = makeJsonSafe(input.content);\n\n// Return all fields in correct JSON structure\nreturn {\n json: {\n blog_title: input.blog_title,\n excerpt: input.excerpt,\n page_title: input.page_title,\n meta_description: input.meta_description,\n \"URL _handle\": input[\"URL _handle\"],\n blog_status: input.blog_status,\n body_html: safeContent\n }\n};\n"
},
"typeVersion": 2
},
{
"id": "29e2dedd-1eae-414e-a6b7-ea5824547e58",
"name": "Création du blog",
"type": "n8n-nodes-base.httpRequest",
"position": [
-416,
16
],
"parameters": {
"url": "https://p7wqck-r7.myshopify.com/admin/api/2025-07/blogs/118631235877/articles.json",
"method": "POST",
"options": {},
"jsonBody": "={\n \"article\": {\n \"title\": \"{{ $json.blog_title }}\",\n \"author\": \"Manish Kumar\",\n \"tags\": \"Electronics\",\n \"body_html\": \"{{ $json.body_html }}\",\n \"published_at\": \"{{$now}}\"\n }\n}\n",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "shopifyAccessTokenApi"
},
"credentials": {
"shopifyAccessTokenApi": {
"id": "UYgX73aiHW2gyQq6",
"name": "Admin_Manish"
}
},
"typeVersion": 4.2
},
{
"id": "5cc50b49-1adb-4598-8fd4-9e9e2d710912",
"name": "Mise à jour du statut",
"type": "n8n-nodes-base.googleSheets",
"position": [
-192,
16
],
"parameters": {
"columns": {
"value": {
"article_id": "={{ $json.article.id }}",
"product_id": "={{ $('Update Blog Content').item.json.product_id }}",
"blog_status": "posted"
},
"schema": [
{
"id": "product_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "product_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "blog_title",
"type": "string",
"display": true,
"required": false,
"displayName": "blog_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "content",
"type": "string",
"display": true,
"required": false,
"displayName": "content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "excerpt",
"type": "string",
"display": true,
"required": false,
"displayName": "excerpt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "page_title",
"type": "string",
"display": true,
"required": false,
"displayName": "page_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "meta_description",
"type": "string",
"display": true,
"required": false,
"displayName": "meta_description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "URL _handle",
"type": "string",
"display": true,
"required": false,
"displayName": "URL _handle",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "blog_status",
"type": "string",
"display": true,
"required": false,
"displayName": "blog_status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "article_id",
"type": "string",
"display": true,
"required": false,
"displayName": "article_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"product_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1548183235,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit#gid=1548183235",
"cachedResultName": "blog_post"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit?usp=drivesdk",
"cachedResultName": "shopify_blog_n8n"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "GL43UggUq5EHLIyU",
"name": "n8n.verified@gmail.com"
}
},
"typeVersion": 4.7
},
{
"id": "a976c2f9-2ad3-4d9c-8eaf-8d4be4887a16",
"name": "Rien",
"type": "n8n-nodes-base.noOp",
"position": [
-1664,
304
],
"parameters": {},
"typeVersion": 1
},
{
"id": "759af36b-3460-4a4e-8ca6-c3ee970babbd",
"name": "Rien1",
"type": "n8n-nodes-base.noOp",
"position": [
-400,
288
],
"parameters": {},
"typeVersion": 1
},
{
"id": "0753ecfb-4571-4bb8-9f30-c8c9f7689462",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2288,
-480
],
"parameters": {
"color": 6,
"width": 480,
"height": 928,
"content": "# User Instruction for Workflow\n\n## Setup Credentials\n- Connect your Shopify store (Admin API Access Token).\n- Connect your Google Sheets account (with access to the provided spreadsheet).\n- Ensure Google Gemini API key is added for AI blog generation.\n\n## Configure Spreadsheet\n- The workflow writes to three sheets:\n- Raw Input → Stores Shopify product data.\n- Refined Input → Stores cleaned description, plain text, and images.\n- Blog Post → Stores AI-generated blog drafts and publishing status.\n\n## Execution\n- Start the workflow using the Manual Trigger or schedule it with a Cron Trigger.\n- The workflow will fetch all Shopify products, generate blog content, and post articles automatically.\n\n## Monitoring\n- Check Google Sheets to track product → blog mapping.\n- Column blog_status will show:\n- unused → Product not yet blogged.\n- generated → Blog draft created but not yet posted.\n- posted → Blog published successfully.\n- Customization\n\n### Update AI prompt in the AI Agent Node if you want different blog styles.\n### Change Shopify blog ID or tags inside the HTTP Request Node if you want posts to go to a different blog category."
},
"typeVersion": 1
},
{
"id": "ebd6d255-ffef-457f-b568-39a1f3bb3641",
"name": "Mettre à jour la table d'entrée",
"type": "n8n-nodes-base.googleSheets",
"position": [
-816,
288
],
"parameters": {
"columns": {
"value": {
"product_id": "={{ $('Limit = 1').item.json.product_id }}",
"blog_status": "used"
},
"schema": [
{
"id": "product_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "product_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "blog_id",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "blog_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "blog_status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "blog_status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "description",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "handle",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "handle",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image_1",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image_1",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image_2",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image_2",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image_3",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image_3",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image_4",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image_4",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"product_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 25757113,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit#gid=25757113",
"cachedResultName": "refined_input"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/110yQOPnce7Sx4My18yaG5gye9x5qAB_oZZaKXF0bBh8/edit?usp=drivesdk",
"cachedResultName": "shopify_blog_n8n"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "GL43UggUq5EHLIyU",
"name": "n8n.verified@gmail.com"
}
},
"typeVersion": 4.7
},
{
"id": "17dbeb60-6a41-4b44-9a20-1ae4d185f4f9",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2800,
-480
],
"parameters": {
"color": 6,
"width": 480,
"height": 928,
"content": "# Author Details\n\n\n\n## Manish Kumar\n### Expert Designer & Automation Engineer for Custom Shopify Apps\n\nI specialize in designing seamless customer experiences and automating workflows for Shopify, web, and business platforms. From custom apps integration to process optimization, my solutions empower teams to work smarter and scale faster.\n\n## Contact:\n### 📧 [manipritraj@gmail.com](mailto:manipritraj@gmail.com)\n### 📞 +91-9334888899\n\n"
},
"typeVersion": 1
}
],
"pinData": {
"Magic Room": [
{
"output": {
"content": "<h1>Breathe Easy Anywhere: Discover AuraWave Portable Air Purifier</h1>\n<p>Is stale, allergen-filled air making you uncomfortable? Whether at home, the office, or traveling, poor air quality can impact your well-being. Introducing the AuraWave Portable Air Purifier – your silent solution for cleaner, fresher air. This compact device uses advanced HEPA filtration to eliminate dust, allergens, and odors, ensuring you breathe better, wherever you are.</p>\n<ul>\n<li><strong>True HEPA Filtration:</strong> Captures 99.97% of particles as tiny as 0.3 microns, including dust, pollen, and pet dander.</li>\n<li><strong>Whisper-Quiet Operation:</strong> Enjoy undisturbed peace; perfect for bedrooms, nurseries, or quiet workspaces.</li>\n<li><strong>Cordless Convenience:</strong> USB rechargeable battery provides ultimate portability and freedom from outlets.</li>\n<li><strong>Compact & Lightweight:</strong> Easily fits into any bag or desk, making it your ideal travel companion.</li>\n<li><strong>Odor Elimination:</strong> Effectively removes unpleasant smells, leaving your space fresh and clean.</li>\n<li><strong>Allergy & Asthma Relief:</strong> Creates a safer environment for sufferers by reducing airborne triggers.</li>\n</ul>\n<div>\n<blockquote>\n<p>\"I suffer from severe allergies, and the AuraWave has been a game-changer! I keep it on my nightstand, and I've noticed a significant reduction in my morning congestion. Plus, it's so quiet I barely know it's there.\" – Sarah L.</p>\n</blockquote>\n<blockquote>\n<p>\"Working in a small office, the air often feels stuffy. Since getting the AuraWave, my concentration has improved, and I feel much more energized. It's incredibly discreet and powerful for its size.\" – Mark T.</p>\n</blockquote>\n<blockquote>\n<p>\"We took our AuraWave on our last road trip, and it made such a difference in hotel rooms. It's small enough not to be a hassle and ensures we always have clean air, no matter where we are.\" – Jessica R.</p>\n</blockquote>\n</div>\n<p><strong>Who is the AuraWave for?</strong> This portable air purifier is perfect for anyone seeking to improve their personal air quality. It's an essential for allergy and asthma sufferers, remote workers, students in dorms, frequent travelers, or simply anyone who desires a fresh, clean breathing space, anytime, anywhere.</p>\n<p>Ready to experience the difference clean air makes? Elevate your environment and breathe easier with the AuraWave Portable Air Purifier. Click here to shop now and start your journey to a healthier, fresher you!</p>",
"excerpt": "Breathe cleaner, fresher air anywhere with AuraWave, the silent and compact portable air purifier. Removes dust, allergens, and odors with HEPA filtration.",
"blog_title": "Breathe Easy Anywhere: Discover AuraWave Portable Air Purifier",
"page_title": "AuraWave Portable Air Purifier - Clean Air Anywhere",
"meta_description": "Discover AuraWave, the compact & silent portable air purifier. Features HEPA filtration for dust, allergens, and odor removal. Breathe fresh air at home, office, or travel."
}
}
],
"Start Creation": [
{}
]
},
"connections": {
"a22f016d-fc40-4b8f-8d63-55c888175601": {
"ai_languageModel": [
[
{
"node": "3f421a55-3e62-44ff-8f75-822691bb0a03",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"41194322-ba19-45b8-acb8-b5b9cb9dbebd": {
"ai_languageModel": [
[
{
"node": "4d2eacd5-3f48-4c63-898b-3246c7a118d3",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"c7623b7a-0575-4ab9-b4cb-6647374aa87d": {
"main": [
[
{
"node": "3f421a55-3e62-44ff-8f75-822691bb0a03",
"type": "main",
"index": 0
}
]
]
},
"3f421a55-3e62-44ff-8f75-822691bb0a03": {
"main": [
[
{
"node": "ebd6d255-ffef-457f-b568-39a1f3bb3641",
"type": "main",
"index": 0
},
{
"node": "a615f9c7-7adf-4b9c-8188-f26f4d5407e9",
"type": "main",
"index": 0
}
]
]
},
"29e2dedd-1eae-414e-a6b7-ea5824547e58": {
"main": [
[
{
"node": "5cc50b49-1adb-4598-8fd4-9e9e2d710912",
"type": "main",
"index": 0
}
]
]
},
"4d2eacd5-3f48-4c63-898b-3246c7a118d3": {
"ai_outputParser": [
[
{
"node": "3f421a55-3e62-44ff-8f75-822691bb0a03",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"5cc50b49-1adb-4598-8fd4-9e9e2d710912": {
"main": [
[
{
"node": "759af36b-3460-4a4e-8ca6-c3ee970babbd",
"type": "main",
"index": 0
}
]
]
},
"83e6e157-fb98-4bad-a9e9-c043d6f7db16": {
"main": [
[
{
"node": "701f86cb-5169-4b09-9d74-2f1d7ac445af",
"type": "main",
"index": 0
}
]
]
},
"da3c0cba-80d7-4ebb-a9fc-91d1dc900fcd": {
"main": [
[
{
"node": "a9a6b7b7-2948-4827-ac71-6abd55da8b5a",
"type": "main",
"index": 0
}
]
]
},
"a9a6b7b7-2948-4827-ac71-6abd55da8b5a": {
"main": [
[
{
"node": "c7623b7a-0575-4ab9-b4cb-6647374aa87d",
"type": "main",
"index": 0
}
],
[
{
"node": "a976c2f9-2ad3-4d9c-8eaf-8d4be4887a16",
"type": "main",
"index": 0
}
]
]
},
"c4f97660-c407-4b82-80e9-1fb3a5057bfe": {
"main": [
[
{
"node": "29e2dedd-1eae-414e-a6b7-ea5824547e58",
"type": "main",
"index": 0
}
]
]
},
"a615f9c7-7adf-4b9c-8188-f26f4d5407e9": {
"main": [
[
{
"node": "c4f97660-c407-4b82-80e9-1fb3a5057bfe",
"type": "main",
"index": 0
}
]
]
},
"c9653b2e-3560-4986-8459-8632aecd557b": {
"main": [
[
{
"node": "da3c0cba-80d7-4ebb-a9fc-91d1dc900fcd",
"type": "main",
"index": 0
}
]
]
},
"701f86cb-5169-4b09-9d74-2f1d7ac445af": {
"main": [
[
{
"node": "db453c4b-34ac-4a59-91be-51fde818984f",
"type": "main",
"index": 0
}
]
]
},
"db453c4b-34ac-4a59-91be-51fde818984f": {
"main": [
[
{
"node": "c9653b2e-3560-4986-8459-8632aecd557b",
"type": "main",
"index": 0
}
]
]
}
}
}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é ?
Avancé - Divers, IA Multimodale
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
MANISH KUMAR
@manipritrajAutomation Architect | n8n Expert I turn repetition into magic! Building workflows for: - Content creation (YouTube/social media) - Business ops (CRM/data pipelines) - Personal productivity (AI/smart home) Superpowers: API integrations • Debugging • Scalable solutions Featured: YouTube Shorts Automator • AI Report Generator • Custom ChatGPT+n8n "Automation should adapt to humans" 📧 manipritraj@gmail.com Fun fact: Automated my coffee+news+cat feeder! ☕🐈
Partager ce workflow