PIM
Go + React + MongoDB + Gemini AI

Product Information Management

The single source of truth for your product data. AI-enriched attributes, localized in every language, distributed to every sales channel — in milliseconds.

0+
Attribute Types
0-Stage
AI Pipeline
0%
API Coverage
Channels

Why This PIM?

Built from the ground up for modern e-commerce — a single source of truth for all your product data, enriched by AI, delivered to any channel.

Multi-Tenant & Localized

Every organization gets isolated data with full multi-language support. Define supported locales, and every attribute, product name, and taxonomy node is stored per-language.

Translation status is auto-computed per product per locale. Know exactly which products need attention in which markets — at a glance.

{ "en": "Premium Wool Sweater", "de": "Premium Wollpullover", "fr": "Pull en Laine Premium" }

AI-Powered Enrichment

Five-stage Gemini-powered pipeline: web search, image analysis, attribute generation, translation, and validation — all with confidence scoring.

Set your confidence threshold. Results above it are auto-applied; below it, they wait for human review. Every field can be approved or rejected individually.

confidence: 0.94 → auto-applied | 0.72 → pending review

Export to Any Channel

Delta exports with version tracking. Every product change increments a version number — the export engine only sends what changed since the last sync.

Configure channels with custom locale/currency subsets, gzip compression, retry policies with exponential backoff, and webhook authentication.

23 products changed since v42 → 47.2 KB gzip → Shopify EU

Data Flows From Center to Everywhere

Data enters PIM from any source — CSV imports, ERP syncs, manual entry, or AI enrichment. It's normalized, enriched, and distributed to every connected sales channel in real time.

ShopifyAmazonWooCommerceeBayZalandoREST API
PIM Hub
Localization

Every Attribute, Every Language

Product names, descriptions, care instructions, color names — every localizable field is stored as a map[string]string keyed by locale code. Switch between locales to see how the same product appears in different markets.

  • Per-attribute isLocalizable flag — not all fields need translation
  • Auto-computed translation status: complete, partial, or missing
  • AI translation preserves brand names and technical accuracy
  • Filter products by translation completeness per locale
activeSKU-7291 · v47

Premium Merino Wool Sweater

Luxuriously soft merino wool sweater with ribbed cuffs and hem. Temperature-regulating and naturally odor-resistant.

Color
Midnight Blue
Material
100% Merino Wool
Care Instructions
Hand wash cold, lay flat to dry
EUR 89.95EUR 109.95-18%

AI Enrichment Pipeline

Five-stage Gemini-powered pipeline that enriches, translates, and validates product data — with human-in-the-loop approval for quality assurance.

🔍
Web Search
Manufacturer specs, reviews, dimensions
📷
Image Analysis
Colors, materials, perspectives, OCR
Attribute Generation
Fill missing fields with confidence scores
🌐
Translation
All locales, preserve brand names
Validation
Cross-locale consistency, quality score
1

Web Search

Searches manufacturer sites and product reviews for specs, features, and descriptions using Google Search grounding with SSRF-safe URL fetching.

Input: "Nike Air Max 90" → Found: 12 sources, extracted: weight, materials, colorways, release date
2

Image Analysis

Gemini Vision classifies images by perspective (front, back, side, detail), extracts dominant colors with hex codes, identifies materials, and performs OCR on labels.

Detected: front view, #1a237e (Navy), #ffffff (White), mesh upper, rubber sole, logo text
3

Attribute Generation

Synthesizes web search results + image analysis + taxonomy schema to fill missing attributes. Each generated value includes a confidence score (0-1) and importance rating.

Generated: material="Mesh/Synthetic" (conf: 0.94), weight="312g" (conf: 0.87)
4

Translation

Translates all localizable attributes to every supported locale. Preserves brand names, technical terms, and marketing tone. Handles gendered nouns and measurement conversions.

EN: "Lightweight running shoe" → DE: "Leichter Laufschuh" → FR: "Chaussure de course légère"
5

Validation

Cross-locale consistency checks: detects missing translations, garbled text, untranslated segments, and unit inconsistencies. Outputs a quality score with three severity levels.

Score: 94/100 — Warning: FR description 15% shorter than EN, Info: IT missing 2 optional fields

Everything You Need

From attribute definitions to delta exports — a comprehensive toolkit for managing product data at scale.

Attribute Definitions

12+ field types including string, number, boolean, select, multi-select, rich text, media, date, URL, color, and dimension.

Per-attribute isLocalizable flag, isVariantAxis, validation rules, and grouping. Attributes feed into article types for structured product templates.

Hierarchical Taxonomy

Tree-structured categories with materialized paths for fast subtree queries and breadcrumb generation.

Localized node names, recommended attributes per category, depth tracking, and full subtree move/delete operations.

Article Types

Product templates linking required and optional attributes from the global pool. Define variant axes like color and size.

