{"workflow":{"id":13859,"name":"Create personalized images from Google Sheets data with Layerre","views":109,"recentViews":1,"totalViews":109,"createdAt":"2026-03-04T03:55:13.937Z","description":"  How it works\n  • Reads rows from a Google Sheet (e.g. Text + Image URL columns).\n  • Uses Layerre to create personalized image variants from a Canva-based template.\n  • Each row in the sheet becomes one rendered image, and the workflow outputs the final image URLs.\n\n  Set up steps\n  • Create a Layerre template from your Canva design (or use the “Create Template from Canva” node once, then optionally deactivate it).\n  • Connect your Google Sheets account and point the Google Sheets node to your spreadsheet or the example sheet.\n  • Make sure your sheet column names match the overrides in the Layerre node (e.g. Text → text layer, Image → image URL layer).\n  • Optionally add extra nodes after the Layerre node to save images, upload them, or send them via email / social / CRM.","workflow":{"name":"Create images from spreadsheet data with Layerre","nodes":[{"id":"b3f577e9-da75-4a8c-acfb-19bfcb5ea71e","name":"When clicking \"Test workflow\"","type":"n8n-nodes-base.manualTrigger","position":[480,432],"parameters":{},"typeVersion":1},{"id":"0f868378-2dce-4a4d-a6cd-0b6df6189c3f","name":"Workflow Overview","type":"n8n-nodes-base.stickyNote","position":[-80,-16],"parameters":{"width":480,"height":752,"content":"## Create Images from Spreadsheet Data with Layerre\n\nThis workflow automates the creation of personalized images at scale using Layerre.\n\n### How it works\n1. **Create Template**: First, create a Layerre template from your Canva design\n2. **Load Data**: Get rows from the [public Google Sheets example](https://docs.google.com/spreadsheets/d/1x8X_qZaoXkrIKGVlhCC25du8ht42UKinRPtmjThpTSE/edit?usp=sharing) with columns **Text** and **Image** (one row = one variant)\n3. **Generate Variants**: Loop through each row and create image variants\n4. **Output**: Get back the rendered image URLs for each variant\n\n### Prerequisites\n- A [Layerre account](https://layerre.com) with an API key\n- A Canva design with the layers you want to customize\n- A spreadsheet with your data (one row per variant)\n\n### Customization\n- The example sheet has columns **Text** and **Image**. Match your Canva layer IDs in the Create Variant node (e.g. `text`, `image`).\n- Add more layer overrides in the \"Create Variant\" node\n- Add downstream nodes to save images, send them via email, post to social media, etc.\n\n### Resources\n- [Layerre Documentation](https://layerre.com/docs)\n- [Layerre n8n Node Documentation](https://github.com/layerre/n8n-nodes-layerre)\n- [n8n Documentation](https://docs.n8n.io)"},"typeVersion":1},{"id":"09afff7b-29c0-4df5-8923-ce8e54cd5cdf","name":"Step 1 Instructions","type":"n8n-nodes-base.stickyNote","position":[672,64],"parameters":{"color":7,"width":344,"height":336,"content":"## Step 1: Create Template\n\nCreate a Layerre template from your Canva design. This only needs to be done once.\n\n**Instructions:**\n1. Share your Canva design (click Share → \"Anyone with the link can view\")\n2. Paste the Canva URL in the node below\n3. Execute this node to create the template\n\n**Note:** You can deactivate this node after the template is created since you only need to create it once."},"typeVersion":1},{"id":"503e6991-7cc3-4e60-b8bc-f76979e964b4","name":"Create Template from Canva","type":"n8n-nodes-layerre.layerre","position":[784,432],"parameters":{"canvaUrl":"","requestOptions":{}},"credentials":{},"typeVersion":1},{"id":"96b2184f-9ae3-42c2-a161-911af03a7c07","name":"Step 2 Instructions","type":"n8n-nodes-base.stickyNote","position":[1088,-32],"parameters":{"color":7,"width":360,"height":424,"content":"## Step 2: Get Rows from Google Sheet\n\n**Instructions:**\n1. Add Google Sheets credentials (OAuth2 or Service Account) if you haven't already\n2. Select your spreadsheet: choose from list or paste the spreadsheet ID from the URL\n3. Select the sheet (tab) to read from\n4. Operation **Get Row(s)** returns every row (first row = headers). Each data row becomes one variant.\n\n**Using the public Google Sheets example:** This workflow is configured to read from the public [Layerre Sheets Example](https://docs.google.com/spreadsheets/d/1x8X_qZaoXkrIKGVlhCC25du8ht42UKinRPtmjThpTSE/edit?usp=sharing). It has 2 columns: **Text** and **Image**. Each row = one variant. You can use this sheet as-is (with view access) or make a copy for your own data."},"typeVersion":1},{"id":"fc1b824a-3bf5-4248-85b6-2bf8dbb34c3c","name":"Get Rows from Google Sheet","type":"n8n-nodes-base.googleSheets","position":[1200,432],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID_HERE/edit#gid=0","cachedResultName":"Your Sheet Name"},"documentId":{"__rl":true,"mode":"list","value":""}},"credentials":{},"typeVersion":4.4},{"id":"785396d7-9929-49ac-96d0-38b3233a479d","name":"Step 3 Instructions","type":"n8n-nodes-base.stickyNote","position":[1584,16],"parameters":{"color":7,"width":360,"height":380,"content":"## Step 3: Generate Variants\n\nThis node loops through each row of data and creates a personalized variant.\n\n**Configuration:**\n1. Template ID comes from Step 1 automatically\n2. Overrides map sheet columns to your Canva layers: **Text** → text layer, **Image** → image layer (URL)\n3. If your Canva layer IDs aren't `text` and `image`, change the layer IDs in the overrides to match your design\n\n**Tip:** Use the layer dropdown to see all available layers in your template."},"typeVersion":1},{"id":"de1ceb0d-9aea-436a-97a1-008849759ad2","name":"Create Variant with Custom Data","type":"n8n-nodes-layerre.layerre","position":[1744,432],"parameters":{"resource":"variant","overrides":{"override":[{"layerId":"bf6cc307-55de-47aa-9b69-5fa686b4529f","overrideOptions":{"text":"={{ $json.Text }}"}},{"layerId":"f7aff324-7906-41d7-823c-d4d7702e83e1","overrideOptions":{"imgUrl":"={{ $json.Image }}"}}]},"templateId":"={{ $('Create Template from Canva').item.json.id }}","requestOptions":{},"variantDimensions":{}},"credentials":{},"typeVersion":1},{"id":"2b294116-917e-4043-a5a0-95c073a67b64","name":"Step 4 Instructions","type":"n8n-nodes-base.stickyNote","position":[2016,320],"parameters":{"color":7,"width":376,"height":340,"content":"## Step 4: Output\n\nThe \"Create Variant\" node outputs the rendered image data.\n\n**Next steps:**\nYou can add more nodes to:\n- Download images to local storage\n- Upload to cloud storage (S3, Google Drive, Dropbox)\n- Send via email or Slack\n- Post to social media\n- Insert URLs into a database or CRM"},"typeVersion":1}],"pinData":{},"connections":{"Create Template from Canva":{"main":[[{"node":"Get Rows from Google Sheet","type":"main","index":0}]]},"Get Rows from Google Sheet":{"main":[[{"node":"Create Variant with Custom Data","type":"main","index":0}]]},"When clicking \"Test workflow\"":{"main":[[{"node":"Create Template from Canva","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":9,"nodeTypes":{"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-layerre.layerre":{"count":2},"n8n-nodes-base.googleSheets":{"count":1},"n8n-nodes-base.manualTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Layerre","username":"layerre","bio":"","verified":true,"links":["https://x.com/layerre"],"avatar":"https://gravatar.com/avatar/eeb2a09a989069ad65b52530314c8b14fc44fcdae7edd3d9bbeb0417be587aa5?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":838,"icon":"fa:mouse-pointer","name":"n8n-nodes-base.manualTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"When clicking ‘Execute workflow’","color":"#909298"},"iconData":{"icon":"mouse-pointer","type":"icon"},"displayName":"Manual Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":31,"name":"Content Creation"},{"id":51,"name":"Multimodal AI"}],"image":[]}}