01 / master
Akeneo is the product content master
Catalog, attributes, options, variants, reference entities, rich media, locales and channels. The authoritative record of what each product is.
Integration / Makro Middleware
Akeneo to Shopify Plus integration, built to fit. Akeneo is your product content master. Shopify is where it goes live.
The real problem
A locale-and-channel-scoped product model has to flatten into a flat Shopify product, variant and metafield, keep reference-entity relationships intact, and publish only what is ready. That flattening is where catalogs break.
01 / master
Catalog, attributes, options, variants, reference entities, rich media, locales and channels. The authoritative record of what each product is.
02 / storefront
Products, variants, metafields, metaobjects and Markets. Inventory, orders and pricing logic stay in the commerce and ERP layer, not the PIM.
03 / the gap
A locale-and-channel-scoped product model has to flatten into a flat Shopify product, variant and metafield, keep reference-entity relationships intact, and publish only what is ready.
We built a product around that exact gap. Akeneo plugs in as a path-mapped adapter on the same platform that runs NetSuite in production.
How they connect
Products, attributes, variants, reference entities and media are read out of Akeneo and published to Shopify. This is a PIM, not an ERP: there is no order, inventory or pricing lane through Akeneo. Akeneo is your product content master; Shopify is where it goes live.
Content master
read · never overwritten
The platform
map · gate · audit
The storefront
where products go live
graphql.sdk.akeneo.cloud aggregates the GET REST calls, requires a REST token, runs read-only, and is capped at 500 requests per 10 seconds per PIM. No asset binaries.Akeneo → MKupdated timestamp.Akeneo → MKupdated property, cursor-paged for large catalogs. A 50,000-item catalog with 12 real edits syncs 12 records. Bulk PATCH caps at 100 resources, paging at 100 per page, with search_after beyond the offset ceiling.Akeneo → MKPOST /api/oauth/v1/token, scoped to a read-only API user role. A missing ACL returns HTTP 403, never silent data.handshakeuuid, not the renameable SKU.Akeneo → MKThe console
Every publish, every failure, every reconciliation is visible. This is the same Makro Middleware console your team would watch in production. Move through the views.
| Time | Entity | Error class | Attempts | Next | Action |
|---|---|---|---|---|---|
| 08:13:04 | product · SKU-10288 | PERMANENT · validation | 3 / 3 | held | Inspect |
| 07:55:22 | reference · brand bouroullec | TRANSIENT · timeout | 2 / 5 | 09:50 | Retry now |
| 06:40:11 | attribute options · size | RATE_LIMIT · 3 req/s | 1 / 5 | paced | Inspect |
Every record is keyed on the immutable Akeneo uuid, never the renameable SKU. The middleware reads this row before every write and decides create, update, or skip.
Rename the identifier in Akeneo and the mapping still holds on Shopify. This is what stops duplicate products and orphaned variants before they reach your storefront.
The publish gate is per-(channel, locale) completeness = 100. A product that is not complete for the bound channel and locale is held, not half-published.
channel read first · category tree gates eligibility
Inside the platform
Ten engineered subsystems sit behind the publish. Each one is the reason a custom build survives a catalog the native app and a connector cannot model. Drag through them.
01 / 10
When a record fails
An attribute-option write hits Akeneo's 3 req/s ceiling. Colour carries the verdict: amber is sorted, teal retries, red is held, green replays. Nothing disappears into a log file.
An attribute-option write hits Akeneo's 3 req/s ceiling and comes back HTTP 429 with a Retry-After. Instead of disappearing into a log, it enters the pipeline.
capturedEvery failure is sorted before anything is retried, so a bad record never loops forever.
classifiedThe 429 routes to a dedicated ≤3 req/s lane, honors the Retry-After, and clears itself. Transient timeouts retry with backoff.
A validation failure, an incomplete product, or a missing reference routes straight to the dead-letter queue for review. It is never retried blindly or lost.
held for reviewFix the cause, replay from the queue. The periodic REST reconciliation Akeneo itself mandates catches anything the lossy event path missed.
replayed · reconciledThe failure modes no vendor page admits
The official Akeneo App for Shopify is a clean one-way publisher for the happy path. It is SaaS and not customizable, and it stops fitting at the same documented walls every time. A custom middleware layer is built to handle all of them, explicitly.
The app does not create metaobject or metafield definitions for you. You map PIM attributes to definitions that already exist, only compatible types map, and the app ignores the akeneo namespace. Reference-entity-to-metaobject depth is custom work.
A hard ceiling of 250 metafield definitions per store, mapped from the first ~10,000 eligible PIM attributes, at product and variant level only. Complex catalogs hit these walls fast and need a deliberate attribute and metafield architecture.
→ metafield architecture scoped to the catalogThe native app allows only one language and locale per Shopify store. Multi-store is supported, one locale each. A true multi-market storefront needs per-store channel feeds or custom per-locale and per-market routing through Shopify Markets.
→ channel-and-locale routing into Shopify MarketsAn Akeneo category tree is hierarchical with unlimited nesting; Shopify collections are flat. The app syncs the category label to a tag or metafield, not a native collection. Deterministic tree-to-smart-collection logic is custom.
→ tree mapped to smart-collection rulesAkeneo expresses variants via product models and family variants, up to 2 model levels and up to 5 axis attributes. Shopify is fixed at product, up to 3 options, variants. Text and Number attributes are not supported as Shopify variant axes. The hierarchy has to be flattened.
→ family-variant hierarchy flattened to optionsThe app is unidirectional, Akeneo to Shopify, and cannot delete products in Shopify. The Events API guarantees nothing: no retry, a 2-hour discard window, no ordering. Reliable real-time requires middleware that owns the durability.
→ deletion handling + durable, deduped event queueClaims you can check
Every reality below is verified against Akeneo's own developer or help docs, or a named vendor source. This is the difference between a team that read the marketing and a team that shipped against the documentation.
akeneo namespace.Retry-After you must honor.reference_data_name; hydrating the real record needs a second API call, an N+1 step to budget and cache. Reference entities are EE and Serenity only.locale and scope (channel), up to one entry per (channel, locale) couple. The mapper must select the correct entry, for example en_US plus ecommerce, and read the channel definition first, because the channel's single bound category tree decides which products are even eligible.uuid (the /products-uuid endpoint), not the SKU a merchant can rename. The native app's pre-existing-catalog matching stores a link keyed by PIM UUID plus Shopify product ID. Idempotent upserts ride the UUID; the SKU is the human-facing match key, not the durable identity.The decision guide
There are four ways to connect Akeneo to Shopify: the official Akeneo App, a third-party connector such as StrikeTru, an iPaaS platform such as Alumio or Patchworks, and a custom-built middleware integration. The right choice depends on edition, catalog complexity, locale footprint, and how much publishing control you need.
Option 01
Akeneo's own SaaS app, no-code, one-way. Competent on the happy path, within documented limits.
Right for straightforward one-way PIM-to-Shopify publishing within the limits, on a supported edition.
Option 02
StrikeTru, WebKul and similar. Wider edition coverage and configurable mapping the native app can't express.
Right for when you need mapping or transformation and broader edition coverage, but not a governed-publishing control plane.
Option 03
Alumio, Patchworks and similar. Subscription middleware on a shared platform for broad multi-system orchestration.
Right for orchestrating many systems where the PIM-specific depth fits a generic flow template.
Option 04 our build
Built around your exact catalog model and publishing rules, owned by you, operated with a support agreement. Where Plus, multi-locale and B2B catalogs end up.
Right for governed publishing, multi-locale-per-store routing, reference-entity-to-metaobject depth, deletion handling, or near-real-time event-driven sync the native app and connectors cannot model.
How long it takes
An Akeneo to Shopify Plus build lands in one of three bands depending on edition, catalog complexity, locale and market footprint, and how many of the break points above are in play.
Band 01 · foundation
single store · one channel and locale
Band 02 · enriched catalog
reference entities · rich media
Band 03 · multi-market
multi-locale · markets · B2B
We price an Akeneo integration as an engineering engagement: a build with a support agreement, not a per-record meter or a platform seat that renews forever. For market context, custom PIM-to-storefront builds commonly run from the low tens into six figures, and a fixed-fee connector that lists around $149–$299/mo carries its own limits. Your exact figure is scoped to the band and the break points in play, and we put it in writing before anything starts.
Security posture
Akeneo and Shopify secrets are held as encrypted fields, isolated per tenant and rotatable without downtime. The Connection password is shown once and never sits in plaintext, anywhere.
AES-256-GCMEvery Akeneo event is verified by its HMAC-SHA256 signature over the timestamp and body before it is trusted, then deduplicated, so a replayed event cannot publish twice.
X-Akeneo-Request-SignatureAuth runs as an OAuth 2.0 password-grant Connection on a dedicated, read-only API user role scoped to exactly what the integration touches. A missing ACL returns HTTP 403, never silent partial data.
OAuth 2.0 ConnectionAn append-only audit trail logs every operation, source-tagged, so you can prove exactly which value slice published, when, and why a product was held.
append-only auditThe questions we have already answered
The details that separate a team that read the docs from a team that shipped against them. Open any one.
The framework underneath
Every system sits behind the same contract: authenticate, fetch master data, push the target, validate, report. The platform runs NetSuite in production today. Akeneo is a registered target on that same framework, its path fully mapped to Akeneo's REST, GraphQL, Events and Connection APIs.
We say this plainly: the credibility is a real platform and a precisely understood Akeneo path, not a decade of Akeneo traffic. That distinction is exactly what your architect can verify, which is why we lead with it.
The engineering standard
The platform's standard is the same on every adapter. These are the numbers in the repository, not rounded for a slide.
Test suiteAutomated tests across 139 suites, run on every change. No code reaches your production data without passing them.
Coverage gate enforced before any deploy.
End-to-end browser tests across Chromium, Firefox and WebKit.
Failure classes, each with its own pre-decided policy.
Credentials stored in plaintext, anywhere, ever.
Where the platform proves itself. For Clarius, Makro built a unified account page integrating NetSuite ERP, Salesforce CRM and Shopify Plus, with Shopify Flow feeding order data into NetSuite, reported to save $100,000+ a year in third-party app fees. That is an ERP, CRM and storefront unification case, not a PIM case, and we frame it as one. Akeneo on this platform is path mapped: the architecture is fully understood and documented against Akeneo's own developer docs, sold on the platform that runs NetSuite in production today. We do not claim a live Akeneo deployment.
A real conversation about your Akeneo edition, your channel and locale model, and the three sharp questions you already have.