Each axis specifies allowed values. Create a product from a type and variants are auto-expanded from all axis combinations.

Products & Variants

Localized product data with variant expansion from axis combinations. Each variant has its own SKU, EAN/GTIN, and stock levels.

Translation status is auto-computed per locale. Product version increments on any change — products, variants, stock, or prices.

Multi-Currency Pricing

Time-bound prices per variant, per channel, per currency. Net/gross in cents with tax rate, previous price for strikethrough.

Overlap prevention ensures no two prices are valid for the same variant+channel+currency at the same time. Full audit trail included.

Channel Management

Configure export endpoints with per-channel locales, currencies, compression settings, retry policies, and authentication.

Toggle channels active/inactive. Each channel gets its own listing rules to control which products and variants are exported.

Delta Export Engine

Version-based change detection. Only products changed since last export are included, minimizing payload size and transfer time.

Queued export jobs with listing rules, locale/currency filtering, gzip compression, and retry with exponential backoff. Webhook delivery.

Backup & Restore

S3-based backup with write-only and read-only credential separation. Even if credentials leak, existing backups are safe.

Scheduled backups, manifest verification, per-collection checksums, and retention policies. Point-in-time restore from any backup.

Go Client SDK

Type-safe SDK with methods for products, variants, prices, attributes, taxonomy, exports, and stock operations.

Auto-retry with exponential backoff, gzip request/response compression, locale parameter support, and full error typing.

Multi-Tenant Auth

JWT authentication with organization-scoped data isolation. Role-based access: Admin, Manager, Editor.

Invite system for adding users to organizations. All API queries automatically filter by the authenticated user's org_id.

Real-Time Events (SSE)

Server-Sent Events for live updates on export progress, backup status, AI task completion, and data changes.

Subscribe to event streams filtered by event type. The admin UI uses SSE for real-time progress bars and notifications.

Listing Rules

Per article-type per channel configuration. Define which products and variants are exported via include/exclude filters.

Group-by axis support — e.g., create one listing per color, each with its own set of size variants. Full control over channel-specific assortment.

Developer Experience

First-Party Go SDK

Type-safe methods for every API operation. Products, variants, prices, attributes, taxonomy, exports, stock — all with auto-retry, gzip compression, and locale parameters.

The SDK mirrors the REST API 1:1, so anything you can do in the admin UI, you can automate programmatically. Build custom import scripts, sync pipelines, or headless storefronts.

main.go
1import "github.com/dreadl0ck/pim/sdk"
2
3client := sdk.NewClient("https://api.your-pim.com",
4 sdk.WithAPIKey("pim_sk_..."),
5 sdk.WithLocale("de"),
6)
7
8// List products with pagination
9products, err := client.Products.List(ctx, &sdk.ListOptions{
10 Limit: 50,
11 Offset: 0,
12 Status: "active",
13})
14
15// Get product with variants and prices
16product, err := client.Products.Get(ctx, "prod_abc123",
17 sdk.WithVariants(true),
18 sdk.WithPrices(true),
19)
20
21// Trigger AI enrichment
22task, err := client.AI.Enrich(ctx, product.ID, &sdk.EnrichOptions{
23 Stages: []string{"search", "images", "attributes", "translate"},
24 AutoApply: false, // human-in-the-loop
25 Confidence: 0.85,
26})
REST API

Live API Responses

Every operation is available via REST. List products with filters, trigger AI enrichment tasks, initiate delta exports — all with clean JSON responses and proper HTTP status codes.

GET/api/products?status=active&limit=2200 OK
{
  "products": [
    {
      "id": "prod_abc123",
      "slug": "merino-wool-sweater",
      "status": "active",
      "version": 47,
      "name": {
        "en": "Premium Merino Wool Sweater",
        "de": "Premium Merino Wollpullover"
      },
      "variants_count": 12,
      "translation_status": {
        "en": "complete",
        "de": "complete",
        "fr": "partial"
      }
    }
  ],
  "total": 1847,
  "limit": 2
}

Data Model

Ten interconnected collections, all org-scoped with composite indexes for fast multi-tenant queries.

Organization

Multi-tenant root with locale config, user management, and isolated data.

org_iddefaultLocalesupportedLocalesusersroles

AttributeDefinition

Global pool of 12+ typed fields with localizability and validation rules.

typeisLocalizableisVariantAxisvalidationgroupsort_order

TaxonomyNode

Hierarchical tree with materialized path for fast subtree queries.

pathdepthparent_idname[locale]recommended_attrs

ArticleType

Product templates linking required/optional attributes.

required_attrsoptional_attrsvariant_axesallowed_values

Product

Localized product data with version tracking and translation status.

name[locale]slugstatusversiontranslation_status

Variant

SKU, EAN/GTIN, axis values, stock tracking, and overrides.

skueanaxis_valuesstock_qtyreservedavailable

Price

Per variant x channel x currency with time-bound validity.

