Hey n8n Community,
A friend of mine runs an online store, and for every new product they get supplier inputs in whatever format the supplier feels like: spec PDFs, Excel sheets, a few photos, some loose notes. Someone then hand-writes the title, descriptions, specs and SEO fields. I built them a pipeline that does it end to end, and I’m sharing all four workflows.
What it does: intake form → extract specs → analyse photos → generate content → poll status. Drop in the files and notes, get back review-ready content (title, descriptions, meta fields, features, tags, attributes).
The four workflows
-
WF1 – Intake & spec extraction. Saves files to Drive, routes each by type (PDFs/images → easybits Extractor, Excel → Code node), merges into one spec object, resolves brand, hands off to WF2.
-
WF2 – Image analysis. Runs each photo through an Extractor pipeline to capture what’s visible (colour, features, angle), then passes it to WF3.
-
WF3 – Content generation. Builds context from spec + image data + notes and has Gemini write the full content set. Hard rule: only features that are in the spec or visible in the images, no inventing.
-
WF4 – Status polling. A small webhook the frontend polls for progress and the finished draft.
Extractor setup
-
n8n Cloud: verified node, just search
easybits Extractorin the node panel. No install. -
Self-hosted: Settings → Community Nodes → Install →
@easybits/n8n-nodes-extractor.
Then create a pipeline at easybits, define your fields, and paste the Pipeline ID + API key into the node. It reads the binary straight from the previous node.
Workflows (all four, sanitized): n8n-workflows/easybits-product-content-creation-workflow at e3103344d9b3358402dc38a3a862d510bb4e7c5e · felix-sattler-easybits/n8n-workflows · GitHub
Cross-workflow calls use placeholder IDs you re-point after import, plus your own Google + Extractor credentials.
How do you handle brand-voice consistency in generated content? I went with a per-brand profile the model reads from, curious if others template it harder.
Best,
Felix
