{
  "openapi": "3.0.1",
  "info": {
    "title": "Naver Cafe, Naver Blog & Naver News Scraper | 네이버 카페·블로그·뉴스",
    "description": "Extract Naver Cafe posts, Naver Blog posts and Naver News articles by keyword: full text, author, date, images and comment threads. Point it at a cafe address to go past Naver's 1,000-result limit, about 1,000 posts a minute. News adds publisher, section and reader comments.",
    "version": "0.0",
    "x-build-id": "jgnUlft3UGW37ReLc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zen-studio~naver-blog-cafe-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zen-studio-naver-blog-cafe-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/zen-studio~naver-blog-cafe-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zen-studio-naver-blog-cafe-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/zen-studio~naver-blog-cafe-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zen-studio-naver-blog-cafe-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "keywords": {
            "title": "검색어 (Keywords)",
            "type": "array",
            "description": "What to search for across Naver Blog and Naver Cafe. Korean terms return by far the most, e.g. <b>강남 맛집</b> (Gangnam restaurants) or <b>다이슨 청소기</b> (Dyson vacuum). Each keyword is searched separately.<br><br>Put a keyword in <b>double quotes</b> (<b>\"도씨 파자마\"</b>) and Naver searches it as an exact phrase, word order included. That is how to count brand mentions without the posts that merely use the same words. Keep the phrase short: a quoted phrase nobody wrote returns nothing rather than near matches.<br><br>Blog search sweeps as deep as you ask. <b>Cafe search stops at about 2,000 posts per keyword</b> (1,000 for each result order). To go past that, use <b>Cafe addresses</b> below.",
            "items": {
              "type": "string"
            }
          },
          "blogIds": {
            "title": "블로그 주소 (Blog addresses)",
            "type": "array",
            "description": "Collect every post a blog has published, newest first. The date range below narrows it.<br><br>Any of these work:<br>• <b>https://blog.naver.com/rabochang</b> (the blog address)<br>• <b>https://blog.naver.com/rabochang/224370104013</b> (a link to any post in it)<br>• <b>rabochang</b> (just the blog ID)",
            "items": {
              "type": "string"
            }
          },
          "cafeIds": {
            "title": "카페 주소 (Cafe addresses)",
            "type": "array",
            "description": "Collect posts from whole cafes instead of searching. <b>This is how you get more posts than a keyword search reaches</b>: it stops at about 2,000 per keyword, browsing a cafe does not.<br><br>Any of these work:<br>• <b>https://cafe.naver.com/ungsangjang</b> (the cafe address)<br>• <b>https://cafe.naver.com/ungsangjang/867017</b> (a link to any post in it)<br>• <b>https://cafe.naver.com/f-e/cafes/26334430</b> (the newer address format)<br>• <b>ungsangjang</b> or <b>26334430</b> (just the name or number)<br><br>Anything that is not a cafe is skipped with a note in the log.",
            "items": {
              "type": "string"
            }
          },
          "searchInsideCafes": {
            "title": "카페 안에서 검색 (Search the keywords inside these cafes)",
            "type": "boolean",
            "description": "Search each keyword inside each cafe above, instead of across all of Naver Cafe, and instead of collecting the cafes whole. Needs at least one keyword and one cafe address.<br><br>Every post comes from a cafe you listed and says where the keyword was found: in its <b>title</b>, only in its <b>body</b> (post text), or only in its <b>comments</b> (the <b>matchedIn</b> field). Title matches go past the limit of the all-cafe search, and the date range below applies. Blog and news searches still follow their own switches.<br><br>A members-only cafe cannot be searched by visitors: only the posts it opens to Naver search are collected, and the log says so.",
            "default": false
          },
          "includeBlogs": {
            "title": "블로그 글 포함 (Include blog posts)",
            "type": "boolean",
            "description": "Posts from Naver Blog, Korea's dominant blogging platform.",
            "default": true
          },
          "includeCafes": {
            "title": "카페 글 포함 (Include cafe posts)",
            "type": "boolean",
            "description": "Posts from Naver Cafe, Korea's community forums: the discussion blogs do not have. Adds the post text and its comment thread where the cafe is open to non-members; members-only cafes return the preview text, and every row says which you got.",
            "default": true
          },
          "includeNews": {
            "title": "뉴스 기사 포함 (Include news articles)",
            "type": "boolean",
            "description": "Articles from Naver News, Korea's main news portal. Each article arrives with its full text, publisher, section, publish and edit times, images and reader comment thread.<br><br>Off by default so existing runs keep returning exactly what they returned before.",
            "default": false
          },
          "includePostBody": {
            "title": "블로그 본문 전체 포함 (Include full blog post text)",
            "type": "boolean",
            "description": "Fetch each blog post's whole text and images. Much slower and heavier; the search results already include a preview of every post.",
            "default": false
          },
          "includeCafeBodies": {
            "title": "카페 본문·댓글 포함 (Include cafe text & comments)",
            "type": "boolean",
            "description": "Fetch the full text and comments for each cafe post. Switch off for a much faster, preview-only run.",
            "default": true
          },
          "includeNewsBodies": {
            "title": "뉴스 본문·댓글 포함 (Include news text & comments)",
            "type": "boolean",
            "description": "Fetch the full article text and its comment thread. Switch off for a much faster, headline-only run.",
            "default": true
          },
          "includeNewsComments": {
            "title": "뉴스 댓글 포함 (Include news comments)",
            "type": "boolean",
            "description": "The reader discussion under each article. Roughly 4 in 10 Korean news articles have one; the rest have comments switched off by their publisher.",
            "default": true
          },
          "maxItemsPerKeyword": {
            "title": "최대 수집 개수 (Maximum results)",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "키워드 하나당 몇 개까지 수집할지. <b>0</b>이면 가능한 만큼 전부.<br><br>블로그·카페·뉴스를 함께 켜면 각각 이 개수만큼 수집하므로, 셋 다 켜면 최대 3배가 됩니다.<br><br><i>Max per keyword, applied to each content type you switch on: with blogs, cafes and news all on, one keyword can return up to three times this number.</i>",
            "default": 1000
          },
          "maxCommentsPerArticle": {
            "title": "글당 최대 댓글 수 (Max comments per post)",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "How many comments to collect per news article or cafe post. News comments come best-rated first, cafe comments in thread order. Every row also reports how many comments the post has in total, so you can tell a quiet post from a truncated one. On news the source caps how much of a thread is reachable: about 300 comments on a busy article, however many it holds in total. Asking for more is not an error, it simply returns everything reachable.",
            "default": 20
          },
          "sortBy": {
            "title": "정렬 (Result order)",
            "enum": [
              "both",
              "relevance",
              "recency"
            ],
            "type": "string",
            "description": "<b>Both</b> is the default because relevance and recency reach different results once a search fills up, and running both is what gets you past the 1,000-result limit. A narrow search that stays under that limit returns the same posts either way, so one order is enough there and finishes in half the time.<br><br><i>News uses best-match unless you pick newest-first; it has no 'both' mode.</i>",
            "default": "both"
          },
          "dateFrom": {
            "title": "시작일 (Published after, YYYY-MM-DD)",
            "type": "string",
            "description": "Only posts published on or after this date, e.g. <b>2026-01-01</b>. A month alone (<b>2026-01</b>) means its first day. Dates are Korean dates (KST).<br><br><i>Applies to blog posts, from a keyword or from a whole blog, to news articles, and to cafe posts searched inside the cafes you list. A keyword search across all of Naver Cafe has no date filter.</i>"
          },
          "dateTo": {
            "title": "종료일 (Published before, YYYY-MM-DD)",
            "type": "string",
            "description": "Only posts published on or before this date. A month alone (<b>2026-09</b>) means its last day."
          },
          "feedback": {
            "title": "Feedback to the maintainers",
            "type": "string",
            "description": "For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}