Tools

Price and recommendations microservice alongside Pimcore

An open breakdown of how to build a Python microservice for recommendations and dynamic pricing alongside Pimcore/PIM - without modifying the PIM core. Personalization logic

Our clients

Clients and partners

Capital Group
FSK Group
SMLT
Tochno
Dogma
Sber City
FM Logistic
Danone
+10clients · View cases →

Storefront personalization and flexible pricing are two revenue levers in e-commerce. But in most projects, they are forced into the catalog or PIM core, and every recommendation model change turns into a platform change. Below is an open breakdown, not a case study, of how to build a Python microservice for recommendations and pricing alongside Pimcore/PIM without touching the core. All components are real open-source projects with links.

Why Move Logic Out of the PIM Core

Pimcore is the source system for product master data: attributes, media, translations, and approval statuses. The vendor itself recommends not modifying the core, but instead building business logic as separate services that exchange data through the GraphQL-powered Data Hub, REST/GraphQL API, and webhooks (Pimcore: Microservices Architecture). In this approach, the PIM remains the read-before-you-write source of truth, while recommendations and pricing are separate responsibilities that do not belong inside the catalog.

The business impact of this separation is measurable: the personalization team can ship model releases without waiting for a PIM upgrade window; upgrading Pimcore to a new major version does not break the recommendation logic because it talks to the core through a stable API, not a fork. That is decoupling: the recommendation service can be handed off to another team or contractor without rewriting the catalog.

Recommendations: What to Use from Open Source

You do not need to build a recommendation engine from scratch - mature international solutions are enough for typical e-commerce scenarios.

  • Gorse — a ready-made recommendation engine designed as a service: it exposes a REST API for data ingestion and recommendation delivery (`POST /api/feedback` for events, `GET /api/recommend/{userId}?n=N` for personalized results), supports item-to-item, user-to-user, and collaborative filtering, stores data in MySQL/PostgreSQL/ClickHouse with Redis caching, and runs in three roles: master (training), worker (offline recommendations), server (online API) (Gorse on GitHub). This is a convenient starting point specifically for a sidecar-service architecture.
  • LightFM — a Python library of hybrid (content-based + collaborative) learning-to-rank models; it trains quickly on large datasets and is used in production at companies such as Lyst and Catalant (LightFM in the open-source recommender systems overview, AIM). This is a good fit when you have strong product attributes from the PIM and need to solve the cold-start problem.
  • NVIDIA Merlin — an end-to-end GPU stack (NVTabular for features, training, and inference) for large catalogs and high-load CTR prediction (list of recommendation systems, grahamjenson).

The connection to the PIM is simple: a background Python worker reads products and their attributes through Pimcore GraphQL Data Hub, normalizes them, and loads them as `items` into the recommendation engine; the storefront event stream (views, cart, order) flows into `feedback`. Attributes from the PIM are content features that address the cold start for new SKUs.

Dynamic Pricing Beside the Catalog

The industry has not yet produced a ready-made boxed open-source pricing library - in practice, this is a service built on a standard Python stack. The typical approach is offline training of a pricing policy (Q-learning / DQN / PPO) in PyTorch with a demand simulator based on OpenAI Gym, using features such as clicks, purchase history, competitor prices, stock levels (approach overview, ACM 2025; DQN tutorial implementation, tensor-house). To get started, demand elasticity on pandas/NumPy/scikit-learn is often enough without RL.

Principle: pricing stays outside the PIM core. The base (list) price and pricing rules live in the catalog/ERP, while the pricing microservice calculates the final price at runtime and sends it to the frontend through the same API as recommendations. The PIM knows nothing about the model - it only knows the product's source-of-truth attributes.

Reference Decoupling Architecture

Storefront (PWA/mobile app) → API gateway → two independent Python services: `recommendations` (Gorse/LightFM) and `pricing` (PyTorch policy). Both read the product source of truth from Pimcore via GraphQL Data Hub (pull) and react to changes through webhooks (push). User events flow into a bus and from there into the recommender's `feedback` stream and the pricing service's feature store. Pimcore does not call these services and does not contain their code - the connection is one-way and uses a stable contract.

Conclusion: what changes in the business process

Assortment management and storefront personalization no longer depend on the PIM release cycle. The content manager maintains products in Pimcore as before; the personalization team updates recommendation models and pricing policies through separate deployments and A/B tests; upgrading the PIM core does not cause recommendation regressions because there are no core forks or patches. A price experiment or a new ranking model can be launched in days rather than quarters, and the service is fully decoupled - it can be handed off to another team without rewriting the catalog.

Sources

Recommendations
Pricing

Processing

core unchanged, logic beside it

Which business process it improves

Move recommendations and pricing into separate Python services that read the product source of truth from Pimcore via GraphQL Data Hub and webhooks. Then storefront personalization and pricing experiments can ship as independent releases and A/B tests, and a PIM upgrade will not break the integration because the core is neither forked nor patched.

Discuss the Price and Recommendation Microservice Beside Pimcore

Send via: