skills/business-operations/multi-channel-selling/SKILL.md
Sync your catalog and inventory across your own site, Amazon, eBay, and wholesale channels to sell everywhere from one system
npx skillsauth add finsilabs/awesome-ecommerce-skills multi-channel-sellingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Multi-channel selling lets you list products on your own website, Amazon, eBay, Walmart, and wholesale portals simultaneously — with inventory synchronized in real time so you never oversell. The critical rule: one inventory pool, updated immediately when any channel sells or restocks. Purpose-built channel management tools (Linnworks, Sellbrite, Skubana/Extensiv) make this manageable without custom integration work.
| Platform | Recommended Tool | Why | |----------|-----------------|-----| | Shopify | Shopify's native Sales Channels + Sellbrite or Linnworks for external marketplaces | Shopify has built-in Facebook, Instagram, Google, and TikTok channels; Sellbrite adds Amazon/eBay/Walmart with inventory sync | | WooCommerce | WP-Lister Pro (Amazon + eBay) or Linnworks | WP-Lister Pro lists products from WooCommerce directly to Amazon/eBay and syncs orders back | | BigCommerce | BigCommerce Channels + Codisto (for Amazon/eBay) | BigCommerce has a native Channel Manager; Codisto extends it to Amazon, eBay, and Walmart with real-time sync | | Any Platform | Linnworks or Skubana (Extensiv) as a central OMS | These tools sit above all channels and act as the single source of inventory truth for high-volume multi-channel operations |
Before connecting any channels, ensure your primary store has:
Amazon requires a Professional Seller account ($39.99/month) and approved product categories. You'll also need GTINs (UPCs or ASINs) for every listing.
Via Shopify + Sellbrite:
Via WooCommerce + WP-Lister:
Via Shopify + Sellbrite:
Via WooCommerce + WP-Lister:
Via Shopify + Sellbrite:
Via BigCommerce + Codisto:
When one channel sells out, you want to prevent other channels from showing stock you don't have. Most channel management tools handle this — configure buffer quantities per channel.
In Sellbrite:
In Linnworks:
In Codisto (BigCommerce):
BigCommerce stock - 3 for Amazon (holds 3 units back for other channels)Every channel order should flow into your central system and trigger fulfillment from the same process.
Shopify with Sellbrite:
WooCommerce with WP-Lister:
Linnworks (any platform):
// Normalize an order from any marketplace into a common format
interface NormalizedMarketplaceOrder {
channelName: string; // 'amazon', 'ebay', 'walmart', 'shopify'
channelOrderId: string; // the marketplace's order ID
lines: {
channelSku: string;
masterSku: string; // your internal SKU
quantity: number;
unitPriceCents: number;
}[];
shippingAddress: Address;
customerEmail: string;
}
async function ingestMarketplaceOrder(order: NormalizedMarketplaceOrder): Promise<void> {
// Idempotency: skip if already imported
const existing = await db.orders.findByChannelOrderId(order.channelName, order.channelOrderId);
if (existing) return;
await db.transaction(async tx => {
// Create the order in your system
const createdOrder = await tx.orders.insert({
channel: order.channelName,
channel_order_id: order.channelOrderId,
status: 'awaiting_fulfillment',
shipping_address: order.shippingAddress,
customer_email: order.customerEmail,
});
// Reserve inventory for each line
for (const line of order.lines) {
await tx.orderLines.insert({
order_id: createdOrder.id,
sku: line.masterSku,
quantity: line.quantity,
unit_price_cents: line.unitPriceCents,
});
// Decrement inventory immediately
await tx.raw(
'UPDATE inventory SET reserved = reserved + ? WHERE sku = ? AND (quantity_on_hand - reserved) >= ?',
[line.quantity, line.masterSku, line.quantity]
);
}
});
}
Track per-channel metrics monthly to understand your channel economics:
| Metric | Where to find it | |--------|-----------------| | Revenue per channel | Sellbrite/Linnworks Reports → Sales by Channel | | Sell-through rate per channel | Compare starting inventory to units sold per period | | Inventory sync lag (stale listings) | Check your channel tool's "last synced" timestamp — anything over 30 minutes needs investigation | | Return rate per channel | Amazon has its own return dashboard; WooCommerce/Shopify show returns by source channel tag |
| Problem | Solution | |---------|----------| | Oversell when two channels receive orders simultaneously | Use atomic inventory reservation with a WHERE clause checking available qty; Sellbrite/Linnworks handle this; for custom builds use database-level atomic updates | | Amazon listing goes inactive after a price change | Amazon may require a price change notification or your listing could violate their pricing policies; check the Amazon Seller Central notification inbox immediately when listings go inactive | | Duplicate order imports when webhook fires twice | Add a unique constraint on (channel_name, channel_order_id) in your orders table and use INSERT ... ON CONFLICT DO NOTHING | | Tracking number not pushed back to marketplace | Amazon requires tracking within 2 business days or seller performance metrics drop; verify your channel tool's automatic fulfillment confirmation is enabled |
tools
Let shoppers save products to a wishlist, share it with friends, and get notified when saved items come back in stock or drop in price
development
Build a themeable storefront with design tokens and CSS custom properties that supports white-labeling, multi-brand variants, and dark mode
development
Speed up product discovery with instant search suggestions, fuzzy typo matching, and category-aware results powered by Algolia or Elasticsearch
development
Build a mobile-first storefront with thumb-friendly navigation, sticky add-to-cart buttons, and touch-optimized components for high mobile conversion