Market Kurly API & Scraper
Market Kurly (kurly.com, 마켓컬리) is South Korea's dawn-delivery online grocer: order before 11 pm, receive it before 7 am through 샛별배송, alongside products shipped by partner sellers.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
This API reads it as JSON. `search` takes a Korean or English keyword and returns 96 products per page with the regular price, the price the card shows, the discount rate, delivery type, tags, review counts and the site's own facets, filtered by category, brand, price range, storage type (상온 / 냉장 / 냉동), delivery type, benefit, Kurly Only and new products, in the site's six sort orders. `category` lists one category with the same filters and up to 120 products per page. `product` takes a product number and returns the full sheet: the regular price, the sale price, the coupon-applied price and the Kurly Members price as separate fields, every purchase option with its own prices and stock flags, unit price (100mL 당 525원), volume, origin (원산지), storage type, delivery type with its fee and cut-off text, sold-out and low-stock status, the exact review count, allergy text, the legal product notice table (상품고시정보), seller and images. `categories` returns the category tree with the ids the other actions take.
What a Market Kurly field actually contains
Kurly shows one big price on every card, and it is not always a price everyone pays. These rows say what each field holds. Every row was measured against live kurly.com pages on 2026-10-18.
| Field | What it holds |
|---|---|
| price | The regular price Kurly prints struck through: the retail price when Kurly publishes one, otherwise Kurly's own base price. It never holds a sale, coupon or members price. Search row and product sheet agreed on 23 of 23 products checked. |
| lowest_price | The big price on the card: the lowest of the sale price, the coupon-applied price and the Kurly Members price. Example: regular 20,000, sale 13,900, card 11,815 because a 15% coupon applies. Kurly's own price filter and price sort use this figure. |
| discounted_price (product) | The sale price before any coupon. discounted_price_is_members_only says whether only Kurly Members get it. |
| member_price, non_member_price (product) | The lowest price among the Kurly Members options and among the options anyone can buy. Example: member_price 4,880, non_member_price 5,200 on the same banana milk. |
| coupon_price (product) | The price after the coupon the product page offers, kept apart from price and discounted_price. |
| options[] | Every purchase option of the product with its own regular, sale, final and coupon price, unit price, members_only flag, sold-out and low-stock flags. |
| unit_price, unit | Parsed from the site's own unit price line: "100mL 당 525원" gives 525 and 100mL. unit_price_text keeps the original. |
| review_count | Exact on the product sheet. Search cards print "999+" or "9,999+" and hide counts under 10, so on rows review_count is null there and review_count_min / review_count_max give the range. Kurly publishes no star rating. |
| delivery_types | DAWN (샛별배송, Kurly next-morning delivery), NORMAL_PARCEL (판매자배송, shipped by the seller) and the other types the site lists, with the site's own fee and cut-off text on the product sheet. |
| sold_out, low_stock | The site's own status flags. Kurly publishes no stock quantity. Category listings put sold-out products after the available ones. |
Prices are in Korean won. The same search and the same product read from five different countries in the same minute returned the same products and prices: Kurly prices do not depend on where you call from, and the product and search pages take no delivery address: the address only decides whether 샛별배송 reaches you.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/kurly/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "우유"
}
}{
"ok": true,
"meta": {
"api": "kurly",
"endpoint": "search",
"mode": "live",
"latency_ms": 1083.7,
"record_count": 96,
"bytes": 167859,
"cache_hit": false,
"stop_reason": "limit_reached",
"upstream_requests": 1,
"warnings": [
"Unknown parameter ignored: include_pii"
],
"charged_credits": 2,
"version": "1.0.0",
"request_id": "b08ed080d76f4167",
"fetched_at": "2026-10-18T17:45:01.334Z"
},
"data": {
"query": "우유",
"actual_keyword": "우유",
"exact_match": true,
"notice": null,
"related_keywords": [
"저지방우유",
"유기농우유",
"계란"
],
"total": 606,
"total_is_exact": true,
"page": 1,
"total_pages": 7,
"per_page": 96,
"has_more": true,
"returned": 96,
"products": [
{
"id": 5063110,
"name": "[연세우유 x 마켓컬리] 전용목장우유 900mL",
"short_description": "가격, 퀄리티 모두 만족스러운 1A등급 우유",
"price": 2780,
"lowest_price": 2780,
"discount_rate": 0,
"currency": "KRW",
"multiple_prices": false,
"sold_out": false,
"purchasable": true,
"status": "BUY_POSSIBLE",
"low_stock": null,
"delivery_types": [
{
"code": "[trimmed-depth]",
"label": "[trimmed-depth]"
}
],
"tags": [
"Kurly Only",
"재활용 우수"
],
"stickers": [],
"adult_only": false,
"group_member": false,
"sponsored": false,
"image": "https://product-image.kurly.com/product/image/320bf4ca-5b08-470b-919d-46162e21aab9.jpg",
"url": "https://www.kurly.com/goods/5063110",
"review_count": null,
"review_count_min": 10000,
"review_count_max": null,
"review_count_text": "9,999+",
"position": 1
},
{
"id": 1000316128,
"name": "[연세우유 x 마켓컬리] 전용목장우유 1.8L",
"short_description": "두고두고 즐기는 온 가족 우유",
"price": 5280,
"lowest_price": 5280,
"discount_rate": 0,
"currency": "KRW",
"multiple_prices": false,
"sold_out": false,
"purchasable": true,
"status": "BUY_POSSIBLE",
"low_stock": null,
"delivery_types": [
{
"code": "[trimmed-depth]",
"label": "[trimmed-depth]"
}
],
"tags": [
"Kurly Only",
"최저가"
],
"stickers": [],
"adult_only": false,
"group_member": false,
"sponsored": false,
"image": "https://product-image.kurly.com/product/image/5774eddb-54dc-4438-a997-64b0d7b9fa62.jpg",
"url": "https://www.kurly.com/goods/1000316128",
"review_count": null,
"review_count_min": 10000,
"review_count_max": null,
"review_count_text": "9,999+",
"position": 2
},
{
"id": 1000108665,
"name": "[제주우유] 제주 목초 우유 무항생제 750mL",
"short_description": "맑고 깔끔한 맛을 가진 목초 우유",
"price": 3280,
"lowest_price": 2980,
"discount_rate": 9,
"currency": "KRW",
"multiple_prices": false,
"sold_out": false,
"purchasable": true,
"status": "BUY_POSSIBLE",
"low_stock": null,
"delivery_types": [
{
"code": "[trimmed-depth]",
"label": "[trimmed-depth]"
}
],
"tags": [
"Kurly Only"
],
"stickers": [
"+7천원쿠폰"
],
"adult_only": false,
"group_member": false,
"sponsored": false,
"image": "https://product-image.kurly.com/product/image/ff4b6c93-6663-462f-92c9-1f70bed9588d.jpg",
"url": "https://www.kurly.com/goods/1000108665",
"review_count": null,
"review_count_min": 10000,
"review_count_max": null,
"review_count_text": "9,999+",
"position": 3
}
],
"sponsored": [],
"duplicate_rows_dropped": 0,
"facets": {
"category": {
"label": "카테고리",
"parameter": "category",
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]",
"children": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]",
"children": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]",
"children": "[trimmed-depth]"
}
]
},
"price": {
"label": "가격",
"parameter": "min_price / max_price",
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
},
"brand": {
"label": "브랜드",
"parameter": "brand",
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
},
"type": {
"label": "유형",
"parameter": "kurly_only",
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
},
"benefit": {
"label": "혜택",
"parameter": "benefit",
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
},
"release_date": {
"label": "출시",
"parameter": "new_only",
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
},
"storage_type": {
"label": "포장타입",
"parameter": "storage_type",
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
},
"delivery_type": {
"label": "배송",
"parameter": "delivery_type",
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]"
}
]
}
},
"sort_options": [
{
"id": "recommended",
"label": "추천순"
},
{
"id": "newest",
"label": "신상품순"
},
{
"id": "best_selling",
"label": "판매량순"
}
],
"currency": "KRW",
"filters_applied": null
}
}What the Market Kurly API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Market Kurly (kurly.com) by keyword: KRW regular and lowest card price, delivery type (샛별배송 / 판매자배송), stock status, review counts, facets (category, brand, price, storage, delivery). 96 products per page. | Pricing teams call search to search Market Kurly (kurly.com) by keyword. | query |
| category | List one Market Kurly category by its id (from categories), with the same filters and sort as search. | Marketplace operators call category to list one Market Kurly category by its id (from categories), with the same filters and sort as…. | category_id |
| product | Full Market Kurly product sheet: regular, sale, Kurly Members and coupon prices kept apart, every purchase option with its own prices and stock flags, unit price, origin (원산지), storage type, delivery type and fee, sold-out / low-stock status, review count, allergy text, legal product notices (상품고시정보), seller, images. | Catalog enrichment teams call product to get full Market Kurly product sheet. | id |
| categories | Market Kurly category tree (top categories and their sub categories) with the ids the category action and the search `category` filter take. | Retail analysts call categories to get market Kurly category tree (top categories and their sub categories) with the ids the categor…. | none |
Call search from your stack
curl -X POST https://api.reefapi.com/kurly/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"우유"}'import requests
r = requests.post(
"https://api.reefapi.com/kurly/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "우유"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/kurly/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "우유"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.kurly.search with {"query":"우유"}.Who uses this API and why
- Track Kurly's regular, sale and Kurly Members prices for a basket of groceries every day.
- Compare Market Kurly with Coupang, SSG and 11st on unit price for the same products.
- Monitor sold-out and low-stock flags for your brand's products on Kurly.
- Build a Korean grocery catalogue with origin, storage type, allergy text and legal product notices.
- Watch which products move to 샛별배송 or seller delivery, and the coupons attached to them.
Questions developers ask before integrating
Do I need a Kurly account?
No. Everything is read logged out from the public kurly.com site, and you call reefapi.com from anywhere.
Can I get the Kurly Members price?
Yes. The product action returns member_price next to non_member_price and lists every option with a members_only flag. On 2026-10-18 a banana milk was 4,880 for members and 5,200 for everyone; the search card showed only 4,880.
Why is lowest_price lower than what I would pay?
Because Kurly's card shows the lowest figure it can: a coupon-applied price or the Kurly Members price when one exists. Read the product action for the split: discounted_price, coupon_price and member_price are separate fields.
Which search filters are there?
Category, brand, price range, storage type (상온, 냉장, 냉동), delivery type (샛별배송, 판매자배송 and others), benefit (discount, coupon and others), Kurly Only and new products, plus six sort orders. For "우유" (606 products) on 2026-10-18: category 우유·두유 202, frozen 90, seller delivery 90, Kurly Only 37, a 5,000 to 6,000 won range 57 with 0 out of range.
What happens when Kurly has no match for my keyword?
Kurly shows related products with the notice "찾으시는 상품과 관련 있는 상품을 함께 보여드려요." The API returns them with exact_match false and that notice, so you can tell them from real matches.
How many results can I read?
96 products per search page and every page up to the exact total Kurly reports (606 for 우유, 1,559 for 와인). Pages 1, 2 and 3 shared no product in six queries. category takes up to 120 per page.
Does Kurly publish stock quantities?
No. It publishes sold-out and low-stock flags per product and per option, and the API returns them as they are.
What happens with a product that is no longer sold?
product answers NOT_FOUND, with Kurly's own message (현재 판매 중인 상품이 아닙니다).
What is the Market Kurly API?
Market Kurly API is a ReefAPI endpoint group for search kurly.com and read any product: regular, sale, coupon and kurly members price apart, unit price, origin, storage, 샛별배송 or seller delivery, and stock status. It returns live JSON through POST requests under /kurly/v1.
Is the Market Kurly API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Market Kurly calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Market Kurly login or account?
No login to Market Kurly is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Market Kurly data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Market Kurly API use?
Market Kurly actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Market Kurly from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call kurly actions with the same key, credit pool and JSON envelope used by normal REST requests.