Coupang
Mode: 🔐 Browser · Domain: coupang.com
Commands
| Command | Description |
|---|---|
opencli coupang search | Search Coupang products with logged-in browser session |
opencli coupang product | Read full product detail (price, rating, seller, delivery) for a product ID |
opencli coupang add-to-cart | Add a product to the logged-in account's shopping cart |
Usage Examples
bash
# List rocket-shipping mice (rank, product_id, title, price, rating, ...)
opencli coupang search "마우스" --filter rocket --limit 10
# Round-trip: pick a product_id from search and pull full detail
opencli coupang product 7654321
# Pass a full product URL instead of an ID
opencli coupang product --url https://www.coupang.com/vp/products/7654321
# JSON output (any subcommand)
opencli coupang product 7654321 -f json
# Add to cart (write — must be logged in)
opencli coupang add-to-cart 7654321Output
search
| Column | Type | Notes |
|---|---|---|
rank | int | 1-based position within this query / page |
product_id | string | Numeric Coupang product id; round-trips into coupang product |
title | string | Product display name |
price | int | null | Current selling price (KRW) |
unit_price | string | Per-unit price label, e.g. (100ml당 1,200원) |
rating | float | null | Average star rating |
review_count | int | null | Number of reviews |
rocket | string | Coupang-rocket badge label (로켓배송 / 로켓와우 / etc.) — empty string if no badge |
delivery_type | string | 무료배송 / 일반배송 / empty |
delivery_promise | string | 오늘도착 / 내일도착 / 새벽도착 / empty |
url | string | Canonical product URL |
product
Always returns a single row (or throws):
| Column | Type | Notes |
|---|---|---|
product_id | string | Numeric Coupang product id, normalised from input |
title | string | null | Product display name; null if upstream did not provide |
price | int | null | Current selling price (KRW) |
original_price | int | null | Pre-discount price |
discount_rate | int | null | Discount percent |
rating | float | null | Average star rating |
review_count | int | null | Number of reviews |
seller | string | null | Vendor / seller name |
brand | string | null | Brand label (when listed) |
rocket | string | null | Coupang-rocket type label |
delivery_promise | string | null | Arrival-window label |
image_url | string | null | Primary product image |
url | string | Canonical product URL |
null semantics: a null field means upstream did not expose that field on this product (e.g. some items have no original_price). Failures (login wall, page mismatch, page failed to render) raise typed errors instead of silently returning empty rows — callers should treat any returned row as real data.
add-to-cart
| Column | Type | Notes |
|---|---|---|
ok | bool | Always true on success (failures throw) |
product_id | string | Coupang product id added |
url | string | Canonical product URL |
message | string | Added to cart |
Validation (no silent clamp)
search --limit must be 1..50; out-of-range values throw ArgumentError (no silent clamp to 50). search --page must be a positive integer. search --filter currently only accepts rocket; any other value throws ArgumentError rather than being silently dropped during DOM lookup.
Prerequisites
- Chrome running and logged into coupang.com
- Browser Bridge extension installed
Notes
searchandproductuse the logged-in browser session because Coupang's/np/searchJSON endpoint and product pages serve different (and often empty) responses to anonymous traffic.product's extractor tries three sources in order: JSON-LD Product schema,window.__INITIAL_STATE__/__NEXT_DATA__bootstrap globals, and finally a DOM fallback. The merged result is what's returned.- Authentication failures raise
AuthRequiredError; missing/empty results raiseEmptyResultErrorwith a helpful hint. No command silently returns[]when login is the actual reason.