
AFAS Shopify koppeling: orders, voorraad en retouren zonder handwerk
Een AFAS Shopify koppeling draait nooit in Shopify zelf. Hij draait ernaast: in een app, in een iPaaS of in eigen middleware. Die laag bepaalt of elke order precies één keer in AFAS komt, of je voorraad op tijd klopt en of een refund netjes een creditnota wordt. Wij bouwen en beheren die laag. Je praat met de mensen die het bouwen.
- AFAS Profit REST API en Shopify Admin GraphQL API
- Shopify-webhooks voor orders en refunds, delta-polling voor AFAS
- App, Alumio of Laravel-middleware: eerlijk advies over de route
Wat een AFAS Shopify koppeling moet oplossen
Een AFAS Shopify koppeling verbindt AFAS Profit met je Shopify-winkel. In AFAS staan je artikelen, debiteuren, voorraad en financiële administratie. In Shopify verkoop je. Zonder koppeling typt iemand orders over, zet iemand voorraad met de hand bij en lopen prijzen in de shop achter op AFAS.
Bij Shopify komt daar iets bij. Je hebt geen eigen server binnen Shopify waar koppelcode op draait. De koppeling leeft dus altijd buiten Shopify en praat met twee API's tegelijk: de Profit REST API van AFAS en de Admin GraphQL API van Shopify. Beide hebben hun eigen regels, limieten en manieren om wijzigingen te melden.
Op deze pagina lees je hoe die twee API's samenwerken, welke route past (app, iPaaS of maatwerk), wat het verschil is tussen Shopify en Shopify Plus voor B2B, en hoe je orders, refunds en retouren correct in AFAS krijgt. Werk je met Magento? Lees dan de pagina over de AFAS Magento koppeling.
Waarom een AFAS Shopify koppeling altijd buiten Shopify draait
Shopify is een gehost platform. Dat bepaalt de architectuur van elke koppeling.
In Magento kun je een koppeling als module in de webshop bouwen. In Shopify kan dat niet. Je hebt geen toegang tot de server, geen cronjobs en geen eigen queue binnen Shopify. Elke AFAS-koppeling is dus een externe applicatie die met een API-token van een Shopify-app werkt.
Die externe laag kan drie vormen hebben. Een kant-en-klare app uit de Shopify App Store, die de leverancier host. Een iPaaS zoals Alumio, waar je mappings en flows in configureert. Of eigen middleware, bij ons meestal in Laravel, op je eigen hosting. In alle drie de gevallen geldt: die laag heeft queues, logging en retry nodig. Shopify en AFAS doen dat niet voor je.
Het voordeel van deze opzet: je shop wordt niet trager van de koppeling. Een trage AFAS-call blokkeert nooit de checkout, omdat de checkout er niets van merkt. Het nadeel: er is een extra systeem dat moet blijven draaien en dat iemand moet bewaken.
Plan een vrijblijvend gesprek over je project
Een half uur via video met de mensen die het werk ook echt doen. Kies hieronder een moment dat jou past.
- Direct met het vaste team, geen tussenlagen
- Concrete feedback op je huidige situatie of plannen
- Eerlijk advies, ook als het antwoord "niet doen" is
- Indicatie van kosten en tijdlijn
Plan een gratis Tech Check
Vrijblijvend jouw uitdagingen bespreken
Of bel direct: 0591-239 299
Twee API's: AFAS Profit REST en Shopify Admin GraphQL
Wie de bouwstenen aan beide kanten kent, kan elk koppelvoorstel beoordelen.
Aan de AFAS-kant werk je met connectoren. Met een GetConnector lees je artikelen, voorraad, prijzen en debiteuren uit. Met een UpdateConnector schrijf je terug, bijvoorbeeld verkooporders via de UpdateConnector FbSales. Een GetConnector is een view die in AFAS zelf wordt ingericht. Wijzigt iemand die view, dan verandert wat de koppeling binnenkrijgt. Je authenticeert met een token dat Base64-gecodeerd in de Authorization-header gaat, met het voorvoegsel AfasToken. Gebruik daarvoor een aparte koppelgebruiker met minimale rechten.
AFAS adviseert om op te halen in pagina's met skip en take, altijd met een vaste sortering. Haal niet alles in één keer op. AFAS raadt aan om het aantal kolommen maal het aantal rijen per call onder de 150.000 te houden. Eén API-call mag volgens AFAS maximaal 75 MB zijn.
Aan de Shopify-kant werk je met de Admin GraphQL API. De REST Admin API is sinds 1 oktober 2024 legacy en nieuwe publieke apps moeten sinds april 2025 GraphQL gebruiken. Een nieuwe koppeling bouw je dus op GraphQL. Shopify rekent daar niet per request, maar per querykost. Elke query en mutation kost punten, en die punten lopen uit een bucket die per seconde bijvult.
Hoe snel die bucket bijvult, hangt af van je Shopify-abonnement. Volgens de documentatie van Shopify is dat 100 punten per seconde op Standard, 200 op Advanced, 1.000 op Shopify Plus en 2.000 voor Shopify for enterprise. Eén losse query mag nooit meer dan 1.000 punten kosten. Raakt de bucket leeg, dan krijg je een throttle-fout en moet je wachten. Een koppeling die duizenden voorraadmutaties tegelijk afvuurt, moet daar dus op doseren.
Voor grote hoeveelheden data heeft Shopify bulk operations. Die vallen volgens Shopify niet onder dezelfde kostenlimieten als losse queries. Wij gebruiken ze voor de eerste volledige sync van artikelen en voor grote exports. Voor dagelijkse delta's werken we met kleine, goed gedoseerde GraphQL-calls.
Webhooks bij Shopify, pollen bij AFAS
De twee systemen melden wijzigingen op een totaal andere manier. Daar ontwerp je de koppeling op.
Shopify heeft webhooks voor vrijwel alles wat er in de winkel gebeurt. Denk aan orders/create, orders/paid, orders/cancelled, refunds/create, fulfillments/create en een reeks webhooks voor retouren. Een order kan dus direct na plaatsing of betaling naar de koppeling, zonder te pollen.
Maar Shopify zegt zelf dat aflevering van webhooks niet gegarandeerd is. Dezelfde webhook kan vaker binnenkomen. Je herkent dubbele leveringen aan de header X-Shopify-Webhook-Id. De volgorde is ook niet gegarandeerd: een update kan binnenkomen vóór de create. Shopify raadt daarom aan om daarnaast periodiek te reconciliëren op updated_at. Wij doen allebei: webhooks voor snelheid, een reconciliatie-job als vangnet.
AFAS werkt andersom. Volgens de AFAS-documentatie bestaan webhooks alleen voor dossieritems, reacties op dossieritems en workflows. Voor artikelen, voorraad en prijzen zijn er geen webhooks. Wil je weten wat er in AFAS is veranderd, dan poll je op de velden aangemaakt op en gewijzigd op, met een opgeslagen laatste-sync-tijdstip. Alles van AFAS naar Shopify is daardoor near-realtime, niet realtime.
Elke webhook van Shopify verifieer je op de HMAC-handtekening in X-Shopify-Hmac-Sha256. Een endpoint dat dat overslaat, accepteert ook nep-orders van iedereen die de URL kent.
Welke data gaat welke kant op bij AFAS en Shopify
Dit is ons startpunt. In de analyse passen we het aan op jouw AFAS-inrichting en je Shopify-abonnement.
| Gegeven | Richting | Bron van de waarheid | Hoe het wordt getriggerd | Waar het misgaat |
|---|---|---|---|---|
| Artikelen en varianten | AFAS naar Shopify | AFAS (of een PIM) | Poll op gewijzigd op in AFAS | AFAS kent artikelen, Shopify kent producten met varianten; zonder groeperingsregel krijg je losse producten per maat of kleur |
| Voorraad | AFAS naar Shopify | AFAS of WMS | Poll op wijzigingen, elke paar minuten | Meerdere Shopify-locaties tegenover AFAS-magazijnen niet gemapt, of gereserveerde voorraad niet meegerekend |
| Prijzen | AFAS naar Shopify | AFAS | Poll of dagelijkse run | Klantspecifieke AFAS-prijzen passen niet één-op-één op Shopify B2B-catalogi |
| Klanten en debiteuren | Beide kanten | AFAS voor B2B, Shopify voor consumenten | Webhook customers/create plus matching | Dubbele debiteuren doordat matching op e-mailadres of KvK-nummer ontbreekt |
| Orders | Shopify naar AFAS | Shopify | Webhook orders/create of orders/paid, via queue | Dubbele orders door dubbele webhook-levering zonder idempotentie |
| Fulfilment en track and trace | AFAS naar Shopify | AFAS of WMS | Poll op pakbonnen of leveringen | Order wel geleverd in AFAS, maar klant krijgt nooit een verzendmail uit Shopify |
| Refunds en retouren | Shopify naar AFAS | Shopify voor het geld, AFAS voor de boekhouding | Webhooks refunds/create en returns/* | Refund in Shopify zonder creditnota in AFAS, of verzendkosten en kortingen verkeerd teruggeboekt |
AFAS Shopify koppeling: app, iPaaS of maatwerk-middleware
Er zijn drie routes. Geen ervan is altijd de beste.
| Route | Past bij | Voordelen | Nadelen |
|---|---|---|---|
| App uit de Shopify App Store | Standaard B2C-winkel, weinig maatwerk in AFAS, vooral orders en basisgegevens | Snel geïnstalleerd, leverancier host en onderhoudt de app | Werkt alleen als jouw AFAS-inrichting op de aannames van de app lijkt; afwijkende logica kun je meestal niet toevoegen |
| Koppelplatform of iPaaS zoals Alumio | Meerdere systemen (AFAS, PIM, WMS, marketplaces), team dat zelf mappings wil beheren | Visuele mappings, monitoring en retry ingebouwd, connectoren voor AFAS en Shopify | Jaarlijkse licentiekosten; complexe businesslogica blijft lastig in een visuele tool |
| Laravel-middleware op maat | B2B met klantspecifieke prijzen, hoge volumes, afwijkende regels voor retouren of orderroutering | Volledige controle over queues, throttling op Shopify-limieten en foutafhandeling; geen licentie per koppeling | Hogere bouwinspanning vooraf en je hebt een team nodig dat het onderhoudt |
Bestaande AFAS Shopify apps en connectoren
Zoek je op AFAS Shopify koppelingen, dan vind je een paar kant-en-klare opties. In de Shopify App Store staat de app AFAS Profit Financieel van Gladior. De listing beschrijft het uitwisselen van gegevens tussen Shopify en AFAS Profit, maar noemt niet precies welke datastromen erin zitten. Vraag dat dus vooraf na bij de leverancier.
Koppelplatform APIcenter biedt een Shopify-AFAS-integratie met flows voor producten, voorraad, klanten, verzendingen, orders en refunds. Alumio heeft een connector voor AFAS en een voor Shopify, die je in één flow combineert.
Zo'n standaardoplossing is vaak de goedkoopste start. Ga je ervoor, test dan drie dingen. Hoe gaat de app om met dubbele webhooks? Wat gebeurt er met een refund of een deelretour? En krijg je een melding als een order door AFAS wordt afgewezen? Als het antwoord op één van die vragen vaag is, weet je waar het later misgaat.
Shopify of Shopify Plus: wat verandert er voor de AFAS-koppeling
B2B is volgens Shopify beschikbaar op de abonnementen Basic, Grow, Advanced en Plus. Bedrijven, vestigingen, betalingstermijnen, staffelprijzen en bestelregels zitten op alle vier. Voor een AFAS-koppeling zit het verschil in de catalogi, en daarmee in je prijslijsten.
Op Basic, Grow en Advanced kun je maximaal 3 actieve B2B-catalogi toewijzen aan je B2B-markten. Catalogi rechtstreeks koppelen aan één bedrijf of vestiging kan alleen op Shopify Plus, en daar is het aantal catalogi onbeperkt. Werk je in AFAS met prijsafspraken per debiteur, dan heb je in de praktijk dus Plus nodig om die één-op-één in Shopify te krijgen.
Plus geeft ook meer API-ruimte: 1.000 punten per seconde tegen 100 op Standard. Dat merk je bij grote voorraad- en prijsupdates. Een koppeling die op Plus prima loopt, kan op een kleiner abonnement achter gaan lopen. Daar dimensioneren we de batches op.
Heb je geen klantspecifieke prijzen en verkoop je vooral B2C? Dan is Plus voor de koppeling zelf geen reden. Meer over de afweging lees je op onze pagina over Shopify Plus.
Shopify-ordernummers, refunds en retouren naar AFAS
Een Shopify-order heeft een globaal unieke ID en een zichtbaar ordernummer, zoals #1001. Shopify zegt zelf dat dat zichtbare nummer niet uniek is over meerdere winkels, en dat het onderliggende nummer niet gegarandeerd doorlopend is. Gebruik het dus niet als enige sleutel. Wij slaan de Shopify-order-ID op als externe referentie in AFAS en tonen het zichtbare ordernummer voor je klantenservice. Heb je meerdere winkels, bijvoorbeeld per land, dan zit de winkel ook in de sleutel.
Idempotentie is bij Shopify extra belangrijk. Omdat dezelfde webhook vaker kan binnenkomen, controleert de koppeling voor elke order eerst of die al in AFAS staat. Een tweede levering van orders/create levert dan nooit een tweede order op.
Refunds zijn het lastigste deel. In Shopify is een refund een apart object op de order, met eigen regels voor producten, verzendkosten en eventuele correcties. In AFAS moet daar een creditering tegenover staan die op de juiste factuur en de juiste grootboekrekeningen landt. Hoe dat precies werkt, hangt af van je AFAS-inrichting. Daarom leggen we in de analyse per scenario vast wat er moet gebeuren: volledige refund, deelrefund, alleen verzendkosten, en een refund zonder retour.
Retouren lopen in Shopify via een eigen levenscyclus met webhooks zoals returns/request, returns/approve en returns/close. Wil je retourgoederen ook in de AFAS-voorraad terugzien, dan koppel je die stappen aan een retourontvangst in AFAS. Doe je dat niet, dan klopt je geld wel maar je voorraad niet.
Checklist: voorbereiding voor een AFAS Shopify integratie
Met deze punten op orde gaat de bouw veel sneller. Een groot deel ligt aan de AFAS-kant.
In AFAS Profit
- Een aparte koppelgebruiker of app-connector met alleen de rechten die de koppeling nodig heeft
- GetConnectors voor artikelen, voorraad, prijzen en debiteuren, inclusief aangemaakt op en gewijzigd op
- Een unieke artikelcode die ook als SKU in Shopify wordt gebruikt
- Een regel om AFAS-artikelen te groeperen tot Shopify-producten met varianten
- Afspraken over hoe een Shopify-refund in AFAS wordt gecrediteerd
- Een test- of acceptatieomgeving om tegen te ontwikkelen
In Shopify
- Je abonnement, en of je B2B met klantspecifieke prijzen nodig hebt (Plus of niet)
- Een mapping van Shopify-locaties op AFAS-magazijnen
- Betaalmethoden, verzendmethoden en btw-instellingen gemapt op de codes in AFAS
- Een ontwikkelwinkel of testwinkel om de koppeling op te testen
Afspraken en eigenaarschap
- Per gegeven vastgelegd welk systeem de bron van de waarheid is
- Wie een melding krijgt als een order of refund door AFAS wordt afgewezen
- Hoe met bestaande klanten en historische orders wordt omgegaan bij de eerste sync
Waar AFAS Shopify koppelingen in de praktijk op stuklopen
Dubbele orders, door dubbele webhooks of een blinde retry na een time-out. De oplossing is idempotentie op de Shopify-order-ID, zoals hierboven beschreven.
Throttling bij grote updates. Een prijswijziging op het hele assortiment of een grote voorraadcorrectie in AFAS levert ineens duizenden mutaties op. Wie die ongedoseerd naar Shopify stuurt, loopt tegen de kostenlimiet aan. Een goede koppeling leest de kosteninformatie uit elke response, past het tempo aan en gebruikt bulk operations waar dat kan.
Stille fouten. Een gemiste webhook of een afgewezen order in AFAS valt pas op als een klant belt. Elke afwijzing en elke achterstand moet een melding opleveren bij een persoon, met de originele foutmelding van AFAS of Shopify erbij. Een reconciliatie-job die dagelijks Shopify-orders naast AFAS-orders legt, vangt de rest.
Drift in de inrichting. Iemand past een GetConnector-view in AFAS aan, of een app-wijziging in Shopify verandert welke velden beschikbaar zijn. Daarom valideren we elke AFAS-response tegen de verwachte structuur. Wijkt die af, dan stopt de sync en krijg je een melding, in plaats van dat er foute data in je winkel komt.
Verder lezen over AFAS, Shopify en koppelingen
Dieper in de techniek of in de alternatieven.
Laravel en AFAS-synchronisatie
Paging, DTO-mapping, throttling en retry tegen de AFAS GetConnector en UpdateConnector, uitgewerkt in Laravel.
Lees verder →ERP koppelen: AFAS, Exact of Multivers
Vergelijking van connector, iPaaS en maatwerk voor de drie meest gebruikte Nederlandse ERP-pakketten.
Lees verder →Shopify en Alumio
Hoe een iPaaS Shopify verbindt met ERP, PIM en WMS, en wanneer dat de betere keuze is.
Lees verder →AFAS Magento koppeling
Dezelfde AFAS-kant, maar dan met Magento 2 als winkel.
Lees verder →Exact Online Shopify koppeling
Werk je met Exact Online in plaats van AFAS? Lees hoe die koppeling met Shopify werkt.
Lees verder →Laravel integraties
Maatwerk-middleware op Laravel voor ERP, WMS, PIM en marketplaces, met queues en monitoring.
Lees verder →Onze aanpak voor een AFAS Shopify koppeling
Van analyse tot beheer, met hetzelfde vaste team.
- 1
Analyse van datastromen
We brengen per gegeven in kaart welke kant het op gaat, hoe het wordt getriggerd en welk systeem leidend is. Refunds en retouren werken we per scenario uit.
- 2
Routekeuze en inschatting
App, Alumio of Laravel-middleware: we adviseren op basis van je volumes, je AFAS-inrichting en je Shopify-abonnement. Je krijgt vooraf een onderbouwde inschatting.
- 3
Inrichting AFAS en Shopify
Samen met je AFAS-beheerder richten we GetConnectors en de koppelgebruiker in. In Shopify maken we de app, de API-scopes en de webhooks aan, eerst in een testwinkel.
- 4
Bouwen en testen
We bouwen met queues, idempotente orderverwerking, HMAC-verificatie en throttling op de Shopify-limieten. We testen met echte orders, dubbele webhooks, refunds en foutscenario's.
- 5
Initiële sync en livegang
Eerst een gecontroleerde volledige sync van artikelen en voorraad, waar nodig via bulk operations. Daarna schakelen we over op webhooks en delta-polling.
- 6
Monitoring en beheer
Na livegang blijven we eigenaar: alerts op fouten en achterstanden, een dagelijkse reconciliatie en meegaan met nieuwe Shopify API-versies.
Wat je van ons krijgt
- Een koppelplan met per gegeven richting, trigger en bron van de waarheid
- Ingerichte koppelgebruiker en gedocumenteerde GetConnector-definities in AFAS
- Een Shopify-app met minimale API-scopes en geverifieerde webhooks
- Order-sync van Shopify naar AFAS via een queue, idempotent op de Shopify-order-ID
- Delta-synchronisatie van artikelen, voorraad en prijzen, gedoseerd op de Shopify-limieten
- Refunds en retouren uit Shopify verwerkt als creditering in AFAS, volgens vastgelegde scenario's
- Foutlog met de originele meldingen van AFAS en Shopify, plus e-mail- of Slack-alerts
- Technische documentatie en beheerafspraken voor wijzigingen en nieuwe API-versies
Waarom Coding.nl voor je AFAS Shopify koppeling
Eén vast team, geen tussenlagen
Geen projectmanagers of accountmanagers. Wie je koppeling bouwt, neemt ook de telefoon op als er iets misgaat.
Shopify en AFAS van binnenuit
We bouwen Shopify- en Shopify Plus-winkels en koppelen ERP-systemen. De koppeling past daardoor op je winkel en je administratie.
Eerlijke routekeuze
We bouwen maatwerk en werken met Alumio. Past een bestaande app beter, dan zeggen we dat ook.
15+ jaar e-commerce
We weten waar koppelingen breken: drukke dagen, acties, retouren en B2B-uitzonderingen. Daar ontwerpen we op.

Verder lezen
- ›Laravel + AFAS: HRM en CRM data synchronisatie
- ›ERP-koppeling webshop: AFAS, Exact of Multivers
- ›Shopify + Alumio: alle integraties via één iPaaS platform
- ›Alumio vs custom integraties — wanneer kies je wat?
- ›Laravel als e-commerce middleware: architectuurpatronen die werken
- ›Shopify + Exact Online — boekhouding synchronisatie
Veelgestelde vragen
AFAS en Shopify koppelen zonder verrassingen?
Vertel ons welke systemen je gebruikt en waar het nu wringt. We denken mee over de route, of dat nu een app, Alumio of maatwerk is. Je krijgt vooraf een onderbouwde inschatting en praat direct met het team dat de koppeling bouwt. Plan een gesprek.