Koppelingen
Productdata: één keer goed vastleggen, overal kloppend in je webshop
Artikelnummers uit je ERP, teksten en afbeeldingen uit je PIM en specificaties van je leverancier komen als één product met de juiste varianten in je webshop. Wij bouwen de koppeling op jouw velden en regels, en draaien en bewaken hem daarna.
Welk systeem is leidend voor wat?
Productdata komt bijna nooit uit één systeem. Het artikelnummer en de EAN staan in het ERP, de verkooptekst en de afbeeldingen in het PIM, de technische kenmerken in het bestand van de leverancier. De regel van alle koppelingen, één eigenaar per gegeven, wordt hier per veld ingevuld:
| Gegeven | Meestal leidend | Regel in de koppeling |
|---|---|---|
| Artikelnummer, EAN, eenheid | ERP | altijd uit het ERP; dit is de sleutel waarop alles matcht |
| Titel en omschrijving per taal | PIM | overschrijven bij elke wijziging in het PIM |
| Afbeeldingen, video, documenten | PIM of DAM | volgorde en hoofdafbeelding komen mee |
| Kleur en maat | ERP voor de code, PIM voor de naam | BLK wordt Zwart via een vertaaltabel |
| Technische kenmerken, ETIM-klasse | leverancier of databank | alleen vullen waar het PIM leeg is |
| Categorie in het menu, SEO-tekst | webshop | nooit aanraken |
Achter die tabel zit een verschil in doel. Een ERP beschrijft een artikel voor inkoop, magazijn en facturatie. Een webshop beschrijft hetzelfde artikel voor iemand die het wil kopen. In Exact Online heeft een artikel een Description van 60 tekens en een ExtraDescription van 255. Daar staat WERKBR STR BLK 48, en dat is voor een pakbon genoeg. Op de productpagina hoort "Werkbroek Stretch, zwart, maat 48" met een tekst, vijf foto's en een maattabel.
De fout die deze afspraak voorkomt: het ERP stuurt 's nachts de artikelstam door en zet over de titel die marketing heeft geschreven weer WERKBR STR BLK 48. Daarom krijgt elk veld een van drie schrijfwijzen: altijd overschrijven, alleen vullen als het leeg is, of nooit aanraken. Welke bron bij welk veld hoort leg je vast in de veldmapping.
Wat er precies over de lijn gaat
Een product bestaat in de koppeling uit zeven groepen velden. Niet elke bron levert ze allemaal, en niet elke webshop heeft er een plek voor.
| Groep | Velden | Waar het op vastloopt |
|---|---|---|
| Identificatie | artikelnummer, EAN of GTIN, artikelnummer van de leverancier | twee systemen die een andere sleutel gebruiken |
| Teksten | titel, korte en lange omschrijving, per taal | HTML in de bron, platte tekst in het doel |
| Kenmerken | attributen, eenheden, waardelijsten | het attribuut bestaat nog niet in de webshop |
| Media | afbeeldingen met volgorde en alt-tekst, video, datasheet, veiligheidsblad | een URL die alleen binnen het netwerk van de leverancier werkt |
| Structuur | categorie, varianten, gerelateerde artikelen | de boom van het ERP is niet het menu van de webshop |
| Logistiek | gewicht, afmetingen van de verpakking, besteleenheid | stuks in het ERP, dozen van 12 in de webshop |
| Classificatie | ETIM-klasse en kenmerken, GS1-gegevens | een nieuwe versie van de standaard |
Bij kenmerken is er één onderscheid dat de opbouw in de webshop bepaalt. Een attribuut maakt een variant uniek: maat 48, kleur zwart. Een eigenschap geldt voor alle varianten van een model: materiaal, land van herkomst. Het eerste wordt een keuze op de productpagina, het tweede een regel in de specificaties.
Zo ziet één variant eruit in de API van Akeneo:
{
"uuid": "3f2a9c1e-5b7d-4e8a-9c0f-1d2e3a4b5c6d",
"family": "werkkleding",
"parent": "10482-BLK",
"values": {
"sku": [{"locale": null, "scope": null, "data": "10482-BLK-048"}],
"name": [
{"locale": "nl_NL", "scope": null, "data": "Werkbroek Stretch zwart"},
{"locale": "de_DE", "scope": null, "data": "Arbeitshose Stretch schwarz"}
],
"description": [
{"locale": "nl_NL", "scope": "ecommerce", "data": "<p>Stretchbroek met kniezakken.</p>"}
]
}
}
Elke waarde heeft een locale en een scope. De sku is voor alle talen gelijk, de name bestaat in twee talen en de description alleen in het Nederlands voor het kanaal ecommerce. Voor de Duitse webshop ontbreekt de omschrijving dus. Wat er dan gebeurt is een regel per taal: terugvallen op het Nederlands, leeg laten of niet publiceren. Meer over deze route staat in een PIM koppelen aan je webshop.
Varianten: waar de meeste dagen verloren gaan
Vier kleuren keer zes maten is 24 combinaties voor één werkbroek. Een assortiment van 4.000 producten met gemiddeld 3,6 varianten is 14.400 varianten. Elk systeem bouwt die anders op:
| Systeem | Opbouw | Grens |
|---|---|---|
| Shopify | product met opties en varianten | 3 opties en 2.048 varianten per product |
| Magento | configurable product met simple products eronder | elke simple heeft een eigen SKU |
| WooCommerce | variable product met variations | elke variation heeft een eigen SKU |
| Akeneo | productmodel met variantproducten | de family_variant legt de assen vast |
| Exact Online | losse artikelen | de artikelen-API heeft geen veld voor een hoofdartikel |
De onderste regel kost de meeste tijd. Een ERP zonder variantmodel kent de werkbroek als 24 losse artikelen: 10482-BLK-048, 10482-BLK-050 en zo verder. Zet je die een op een door, dan staan er 24 producten in de webshop. Voor het magazijn klopt dat. Voor de klant niet: hij ziet 24 zoekresultaten en kan op de productpagina geen maat kiezen.
De koppeling heeft dus een veld nodig dat het model aangeeft, en velden voor de assen. Exact Online heeft daarvoor per artikel tien vrije tekstvelden, FreeTextField_01 tot en met FreeTextField_10. Staat het model in het eerste en staan kleur en maat in het tweede en derde, dan groepeert de koppeling op model en maakt hij van elk artikel een variant.
Bij de assen komen drie dingen terug:
- Interne codes. Het ERP zegt
BLKen048, de klant leest Zwart en 48. De vertaaltabel daartussen heeft een eigenaar nodig. Een nieuwe kleurcodeNVYzonder regel in de tabel gaat naar de controlelijst en komt niet als NVY op de productpagina. - Volgorde. Maten die als tekst gesorteerd worden staan op L, M, S, XL. De volgorde komt uit een eigen veld of uit de tabel.
- Een nieuwe as. Krijgt een model met kleur en maat ook een lengtemaat, dan zijn het 4 keer 6 keer 3 is 72 varianten. Het aantal opties is in Shopify op 3 begrensd, dus een vierde as past daar niet in.
Hoe dit per platform wordt opgelost staat bij kleuren en maten als varianten.
Wat er stil misgaat
Fouten in productdata geven zelden een foutmelding. De run slaagt en de webshop toont iets anders dan je bedoelde.
| Wat er gebeurt | Wat je in de webshop ziet | Wat de koppeling doet |
|---|---|---|
| Een UTF-8-bestand wordt gelezen als Windows-1252 | geëloxeerd in de titel |
codering per bron vastleggen en elke run controleren op tekens als à |
| Een EAN verliest zijn voorloopnul, of een UPC van 12 cijfers staat naast een EAN van 13 | het artikel matcht niet meer en wordt niet bijgewerkt | codes als tekst behandelen en aanvullen tot 14 cijfers |
| Een kleurcode heeft geen vertaling | BLK als kleur op de productpagina | het record afkeuren met de reden |
| De leverancier gebruikt een bestandsnaam opnieuw voor een andere foto | de oude foto blijft staan | vergelijken op de inhoud van het bestand, niet op de naam |
| De artikelgroep uit het ERP wordt de categorie | een menu met "0410 Bevestiging div." | een eigen tabel van artikelgroep naar webshopcategorie |
| Het ERP levert één afbeelding per artikel | een productpagina met één foto | extra beelden uit het PIM of uit een map met een vaste naamgeving |
De eerste regel in een voorbeeld. De letter ë is in UTF-8 twee bytes, C3 AB. Een programma dat Windows-1252 verwacht leest ze als twee losse tekens:
In het bestand (UTF-8): Koppelstuk 22 mm, geëloxeerd
Gelezen als Windows-1252: Koppelstuk 22 mm, geëloxeerd
De laatste regel van de tabel geldt voor Exact Online: een artikel heeft daar één afbeeldingsveld, Picture, met een PictureUrl. De andere vier foto's van de productpagina komen uit een andere bron.
Bij 14.400 varianten kijk je dit niet meer met het oog na. De controle bestaat uit regels die elke run over de hele set gaan: elke variant heeft een EAN van 13 cijfers met een kloppend controlecijfer, elk product heeft een hoofdafbeelding, geen titel bevat Ã, elke kleurcode staat in de vertaaltabel. Wat een regel niet haalt gaat naar de controlelijst. De achtergrond staat in tekencodering en UTF-8, SKU of EAN en CSV en Excel van leveranciers.
Doorvoer en limieten
Productdata verandert minder vaak dan voorraad, maar één record is veel groter: tientallen velden, meerdere talen en afbeeldingen. De limieten, op 3 oktober 2026 nagelezen in de documentatie van Akeneo, Shopify, WooCommerce en Exact Online:
| Systeem | Limiet | Gevolg voor 14.400 varianten |
|---|---|---|
| Akeneo | 100 verzoeken per seconde per PIM, 4 tegelijk per verbinding, 100 records per pagina | lezen kost 144 verzoeken |
| Exact Online | 60 verzoeken per minuut en 5.000 per dag; 60 records per verzoek, 1.000 via de bulk- en sync-endpoints | 240 verzoeken, of 15 via bulk |
| Shopify | 100 kostenpunten per seconde; een bulkbewerking leest een JSONL-bestand tot 100 MB en moet binnen 24 uur klaar zijn | de eerste lading gaat als bulkbewerking |
| WooCommerce | 100 objecten per batchverzoek | 40 verzoeken voor de producten, daarna de variations per product |
De eerste lading van 4.000 producten, 14.400 varianten en 20.000 afbeeldingen, uitgerekend:
- Lezen uit Exact Online. 14.400 gedeeld door 60 records per verzoek is 240 verzoeken. Bij 60 verzoeken per minuut duurt dat 4 minuten en kost het 240 van de 5.000 verzoeken van die dag. Via het bulk-endpoint zijn het 15 verzoeken.
- Schrijven naar WooCommerce. 4.000 producten in batches van 100 is 40 verzoeken. De variations gaan per product in een eigen batch: 4.000 verzoeken. Samen 4.040. Verwerkt de server van de webshop er twee per seconde, dan is dat 2.020 seconden: bijna 34 minuten.
- Afbeeldingen. 20.000 foto's van gemiddeld 1,5 MB zijn 30.000 MB, dus 30 GB. Dit deel bepaalt hoe lang de eerste lading duurt.
Daarna gaat alleen mee wat gewijzigd is. Akeneo filtert daarvoor op de datum van de laatste wijziging:
GET /api/rest/v1/products-uuid?search={"updated":[{"operator":">","value":"2026-10-02 22:00:00"}]}&limit=100
Bij 300 gewijzigde producten zijn dat 3 verzoeken in plaats van 144. Voor afbeeldingen werkt hetzelfde met een controlegetal per bestand: 40 nieuwe foto's op een dag zijn 60 MB in plaats van 30 GB. Het tijdstip in het filter is UTC bij de cloudversie van Akeneo. Een run die om 00:00 Nederlandse tijd vraagt om "alles sinds gisteren" en de tijdzone niet omrekent, mist de wijzigingen van een of twee uur. De som voor je eigen aantallen maak je met doorvoer berekenen.
Classificatie: ETIM, GS1 en DICO
In de bouw en de installatietechniek vragen groothandels en hun afnemers om geclassificeerde productdata: een artikel met een ETIM-klasse en ingevulde kenmerken is te filteren en te vergelijken, een artikel met alleen een omschrijving niet. Drie standaarden komen steeds terug.
ETIM deelt technische producten in klassen in en legt per klasse de kenmerken vast. Een klasse heeft een code van EC en zes cijfers, een kenmerk EF en zes cijfers, een waarde EV en zes cijfers. Klasse EC001375 is bijvoorbeeld de accu-excenterschuurmachine. Een kenmerk heeft een van vier typen, en elk type wordt in de webshop een ander soort filter:
| Type | Betekenis | In de webshop |
|---|---|---|
| A | keuze uit een vaste lijst waarden | filter met aankruisvakjes |
| L | ja of nee | filter met ja en nee |
| N | één getal met een eenheid | filter op een bereik |
| R | twee getallen die een bereik begrenzen | twee attributen, minimum en maximum |
Het type R is het lastigst: de meeste webshopplatformen hebben geen attribuut dat twee getallen bevat. De koppeling splitst het in een minimum en een maximum. Een nieuwe release wijzigt klassen en kenmerken, ETIM 10.0 voegde 119 klassen toe. De mapping legt daarom vast op welke release hij gebaseerd is.
GS1 geeft de GTIN uit, het nummer achter de streepjescode. Een GTIN heeft 8, 12, 13 of 14 cijfers. GS1 raadt aan ze op te slaan in een tekstveld van 14 posities met nullen ervoor. 8712345678906 wordt 08712345678906, en een UPC van 12 cijfers en dezelfde code als EAN-13 komen dan op dezelfde waarde uit.
DICO is de berichtenstandaard van Ketenstandaard Bouw en Techniek voor de Nederlandse bouw- en technieksector. Naast orders en facturen kent DICO berichten voor artikelgegevens en productinformatie.
De uitwerking staat bij ETIM- en GS1-classificatie in je webshop en in de kennisbank bij wat is ETIM, wat is GS1 en GDSN en wat is DICO. Voor de branche zelf: bouw en installatietechniek.
Leveranciersdata als bron
Wie geen eigen PIM vult, krijgt productdata van leveranciers: een CSV per e-mail, een Excel met drie werkbladen, een XML op een SFTP-server of een databank zoals EZ-base, die leveranciersdata structureert volgens ETIM en GS1. Elke leverancier heeft eigen kolomnamen. De ene noemt het Artnr;EAN;Omschr, de andere item_no,gtin,description_nl, en bij de derde staat de eenheid in de omschrijving.
De koppeling brengt elk bestand naar één vaste indeling voordat er iets naar het PIM of de webshop gaat. Per leverancier staat vast welke kolom welk veld is, welke tekencodering het bestand heeft, of het een volledig bestand is of alleen de wijzigingen, en wat het betekent als een artikel ontbreekt. Bij een volledig bestand is een ontbrekend artikel uit het assortiment. Bij een bestand met wijzigingen is het onveranderd.
Wanneer een PIM het werk waard is, laat zich uitrekenen. 2.000 wijzigingen per jaar die elk in drie kanalen met de hand worden doorgevoerd, tegen vijf minuten per keer, zijn 30.000 minuten. Dat is 500 uur, ruim 62 werkdagen van acht uur. Met één bron en een koppeling naar de kanalen voer je de wijziging één keer in.
Levert de leverancier ook een adviesprijs of een inkoopprijs mee, dan hoort die bij de prijzenstroom. De voorraad en levertijd uit hetzelfde bestand horen bij voorraad en beschikbaarheid. Het verschil tussen een PIM en een ERP staat in wat is een PIM-systeem.
Jij houdt de controle
Een eerste lading van 4.000 producten zet je niet in één keer live. De koppeling draait eerst droog: hij leest de echte bronnen, past alle regels toe en schrijft niets naar de webshop. Het resultaat is een overzicht:
| Uitkomst van de dry run | Aantal |
|---|---|
| Producten gelezen | 4.000 |
| Klaar voor de webshop | 3.640 |
| Afgekeurd: geen hoofdafbeelding | 210 |
| Afgekeurd: geen EAN | 95 |
| Afgekeurd: kleurcode zonder vertaling | 55 |
De 360 afgekeurde producten staan op een controlelijst met de reden per product. Ze worden niet stil overgeslagen. Na herstel in de bron gaan ze met de volgende run mee.
Daarna kies je per bron of wijzigingen op goedkeuring wachten of direct doorgaan. Producten met een tekst die je in de webshop zelf beheert, zet je op een uitsluitingslijst. Na elke run staat er per product en per veld wat er is gewijzigd: 10482-BLK-048, titel nl_NL, van "Werkbroek stretch" naar "Werkbroek Stretch zwart", bron Akeneo. Hoe dat werkt staat bij dry run en goedkeuring en audit trail.
Wij bouwen de koppeling voor een vaste prijs en hosten, draaien en bewaken hem daarna voor een vast bedrag per maand. Verandert een leverancier zijn kolommen of brengt een pakket een nieuwe API-versie uit, dan passen wij de koppeling aan. Vertel welke bronnen en welke webshop je hebt.
Systemen en platformen
Productdata loopt van een bron naar een of meer kanalen. Per systeem een eigen pagina met hoe het gegevens vrijgeeft en waar de mapping op vastloopt:
| Groep | Systemen | Wat bij productdata telt |
|---|---|---|
| PIM en databanken | Akeneo, Pimcore, inriver, Salsify, EZ-base | waarden per taal en per kanaal; bij Akeneo 100 records per pagina |
| ERP | Exact Online, AFAS, Business Central | korte omschrijvingen en losse artikelen; bij Exact Online 60 tekens en één afbeelding |
| Webshopplatformen | Shopify, Magento, WooCommerce, Shopware | het variantmodel; bij Shopify 3 opties en 2.048 varianten |
De andere stromen gebruiken de producten die deze stroom aanmaakt. Voorraad en prijzen worden per variant bijgewerkt, en een order verwijst naar de sku die hier is vastgelegd. Een artikelnummer dat in deze stroom niet matcht, krijgt in de andere drie ook geen update.
Veelgestelde vragen
Kan een PIM ook data van onze leveranciers verwerken?
Ja, mits de bestanden eerst naar één vaste indeling gaan. Elke leverancier levert eigen kolomnamen, eigen eenheden en een eigen tekencodering aan. De koppeling zet elk bestand om naar de attributen van je PIM en keurt regels af die geen artikelnummer of EAN hebben. Daarna verrijk je de artikelen in het PIM en gaan ze door naar de webshop.
Wat is het verschil tussen een PIM en een ERP?
Een ERP beschrijft een artikel voor inkoop, voorraad en facturatie: artikelnummer, eenheid, prijs, btw-code. Een PIM beschrijft hetzelfde artikel voor de klant: verkooptekst per taal, afbeeldingen, kenmerken en documenten. In Exact Online is de omschrijving van een artikel 60 tekens lang. Een productpagina heeft meer nodig dan dat, en daar begint het PIM.
Waar kan ik het beste mijn artikelen beheren?
Per veld op één plek. Artikelnummer, EAN, eenheid en prijs in het ERP, omdat inkoop en facturatie erop draaien. Teksten, afbeeldingen en kenmerken in het PIM, of in de webshop als je geen PIM hebt. De koppeling legt per veld vast welke bron leidend is en schrijft alleen die velden.
Worden varianten en samengestelde producten goed overgenomen?
Varianten worden gegroepeerd op een modelcode, met kleur en maat als opties. Staan ze in het ERP als losse artikelen, dan legt de koppeling vast welk veld het model aangeeft en welke velden de assen zijn. Een samengesteld product komt over als een product met een stuklijst. De voorraad ervan rekent de voorraadstroom uit de onderdelen.
Wat gebeurt er met een ontbrekende vertaling?
Dat is een regel per taal en per veld, en er zijn drie mogelijkheden: terugvallen op de hoofdtaal, het veld leeg laten, of het product in die taal niet publiceren. Een product met een Nederlandse titel en zonder Duitse titel komt dan niet half vertaald in de Duitse webshop te staan. Het staat op de controlelijst met de reden erbij.
Ik heb al duizenden producten. Kunnen die in één keer over?
Ja. De eerste lading gaat in grote pagina's of als bulkbewerking: 14.400 artikelen uit Exact Online zijn 15 verzoeken via het bulk-endpoint. De afbeeldingen kosten de meeste tijd, 20.000 foto's van 1,5 MB zijn 30 GB. Daarom draait de eerste lading eerst droog en daarna in delen, zodat je het resultaat per deel kunt nakijken.
Overschrijft de koppeling teksten die we in de webshop hebben aangepast?
Alleen als de webshop voor dat veld niet de eigenaar is. Per veld staat vast of de koppeling het altijd overschrijft, alleen vult als het leeg is, of nooit aanraakt. Een SEO-tekst of een categorie die je in de webshop beheert blijft staan, ook als het ERP een nieuwe omschrijving stuurt.
Verwijdert de koppeling producten die uit het PIM of het leveranciersbestand verdwijnen?
Niet vanzelf. Een product dat vandaag ontbreekt kan uit het assortiment zijn, of het bestand is half aangekomen. Per bron staat vast wat ontbreken betekent: niets doen, het product op niet zichtbaar zetten, of het na een aantal runs archiveren. Verdwijnt in één run een groot deel van de producten, dan stopt de run en krijg je een melding.
Vertel wat je nodig hebt
Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.
- Je weet de prijs en de doorlooptijd voordat je iets toezegt
- Wij zoeken uit welke koppeling het werk uit handen neemt
- Wij verzorgen de bouw, hosting, bewaking en het onderhoud
- Je team krijgt minder overtypwerk en minder uitzoekwerk