Een eigen PIM bouwen op Laravel en Filament is slim als je datamodel afwijkt van de standaard, je naar twee of drie kanalen exporteert en je al een Laravel-backoffice hebt. Het is niet slim als je naar tientallen marktplaatsen publiceert of een team van tien verrijkers hebt. Dan wint een...
Een eigen PIM bouwen op Laravel en Filament is slim als je datamodel afwijkt van de standaard, je naar twee of drie kanalen exporteert en je al een Laravel-backoffice hebt. Het is niet slim als je naar tientallen marktplaatsen publiceert of een team van tien verrijkers hebt. Dan wint een standaard PIM, ook als de licentie (bij Pimcore Professional $9.900 per jaar) duurder oogt.
Wat is een PIM eigenlijk, en waarom zou je er zelf een bouwen?
Een PIM (Product Information Management) is één bron van waarheid voor productdata: attributen, varianten, vertalingen, afbeeldingen en de status van verrijking. Zelf bouwen loont alleen als je die bron precies wilt vormen naar je eigen proces in plaats van andersom.
In de praktijk zien wij drie situaties waarin iemand "eigen PIM" zegt:
- Productdata leeft in Excel, het ERP en de Magento-admin tegelijk. Niemand weet welke versie klopt.
- Er is al een standaard PIM, maar het team werkt eromheen omdat het datamodel niet past.
- Er draait al een Laravel-applicatie voor orders, voorraad of klanten. Productdata is de logische volgende stap.
Die laatste is het sterkste argument. Onze eigen backoffice draait op Filament. Een productmodule toevoegen aan een bestaande Filament-omgeving is wezenlijk iets anders dan een PIM vanaf nul neerzetten. Of je überhaupt een PIM nodig hebt naast je webshop, lees je in PIM-systeem naast Magento 2.
Eigen PIM vs Akeneo, Pimcore en Plytix: wat kost wat?
Standaard PIM's verkopen licenties en features. Een eigen PIM verkoopt niets: je betaalt ontwikkeltijd en onderhoud. De vergelijking hieronder gebruikt alleen prijzen die de leveranciers zelf publiceren.
| Eigen PIM (Laravel + Filament) | Akeneo | Pimcore | Plytix | |
|---|---|---|---|---|
| Licentie | Geen. Filament is MIT, gratis | Community Edition open source; SaaS-edities op offerte | Community Edition gratis onder POCL tot €5M omzet; Professional $9.900/jaar, Enterprise $29.900/jaar | Gratis instapplan met SKU-limiet; betaalde plannen schalen met SKU-aantal |
| Datamodel | Precies wat jij nodig hebt | Families, attributen, variant-modellen | Zeer flexibel, ook voor MDM/DAM | Vast model met eigen attributen |
| Connectors | Zelf bouwen | Veel via marketplace en partners | Via bundles en partners | Shopify-connector en feeds als modules |
| Workflow/verrijking | Zelf bouwen | Ingebouwd (completeness, rechten per edition) | Ingebouwd, uitgebreid | Ingebouwd |
| Hosting | Jouw Laravel-stack | SaaS of self-hosted (CE) | Self-hosted of PaaS | SaaS |
| Risico | Je bent zelf de leverancier | Licentie- en editiewijzigingen | Licentiewijziging (GPL naar POCL) | Prijswijzigingen, vendor lock-in |
Bronnen: Pimcore pricing, Pimcore over de overstap naar POCL, Plytix pricing. Akeneo publiceert geen prijzen voor de SaaS-edities.
Twee dingen vallen op. Pimcore verliet met versie 2025.1 de GPL en werkt nu met de Pimcore Open Core License. Boven €5 miljoen jaaromzet is een commerciële licentie verplicht. En volgens Akeneo's eigen supported versions-tabel stopte de support op Akeneo 7.0 op 30 september 2026. De Community Edition loopt door als doorlopende release. Wie op een oude self-hosted Akeneo zit, moet dus toch iets.
Dat is precies het punt van vendor lock-in. Daar schreven we eerder over in PIM-koppeling zonder vendor lock-in.
Wanneer is een eigen PIM op Filament de slimme keuze?
Een eigen PIM wint als je datamodel specifiek is, je kanalen beperkt zijn en je de applicatie toch al hebt. Dan betaal je alleen voor wat je gebruikt.
Concreet, een eigen PIM is slim als:
- Je datamodel niet in families past. Denk aan configureerbare producten met technische afhankelijkheden, B2B-prijslogica of compatibiliteitstabellen (dit onderdeel past op deze machines).
- Je naar twee of drie kanalen exporteert. Magento, Shopify en één feed. Niet vijftien marktplaatsen.
- Productdata verweven is met andere processen. Inkoop, voorraad, klantportaal of offertes draaien in dezelfde Laravel-app.
- Je het datamodel wilt bezitten. Geen licentie die over drie jaar van vorm verandert.
- Je team klein is. Twee tot vijf mensen die producten verrijken hebben geen uitgebreid rechtenmodel per locale nodig.
Filament is hier sterk in omdat het precies doet wat een PIM-interface nodig heeft: formulieren met relaties, tabellen met filters en bulk-acties, import en export. Vanaf v4 zitten forms en infolists in één Schemas-systeem en zijn tabellen volgens Filament tot drie keer sneller. Dat merk je bij productlijsten met tienduizenden rijen.
Wanneer is een standaard PIM beter?
Een standaard PIM is beter zodra connectors, rechten en schaal het werk worden in plaats van het datamodel. Dat is de eerlijke versie: daar ga je met maatwerk niet winnen.
Kies een standaard PIM als:
- Je naar veel kanalen publiceert. Bol, Amazon, Zalando, Google Shopping, Wehkamp. Elk kanaal heeft eigen attributen, taxonomie en validatie. Die mapping onderhouden is een vak.
- Je leveranciersdata binnenhaalt in standaardformaten. GS1, ETIM of BMEcat. Standaard PIM's hebben daar vaak kant-en-klare oplossingen voor.
- Je een groot verrijkingsteam hebt. Tien mensen, vertalers per taal, goedkeuring per kanaal. Rechten per attribuutgroep en locale bouw je niet in een middag.
- Je geen eigen developers hebt. Een eigen PIM zonder iemand die het onderhoudt, is over twee jaar technische schuld.
- Je DAM-functionaliteit nodig hebt. Rendities, rechten op beeld, versiebeheer van assets. Pimcore doet dat standaard.
Een tussenvorm werkt ook vaak goed. Laat een standaard PIM de productdata doen. Bouw in Laravel de koppelingen en logica die de PIM niet kan. Hoe dat eruitziet, staat in Akeneo PIM-pipeline met Laravel.
Hoe ziet het datamodel van een eigen PIM eruit?
Het datamodel bepaalt of je PIM over twee jaar nog werkt. Het draait om vier dingen: attributen, varianten, vertalingen en assets.
Attributen: EAV of vaste kolommen?
Magento gebruikt EAV (Entity-Attribute-Value): elk attribuut is een rij. Flexibel, maar traag en lastig te queryen. Voor een eigen PIM werkt een hybride model beter:
- Vaste kolommen voor wat elk product heeft: SKU, naam, status, merk, gewicht.
- Een JSON-kolom voor attributen per productgroep, gevalideerd tegen een attribuutdefinitie in de database.
- Een
attributes-tabel met type, eenheid, verplicht per kanaal en toegestane waarden.
Zo voeg je attributen toe zonder migratie, en houdt Filament grip op validatie. MySQL en PostgreSQL kunnen allebei indexen op JSON-velden, al verschilt de aanpak per database.
Varianten: parent en children
Kies één model en houd je eraan: een parent-product met varianten als children. Elke variant heeft eigen SKU, EAN, prijs en voorraad. De variërende assen (maat, kleur) leg je vast op de parent.
Let op de beperkingen van je kanalen. Shopify kent maximaal drie product-opties per product. Een PIM met vijf variant-assen moet dus bij export samenvoegen of splitsen. Leg die regel vast in de exportlaag, niet in je datamodel.
Vertalingen
Gebruik vertaalbare velden per locale, bijvoorbeeld met Spatie's laravel-translatable package of een aparte product_translations-tabel. De tabel-variant is beter queryable. De JSON-variant is sneller gebouwd. Bij meer dan drie talen en per-taal-status (vertaald, gecontroleerd) kiezen wij voor een aparte tabel.
Assets
Laravel's filesystem met S3-compatibele opslag dekt het meeste. Sla per asset op: rol (hoofdbeeld, sfeer, maattabel), volgorde, alt-tekst per taal en kanaalzichtbaarheid. Spatie's laravel-medialibrary doet conversies en collecties. Dat is geen DAM, maar voor de meeste webshops ruim voldoende.
Een productformulier in Filament v4/v5 met varianten als repeater ziet er zo uit:
use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
public static function form(Schema $schema): Schema
{
return $schema->components([
TextInput::make('sku')->required()->unique(ignoreRecord: true),
TextInput::make('name')->required(),
Select::make('brand_id')->relationship('brand', 'name')->searchable(),
Repeater::make('variants')
->relationship()
->schema([
TextInput::make('sku')->required(),
TextInput::make('ean')->length(13),
TextInput::make('size'),
TextInput::make('color'),
])
->collapsible(),
]);
}
Bij honderden varianten per product wordt een repeater zwaar. Dan zet je varianten in een eigen relation manager met een tabel.
Hoe bouw je workflows en verrijking in een eigen PIM?
Verrijking is het deel waar een PIM zijn geld verdient. Je bouwt het met drie bouwstenen: completeness, statussen en taken.
Completeness per kanaal. Bereken per product en per kanaal welk percentage van de verplichte attributen gevuld is. Sla dat op in een kolom en herbereken via een queued job bij elke wijziging. In Filament toon je het als badge-kolom en filter je op "onder 100% voor Shopify". Statussen. Concept, in verrijking, klaar voor review, gepubliceerd. Een simpele state machine op het model is genoeg. Alleen gepubliceerde producten gaan naar de export. Taken en rechten. Wie mag wat aanpassen? Met Filament-policies en een package als Filament Shield regel je rechten per resource. Rechten per attribuut of per taal zijn maatwerk. Reken daar tijd voor. Bulk-acties. Verrijkers werken in batches: twintig producten tegelijk een categorie geven, een attribuut vullen of status wijzigen. Filament's bulk actions doen dat zonder extra werk. Import. Leveranciersdata komt als CSV of Excel binnen. Filament heeft een ingebouwde importer met kolom-mapping en validatie per rij. Meer daarover in import en export met Filament.AI-verrijking (productteksten, vertalingen) koppel je als actie in Filament aan een API naar keuze. Laat de output altijd door een mens reviewen voordat de status naar gepubliceerd gaat.
Hoe exporteer je naar Magento, Shopify en marktplaatsen?
Export is waar een eigen PIM slaagt of faalt. Bouw per kanaal een aparte exporter met een eigen mapping, en houd de PIM zelf kanaal-neutraal.
De opzet die in de praktijk werkt:
- Delta-export. Houd per product per kanaal een hash bij van de laatst verstuurde data. Alleen bij een verschil gaat er een update uit.
- Queues. Elke export draait als job via Laravel queues met Horizon. Rate limits en retries regel je per kanaal.
- Logging per product. Wat ging er uit, wanneer, en wat zei de API terug? Toon dat in Filament op de productpagina.
Per kanaal:
| Kanaal | Aanpak | Let op |
|---|---|---|
| Magento | REST API, voor grote volumes de asynchrone bulk-endpoints | Attribute sets en opties moeten in Magento bestaan vóór de import |
| Shopify | GraphQL Admin API, productSet voor product plus varianten in één call | Maximaal drie opties per product; metafields voor extra attributen |
| Google Shopping | XML- of CSV-feed, of de Merchant API | Verplichte velden als GTIN, conditie en beschikbaarheid |
| Bol, Amazon | Via een feed-tool of directe API | Eigen categorieboom en attribuutnamen per marktplaats |
Bij marktplaatsen ligt het omslagpunt. Twee kanalen mappen is overzichtelijk. Bij vijf of meer marktplaatsen is een feed-tool of standaard PIM met connectors goedkoper dan zelf bijhouden wat elke marktplaats deze maand veranderde. Hoe wij koppelingen in het algemeen opzetten, lees je op Laravel integraties. Hoe Filament als backoffice naast je webshop werkt, staat in Filament-backoffice voor Magento en Shopify.
Wat kost een eigen PIM op Filament?
Een eigen PIM kost ontwikkeltijd vooraf en onderhoud daarna, geen licentie. Of dat goedkoper is, hangt af van wat je anders zou betalen.
De rekenstap, als rekenvoorbeeld. Stel: een eerste versie met productmodel, varianten, vertalingen, assets, completeness, import en een Magento-export kost 300 uur. Bij €100 per uur is dat €30.000 eenmalig. Reken daarna 8 uur per maand onderhoud en kleine uitbreidingen: €9.600 per jaar.
Zet dat naast Pimcore Professional à $9.900 per jaar. De licentie is dan niet het verschil. Implementatie van een standaard PIM kost ook uren: datamodel inrichten, connectors configureren, team trainen. Het echte verschil zit in wie het datamodel bezit, en hoeveel kanalen je moet bedienen.
Twee kosten die in zo'n berekening vaak ontbreken:
- Upgrades. Filament, Laravel en PHP krijgen nieuwe versies. Filament v5 bracht geen nieuwe features, alleen Livewire 4-support. Upgrades zijn meestal klein, maar niet gratis.
- Kennisrisico. Als de enige developer vertrekt, wie snapt dan je exportlogica? Documenteer en test, of werk met een team dat het overneemt.
Samengevat
- Bouw zelf als je datamodel specifiek is, je naar twee à drie kanalen exporteert en je al een Laravel-applicatie hebt.
- Kies een standaard PIM bij veel marktplaatsen, een groot verrijkingsteam, standaard leveranciersformaten of zonder eigen developers.
- Overweeg de tussenvorm: standaard PIM voor data, Laravel voor koppelingen en afwijkende logica.
- Ontwerp je datamodel hybride: vaste kolommen plus gevalideerde JSON-attributen, parent/child-varianten, vertalingen in een eigen tabel.
- Houd de PIM kanaal-neutraal en bouw per kanaal een exporter met delta-detectie en logging.
- Check licenties: Pimcore werkt sinds 2025.1 met POCL, Akeneo 7.0 kreeg tot 30 september 2026 support.
Veelgestelde vragen
Kun je met Laravel een volwaardig PIM bouwen?
Ja. Laravel levert queues, filesystem, API's en validatie. Filament levert de interface: formulieren, tabellen, bulk-acties en import. Wat je zelf bouwt zijn de domeinlogica, completeness en de exporters per kanaal.
Is een eigen PIM goedkoper dan Akeneo of Pimcore?
Soms. Je betaalt geen licentie, maar wel ontwikkeling en onderhoud. Bij twee à drie kanalen en een specifiek datamodel is een eigen PIM vaak goedkoper over drie jaar. Bij veel marktplaatsen niet, omdat je dan connectors bouwt die een standaard PIM al heeft.
Hoeveel producten kan een PIM op Filament aan?
Tienduizenden producten zijn geen probleem met goede indexen, eager loading en server-side gepagineerde tabellen. Filament v4 maakte tabellen volgens de makers tot drie keer sneller. Bij honderdduizenden SKU's moet je zoekopdrachten naar een zoekindex verplaatsen en exports altijd via queues draaien.
Hoe ga je om met varianten bij export naar Shopify?
Shopify kent maximaal drie opties per product. Houd je PIM daarom kanaal-neutraal en los dat op in de Shopify-exporter: assen samenvoegen of producten splitsen. Gebruik de GraphQL productSet-mutation om product en varianten in één call te synchroniseren.
Kan ik later alsnog overstappen naar een standaard PIM?
Ja, als je datamodel helder is. Een PIM met vaste kolommen, gevalideerde attributen en een duidelijke variant-structuur exporteer je zonder veel moeite naar Akeneo of Pimcore. Juist een rommelig model maakt overstappen duur, ongeacht het systeem.
Moet ik Filament v4 of v5 gebruiken voor een nieuw PIM?
Begin op v5. De API is gelijk aan v4, alleen draait v5 op Livewire 4. Vereisten zijn PHP 8.2+, Laravel 11.28+ en Tailwind CSS v4.1+.
Twijfel je tussen zelf bouwen en een standaard PIM? Neem contact op, dan kijken we samen naar je datamodel en kanalen.

Geschreven door Ruthger Idema
15+ jaar ervaring in e-commerce development. Gespecialiseerd in Magento, Shopify en Laravel maatwerk.
Meer over ons team →