Catalogue & product data
Product Information Management (PIM) & Data Enrichment
Indicative price, not an offer: $49-199/mo depending on product count and channel count
Generated from docs/plan/paid/product-information-management-data-enrichment/PLAN.md in the AstroBaaS repository. Nothing described below is implemented — it is the written plan for it.
A paid module for merchants with >500 SKUs who maintain product data across multiple spreadsheets, PDFs, and supplier systems. Unifies attributes, syncs enriched data to multiple sales channels, and audits changes. Handles master-data ETL, attribute mapping, and multi-channel transformation logic — work core does not own because it requires data transformation expertise and channel-specific business rules.
The problem
Our product data lives in three spreadsheets: one for descriptions, one for specs, one for images. Every time we add a channel (Marketplace, TikTok Shop, B2B portal), someone manually maps columns. We’ve had duplicate products, conflicting SKUs, and stale descriptions on marketplaces for weeks. We need a system that owns the master data and pushes enriched attributes to every channel in sync.
What it does
- Import product data from CSV/Excel/JSON with mapping wizard (columns → AstroBaaS attributes)
- Master data store with change history and audit trail per field
- Attribute enrichment rules: formula editor for computed fields (e.g., ‘weight_kg * 2.2 = weight_lbs’)
- Channel mapping: define which AstroBaaS attributes map to Marketplace fields, TikTok Shop fields, B2B portal fields
- Automated sync to channels on schedule (hourly, daily) or on-demand
- Conflict detection: warn if mapped attribute has been edited manually in channel vs. master data
- Bulk enrichment UI: fill missing descriptions, bulk-edit categories, approve changes before sync
- API for external systems to read/write product attributes in bulk
- Data quality score per product (% fields filled, % images present, description length, reviews)
- Role-based access: data stewards edit master data, channel owners approve sync
What it deliberately does NOT do
Each boundary carries its reason. A boundary without a reason gets crossed by the next person who reads this.
- AI-generated product descriptions — that is AI content generation, a separate paid module. PIM owns the pipeline; AI module owns the generation.
- Image optimization or CDN delivery — paid media module owns image hosting and transforms; PIM references image URLs only.
- Translation and localization — paid i18n module owns multi-language attribute storage and translation workflows; PIM stores the master (English) attributes.
- Supplier order management or PO automation — supply chain is a separate domain; PIM is catalog-only.
- Real-time carrier feed parsing — paid integrations own carrier data; PIM consumes manually-uploaded or API-fed data.
- Machine learning for recommendations — PIM enriches data; paid ML module consumes enriched data for recommendations.
Data model
New PRODUCT_ATTRIBUTE_VERSION table (product_id, attribute_id, value, version, changed_by, changed_at, sync_status). New CHANNEL_MAPPING table (channel_id, source_attribute_id, target_field_name, transform_function). New DATA_QUALITY_SCORE table (product_id, score, calculated_at). Migration required: backfill PRODUCT_ATTRIBUTE_VERSION for existing products.
API
- POST /admin/pim/import (CSV/JSON bulk import with mapping)
- GET /admin/pim/products/:id/history (attribute change history)
- PATCH /admin/pim/products/:id/attributes (bulk update attributes)
- POST /admin/pim/channels/:channelId/sync (trigger channel sync)
- GET /admin/pim/sync-status (last sync time, error count per channel)
- POST /admin/pim/enrich (formula-based bulk enrichment preview + apply)
Every route added here must also appear in src/pages/openapi.json.ts — a test
fails the build if it does not.
Admin
PIM dashboard showing product data quality score by product. Import wizard with column-to-attribute mapping. Channel mapping UI (visual flow: AstroBaaS attribute → channel field). Sync status page showing last run, failed products, warnings. Change history browser. Enrichment rule builder (if X then Y formulas).
The seam — why this is paid
Paid PIM module owns data transformation, ETL pipeline, attribute mapping, and channel sync logic. Core provides attribute storage (via flexible-product-attributes) and basic API. PIM does not own channels themselves; it owns the mapping and sync orchestration. Channels are assumed to expose an API or webhook for receiving updates.
Paid module owns data transformation ETL engine, attribute mapping, multi-channel sync logic, and enrichment automation; core exposes product API only
Dependencies
- flexible-product-attributes (must exist first)
- attribute-sets (optional but strongly recommended)
- Webhook/event system (for sync triggers)
- API routing and auth (existing)
Acceptance checks
Each of these must be able to fail. Before claiming this is done, break the code deliberately and watch each one go red.
- CSV import with column mapping succeeds; products created or updated per mapping
- Change history shows who changed which attribute when, and displays old → new value
- Channel sync sends mapped attributes to channel API in channel’s expected format (not generic AstroBaaS JSON)
- Conflict detected if attribute edited in master data and also manually in channel since last sync; user sees warning before re-sync
- Data quality score updates after import and reflects % of attributes filled, presence of images, description length
- Enrichment rule (e.g., weight_kg * 2.2 = weight_lbs) is previewed on 5 products before bulk apply; can be rolled back
- Role with ‘channel_owner’ scope can approve sync but not edit master data; role with ‘data_steward’ scope can edit but not approve sync
Risks
If PIM overwrites manual channel edits without user confirmation, merchants lose work. Mitigate: conflict detection and dry-run before sync. If import is not atomic, half-imported data corrupts catalog. Mitigate: transaction wrapper, rollback on error. If attribute versioning is not stored, audit trail is lost. Mitigate: immutable version history, never delete old values. If mapped channel fields have wrong data types (e.g., string in numeric field), channel rejects sync silently. Mitigate: pre-flight validation per channel.
Commercial context
| Suggested price | $49-199/mo depending on product count and channel count |
| Rival anchor | 6 apps (Apimio $199-399/mo, Gepard freemium, Quable, Inriver, MerchPIM, pimsimple); enterprise $200-500+/mo |
The anchor is what the nearest equivalent charges on Shopify or Magento today. It is context for a pricing decision, not the decision.
Generated from the commerce plan. See docs/COMMERCE-PLAN.md for the full
catalogue and ../../AI-GUIDE.md for how to work on this repository.