net_centsgross_centstax_ratevalid_fromvalid_toprevious

Channel

Export target with endpoint URL, auth, locales, and retry.

endpointauth_configlocalescurrenciescompressionretry

ListingRule

Per article-type per channel grouping and filter config.

article_type_idchannel_idgroup_byincludeexclude

ExportJob

Queued delta exports with payload, response, and retry.

channel_idsince_versionpayloadstatusattemptsresponse

Architecture

Three-tier architecture — React frontend, Go API backend with eight domain modules, and external infrastructure. Hover over any component to highlight its connections.

How We Compare

See how PIM stacks up against leading product information management platforms.

FeaturePIMAkeneoPimcoreSalsifyinRiver
ArchitectureAPI-first, Go + React + MongoDBPHP/Symfony, MySQL/ElasticsearchPHP/Symfony, MySQL + many backendsSaaS-only, proprietary stackSaaS/.NET, proprietary
Self-HostedDocker Compose, full controlCommunity Edition (open-source)Community Edition (open-source)SaaS onlySaaS only
Multi-LanguageBuilt-in localized attributes with translation statusBuilt-in locale channelsExtensive i18n supportMulti-locale supportMulti-locale support
Variant ManagementArticle types with variant axes, auto-expansionProduct models + variantsObject inheritance + variantsProduct families + variantsProduct models + variants
Price ManagementMulti-currency, time-bound, audit trail, strikethroughBasic pricing (Enterprise only)Flexible pricing objectsDigital catalog pricingBasic pricing
Export EngineDelta exports with version tracking, per-channel configConnectors + jobs, delta via eventsExport/import frameworkSyndication workflowsChannel publishing
AI EnrichmentBuilt-in 5-stage Gemini pipeline with human-in-the-loopThird-party AI add-onsVia marketplace integrationsAI-assisted workflowsAI content capabilities
Backup & RestoreS3 with write-only/read-only credential separationStandard DB backupsStandard DB + file backupsManaged by SaaS providerManaged by SaaS provider
Client SDKFirst-party Go SDK with type-safe methodsREST API + PHP SDKREST/GraphQL APIREST APIREST/GraphQL API
Learning CurveClean API, modern React UI, comprehensive docsModerate — Symfony knowledge helpsSteep — very flexible but complexModerate — SaaS onboardingModerate — enterprise-oriented

Frequently Asked Questions

Go 1.25 backend with gorilla/mux, MongoDB 8.0 database, React 19 + Vite 6 + MUI 7 frontend, and Google Gemini (via ADK v0.4) for AI enrichment. The entire stack runs in Docker containers with a single `make local` command.

Every MongoDB collection is scoped by org_id. All database queries automatically filter by the authenticated organization. Unique indexes are org-scoped (e.g., org_id + slug). JWT tokens carry organization context, and the API middleware extracts it automatically.

Localizable fields are stored as map[string]string (e.g., {"en": "Shirt", "de": "Hemd"}). Organizations define supported locales and a default locale. Translation status is auto-computed per product per locale, so you always know which products need attention in which markets.

Products have a version field that increments on any change (product, variant, stock, or price). When an export is triggered, the engine queries for products with version > lastExportVersion, builds locale/currency-filtered payloads, and pushes to channels with gzip compression and retry logic.

It can be. You set a confidence threshold per organization. Results above that threshold are auto-applied. Below it, changes require human-in-the-loop approval via the admin UI. Each field can be individually approved or rejected, and all AI decisions are logged with full token usage tracking.

Two separate S3 credential sets: write-only for backup (can only PutObject) and read-only for restore (can only GetObject/ListBucket). Even if write credentials are compromised, existing backups cannot be destroyed. Backups include per-collection checksums and manifests for integrity verification.

Yes. The SDK provides type-safe methods for all API operations: products, variants, prices, attributes, taxonomy, exports, and stock. It supports auto-retry with exponential backoff, gzip compression, and locale parameters. The SDK mirrors the REST API 1:1.

Article types define variant axes (e.g., color, size) with allowed values. When you create a product from that type, variants are auto-expanded from all combinations. Each variant gets its own SKU, EAN/GTIN, stock levels, and can override parent attributes.

Prices are per variant, per channel, per currency, with time-bound validity (valid_from/valid_to). The system prevents overlapping price windows, tracks previous prices for strikethrough display, stores net/gross in integer cents for precision, and maintains a full audit trail.

Contact

Would you like to request a demo? Have an idea for a new feature? Or feedback on the integration of our product? We'd love to hear from you.

Suggest a Feature
Solution Whitepaper

Download the PIM Whitepaper

AI-enriched product information management with multi-channel distribution and delta exports.

By downloading, you agree to receive product updates. Unsubscribe anytime.

Technical deep-dive
Architecture overview
Pricing & plans

Stay in the Loop

Get updates on new features, releases, and tips.