번개장터 API: 중고 매물의 가격·상태·판매 여부를 JSON 데이터로
번개장터에 올라온 중고 매물을, 비회원으로 둘러볼 때와 같은 범위에서 JSON으로 받는 API입니다. 가격은 원 단위 정수(만 원 단위 아님)이고, 판매중·예약중·판매완료 상태, 찜과 채팅 수, 마지막 업데이트 시각이 함께 옵니다. 시세조회에 쓰려면 같은 모델의 매물을 카테고리와 가격대로 좁혀 모으면 되고, 필요하면 판매완료 매물도 포함할 수 있습니다. 번개장터 상점 운영(상품 등록, 주문 관리)을 자동화하는 용도와는 무관합니다. 이 API로는 글을 올리거나 채팅을 보낼 수 없습니다.
엔드포인트
| endpoint | 무엇이 반환되는가 | 필수 |
|---|---|---|
| search | 키워드나 카테고리로 매물 검색. 한 페이지에 최대 200건이고 행마다 매물 id, 제목, URL, 원화 가격, 판매 상태, 번개케어 표시, 찜·채팅 수, 업데이트 시각, 사진이 들어 있습니다. 가격대, 상품 상태, 배송 방식(무료배송·반값택배·일반택배), 상점 유형(프로상점·일반상점), 등록 기간(1일·3일·1주·1개월), 결과 내 검색, 제외 키워드로 좁히고 정확도순·최신순·낮은 가격순·높은 가격순으로 정렬합니다. 키워드나 `category_id` 중 하나는 있어야 합니다. | 모두 선택 |
| detail | 매물 한 건: 설명 전문, 가격과 원래 가격(`original_price`), 수량, 판매자가 고른 상태 등급(새상품·사용감 없음·사용감 적음·사용감 많음·고장/파손), 판매 상태, 카테고리 경로, 브랜드, 해시태그, 옵션, 배송비와 직거래 여부, 번개페이 사용 가능 여부, 찜·조회·댓글·채팅 수, 사진 전체, 그리고 공개된 상점 정보(상점명, 평점, 후기·판매 수, 가입일). 매물 id나 URL로 조회합니다. | listing_id |
| categories | 번개장터 카테고리 트리 전체. `search`의 `category_id`에 넣을 수 있는 모든 id를 이름 경로, 현재 매물 수와 함께 돌려줍니다. 이름 검색, 상위 id, 깊이로 좁힐 수 있습니다. | 모두 선택 |
호출마다 크레딧이 차감됩니다. 실패하거나 차단된 호출은 무료입니다.
동작하는 예제
아이폰 15 프로를 스마트폰 카테고리(600700001, 디지털 › 휴대폰 › 스마트폰)에서 30만 원 이상, 최신순으로 찾았습니다. '매입'을 제외했는데도 '최고가 삽니다 …' 같은 구매 희망 글이 7,770,000원으로 섞여 나왔습니다. 시세를 낼 때 이런 행이 평균을 끌어올리므로 `exclude_keywords`에 '삽니다'도 함께 넣으세요. 번개장터가 검색 그리드에 섞어 넣는 네이버 쇼핑 광고 7건은 매물로 돌려주지 않고 `external_ads_excluded`로 개수만 알려 줍니다.
curl -X POST https://api.reefapi.com/bunjang/v1/search \
-H "x-api-key: 발급받은_키" \
-H "content-type: application/json" \
-d '{"query": "아이폰 15 프로", "category_id": "600700001", "price_min": 300000, "exclude_keywords": "매입", "sort": "newest", "per_page": 20}'{
"ok": true,
"data": {
"results": [
...
{
"listing_id": "439954417",
"title": "S급 아이폰 15pro256GB 네추럴 티타늄 (배터리88%)",
"url": "https://m.bunjang.co.kr/products/439954417",
"price": 699000,
"currency": "KRW",
"status": "selling",
"is_promoted": false,
"is_bungae_care": true,
"favorite_count": 10,
"chat_count": 4,
"updated_at": "2026-10-24T14:15:00Z",
"updated_label": "13분 전"
},
{
"listing_id": "423050176",
"title": "최고가 삽니다 갤럭시 S26 s25 s24 폴드 z7 z6 7 6 8 플립 아이폰 16 15 17 18 프로 맥스 max",
"price": 7770000,
"currency": "KRW",
"status": "selling",
"is_bungae_care": false,
"chat_count": 224
},
{
"listing_id": "442299417",
"title": "아이폰 15프로 화이트 128",
"price": 400000,
"currency": "KRW",
"status": "selling",
"updated_label": "33분 전"
},
...
],
"count": 20,
"total_results": 1433,
"has_more": true,
"next_cursor": "eyJjIjpudWxsLCJvIjoyMCwiZiI6IjM4MmJkM2M4NzVhMyJ9",
"promoted_count": 0,
"external_ads_excluded": 7,
"sort_applied": "newest",
"filters_acknowledged": [
{ "filter": "WITHOUT_KEYWORD", "key": "without", "values": ["매입"] },
{ "filter": "PRICE", "key": "minPrice", "values": ["300000"] },
{ "filter": "CATEGORY", "key": "categoryId", "values": ["600700001"] }
],
"currency": "KRW"
},
"meta": { "record_count": 20, "cache_hit": false, "mode": "live" }
}번개장터 크롤링을 직접 짜면 생기는 일
2026년 10월 8일, 번개장터가 검색에 쓰던 API 경로 하나를 없앴습니다. 그 주소는 9바이트짜리 404만 돌려줬고, 그 경로에 기대던 저희 검색도 고정 테스트 25건 중 한 건도 성공하지 못했습니다. 웹 화면이 실제로 호출하는 새 검색 경로로 옮긴 뒤 같은 25건이 모두 통과했습니다. 직접 만든 크롤러였다면 누군가 빈 결과를 알아챌 때까지 조용히 멈춰 있었을 겁니다.
옮기면서 확인한 함정도 있습니다. 검색 그리드 60행 중 7행은 번개장터 매물이 아니라 네이버 쇼핑 광고입니다. 매물 id가 없어서 그대로 저장하면 시세 데이터에 다른 쇼핑몰 상품 가격이 섞입니다. 또 예전 경로는 지원하지 않는 필터 값도 응답에 그대로 되돌려 보냈습니다. 응답에 필터가 찍혀 있다고 실제로 걸렸다는 뜻은 아니었던 셈입니다. 그래서 지금 공개된 필터는 모두, 같은 시각에 필터 없이 돌린 검색과 매물 수를 맞대어 실제로 줄어드는 것을 확인한 것들입니다.
정렬도 비슷합니다. 모르는 정렬 값을 보내면 번개장터는 오류 대신 200과 함께 어떤 기준인지 밝히지 않은 순서의 목록을 줍니다. 이 API는 동작을 확인한 네 가지 정렬만 넘기고, 그 밖의 값에는 INVALID_PARAM을 돌려줍니다.
관심 있는 모델 하나의 가격을 가끔 훑어보는 정도라면 앱으로 충분합니다. 여러 모델의 시세를 매일 쌓는 일이라면 이런 변화가 생긴 날 바로 알아차리는 쪽이 결국 데이터 품질을 좌우합니다.
제한과 솔직한 메모
- 이 API는 번개장터의 공식 서비스가 아닙니다. 번개장터의 승인을 받지 않았고, 어떤 제휴 관계도 없습니다.
- `price`는 매물에 게시된 가격입니다. 판매완료 매물도 마지막 게시 가격이 나올 뿐, 가격제안으로 합의된 실제 거래 금액은 돌려주지 않습니다.
- 예약중·판매완료 매물은 번개장터 기본값대로 검색에서 빠집니다. 필요하면 `include_reserved`, `include_sold`를 켜세요. 같은 키워드와 카테고리로(가격·제외 조건 없이) 판매완료를 포함해 60건을 받았을 때, 그중 3건이 판매완료였습니다.
- 검색 행에는 상품 상태 등급이 없습니다. 새상품인지 사용감이 있는지는 `detail`에서 판매자가 고른 등급으로 확인해야 하고, 제목의 '새상품급' 같은 표현으로 추정하지 않습니다.
- 번개장터는 커서로만 페이지를 넘깁니다. 대략 600건을 넘어가는 깊이는 `page` 대신 이전 응답의 `next_cursor`로 이어 가야 합니다.
- 상단 노출 광고 매물은 검색 조건에 맞는 실제 매물이라 번개장터가 보여 주는 순서대로 포함되고 `is_promoted`로 표시됩니다.
- 연락처, 채팅 내용, 주소는 읽지도 돌려주지도 않습니다. 검색 행에는 상점 id가, `detail`에는 공개된 상점명과 평점이 들어 있습니다.