ssc
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sscget offers for B07XYZ123 on Amazon"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ssc — ShoppingScraper CLI
Price scraper CLI for Amazon, Google Shopping, Bol.com, and Coolblue. Scrape prices, offers, buy-box winners, variants, and reviews from your terminal — or wire it into Claude Desktop / Cursor / Claude Code as a native MCP tool.
🌐 Website: shoppingscraper.com · 🔑 Get an API key: app.shoppingscraper.com · 📖 API docs: apiguide
Agent-friendly command-line tool for the ShoppingScraper API by shoppingscraper.com. Stable JSON envelope on every command, MCP server mode for Claude Desktop / Cursor / Code, ships with a SKILL.md so any LLM picks it up without schema wrapping.
Why
You're an AI agent (or a developer building one) and you need product data — prices, offers, buy-box winners, variants, reviews — from Google Shopping, Amazon, Bol.com, or Coolblue. Today you're hitting the raw HTTP API and writing the same retry/error/credit-tracking glue every time. ssc is that glue, in one binary, with a stable contract.
Use cases:
Price monitoring CLI — fan out across thousands of EANs from cron / GitHub Actions / your CI.
E-commerce scraping — match an EAN to a marketplace SKU, pull every offer, watch the buy-box.
AI agents — give Claude/Cursor live marketplace data via the built-in MCP server.
Bulk price scraping —
ssc batchreads EANs from stdin, streams NDJSON envelopes.
Related MCP server: MCP4Amazon
Install
# Run without installing
npx -y @shoppingscraper/cli credits
# Global install
npm install -g @shoppingscraper/cli
# Or via Homebrew (post-launch)
brew install ShoppingResult/tap/sscQuick start
# 1. Set your API key (get one at https://app.shoppingscraper.com)
export SSC_API_KEY="<your-key>"
# 2. Verify
ssc credits
# → {"_v":1,"ok":true,"command":"credits","result":{...},"meta":{...}}
# 3. Get offers for an EAN on a marketplace
ssc offers --site amazon.de --ean 0190198001281
# 4. Pretty output for humans
ssc buybox --site bol.com --ean 0190198001281 --pretty
# 5. Pipe-friendly: get just the result payload
ssc info --site shopping.google.nl --ean 0190198001281 | jq '.result'
# 6. Bulk: 500 EANs from a file, capped at 500 credits
ssc batch offers --input eans.txt --site amazon.de --max-spend-credits 500Commands
Command | What it does | Credits |
| Show remaining credits + plan info | 0 |
| Recent API calls for this key | 0 |
| Google Shopping offers via the channel API (async batch, up to 50k EANs) | 1 per EAN |
| All seller offers for an EAN (Amazon / Bol.com, legacy sync) | 1 |
| Raw channel-pipeline steps for script-driven collection | 1 per EAN (submit) |
| Product title, brand, images, specs | 1 |
| Current buy-box winner + price | 1 |
| Google catalog matching via the channel API (catalog_id + title) | 1 per EAN |
| EAN → SKU/URL (Amazon / Bol.com, legacy sync) | 1 / 4 |
| Raw channel-pipeline steps for matching | 1 per EAN (submit) |
| Google Shopping search | 1 |
| Structured data from any product URL | 1 |
| Variants for a Google Shopping SKU ⚠ | 6 |
| Reviews + rating distribution | 1 |
| Fan out a command (NDJSON output) | n × cost |
| List every command (for agent introspection) | 0 |
| MCP server over stdio | 0 |
⚠ = high-cost, gets requiresConfirmation: true in MCP tool annotations.
Bulk / streaming
Every scraping command accepts --input <file|->. Reads one EAN/SKU per line, fans out with the configured concurrency (default 5), jitters each request 200–800ms, streams NDJSON envelopes. Lines beginning with # are comments.
# From a file
ssc offers --input eans.txt --site amazon.de --max-spend-credits 500
# From stdin
cat eans.txt | ssc info --site bol.com --input - --max-spend-credits 100
# `ssc batch` is sugar with a mandatory cap
ssc batch buybox --input eans.txt --site amazon.de --max-spend-credits 200ssc batch requires --max-spend-credits N — there is no default. This is deliberate: agents bypassing this flag is the highest-blast-radius mistake an MCP-driven workflow can make.
Channel API (Google Shopping)
Google Shopping offers and matching run through the channel API on enterprise.shoppingscraper.com — an async batch pipeline instead of one HTTP request per EAN. ssc offers / ssc match for other sites keep the legacy sync endpoints, which now serve Amazon and Bol.com only (Coolblue, Idealo, and the rest were dropped from these two commands).
The blocking form wraps the whole pipeline (submit → poll → drain → ack) and streams NDJSON, one envelope per product:
# Up to 50,000 EANs in one run; 1 credit per EAN
ssc offers --country nl --input eans.txt --max-spend-credits 5000
# Single EAN, catalog matching (returns catalog_id + title, no offers)
ssc match --country de --ean 5055986110651
# Input lines can also be NDJSON objects; a feed title roughly doubles match rate
# {"ean":"5055986110651","title":"Monstershop T-mech Garten Anhängewalze"}For big batches or cron-driven collection, drive the raw steps yourself:
ssc offers submit --country nl --input eans.txt --max-spend-credits 50000
ssc offers status # {queued, claimed, done, failed}
ssc offers results --ack # one page (max 1000), acked after printing
ssc offers ack --page-token <token> # manual ack if you collected without --ackOperational notes:
Billing is unchanged: 1 EAN = 1 credit, billed at submit.
Delivery is at-least-once: a page you never ack is redelivered; the blocking form acks only after writing the results to stdout.
Drain within ~6 hours: completed results that are never collected are pruned. If the blocking form hits
--wait-timeout(default 3600s), resume withssc offers results --ack.Submit is non-idempotent: reconcile against the
acceptedcount instead of re-posting a timed-out submit.Key scopes: offers and matching both use
channel:google— one key covers both.--application-idisolates submissions/results per application on one key.
Output format
Every command emits a stable JSON envelope on stdout (one line for batch/streaming):
{
"_v": 1,
"ok": true,
"command": "offers",
"result": { /* endpoint payload */ },
"error": null,
"meta": {
"credits_remaining": 12483,
"duration_ms": 412,
"request_id": "ssc_01a2b3c4d5e6f708"
}
}On failure: ok: false, result: null, error.code is one of AUTH_MISSING | AUTH_INVALID | RATE_LIMITED | UPSTREAM_ERROR | NETWORK_ERROR | SPEND_CAP_EXCEEDED | NOT_FOUND | INVALID_RESPONSE | USER_ERROR.
Exit codes:
0ok ·1user error ·2auth ·3rate-limit ·4upstream ·5network ·6spend-cap exceeded.
Pass --pretty for a human-readable view; --quiet to suppress stdout (only the exit code matters).
Authentication
Resolution order:
--api-key <key>flag (avoid — lands in shell history)SSC_API_KEYenvironment variable (recommended)~/.config/ssc/config.jsonwith{"api_key": "..."}(mode 0600 recommended)
The CLI sends the key as a query-string parameter (?api_key=...) to the legacy hosts (api. / app.shoppingscraper.com), matching the deployed ShoppingScraper API contract. The channel API host (enterprise.shoppingscraper.com) authenticates with the X-API-Key header instead — the key never appears in channel URLs. All URLs and header values are redacted before they appear in logs, error envelopes, or meta.request_id.
MCP — Model Context Protocol
ssc mcp serveRun as a stdio MCP server, exposing every command as a tool (ssc_offers, ssc_info, ssc_buybox, …). Tool input schemas are auto-derived from the same zod schemas the CLI uses, so agents and humans see the same contract.
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"shoppingscraper": {
"command": "npx",
"args": ["-y", "@shoppingscraper/cli", "mcp", "serve"],
"env": { "SSC_API_KEY": "<your-key>" }
}
}
}Cursor / Claude Code
Same shape — point any MCP-compatible host at npx -y @shoppingscraper/cli mcp serve with SSC_API_KEY in the env.
Tool annotations
High-cost tools (ssc_variants, ssc_match with --deepsearch, anything bulk) carry requiresConfirmation: true. This annotation is advisory — well-behaved hosts prompt before invoking; hostile or headless clients ignore it. The real spend-cap brake is --max-spend-credits and the server-side cap on your ShoppingScraper API plan.
Spend-cap defenses
Three layers, in order of strength:
Server-side (strongest) — the ShoppingScraper API enforces
max_credits_per_calland per-key daily caps. Returns HTTP 402 withcredits_required. Cannot be bypassed by anything.Client-side mandatory —
ssc batchrefuses to run without--max-spend-credits N.Client-side advisory — global
--max-spend-credits(default 100) on every command; per-tool soft caps; MCPrequiresConfirmationannotations.
To disable client-side caps for a power-user workflow:
ssc batch offers --input eans.txt --site amazon.de --max-spend-credits noneProgrammatic use
import { HttpClient, endpoints, resolveConfig } from "@shoppingscraper/cli";
const cfg = resolveConfig();
const client = new HttpClient({
apiKey: cfg.apiKey,
baseUrl: cfg.baseUrl,
appBaseUrl: cfg.appBaseUrl,
channelBaseUrl: cfg.channelBaseUrl,
timeoutMs: 30_000,
retries: 2,
});
// Legacy sync (Amazon / Bol.com)
const r = await endpoints.offers(client, { site: "amazon.de", ean: "0190198001281" });
console.log(r.creditsRemaining, r.data);
// Channel API (Google Shopping): submit → status → results → ack
const sub = await endpoints.channelSubmit(client, "offers", {
country: "nl",
items: ["0190198001281"],
});
console.log(sub.data.accepted, sub.data.rejected);
await client.close();Development
npm install
npm run typecheck
npm test
npm run build
node dist/cli.js --helpSecurity
See SECURITY.md. Found a vulnerability? Email security@shoppingscraper.com. Please do not open a public issue.
About ShoppingScraper
ssc is built and maintained by ShoppingScraper — the e-commerce price-scraping API for Amazon, Google Shopping, Bol.com, Coolblue, and 30+ other marketplaces. EAN-precise, real-time, and built for AI agents.
🌐 Website: shoppingscraper.com
🔑 Get an API key: app.shoppingscraper.com
📖 API docs: app.shoppingscraper.com/apiguide
📨 Contact: hello@shoppingscraper.com
License
MIT — © ShoppingScraper
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityCmaintenanceA Model Context Protocol server enabling product searches across e-commerce platforms, price history tracking, and product specification-based searches using natural language prompts.Last updated219MIT
- Flicense-qualityDmaintenanceAn MCP server that enables large language models to directly access and analyze Amazon product information, including product details, variants, and reviews.Last updated
- Flicense-qualityDmaintenanceThis MCP server scrapes Amazon product details and reviews, manages a local JSON database, and visualizes intelligence data through a rich dashboard.Last updated
- AlicenseAqualityFmaintenanceAn MCP server that gives AI agents eyes on any e-commerce storefront, enabling scraping, analysis, and comparison through the Model Context Protocol.Last updated1451MIT
Related MCP Connectors
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Official Octoparse MCP server for template discovery, cloud tasks, and structured data export.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ShoppingResult/shoppingscraper-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server