Shopify + Google Gemini: listings written from images
Product listings sound simple until you have 30 of them waiting. Then it’s image downloads, copywriting, alt text, SEO fields, tags, and a bunch of tiny checks that somehow steal your whole afternoon.
Shopify store owners feel it first. But ecommerce founders shipping new products weekly and agency teams doing catalog builds get stuck in the same loop. This Shopify Gemini listings automation turns one product image plus a few details into a ready-to-publish draft, without the copy-paste marathon.
Below you’ll see exactly what the workflow generates, what it automates inside n8n, and how to make it fit your product categories.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Shopify + Google Gemini: listings written from images
flowchart LR
subgraph sg0["Image Analysis Engin Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Inbound Webhook Gate"]
n1@{ icon: "mdi:robot", form: "rounded", label: "Image Analysis Engine", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Parse JSON Script"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Return Webhook Reply"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Product Fields", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Combine Streams"]
n6@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Payload", pos: "b", h: 48 }
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Shopify API Post"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Upload Image Host"]
n5 --> n6
n8 --> n5
n0 --> n1
n0 --> n8
n6 --> n7
n4 --> n5
n1 --> n2
n2 --> n3
n3 --> n4
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n1 ai
class n0,n3,n7,n8 api
class n2 code
classDef customIcon fill:none,stroke:none
class n0,n2,n3,n5,n7,n8 customIcon
The Problem: Turning images into listings takes forever
Most teams don’t struggle with “creating a product” in Shopify. They struggle with creating a good product listing, consistently, at speed. You write a title, then you rewrite it because it’s too long. You add bullets, then realize you forgot tags. Then alt text. Then SEO title and description. And that’s before you even notice the image URL you uploaded isn’t the one Shopify wants, or the tone is different from yesterday’s products, which makes your storefront look messy.
It adds up fast. Here’s where it breaks down in real catalogs.
- Each listing turns into 10+ small tasks, and every “small” task still needs attention.
- Copy varies by whoever wrote it last, which means brand voice gets inconsistent across your collection pages.
- Alt text and SEO fields are easy to skip, so search visibility quietly suffers over time.
- Image handling becomes a hidden bottleneck because Shopify needs a usable hosted image URL, not “the file on your desktop.”
The Solution: Generate Shopify listings directly from product images
This workflow starts the moment your system sends a product image and a few basic fields to an n8n webhook (product name, material type, and any extra details you have). In parallel, it uploads that image to an online host so you get a clean URL you can attach to the Shopify product. While that’s happening, Google Gemini analyzes the image using your product context and returns structured JSON for your listing content: a title, a full description, bullet points, tags, alt text, and SEO title/description. n8n then cleans and parses the AI output, merges it with the hosted image URL, and builds a complete Shopify product payload. Finally, it posts the product to Shopify via the API, including your variants, vendor, options, and product type.
The workflow begins with a webhook upload. Gemini creates the copy and metadata while the image is hosted for Shopify use. Then everything is merged into one payload and sent to Shopify so a new product appears as a draft you can review and publish.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you add 25 new products for a monthly drop. Manually, even if you’re quick, you’ll spend maybe 15 minutes per product writing a title, description, bullets, tags, alt text, and SEO fields, plus another 5 minutes handling images and Shopify formatting. That’s about 8 hours of very tedious work. With this workflow, you submit the webhook payload (about 1 minute per product) and let Gemini + the image host do the heavy lifting while n8n creates the product automatically. You still review before publishing, but you’re reviewing drafts instead of writing from scratch.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Shopify to create products via API.
- Google Gemini API for image-to-copy generation.
- Image hosting API key (get it from imgbb, or your host).
Skill level: Intermediate. You’ll paste API keys, map a few fields, and run a webhook test with a real image.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A webhook receives your product image and basic fields. This is the “inbox” for the workflow, so your PIM, Airtable, a form, or a simple upload tool can trigger listing creation.
The image is hosted so Shopify can use it. The workflow sends the file to an image host (like imgbb) and gets back a public URL, which prevents broken media and messy manual uploads.
Gemini analyzes the image and writes structured listing content. Using the product name, material type, and your extra details, it returns JSON for the title, description, bullets, tags, alt text, and SEO fields. Then n8n parses that JSON and cleans it so Shopify accepts it.
Everything is merged into a single Shopify payload and posted. Your provided vendor, product type, variants, and options are included, so the created product is much closer to “ready” rather than “placeholder.”
You can easily modify the Gemini prompt to match your product category and brand tone based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the inbound webhook that receives product data and image files to start the workflow.
- Add a Inbound Webhook Gate node as the trigger.
- Set HTTP Method to
POST. - Set Path to
387b3de0-7931-478b-b7d0-9d12c013afc6. - Set Response Mode to
responseNodeto enable a separate response node.
file for image analysis and upload.Step 2: Set Up Parallel Processing for Image Analysis and Upload
The workflow splits into two parallel branches: one for AI image analysis and one for image hosting.
- Connect Inbound Webhook Gate to both Image Analysis Engine and Upload Image Host to run in parallel.
- In Image Analysis Engine, set Resource to
imageand Operation toanalyze. - Set Input Type to
binaryand Binary Property Name tofile. - Set Text to
={{ $json.body.text }} name of the product: {{ $json.body.product_name }} in this product {{ $json.body.material_type }} fabric used. provide output in json formate. - Credential Required: Connect your
googlePalmApicredentials in Image Analysis Engine. - In Upload Image Host, set URL to
https://api.imgbb.com/1/uploadand Method toPOST. - Set Content Type to
multipart-form-dataand add a body parameter image with Input Data Field Namefile. - Set query parameters expiration to
600and key to[CONFIGURE_YOUR_API_KEY]. - Credential Required: Connect your
httpBasicAuthorhttpBearerAuthcredentials in Upload Image Host.
file as binary data, both image analysis and upload will fail.Step 3: Parse and Map AI Output
Normalize the AI response into structured product fields that can be merged with the image URL.
- Connect Image Analysis Engine to Parse JSON Script to parse the AI response safely.
- In Parse JSON Script, keep the default code to strip code fences and parse JSON into output fields.
- Connect Parse JSON Script to Return Webhook Reply and set Respond With to
allIncomingItems. - Connect Return Webhook Reply to Map Product Fields.
- In Map Product Fields, map each field using expressions:
- data.title →
={{ $json.title }} - data.description →
={{ $json.description }} - data.tags →
={{ $json.tags }} - data.bullet_points →
={{ $json.bullet_points }} - data.alt_text →
={{ $json.alt_text }} - data.meta_title →
={{ $json.meta_title }} - data.meta_description →
={{ $json.meta_description }}
- data.title →
Step 4: Merge Streams and Post to Shopify
Combine the mapped AI fields with the hosted image URL, aggregate the payload, and send it to Shopify.
- Connect Map Product Fields to Combine Streams.
- Connect Upload Image Host to Combine Streams.
- In Combine Streams, set Mode to
combine, Join Mode tokeepEverything, and Fields to Match todata. - Connect Combine Streams to Aggregate Payload and set Fields to Aggregate to include
data. - Connect Aggregate Payload to Shopify API Post.
- In Shopify API Post, set URL to
https://dcbq8p-1b.myshopify.com/admin/api/2025-07/products.jsonand Method toPOST. - Set Specify Body to
jsonand JSON Body to the provided template:{ "product": { "title": "{{ $json.data[0].title }}", "body_html": {{ JSON.stringify($json.data[0].description) }}, "vendor": "{{ $('Inbound Webhook Gate').item.json.body.vendor }}", "product_type": "{{ $('Inbound Webhook Gate').item.json.body.product_type }}", "tags": "{{ $json.data[0].tags }}", "published": true, "options": {{ $('Inbound Webhook Gate').item.json.body.options }}, "variants": {{ $('Inbound Webhook Gate').item.json.body.variants }}, "images": [ { "src": "{{ $json.data[1].url }}" } ], "seo": { "title": "{{ $json.data[0].meta_title }}", "description": "{{ $json.data[0].meta_description }}" } } } - Add header parameter X-Shopify-Access-Token and provide your Shopify Admin API access token.
Step 5: Test and Activate Your Workflow
Validate the webhook, AI parsing, and Shopify post before going live.
- Click Execute Workflow and send a test POST request to the Inbound Webhook Gate URL with product fields and a binary
file. - Confirm Image Analysis Engine returns structured JSON and Return Webhook Reply responds with the parsed payload.
- Verify Upload Image Host returns a public image URL and that Combine Streams merges both branches.
- Check Shopify API Post for a successful 201 response and confirm the product appears in Shopify with images and SEO fields.
- Toggle the workflow to Active for production use.
Common Gotchas
- Shopify credentials can expire or lack the right scopes. If things break, check your Shopify app access token permissions and API access settings first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Gemini prompt defaults are generic. Add your brand voice and formatting rules early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30–60 minutes once you have your API keys ready.
No. You will connect accounts, paste credentials, and map a few fields in n8n.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Gemini usage plus your image hosting costs.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but you’ll want to do it intentionally. Add a translation step right after the Gemini output is parsed (after the Parse JSON Script node) so every field is translated consistently. Many teams translate the description and bullets first, then regenerate SEO title/description in the target language so it reads naturally. You can also branch by market using an If or Switch node, then apply different prompts per country.
Most of the time it’s an access token issue: the token expired, the app lost permissions, or the required scopes (products write access) aren’t enabled. It can also fail if your payload format is slightly off, especially around variants/options, because Shopify is strict. If you’re creating many products quickly, rate limits can show up as intermittent failures too, which is frustrating but fixable by slowing the workflow down.
A lot, as long as your n8n plan and APIs can keep up. On n8n Cloud, your monthly execution limit depends on your plan, while self-hosting has no execution cap (it’s mostly your server size). Practically, this workflow is usually limited by Gemini response time and Shopify API rate limits, so bulk uploads are best run in batches.
Often, yes, frankly, because this isn’t a simple “send data from A to B” Zap. You’re handling a file upload, parallel paths (image hosting plus AI), JSON parsing, merges, and then a structured API post to Shopify. n8n is built for that kind of branching and data shaping, and self-hosting is an option when volume grows. Zapier or Make can still work if you keep the payload minimal and you don’t mind paying more as tasks increase. If you want a second opinion, Talk to an automation expert.
Once this is running, product images turn into usable Shopify drafts without the busywork pile. Set it up, tune the prompt to your brand voice, and move on to the parts of ecommerce that actually grow revenue.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.