Dina produkttitlar glider iväg över tid. Beskrivningar “snabbjusteras” av den som råkar vara tillgänglig. Sedan vaknar du upp till en butik som låter som fem olika varumärken – och att fixa det innebär timmar av copy-paste över dussintals (eller hundratals) listningar.
E-handelsansvariga känner oftast av det först. Men marknadsansvariga som städar upp SEO och små butiksägare som försöker få ut nya designer hanterar samma röra. Den här Printify-copy-automationen uppdaterar titlar och beskrivningar med OpenAI och loggar varje ändring i Google Sheets så att du alltid vet vad som hände.
Du får se hur arbetsflödet hämtar produkter från Printify, genererar varumärkesanpassad SEO-copy, skriver resultatet till Sheets och sedan pushar uppdateringar tillbaka till Printify utan manuellt slit.
Så fungerar automatiseringen
Se hur detta löser problemet:
n8n Workflow Template: Printify + Google Sheets: spårade SEO-textuppdateringar
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n1["<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/>Printify - Get Shops"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Printify - Get Products"]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split - id, title, desc", pos: "b", h: 48 }
n6@{ icon: "mdi:wrench", form: "rounded", label: "Calculator", pos: "b", h: 48 }
n7@{ icon: "mdi:wrench", form: "rounded", label: "Wikipedia", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Brand Guidelines + Custom In..", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "GS - Add Product Option", pos: "b", h: 48 }
n13@{ icon: "mdi:database", form: "rounded", label: "Update Product Option", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Number of Options", pos: "b", h: 48 }
n16["<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/>Calculate Options"]
n17@{ icon: "mdi:swap-vertical", form: "rounded", label: "Remember Options", pos: "b", h: 48 }
n18@{ icon: "mdi:robot", form: "rounded", label: "Generate Title and Desc", pos: "b", h: 48 }
n14 --> n4
n14 --> n12
n3 --> n4
n7 -.-> n18
n6 -.-> n18
n4 --> n5
n17 --> n16
n16 --> n14
n15 --> n16
n1 --> n2
n13 --> n17
n12 --> n18
n18 --> n13
n2 --> n3
n5 --> n15
n0 --> n9
n9 --> n1
end
subgraph sg1["Google Sheets Flow"]
direction LR
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/>Printify - Update Product"]
n10@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger", pos: "b", h: 48 }
n11["<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/>Printify - Get Shops1"]
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n19 --> n11
n10 --> n19
n11 --> n8
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 n0,n10 trigger
class n18 ai
class n6,n7 ai
class n14,n19 decision
class n12,n13 database
class n1,n2,n8,n11 api
class n16 code
classDef customIcon fill:none,stroke:none
class n1,n2,n16,n8,n11 customIcon
Utmaningen: hålla Printify-listningar konsekventa utan att bo i kalkylark
Att uppdatera produkttexter i Printify låter enkelt – tills du gör det i större skala. Du börjar med “bara fixa några titlar”, och plötsligt handlar det om säsongsuppdateringar, keyword-justeringar, förändringar i tonalitet eller att städa upp gamla mallar som aldrig borde ha publicerats. Värst är den mentala belastningen: du jämför hela tiden gammal vs. ny text, försöker att inte skriva över fel listning och dubbelkollar det du redan varit inne och ändrat. Och om du inte spårar ändringar någonstans centralt slutar det med att du gör samma jobb igen nästa månad – för att ingen minns vad som uppdaterades.
Det drar snabbt iväg. Så här faller det isär i verkliga butiker.
- Du öppnar Printify, kopierar aktuell titel och beskrivning, klistrar in i ett dokument, skriver om, klistrar tillbaka och upprepar samma loop för varje produkt.
- Varumärkeston blir inkonsekvent eftersom olika personer “förbättrar” copy på olika sätt, vilket gör att butiken känns som ett lapptäcke.
- Du tappar koll på vad som ändrades, så QA blir ett andra projekt (och misstag slinker igenom ändå).
- Batchuppdateringar känns riskabla, så du skjuter upp dem – och din SEO och konvertering betalar tyst priset.
Lösningen: uppdatera Printify-titlar + beskrivningar med OpenAI, loggat i Sheets
Det här arbetsflödet gör ett stökigt “skriv om allt”-projekt till ett kontrollerat system som du kan köra när som helst. Det börjar med att hämta din Printify-butikslista och hämtar sedan hela produktkatalogen från den butik du väljer. Varje produkt bearbetas en och en, där arbetsflödet extraherar produkt-ID, aktuell titel och aktuell beskrivning. Därefter genererar OpenAI uppdaterad copy baserat på dina varumärkesriktlinjer och eventuella egna instruktioner du lägger in (ton, formateringsregler, SEO-noteringar, säsongsinriktningar). Till sist uppdaterar arbetsflödet produkten i Printify via API och skriver resultatet till Google Sheets så att du får ett felfritt revisionsspår över vad som genererades och applicerades.
Arbetsflödet kan köras på två sätt: du kan starta det manuellt för test, eller trigga det från Google Sheets när en “upload”-kolumn ändras till “yes”. Efter att copy har genererats uppdateras Sheets från “Product Processing” till “Option added”, vilket gör det tydligt vad som är klart och vad som fortfarande väntar.
Vad som ändras: före vs. efter
| Det här eliminerar | Effekten du märker |
|---|---|
|
|
Effekt i verkligheten
Säg att du vill uppdatera 50 Printify-listningar inför en säsongssatsning. Manuellt tar det typiskt runt 10 minuter per produkt att öppna listningen, kopiera den gamla texten, skriva om, klistra in och dubbelkolla – alltså cirka 8 timmar fokuserat arbete. Med det här arbetsflödet sätter du Google Sheets-flaggan “upload” till “yes” (kanske 5 minuter för att förbereda arket), och låter sedan OpenAI generera och arbetsflödet uppdatera Printify medan Sheets loggar varje ändring. Du granskar fortfarande, men granskningen blir att läsa i ett ark – inte att göra om hela processen.
Krav
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- Printify för att hämta och uppdatera produktlistningar.
- Google Sheets för att spåra status och lagra resultat.
- OpenAI API-nyckel (hämta den i OpenAI:s API-dashboard).
Svårighetsgrad: Medel. Du kopplar konton, klistrar in API-nycklar och redigerar ett textblock med varumärkesriktlinjer.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Flödet i arbetsflödet
En manuell körning eller en ändring i Google Sheets startar allt. Om du testar kör du manuellt. I produktion lyssnar arbetsflödet på ditt ark och startar när kolumnen “upload” sätts till “yes”.
Printify-data hämtas in. Arbetsflödet hämtar din butikslista, väljer rätt butik och hämtar hela produktkatalogen så att det har ID:n och aktuell titel/beskrivning att utgå från.
Produkter bearbetas i batchar och ny copy genereras. Varje produkt separeras, nyckelfälten extraheras och OpenAI skapar uppdaterade titlar och beskrivningar baserat på dina “Brand Rules & Notes”. Det finns även logik för att generera flera alternativ (så att du kan spara alternativ), istället för att vara låst till ett enda förslag.
Sheets uppdateras först, sedan uppdateras Printify. En rad läggs till med en bearbetningsstatus, den genererade copyn skrivs tillbaka till den raden och produkten uppdateras i Printify via en API-förfrågan. Om du behöver granska en ändring i efterhand är Sheets spåret du följer.
Du kan enkelt justera varumärkesreglerna så att de matchar din ton och formatering, eller ändra hur många copy-alternativ du genererar utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den manuella triggern
Det här arbetsflödet startar med en manuell körning för att generera copy och använder även en sheet-watcher för publiceringsuppdateringar.
- Öppna Manual Run Trigger och låt den vara startpunkten för manuella körningar.
- Konfigurera Sheets Row Watcher så att den bevakar ert produktark för uppladdningar. Ställ in Event på
rowUpdate. - I Sheets Row Watcher ställer ni in Columns to Watch på
uploadoch behåller polling-intervallet påeveryMinute. - Välj ert kalkylark i Sheets Row Watcher: Document till
[YOUR_ID]och Sheet tillSheet1 (gid=0). - Inloggningsuppgifter krävs: Anslut era googleSheetsTriggerOAuth2Api-credentials i Sheets Row Watcher.
Steg 2: Koppla Printify och varumärkesinställningar
Ställ in varumärkesregler och anslut till Printify för att hämta butiks- och produktdata.
- I Brand Rules & Notes ställer ni in brand_name till
YourBrand, brand_tone tillinformal, instructional, trustoworthyoch custom_instructions tillrewrite for seasonal promotion. - Öppna Retrieve Store List och ställ in URL till
https://api.printify.com/v1/shops.json. - Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-credentials i Retrieve Store List.
- Öppna Fetch Product Catalog och ställ in URL till
=https://api.printify.com/v1/shops/{{ $json.id }}/products.json. - Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-credentials i Fetch Product Catalog.
Steg 3: Förbered produktposter och options-loop
Dela upp produktdata i enskilda objekt och konfigurera loopen för att generera flera copy-alternativ.
- I Expand Items ställer ni in Field to Split Out till
data. - Använd Iterate Records för att bearbeta objekt i batchar (standardinställningar fungerar bra).
- I Extract ID Title Desc ställer ni in Field to Split Out till
idoch Fields to Include tilltitle, description. - I Set Option Count ställer ni in number_of_options till
3. - I Compute Option Range behåller ni Mode som
runOnceForEachItemoch behåller den angivna JavaScript-logiken. - I Check Option Loop ställer ni in villkoret till equals med Left Value
={{ $json.result }}och Right Value0.
⚠️ Vanlig fallgrop: Om number_of_options inte är numeriskt kommer Compute Option Range att misslyckas. Låt det vara en numerisk sträng som 3.
Steg 4: Sätt upp AI-generering och uppdateringar i Sheets
Generera ny copy via OpenAI och skriv tillbaka resultat till Google Sheets.
- Öppna Append Sheet Option och ställ in Operation till
append. - I Append Sheet Option mappar ni xid till
={{ Math.random().toString(36).substr(2, 12) }}, date till={{ new Date().toISOString().split('T')[0] }}och status tillProduct Processing. - Välj ert kalkylark i Append Sheet Option: Document till
[YOUR_ID]och Sheet tillSheet1 (gid=0). - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-credentials i Append Sheet Option.
- Öppna Generate New Copy och bekräfta att Model är
gpt-4o-minimed JSON Output aktiverat. - Säkerställ att Generate New Copy använder meddelandemallen som refererar till
{{ $('Extract ID Title Desc').item.json.title }}och{{ $('Extract ID Title Desc').item.json.description }}. - Inloggningsuppgifter krävs: Anslut era openAiApi-credentials i Generate New Copy.
- Obs: Wiki Reference Tool och Math Helper Tool är AI-verktyg kopplade till Generate New Copy; lägg till credentials i Generate New Copy, inte i verktygen.
- I Update Sheet Option ställer ni in Operation till
appendOrUpdateoch matchar på xid. - Mappa värden i Update Sheet Option exakt som visat, till exempel keyword till
={{ $json.message.content.keyword }}och product_title till={{ $json.message.content.title }}. - Inloggningsuppgifter krävs: Anslut era googleSheetsOAuth2Api-credentials i Update Sheet Option.
Steg 5: Konfigurera uppladdningslogik och produktuppdateringar
När en rad markeras för uppladdning uppdaterar arbetsflödet produktdetaljer i Printify.
- I Upload Flag Check ställer ni in villkoret så att Left Value
={{ $json.upload }}är lika med Right Valueyes. - Öppna Retrieve Store List B och ställ in URL till
https://api.printify.com/v1/shops.json. - Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-credentials i Retrieve Store List B.
- I Modify Product Details ställer ni in Method till
PUToch URL till=https://api.printify.com/v1/shops/{{ $json.id }}/products/{{ $('Sheets Row Watcher').item.json.product_id }}.json. - Aktivera Send Body i Modify Product Details och mappa title till
={{ $('Sheets Row Watcher').item.json.product_title }}och description till={{ $('Sheets Row Watcher').item.json.product_desc }}. - Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-credentials i Modify Product Details.
⚠️ Vanlig fallgrop: Om kolumnen upload är tom eller inte exakt är yes kommer Upload Flag Check att blockera uppdateringar.
Steg 6: Testa och aktivera ert arbetsflöde
Kör ett manuellt test för att bekräfta att loopen för copy-generering och uppladdningsflödet fungerar som förväntat.
- Klicka på Execute Workflow från Manual Run Trigger för att generera copy och lägga till poster i Google Sheets.
- Verifiera att Append Sheet Option skriver en ny rad med status satt till
Product Processingoch att Update Sheet Option uppdaterar samma xid. - Ställ manuellt in kolumnen upload till
yespå en rad för att trigga Sheets Row Watcher och passera Upload Flag Check. - Bekräfta att Modify Product Details returnerar ett lyckat svar från Printify och att er produkttitel/-beskrivning uppdateras.
- När testet är lyckat ställer ni arbetsflödet till Active för att aktivera kontinuerlig övervakning.
Se upp för
- Printify API-inloggningar kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera: kontrollera först din credential i n8n för Printify header auth.
- Om du använder Wait-noder eller extern rendering varierar processtider. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din varumärkesröst tidigt, annars kommer du att redigera output i all evighet.
Vanliga frågor
Cirka en timme om dina API-nycklar är klara.
Ja. Ingen kodning krävs, men någon behöver vara bekväm med att koppla konton och redigera texten med varumärkesriktlinjer som OpenAI använder.
Ja. n8n har ett gratisalternativ för egen drift och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna med kostnader för OpenAI API, som vanligtvis ligger på några cent per batch produkter beroende på modell och promptstorlek.
Två alternativ: n8n Cloud (hanterat, enklast setup) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och hanterar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serveradministration.
Börja i noden “Brand Rules & Notes” (Set), eftersom det är där din ton, formateringsregler och SEO-begränsningar ska ligga. Du kan också ändra antalet alternativ genom att justera option-count-noderna (arbetsflödet beräknar ett intervall och loopar igenom det). Om du vill ha godkännande innan publicering: behåll den genererade copyn i Google Sheets och kör bara uppdateringen “Modify Product Details” när en granskare markerar en kolumn “approved”.
Oftast beror det på en ogiltig eller utgången API-token i Printify header auth. Uppdatera credential i n8n och testa sedan om “Retrieve Store List” och “Modify Product Details”-förfrågningarna. Om det fortfarande misslyckas: kontrollera att shop-ID:t som används matchar den butik som din token har åtkomst till, eftersom hämtning av butiker kan fungera medan uppdatering av produkter fallerar på behörigheter.
I självhostad n8n finns ingen hård körningsgräns (det beror främst på din server och API:ers rate limits). I n8n Cloud beror kapaciteten på din plans månatliga körningar. I praktiken kör de flesta team detta i batchar om 20–100 produkter så att de kan granska arket och sedan fortsätta.
Ofta, ja, eftersom det här arbetsflödet behöver loopar, förgreningar och ett robust mönster “skriv till Sheets, uppdatera sedan Printify” som förblir läsbart när det växer. n8n gör det också enklare att köra egen drift, vilket spelar roll om du uppdaterar hundratals listningar och inte vill att varje körning ska mätas och debiteras. Zapier och Make kan fortfarande fungera för en väldigt enkel version, men du stöter på begränsningar så fort du vill ha flera copy-alternativ, villkorad publicering eller starkare loggning. Ytterligare en fördel: du kan ha dina varumärkesregler i en nod och återanvända dem mellan butiker. Om du är osäker, prata med en automationsexpert och beskriv din katalogstorlek och granskningsprocess.
När detta väl är på plats slutar uppdateringar av produkttexter att vara en “någon gång”-uppgift. Du sätter reglerna, kör arbetsflödet och din butik håller en konsekvent ton utan copy-paste-spiralen.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.