Go to App
getting-started/overview

Overview

What eListSync is, the canonical catalog, the seven destinations we ship, and what we do not claim.

Who it is for

eListSync is for operators who already sell (or are about to sell) the same catalog on more than one storefront and do not want to copy-paste titles, variants, and stock into each admin. Typical users: a Shopify merchant adding Amazon and TikTok Shop; a Medusa store that also lists on eBay; a WooCommerce shop that needs Walmart without a second listing hire.

It is not an ads manager, not a 3PL, and not a generic “200 marketplace” aggregator. If a channel is not in the matrix below, it is not in the product.

What it does

Paste a product URL, drop a document, or send a capture from the browser extension. eListSync normalizes that into one canonical product with variants, then publishes through per-channel transformers:

  • Shopify (Admin GraphQL)
  • Amazon (SP-API listings)
  • eBay (Inventory API)
  • TikTok Shop
  • WooCommerce (REST)
  • MedusaJS and compatible custom REST admin APIs
  • Walmart (item / inventory shaped payloads)

After publish, inventory webhooks and poll workers keep stock aligned. Redis Lua locks decrement atomically so concurrent buys on two channels cannot oversell.

Canonical schema

Every ingested product is mapped to a stable internal model. Destination transformers **read this model**; they do not scrape the source URL again at publish time.

  • Identity: title, brand, handle, description
  • Commerce: base price, currency, compare-at when present
  • Media: absolute image URLs (relative paths are resolved at ingest)
  • Variants: SKU, option values (typically Size×Color), stock, GTIN/MPN when the source provided them
  • Enrichment: ai_generated_metadata for SEO rewrites, category hints, and per-channel notes

Channel-specific quirks (Shopify GraphQL options, Amazon listing attributes, Medusa Admin option titles) live in transformers. Operators should not maintain a spreadsheet of “Amazon title vs Shopify title” unless they later edit the canonical record.

Extraction pipeline

  1. **Fetch** — scraper workers retrieve HTML (stealth browser when a storefront blocks naive fetch)
  2. **Parse** — Schema.org / JSON-LD first; OpenGraph and marketplace DOM heuristics second
  3. **Normalize** — currencies, variant matrices, image URLs, SKU uniqueness within the product
  4. **Persist** — Postgres products + variants with timestamps; BullMQ job telemetry for the ingest

If JSON-LD is missing, quality depends on the DOM fallback for that host. Always preview before you bulk-publish a new supplier domain.

Multi-channel fan-out

POST /api/products/publish takes product ids and destination account ids. Each destination has:

  • Its own BullMQ bulkhead (isolated concurrency)
  • Its own rate-limit / Retry-After backoff
  • Its own circuit breaker (open channel skips new jobs until a probe succeeds)
  • Sync logs that distinguish mapper errors from HTTP errors

A 429 on Shopify does not pause Amazon. A poison payload lands in the DLQ instead of retrying forever on the hot path.

What we do not do

  • We do not list Etsy, Square, Wix, Shopee, Lazada, or Mercado Libre on this site because those adapters are not shipped
  • We do not run paid ads, kitting, or warehouse management
  • We do not claim a 14-day trial or invented customer logos
  • We do not hide SKU rejections — they are written to channel_sync_logs

Plans and limits

Hobby is $0: 50 products per month, 2 connected channels, no credit card. Pro is $49/mo (or $39/mo billed annually) with higher product volume and up to 8 channels. Enterprise is listed on Pricing. Plan limits are products per month and number of channels — not a separate bill per Shopify shop under the same organization.