Stap 1: Waarom productbeschrijvingen schrijven tijdverspilling is
Nora Bakker runde NaturaBodems.nl al vier jaar. Haar webshop met natuurlijke vloerbedekking groeide gestaag: van 80 producten in 2023 naar 340 SKUs in 2026. Bamboe vloeren, kurkvloeren, jute karpetten, gerecycled teakhout -- elk product met eigen kenmerken, doelgroep en verkoopargumenten.
Het probleem: elke productbeschrijving kostte Nora of haar copywriter gemiddeld 2 uur. Productnaam opzoeken, materiaalspecificaties doorlezen, USPs formuleren, SEO-zoekwoorden verwerken, tone of voice bewaken. 340 producten x 2 uur = 680 uur werk. Bij een uurtarief van 75 euro is dat ruim 51.000 euro aan copywritingkosten.
Nora bouwde in een middag een n8n-workflow die dit probleem oploste. Het resultaat: 340 SEO-geoptimaliseerde productbeschrijvingen in 45 minuten, voor circa 4 euro aan Anthropic API-kosten. In deze handleiding leer je exact hoe ze dat deed -- stap voor stap, inclusief de exacte prompts en configuraties.
Wat je aan het einde van deze handleiding hebt gebouwd: een volledig geautomatiseerde pipeline die productdata uit Google Sheets leest, via Claude Sonnet omzet naar professionele beschrijvingen, en de output automatisch terugschrijft naar diezelfde sheet. Klaar om te schalen naar duizenden producten.
Stap 2: Wat je nodig hebt
Voordat je begint, zorg dat je het volgende hebt klaarstaan:
- n8n account: cloud trial via n8n.io (gratis 14 dagen) of zelfgehost via Docker. Zelfhosten is gratis en aanbevolen voor productiegebruik.
- Google account met toegang tot Google Sheets en Google Drive.
- Anthropic API-sleutel: aanmaken via console.anthropic.com. Laad 10 euro op voor ruimschoots voldoende credits voor je eerste testrun.
- Google Sheet met minimaal deze kolommen: productnaam, materiaal, kenmerken, doelgroep, prijsklasse.
- Basiskennis van n8n: je weet hoe je nodes toevoegt en verbindt. Nog nooit gebruikt? Lees eerst onze introductiehandleiding op workflows.nl.
Tijdsinvestering: 60 minuten voor de eerste opzet. Daarna draait de workflow volledig automatisch.
Stap 3: Google Sheet voorbereiden
De Google Sheet is de databron van je workflow. Structuur is hier cruciaal -- rommel erin, rommel eruit. Maak een nieuw sheet aan met de naam 'Producten' en gebruik exact deze kolomnamen in rij 1:
Kolom A: productnaam (bijv. Bamboe Vloer Naturel 10mm)
Kolom B: materiaal (bijv. 100% Moso bamboe, gelamineerd)
Kolom C: kenmerken (bijv. Waterdicht, krasbestendig, FSC-gecertificeerd)
Kolom D: doelgroep (bijv. Gezinnen met kinderen en huisdieren)
Kolom E: prijsklasse (bijv. Middensegment, 45-65 euro per m2)
Kolom F: beschrijving_concept (wordt gevuld door n8n)
Kolom G: beschrijving_definitief (voor jouw eigen revisie)
Kolom H: status (leeg / gegenereerd / goedgekeurd)
Voeg een hulpkolom toe om alle productdata samen te voegen voor de AI. Zet in kolom I (of een verborgen kolom) deze Google Sheets formule:
=CONCATENATE(
"Productnaam: "; A2; CHAR(10);
"Materiaal: "; B2; CHAR(10);
"Kenmerken: "; C2; CHAR(10);
"Doelgroep: "; D2; CHAR(10);
"Prijsklasse: "; E2
)
Vul minimaal 5 testrijen in voordat je begint. Nora had haar complete productcatalogus al in een Excel-bestand staan -- ze importeerde die met Bestand, Importeren in Google Sheets. Vergeet niet kolom H (status) leeg te laten voor alle rijen die nog gegenereerd moeten worden.
Stap 4: Nieuw n8n scenario aanmaken
Log in op je n8n-dashboard en klik rechtsboven op 'New Workflow'. Geef de workflow een duidelijke naam die aangeeft wat hij doet en wanneer. Nora noemde de hare: 'NaturaBodems -- Productbeschrijvingen Generator v1'.
- Gebruik altijd een versienummer (v1, v2) in de naam -- je zult de workflow later aanpassen.
- Activeer 'Error Workflow' pas nadat je de workflow hebt getest. Begin met foutmeldingen uitgeschakeld.
- Sla de workflow meteen op met Cmd+S (Mac) of Ctrl+S (Windows) zodat je geen werk verliest.
Rechtsboven in het canvas zie je drie tabs: Canvas, Settings en Executions. Klik op Settings en stel de timezone in op Europe/Amsterdam. Dit is relevant als je de workflow later op een schema wilt laten draaien.
Stap 5: Google Sheets node instellen
Klik op het plusje in het canvas en zoek naar 'Google Sheets'. Voeg de node toe en kies als actie 'Get Many Rows'. Dit leest alle rijen uit je spreadsheet in een keer.
Klik op 'Credential for Google Sheets API' en selecteer 'Create New'. n8n opent een OAuth-flow: log in met je Google account en geef toestemming. Eenmalig instellen, daarna werkt het automatisch.
{
"operation": "getAll",
"documentId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms",
"sheetName": "Producten",
"options": {
"returnAllMatches": true,
"valueRenderMode": "FORMATTED_VALUE"
},
"filters": {
"conditions": [
{
"column": "status",
"operation": "isEmpty"
}
]
}
}
Let op het filter: we halen alleen rijen op waarbij de statuskolom leeg is. Zo verwerk je nooit een product twee keer -- ook handig als de workflow halverwege crasht en je hem opnieuw moet starten.
Voor datasets groter dan 1.000 rijen: activeer 'Return All' in de node-instellingen. n8n pagineert dan automatisch door de Google Sheets API. Nora's 340 producten pasten in een API-call.
Stap 6: SplitInBatches node toevoegen
Voeg na de Google Sheets node een 'Split In Batches' node toe. Koppel de output van Google Sheets aan de input van SplitInBatches.
Waarom batches? De Anthropic API heeft rate limits: standaard 50 requests per minuut voor nieuwe accounts. Als je 340 producten tegelijk instuurt, krijg je binnen seconden een 'Rate limit exceeded' fout. Batches van 10 zijn veilig en snel genoeg.
{
"batchSize": 10,
"options": {
"reset": false
}
}
Stel batchSize in op 10. Waarom niet groter? Elke Claude-aanroep kost circa 0.012 seconden verwerkingstijd plus netwerktijd. Met batchSize 10 en een korte pauze ertussen, blijf je ruim onder de rate limits. Nora testte met batchSize 25 en liep tegen limieten aan -- 10 werkte stabiel.
Stap 7: Claude AI-node configureren
Voeg een 'HTTP Request' node toe (of de Anthropic-node als je n8n 1.50+ hebt). Verbind hem met de SplitInBatches-output. Dit is het hart van de workflow.
{
"method": "POST",
"url": "https://api.anthropic.com/v1/messages",
"authentication": "headerAuth",
"headers": {
"x-api-key": "{{ $credentials.anthropicApiKey }}",
"anthropic-version": "2023-06-01",
"content-type": "application/json"
},
"body": {
"model": "claude-sonnet-4-6",
"max_tokens": 800,
"temperature": 0.7,
"system": "{{ $json.system_prompt }}",
"messages": [
{
"role": "user",
"content": "{{ $json.user_prompt }}"
}
]
}
}
Gebruik model 'claude-sonnet-4-6' -- dat is in 2026 de beste balans tussen kwaliteit en kosten voor bulk content. Temperature 0.7 geeft genoeg variatie zodat beschrijvingen niet allemaal hetzelfde klinken, maar niet zo hoog dat de output oncontroleerbaar wordt. Max tokens 800 is ruim voldoende voor een beschrijving van 150-200 woorden.
Stap 8: De perfecte prompt schrijven
De kwaliteit van de output staat of valt met de prompt. Hier is de exacte systeem-prompt die Nora gebruikt -- geoptimaliseerd na drie iteraties:
SYSTEEM-PROMPT:
Je bent een ervaren e-commerce copywriter gespecialiseerd in duurzame vloerbedekking en
interieurproducten. Je schrijft voor NaturaBodems.nl, een Nederlandse webshop gericht op
bewuste consumenten die kiezen voor natuurlijke materialen.
SCHRIJFSTIJL:
- Warm en deskundig, niet salesy
- Actieve zinnen, geen passieve constructies
- Nooit superlatieven als 'beste' of 'goedkoopste'
- Gebruik sensorische woorden (voelt, ruikt, klinkt)
- Nederlandse spelling, formeel maar toegankelijk
SEO-RICHTLIJNEN:
- Verwerk de productnaam exact in de eerste zin
- Voeg 1 long-tail zoekwoord toe dat past bij het product
- Eindig met een call-to-action (max 1 zin)
FORMAT:
- Exact 150-200 woorden
- Geen markdown opmaak (geen *, #, of **)
- Geen prijzen noemen
- Geen bulletpoints, alleen lopende tekst
- Begin NIET met 'Dit product' of 'Introductie'
- Geef ALLEEN de beschrijving terug, geen uitleg of commentaar
GEBRUIKERS-PROMPT (met n8n variabelen):
Schrijf een productbeschrijving voor het volgende product:
Productnaam: {{ $json.productnaam }}
Materiaal: {{ $json.materiaal }}
Kenmerken: {{ $json.kenmerken }}
Doelgroep: {{ $json.doelgroep }}
Prijsklasse: {{ $json.prijsklasse }}
Zorg dat de beschrijving aansluit bij de doelgroep en de unieke kenmerken
van het materiaal benadrukt. Verwerk een relevante zoekterm die potentiele
kopers zouden googlen.
Twee aparte prompts -- systeem en gebruiker -- geven Claude meer context dan alles in een grote prompt. De systeem-prompt definieert de persona en de regels. De gebruikers-prompt geeft de productspecifieke data mee als variabelen die n8n automatisch invult vanuit de Google Sheet.
Stap 9: Output verwerken
De Anthropic API geeft een JSON-response terug. Je moet de tekst eruit extraheren en eventueel opschonen. Voeg een 'Code' node (JavaScript) toe na de HTTP Request node:
// Extraheer de gegenereerde tekst uit de Claude response
const response = $input.first().json;
// Haal de tekstinhoud op uit de API response
let beschrijving = response.content[0].text;
// Cleanup: verwijder overtollige whitespace en newlines
beschrijving = beschrijving.trim();
beschrijving = beschrijving.replace(/\n{3,}/g, '\n\n');
beschrijving = beschrijving.replace(/\*\*/g, '');
beschrijving = beschrijving.replace(/#{1,6}\s/g, '');
// Tel het aantal woorden voor kwaliteitscheck
const wordCount = beschrijving.split(/\s+/).length;
return [{
json: {
beschrijving: beschrijving,
wordCount: wordCount,
rijnummer: $input.first().json.rijnummer,
productnaam: $input.first().json.productnaam,
kwaliteitsCheck: wordCount >= 150 && wordCount <= 220 ? 'OK' : 'CONTROLEER'
}
}];
De kwaliteitscheck is een handige extra: als de woordtelling buiten het gewenste bereik valt, markeer je de rij voor handmatige review. Nora voegt een extra kolom 'woordtelling' toe zodat ze in een oogopslag ziet welke beschrijvingen te kort of te lang zijn.
Stap 10: Terugschrijven naar Google Sheets
Voeg een tweede Google Sheets node toe, nu met actie 'Update Row'. Dit schrijft de gegenereerde beschrijving terug naar de juiste rij in je sheet.
{
"operation": "update",
"documentId": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms",
"sheetName": "Producten",
"columnToMatch": "rijnummer",
"matchingColumn": "A",
"fieldsToUpdate": {
"beschrijving_concept": "={{ $json.beschrijving }}",
"status": "gegenereerd",
"woordtelling": "={{ $json.wordCount }}",
"gegenereerd_op": "={{ new Date().toISOString().split('T')[0] }}"
}
}
Cruciaal: zorg dat je de rij matcht op het rijnummer, niet op de productnaam. Productnamen kunnen duplicaten bevatten of speciale tekens hebben die problemen geven. Het rijnummer is altijd uniek en stabiel. n8n kan het rijnummer ophalen via de Google Sheets node -- het zit standaard in het outputveld 'row_number'.
Stap 11: Foutafhandeling toevoegen
Een workflow zonder foutafhandeling is als een auto zonder rem -- werkt prima totdat het fout gaat. Voeg een 'Error Trigger' node toe die actief wordt bij elke fout in de workflow.
{
"errorTrigger": {
"retryOnFail": true,
"maxTries": 3,
"waitBetweenTries": 30000
},
"onError": {
"actions": [
{
"type": "logToSheet",
"sheetName": "Fouten",
"columns": {
"tijdstip": "={{ new Date().toISOString() }}",
"productnaam": "={{ $json.productnaam }}",
"foutmelding": "={{ $json.error.message }}",
"fouttype": "={{ $json.error.name }}"
}
},
{
"type": "sendEmail",
"to": "nora@naturabodems.nl",
"subject": "n8n workflow fout -- actie vereist",
"body": "De productbeschrijving workflow heeft een fout ontmoet."
}
]
}
}
- Retry na 30 seconden: de meeste tijdelijke fouten (netwerk, rate limit) zijn dan al opgelost.
- Maximaal 3 pogingen: na 3 mislukte pogingen geef je het op en log je de fout.
- Logging naar 'Fouten'-sheet: maak een apart tabblad aan. Zo kun je na afloop precies zien welke producten opnieuw verwerkt moeten worden.
- E-mail notificatie via Gmail of SMTP node: Nora krijgt een mail als er meer dan 5 fouten optreden.
Stap 12: Workflow testen
Test altijd met een kleine dataset voordat je de volledige productcatalogus verwerkt. Gebruik de 'Execute Workflow' knop bovenaan het canvas.
- Vul 5 testrijen in je Google Sheet -- zorg voor variatie in producttypes.
- Klik op 'Execute Workflow' en watch the magic happen.
- Lees de 5 gegenereerde beschrijvingen kritisch door: klinken ze als je merk? Zijn de woordtellingen correct?
- Pas de systeem-prompt aan als de toon niet klopt. Voeg specifieke voorbeeldzinnen toe die je stijl demonstreren.
- Test daarna met 20 rijen. Als alles stabiel loopt, schaal je naar de volledige dataset.
Nora had na de eerste test twee aanpassingen: ze voegde 'Noem nooit garantieperiodes of leveringstijden' toe aan de systeem-prompt, en ze paste de temperature aan van 0.5 naar 0.7 omdat de beschrijvingen te uniform klonken.
Stap 13: Troubleshooting -- de 5 meest voorkomende problemen
Probleem 1: Rate limit exceeded bij Anthropic
Oorzaak: je verstuurt te veel API-requests per minuut. Standaard limiet voor nieuwe accounts is 50 RPM (requests per minute).
- Oplossing: voeg een 'Wait' node toe tussen de SplitInBatches en de HTTP Request node. Stel de wachttijd in op 2 seconden. Met batchSize 10 en 2 seconden wachttijd verwerk je 300 producten per minuut -- veilig onder de limiet.
- Upgrade je Anthropic-account naar Tier 2 voor hogere limieten (na 100 euro uitgegeven aan API-kosten).
Probleem 2: Google Sheets OAuth verlopen
Symptoom: de workflow faalt met 'Invalid Credentials' of '401 Unauthorized' na een paar weken.
- Oplossing: ga naar n8n, Settings, Credentials, zoek je Google Sheets credential op en klik 'Reconnect'. Doorloop de OAuth-flow opnieuw. Google tokens verlopen na 7 dagen inactiviteit -- plan de workflow minstens wekelijks.
Probleem 3: Output bevat markdown tekens
Symptoom: je beschrijvingen bevatten sterretjes voor bold tekst of hekjes voor koppen. Dit ziet er lelijk uit als je de tekst kopieert naar je webshop.
- Oplossing stap 1: voeg expliciet toe aan je systeem-prompt: Gebruik NOOIT markdown opmaak. Geen sterretjes, geen hekjes, geen underscores.
- Oplossing stap 2: de cleanup-code in je JavaScript node verwijdert markdown automatisch als fallback.
Probleem 4: Workflow stopt bij rij 47
Symptoom: de workflow draait prima voor de eerste 46 producten en crasht dan zonder duidelijke foutmelding. Vaak een timeout-probleem.
- Oplossing: verklein batchSize naar 5 en voeg een wachttijd van 5 seconden toe tussen batches. Als dat niet helpt, splits je dataset op in twee Google Sheets van elk 170 rijen en run de workflow twee keer.
- Controleer ook of je n8n-installatie voldoende geheugen heeft. Bij zelfhosting: minimaal 2GB RAM aanbevolen voor grote workflows.
Probleem 5: Beschrijvingen klinken allemaal hetzelfde
Symptoom: na 50 beschrijvingen merk je dat Claude steeds dezelfde zinsbouw en woordkeuze gebruikt. De output is correct maar niet boeiend.
- Oplossing 1: verhoog temperature naar 0.9. Meer randomness geeft meer variatie in woordkeuze en zinsbouw.
- Oplossing 2: voeg aan je gebruikers-prompt toe: Begin de beschrijving met een andere invalshoek: focus op gevoel, toepassingen, duurzaamheid of het ambacht achter het product.
- Oplossing 3: gebruik twee verschillende systeem-prompts en wissel af per product via een IF-node in n8n.
Stap 14: Vier uitbreidingen voor gevorderde gebruikers
Uitbreiding 1: Meertalige beschrijvingen (NL, EN, DE)
Nora verkoopt ook in Belgie en Duitsland. Ze voegde een extra loop toe die dezelfde productdata door Claude haalt met een andere systeem-prompt: eerst Nederlands, dan Frans (voor Belgie), dan Duits. Drie beschrijvingen per product in een workflow-run. Kolommen F, G en H bevatten nu NL/FR/DE versies.
Uitbreiding 2: Automatisch publiceren naar WooCommerce of Shopify
In plaats van beschrijvingen terugschrijven naar Google Sheets, stuur je ze direct naar je webshop-API. WooCommerce heeft een REST API, Shopify ook. Voeg een extra HTTP Request node toe na de Claude-node die de beschrijving via PUT /products/{id} bijwerkt. Je hebt het product-ID nodig in je Google Sheet als extra kolom.
Uitbreiding 3: A/B-test varianten genereren
Genereer per product twee versies: een beschrijving die de emotionele voordelen benadrukt ('hoe voelt het?') en een die de technische specs benadrukt ('wat zijn de specs?'). Sla beide op in aparte kolommen. Gebruik je A/B-testplatform om te meten welke variant beter converteert.
Uitbreiding 4: Meta descriptions en alt-teksten in dezelfde run
Voeg twee extra Claude-calls toe aan de workflow: een voor de meta description (max 155 tekens, met zoekwoord) en een voor de alt-tekst van de productafbeelding (beschrijvend, zonder zoekwoordstuffing). Drie outputs per product, drie API-calls -- de kosten blijven minimaal dankzij Claude Sonnet's lage prijsstructuur.
Stap 15: Conclusie -- wat heeft dit Nora opgeleverd?
Nora runde haar workflow op een zaterdagochtend. Om 09:15 startte ze de workflow. Om 10:00 had ze 340 productbeschrijvingen klaarstaan in haar Google Sheet. Totale API-kosten: 3,82 euro. Ze besteedde vervolgens 2 uur aan kwaliteitscontrole en paste 23 beschrijvingen handmatig aan. De overige 317 waren direct bruikbaar.
De tijdsbesparing is enorm: 680 uur handmatig werk teruggebracht naar 45 minuten automatisch plus 2 uur review. Maar de echte winst zit in de schaalbaarheid. Als NaturaBodems.nl volgend jaar uitbreidt naar 600 producten, draait Nora de workflow opnieuw -- zonder extra kosten of extra tijd.
De workflow werkt ook voor andere content: categoriebeschrijvingen, FAQ-antwoorden, nieuwsbrief-intros per productgroep. Het fundament is hetzelfde: data in Google Sheets, Claude als schrijfmotor, output automatisch terugschrijven.
Wil je verder gaan met n8n en AI-automatisering? Lees dan onze handleiding over het bouwen van een volledig autonome n8n ReAct Agent met Claude, of bekijk de 5 beste AI-tools voor klantenservice in het MKB.
Start vandaag met je eerste test. Maak een Google Sheet met 5 producten, bouw de workflow in 60 minuten, en zie met eigen ogen hoe Claude jouw productdata omzet naar overtuigende teksten. De eerste 5 beschrijvingen kosten je letterlijk minder dan een eurocent aan API-kosten.