Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Market Kurly API page →
E-commerce & Marketplaces

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.

4 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 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.

Reference

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.

FieldWhat it holds
priceThe 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_priceThe 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, unitParsed from the site's own unit price line: "100mL 당 525원" gives 525 and 100mL. unit_price_text keeps the original.
review_countExact 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_typesDAWN (샛별배송, 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_stockThe 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.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/kurly/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "우유"
  }
}
Captured response
{
  "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
  }
}
Actions

What the Market Kurly API does

ActionDescriptionConcrete use caseKey params
searchSearch 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
categoryList 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
productFull 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
categoriesMarket 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
Code samples

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":"우유"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.kurly.search with {"query":"우유"}.
Use cases

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.
FAQ

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.

docs / kurly

Market Kurly

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.

base /kurly/v14 endpoints
post/kurly/v1/category2 credits

List one Market Kurly category by its id (from categories), with the same filters and sort as search.

ParameterAllowed / rangeDescription
category_idrequired—Category id from the categories action: a top category (e.g. 907 채소) or a sub category (e.g. 018001 우유·두유).
per_page = 96optional1–120Products per page, 1-120.
sort = recommendedoptionalrecommended · newest · best_selling · benefit · price_asc · price_descOrdering, as on the site: recommended (추천순), newest (신상품순), best_selling (판매량순), benefit (혜택순), price_asc / price_desc (on the lowest_price the card shows: sale, coupon-applied or Kurly Members price, whichever is lowest).
page = 1optional1–1000Page number, from 1. Past the last page the answer is empty with has_more=false.
min_priceoptional0–100000000Lowest price in KRW. Kurly applies the price range to lowest_price (the big card price: sale, coupon-applied or Kurly Members price, whichever is lowest), not to the struck regular price.
max_priceoptional0–100000000Highest price in KRW (same basis as min_price).
brandoptional—Brand id(s) from facets.brand of a search (e.g. br-7793), comma-separated for several.
storage_typeoptionalambient · cold · frozenPackaging temperature: ambient (상온), cold (냉장), frozen (냉동). Comma-separated for several.
delivery_typeoptionaldawn · normal_parcel · self_pickup_wine · installation_delivery · international_direct · online_ticketDelivery method: dawn (샛별배송, Kurly next-morning delivery), normal_parcel (판매자배송, seller parcel), self_pickup_wine, installation_delivery, international_direct, online_ticket.
benefitoptionaldiscount · coupon · exclusive_price · express_delivery · limitedBenefit facet: discount (할인상품), coupon (쿠폰), exclusive_price (단독특가), express_delivery (빠른도착), limited (한정수량).
kurly_only = falseoptional—Only Kurly Only (컬리 단독) products.
new_only = falseoptional—Only products the site marks as new (신상품).
Try in playground →
post/kurly/v1/product1 credit

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.

ParameterAllowed / rangeDescription
idrequired—Kurly product number (`id` of a search/category row) or a https://www.kurly.com/goods/<number> URL.
Try in playground →
post/kurly/v1/categories2 credits

Market Kurly category tree (top categories and their sub categories) with the ids the category action and the search `category` filter take.

Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.