marketplace-connectors について
marketplace-connectorsは、Shopify、WooCommerce、BigCommerce、独自ストアをAmazon、eBay、Walmartなどのマーケットプレイスに接続するためのスキルです。プラットフォーム別の設定、商品・在庫同期、注文取り込み、API連携を扱います。
主な機能
- 01プラットフォーム別の接続案内
- 02商品と在庫の同期
- 03マーケットプレイス注文の取り込み
- 04独自ストア向けAPI連携
- 05チャネル別の在庫バッファ設定
活用シーン
- 01自社ストア以外への販路拡大
- 02チャネル間の在庫同期
- 03マーケットプレイス注文のOMS・ERPへの取り込み
- 04手動の表計算フィードの自動化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill marketplace-connectorsインストール後、Claude Code で/marketplace-connectorsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
tile.jsonevals/amazon-sp-api-auth-and-listing-integrati/criteria.jsontask.mdevals/multichannel-inventory-sync-with-ebay-in/criteria.jsontask.mdevals/order-import-pipeline-and-walmart-acknow/criteria.jsontask.md詳細
マーケットプレイスコネクター
概要
Amazon、eBay、Walmart Marketplaceで販売すると、販売チャネルの範囲を広げられますが、運用は複雑になります。各マーケットプレイスには、それぞれ独自の商品データモデル、出品要件、注文ライフサイクル、在庫管理APIがあります。このスキルでは、管理型プラットフォーム向けのアプリと、カスタムストアフロント向けの直接API連携を使って、ストアを主要なマーケットプレイスに接続する方法を説明します。
このスキルを使用する場面
- 自社ストアフロント以外の主要なマーケットプレイスプラットフォームにも販売チャネルを拡大するとき
- チャネル間で在庫を同期するマルチチャネルコマースシステムを構築するとき
- マーケットプレイスからOMSやERPへの注文インポートを自動化するとき
- 既存のマーケットプレイスの商品フィードが手動(スプレッドシートのアップロード)で、自動化が必要なとき
主な手順
ステップ 1:プラットフォームと推奨される方法を決定する
| プラットフォーム | 推奨される方法 | 主なアプリ |
|---|---|---|
| Shopify | マーケットプレイスアプリを使用します。カスタムコードは不要です | Amazon + eBay + Walmart向けのCodisto(月額$39)、マルチチャネル出品管理向けのLitCommerce(月額$19) |
| WooCommerce | 標準的な連携にはプラグインを使用します | FBA向けのWooCommerce Amazon Fulfillment(無料、amazon.com)、出品と注文を包括的に管理するWP-Lister Pro for Amazon($99) |
| BigCommerce | App Marketplaceコネクターを使用します | Amazon、eBay、Walmart、Etsyを同期するSellbrite(月額$79、marketplace.bigcommerce.com)、エンタープライズ向けのマルチチャネルにはChannelAdvisor |
| Custom / Headless | 直接API連携 | Amazon SP-API、eBay REST API、Walmart Marketplace APIを使用して構築し、注文のインポートと在庫同期にはキューを使用します |
ステップ 2:プラットフォーム別のマーケットプレイス設定
Shopify
CodistoでAmazonに接続する:
- Shopify App StoreからCodistoをインストールします(Amazon + eBay向けに月額$39)
- Amazon Seller Centralアカウントに接続します(米国、英国、EU、AUに対応)
- CodistoでListings → Amazonに移動し、Link Productsをクリックします。Shopifyの商品を既存のASINに照合するか、新しい出品を作成します
- Inventory Syncを有効にすると、Shopifyの在庫が変わったときにAmazonの在庫数が自動更新されます
- Order Importを有効にします。CodistoがAmazonの注文をShopifyの注文としてインポートするため、1か所でフルフィルメントを管理できます
出品前の重要事項:
- Codistoの設定で安全在庫のバッファーを設定します。同期に遅延が発生した場合に過剰販売を防ぐため、Shopifyの在庫の10~20%をマーケットプレイス向けに引き当てないようにします
- Amazonの手数料(販売手数料15% + FBA手数料)を考慮して、Codistoでマーケットプレイス別の価格を設定します。Shopifyストアより高い価格で出品してください
WooCommerce
WP-Lister ProでAmazonに接続する:
- WP-Lister Pro for Amazonを購入してインストールします(wp-lister.comから$99)
- WP-Lister → Settings → Amazonに移動し、Amazon Marketplace Web Service(MWS)の認証情報を入力します
- WP-Lister → Productsで出品する商品を選択し、ASIN照合を設定するか、新しい出品を作成します
- Auto-sync inventoryを有効にします。WooCommerceの在庫数が変わると、WP-ListerがAmazonの在庫数を更新します
- Import Amazon ordersを有効にすると、注文が自動的にWooCommerceに表示されます
WooCommerceでeBayに接続する場合:
- WP-Lister Pro for eBay($99)をインストールします。手順はAmazon版と同じです
- WP-Listerの設定でeBay APIの認証情報を使って接続します
- WooCommerceのカテゴリーとeBayのカテゴリー間のカテゴリー対応付けを設定します
BigCommerce
Sellbrite で Amazon、eBay、Walmart に接続します:
- BigCommerce App Marketplace から Sellbrite をインストールします(月額 79 ドル)
- マーケットプレイスの出品者アカウント(Amazon、eBay、Walmart)と BigCommerce ストアを接続します
- Sellbrite が BigCommerce の商品カタログを取得し、接続済みのすべてのマーケットプレイスに出品情報を同期します
- チャネルごとに在庫バッファーのルールを設定します(例:BigCommerce ストア用に 5 個を確保します)
- 注文の自動インポートを設定します。マーケットプレイスの注文が BigCommerce に表示され、フルフィルメントを一元管理できます
カスタム/ヘッドレス
Amazon SP-API 認証:
// lib/amazon/auth.ts — LWA OAuth token with caching
let tokenCache: { accessToken: string; expiresAt: number } | null = null;
export async function getAccessToken(): Promise<string> {
if (tokenCache && tokenCache.expiresAt > Date.now() + 60000) return tokenCache.accessToken;
const res = await fetch('https://api.amazon.com/auth/o2/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'refresh_token',
refresh_token: process.env.AMAZON_REFRESH_TOKEN!,
client_id: process.env.AMAZON_CLIENT_ID!,
client_secret: process.env.AMAZON_CLIENT_SECRET!,
}),
});
const data = await res.json();
tokenCache = { accessToken: data.access_token, expiresAt: Date.now() + data.expires_in * 1000 };
return tokenCache.accessToken;
}
Amazon の在庫を更新します(SP-API Listings Items):
export async function updateAmazonInventory(sellerId: string, sku: string, quantity: number) {
const accessToken = await getAccessToken();
// SP-API also requires AWS Signature V4 — use @smithy/signature-v4
return fetch(`https://sellingpartnerapi-na.amazon.com/listings/2021-08-01/items/${sellerId}/${encodeURIComponent(sku)}`, {
method: 'PATCH',
headers: { 'x-amz-access-token': accessToken, 'Content-Type': 'application/json' },
body: JSON.stringify({
productType: 'PRODUCT',
patches: [{ op: 'replace', path: '/attributes/fulfillment_availability', value: [{
fulfillment_channel_code: 'DEFAULT',
quantity,
marketplace_id: 'ATVPDKIKX0DER', // US marketplace
}] }],
}),
});
}
Amazon の注文をインポートします(5 分ごとにポーリング):
export async function pollAmazonOrders() {
const lastPolledAt = await db.syncState.getLastPolled('amazon') ?? new Date(Date.now() - 3_600_000);
const accessToken = await getAccessToken();
const params = new URLSearchParams({
MarketplaceIds: 'ATVPDKIKX0DER',
CreatedAfter: lastPolledAt.toISOString(),
OrderStatuses: 'Unshipped,PartiallyShipped',
});
const res = await fetch(`https://sellingpartnerapi-na.amazon.com/orders/v0/orders?${params}`, {
headers: { 'x-amz-access-token': accessToken },
});
const { payload } = await res.json();
for (const amazonOrder of payload.Orders ?? []) {
// Idempotent: skip if already imported
if (await db.orders.findByExternalId(amazonOrder.AmazonOrderId)) continue;
await orderQueue.add('import-order', {
externalId: amazonOrder.AmazonOrderId,
channel: 'amazon',
// ...map order fields
}, { jobId: `amazon-${amazonOrder.AmazonOrderId}` });
}
await db.syncState.updateLastPolled('amazon', new Date());
}
在庫数が変わったときに、すべてのチャネルで在庫を同期します:
export async function syncInventoryAcrossChannels(sku: string, quantity: number, source: string) {
const tasks = [];
if (source !== 'amazon') {
tasks.push(updateAmazonInventory(process.env.AMAZON_SELLER_ID!, sku, quantity)
.catch(err => console.error(`Amazon sync failed for ${sku}:`, err)));
}
if (source !== 'ebay') {
tasks.push(ebayClient.updateInventoryItem(sku, quantity)
.catch(err => console.error(`eBay sync failed for ${sku}:`, err)));
}
// Run all syncs in parallel; individual failures logged but don't block others
await Promise.allSettled(tasks);
}
ベストプラクティス
- 各チャネルに安全在庫バッファーを設定します — マーケットプレイスに在庫の 100%を公開しないでください。自社ストア用の在庫を確保し、同期遅延にも対応できるよう、バッファーを設けます
- 冪等性のある注文インポートを実装します — マーケットプレイスの注文 ID を一意のキーとして使用します。ポーリングによって同じ注文が複数回返されることがありますが、一意制約で重複を防止できます
- マーケットプレイスの注文を速やかに確認します — Walmart では 4 時間以内の確認が必要です。Amazon では、約束した配送 SLA までに発送確認を行う必要があります。応答が遅れると、アカウントの不備指標に影響します
- マーケットプレイス固有のレート制限を遵守します — Amazon SP-API では、操作ごとにトークンバケット方式の制限があります。指数バックオフを使用し、数千件の SKU の一括在庫更新には個別の API 呼び出しではなく Feeds API を使用します
- 同期状況だけでなく、出品情報の健全性も監視します — マーケットプレイスごとに、出品停止、Buy Box 獲得率、アカウントの健全性を追跡します。出品停止は収益の損失につながります
よくある落とし穴
| 問題 | 解決策 |
|---|---|
| Amazon の出品は成功するが、非アクティブになる | Listings API の応答で出品停止を確認します。よくある原因として、商品タイプに必要な属性の不足があります |
| 同期の遅延により在庫を過剰販売する | マーケットプレイスアプリの設定で安全在庫バッファーを設定します。チェックアウト時には必ず最終的な在庫確認を行います |
SP-API が QuotaExceeded を返す | SP-API の各操作には個別のレート制限があります。個別の PATCH 呼び出しではなく、Feeds API を一括在庫更新に使用します |
| Shopify のマーケットプレイスアプリが注文をインポートしない | Shopify 管理画面の Apps → App permissions で、そのアプリに注文の Write 権限があることを確認します |
| eBay の出品がポリシー違反で拒否される | 自動化する前に商品タイトルに制限語句が含まれていないか確認します。eBay の禁止商品ポリシーを確認してください |
関連スキル
- @webhook-architecture
- @product-information-management
- @erp-integration
- @monitoring-alerting-commerce
コメント
Markdown 対応