Dataspryva

Naver Place Visitor & Blog Review Finder

Collect Naver Place visitor reviews, linked Naver Blog posts, and aggregated rating statistics by place URL/ID or keyword search, with ratings, voted keywords, photos and owner replies.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
placeUrlsarrayoptionalNaver Place URLs, naver.me short links, or bare numeric Place IDs. Examples: 'https://map.naver.com/p/entry/place/38239053', 'https://pcmap.place.naver.com/place/38239053/home', '38239053'.
searchKeywordsarrayoptionalKeywords to discover places first, then scrape their reviews. Example: ['강남 맛집', '홍대 카페']. Can be combined with placeUrls.
maxPlacesPerKeywordintegeroptionalMaximum places to scrape per keyword search. Naver's search page returns up to 100 places per keyword.
Show all input fields
FieldTypeRequiredDescription
placeUrlsarrayoptionalNaver Place URLs, naver.me short links, or bare numeric Place IDs. Examples: 'https://map.naver.com/p/entry/place/38239053', 'https://pcmap.place.naver.com/place/38239053/home', '38239053'.
searchKeywordsarrayoptionalKeywords to discover places first, then scrape their reviews. Example: ['강남 맛집', '홍대 카페']. Can be combined with placeUrls.
maxPlacesPerKeywordintegeroptionalMaximum places to scrape per keyword search. Naver's search page returns up to 100 places per keyword.
maxReviewsintegeroptionalMaximum visitor reviews to collect per place, across both the text-review stream and the rating-only stream. Naver paginates 50 reviews per request.
includeVisitorReviewsbooleanoptionalCollect visitor reviews. Turn off for a blog-only or stats-only run.
includeRatingOnlyReviewsbooleanoptionalAlso collect reviews that have a star rating but no written text. These come from a separate Naver review stream and count toward maxReviews.
includeBlogReviewsbooleanoptionalCollect Naver Blog and cafe posts linked to the place, with exact publish dates.
maxBlogReviewsintegeroptionalMaximum linked blog/cafe posts per place. Naver exposes at most 100 per place.
includeReviewPhotosbooleanoptionalInclude photo and video-thumbnail URLs attached to each visitor review.
includeReviewStatsbooleanoptionalEmit one stats record per place: average rating, rating distribution, themes, top menus, voted keywords, and review counts.
visitedSincestringoptionalOnly keep visitor reviews whose visit date is on or after this date. Reviews without a visit date are skipped when this filter is set.
excludeReviewIdsarrayoptionalVisitor review IDs and blog post URLs to skip. Useful for incremental runs that only want new reviews.
maxConcurrencyintegeroptionalHow many places to scrape in parallel. Higher is faster but increases rate-limit risk.
maxItemsintegeroptionalHard cap on total records emitted across all places.
proxyConfigurationobjectoptionalOptional. Leave empty to use direct requests; the actor escalates to an Apify datacenter proxy only after a real block.

Download the published input schema

View complete JSON
{
  "description": "Collect Naver Place visitor reviews, linked Naver Blog posts, and aggregated rating statistics. Provide place URLs/IDs directly, or search by keyword to discover places first.",
  "properties": {
    "excludeReviewIds": {
      "description": "Visitor review IDs and blog post URLs to skip. Useful for incremental runs that only want new reviews.",
      "editor": "stringList",
      "title": "Exclude review IDs or blog URLs",
      "type": "array"
    },
    "includeBlogReviews": {
      "default": true,
      "description": "Collect Naver Blog and cafe posts linked to the place, with exact publish dates.",
      "prefill": false,
      "title": "Include blog reviews",
      "type": "boolean"
    },
    "includeRatingOnlyReviews": {
      "default": true,
      "description": "Also collect reviews that have a star rating but no written text. These come from a separate Naver review stream and count toward maxReviews.",
      "prefill": false,
      "title": "Include rating-only reviews",
      "type": "boolean"
    },
    "includeReviewPhotos": {
      "default": false,
      "description": "Include photo and video-thumbnail URLs attached to each visitor review.",
      "prefill": false,
      "title": "Include review photos",
      "type": "boolean"
    },
    "includeReviewStats": {
      "default": true,
      "description": "Emit one stats record per place: average rating, rating distribution, themes, top menus, voted keywords, and review counts.",
      "prefill": false,
      "title": "Include review statistics",
      "type": "boolean"
    },
    "includeVisitorReviews": {
      "default": true,
      "description": "Collect visitor reviews. Turn off for a blog-only or stats-only run.",
      "prefill": true,
      "title": "Include visitor reviews",
      "type": "boolean"
    },
    "maxBlogReviews": {
      "default": 100,
      "description": "Maximum linked blog/cafe posts per place. Naver exposes at most 100 per place.",
      "maximum": 100,
      "minimum": 1,
      "prefill": 10,
      "title": "Max blog reviews per place",
      "type": "integer"
    },
    "maxConcurrency": {
      "default": 3,
      "description": "How many places to scrape in parallel. Higher is faster but increases rate-limit risk.",
      "maximum": 10,
      "minimum": 1,
      "prefill": 3,
      "title": "Max concurrent places",
      "type": "integer"
    },
    "maxItems": {
      "default": 100,
      "description": "Hard cap on total records emitted across all places.",
      "maximum": 5000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max items",
      "type": "integer"
    },
    "maxPlacesPerKeyword": {
      "default": 3,
      "description": "Maximum places to scrape per keyword search. Naver's search page returns up to 100 places per keyword.",
      "maximum": 100,
      "minimum": 1,
      "prefill": 3,
      "title": "Max places per keyword",
      "type": "integer"
    },
    "maxReviews": {
      "default": 100,
      "description": "Maximum visitor reviews to collect per place, across both the text-review stream and the rating-only stream. Naver paginates 50 reviews per request.",
      "maximum": 5000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max visitor reviews per place",
      "type": "integer"
    },
    "placeUrls": {
      "description": "Naver Place URLs, naver.me short links, or bare numeric Place IDs. Examples: 'https://map.naver.com/p/entry/place/38239053', 'https://pcmap.place.naver.com/place/38239053/home', '38239053'.",
      "editor": "stringList",
      "prefill": [
        "https://map.naver.com/p/entry/place/38239053"
      ],
      "title": "Place URLs or IDs",
      "type": "array"
    },
    "proxyConfiguration": {
      "description": "Optional. Leave empty to use direct requests; the actor escalates to an Apify datacenter proxy only after a real block.",
      "editor": "proxy",
      "title": "Proxy configuration",
      "type": "object"
    },
    "searchKeywords": {
      "description": "Keywords to discover places first, then scrape their reviews. Example: ['강남 맛집', '홍대 카페']. Can be combined with placeUrls.",
      "editor": "stringList",
      "title": "Search keywords",
      "type": "array"
    },
    "visitedSince": {
      "description": "Only keep visitor reviews whose visit date is on or after this date. Reviews without a visit date are skipped when this filter is set.",
      "editor": "datepicker",
      "title": "Visited since (YYYY-MM-DD)",
      "type": "string"
    }
  },
  "schemaVersion": 1,
  "title": "Naver Place Reviews + Blog Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
reviewsstringoptionalDataset containing visitor reviews, blog reviews, and place review statistics.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Naver Place visitor reviews, linked blog posts with publish dates, and per-place rating statistics, distinguished by the reviewType field.",
  "properties": {
    "reviews": {
      "description": "Dataset containing visitor reviews, blog reviews, and place review statistics.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Review Records",
      "type": "string"
    }
  },
  "title": "Naver Place Visitor & Blog Review Finder Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "fields": {
    "properties": {
      "authorCount": {
        "description": "Number of distinct review authors",
        "type": "integer"
      },
      "averageRating": {
        "description": "Average visitor rating from Naver stats",
        "type": "number"
      },
      "blogContents": {
        "description": "Blog post excerpt",
        "type": "string"
      },
      "blogContentsLength": {
        "description": "Length of the blog excerpt",
        "type": "integer"
      },
      "blogDate": {
        "description": "Blog post publish date (YYYY-MM-DD)",
        "type": "string"
      },
      "blogRank": {
        "description": "Position in Naver's blog review list for this place",
        "type": "integer"
      },
      "blogReviewCount": {
        "description": "Linked blog/cafe review total for the place",
        "type": "integer"
      },
      "blogSource": {
        "description": "Source type: blog or cafe",
        "type": "string"
      },
      "blogThumbnailUrl": {
        "description": "Blog post thumbnail image URL",
        "type": "string"
      },
      "blogThumbnailUrls": {
        "description": "All blog post thumbnail image URLs",
        "type": "array"
      },
      "blogTitle": {
        "description": "Blog post title",
        "type": "string"
      },
      "blogTypeName": {
        "description": "Localized source label",
        "type": "string"
      },
      "blogUrl": {
        "description": "Link to the full blog post",
        "type": "string"
      },
      "bloggerHome": {
        "description": "Blogger's blog home URL",
        "type": "string"
      },
      "bloggerName": {
        "description": "Blogger name",
        "type": "string"
      },
      "bloggerProfileImageUrl": {
        "description": "Blogger profile image URL",
        "type": "string"
      },
      "hasReply": {
        "description": "True when the owner replied with text",
        "type": "boolean"
      },
      "imageReviewCount": {
        "description": "Number of reviews with images",
        "type": "integer"
      },
      "isRepresentative": {
        "description": "Whether Naver marks this blog post as representative",
        "type": "boolean"
      },
      "isSelfPaid": {
        "description": "Whether the blog review is marked as self-paid",
        "type": "boolean"
      },
      "language": {
        "description": "Review language code",
        "type": "string"
      },
      "mediaCount": {
        "description": "Number of photos and videos attached to the review",
        "type": "integer"
      },
      "menuItem": {
        "description": "Menu item mentioned in the review",
        "type": "string"
      },
      "originType": {
        "description": "Review origin, e.g. 영수증 for receipt-verified reviews",
        "type": "string"
      },
      "placeAddress": {
        "description": "Place street address",
        "type": "string"
      },
      "placeBlogReviewCount": {
        "description": "Total linked blog/cafe review count on the place",
        "type": "integer"
      },
      "placeBusinessCategory": {
        "description": "Naver business category, e.g. restaurant or cafe",
        "type": "string"
      },
      "placeCategory": {
        "description": "Place category (Korean)",
        "type": "string"
      },
      "placeId": {
        "description": "Naver Place ID",
        "type": "string"
      },
      "placeName": {
        "description": "Place name",
        "type": "string"
      },
      "placeRating": {
        "description": "Place-level average visitor review score",
        "type": "number"
      },
      "placeRoadAddress": {
        "description": "Place road address",
        "type": "string"
      },
      "placeTotalReviews": {
        "description": "Total visitor review count on the place",
        "type": "integer"
      },
      "placeUrl": {
        "description": "Canonical place URL",
        "type": "string"
      },
      "ratingDistribution": {
        "description": "Half-star distribution keyed 0.5 to 5.0",
        "type": "object"
      },
      "ratingReviewCount": {
        "description": "Rating-only visitor reviews",
        "type": "integer"
      },
      "replyStatus": {
        "description": "replied, no_reply, or unknown",
        "type": "string"
      },
      "reviewCreatedAt": {
        "description": "Review creation timestamp in ISO 8601 (KST)",
        "type": "string"
      },
      "reviewDate": {
        "description": "Review creation date (YYYY-MM-DD, KST)",
        "type": "string"
      },
      "reviewHasText": {
        "description": "False when the review is rating-only",
        "type": "boolean"
      },
      "reviewId": {
        "description": "Visitor review ID",
        "type": "string"
      },
      "reviewPhotos": {
        "description": "Photo and video-thumbnail URLs, when includeReviewPhotos is enabled",
        "type": "array"
      },
      "reviewRating": {
        "description": "Review star rating from 1 to 5, in 0.5 increments, when Naver exposes it; older anonymous reviews often omit it",
        "type": "number"
      },
      "reviewReactionCount": {
        "description": "Number of reactions on the review",
        "type": "integer"
      },
      "reviewReplyDate": {
        "description": "Owner reply date",
        "type": "string"
      },
      "reviewReplyText": {
        "description": "Business owner's reply to the review",
        "type": "string"
      },
      "reviewText": {
        "description": "Full review body (Korean), omitted for rating-only reviews",
        "type": "string"
      },
      "reviewThemes": {
        "description": "Theme labels with review counts",
        "type": "array"
      },
      "reviewType": {
        "description": "Record type: visitor, blog, or stats",
        "type": "string"
      },
      "reviewViewCount": {
        "description": "Number of views on the review",
        "type": "integer"
      },
      "reviewerAverageRating": {
        "description": "Reviewer's average rating across their reviews",
        "type": "number"
      },
      "reviewerFollowerCount": {
        "description": "Reviewer follower count",
        "type": "integer"
      },
      "reviewerImageUrl": {
        "description": "Reviewer profile image URL",
        "type": "string"
      },
      "reviewerName": {
        "description": "Reviewer nickname (masked by Naver)",
        "type": "string"
      },
      "reviewerProfileUrl": {
        "description": "Reviewer profile URL",
        "type": "string"
      },
      "reviewerReviewCount": {
        "description": "Total reviews authored by the reviewer",
        "type": "integer"
      },
      "runKeywordDistribution": {
        "description": "Voted-keyword counts across visitor reviews emitted for this place",
        "type": "array"
      },
      "runRatingDistribution": {
        "description": "Rating distribution across visitor reviews emitted for this place",
        "type": "object"
      },
      "scrapedAt": {
        "description": "ISO 8601 scrape timestamp",
        "type": "string"
      },
      "scrapedBlogReviews": {
        "description": "Blog reviews emitted for this place in this run",
        "type": "integer"
      },
      "scrapedVisitorReviews": {
        "description": "Visitor reviews emitted for this place in this run",
        "type": "integer"
      },
      "searchKeyword": {
        "description": "Keyword that discovered this place (keyword-search mode only)",
        "type": "string"
      },
      "searchRank": {
        "description": "1-based rank of the place in the keyword search result",
        "type": "integer"
      },
      "starDistribution": {
        "description": "Integer star distribution {5: n, 4: n, ...} when Naver supplies integer scores",
        "type": "object"
      },
      "textReviewCount": {
        "description": "Visitor reviews with written text",
        "type": "integer"
      },
      "topMenus": {
        "description": "Most-mentioned menu items with counts",
        "type": "array"
      },
      "totalReviewCount": {
        "description": "Total visitor review count from Naver stats",
        "type": "integer"
      },
      "totalVisitorReviews": {
        "description": "Total visitor reviews reported by Naver stats",
        "type": "integer"
      },
      "translatedText": {
        "description": "Auto-translated review text, when Naver provides it",
        "type": "string"
      },
      "visitCount": {
        "description": "Number of visits reported by the reviewer",
        "type": "integer"
      },
      "visitCountLabel": {
        "description": "Korean visit label, e.g. 2번째 방문",
        "type": "string"
      },
      "visitDate": {
        "description": "Actual visit date (YYYY-MM-DD)",
        "type": "string"
      },
      "visitTags": {
        "description": "Visit-context tags, e.g. 예약 없이 이용 or 혼자",
        "type": "array"
      },
      "votedKeywordStats": {
        "description": "Most-voted keyword tags with counts",
        "type": "array"
      },
      "votedKeywords": {
        "description": "Naver voted keyword tags, e.g. 음식이 맛있어요",
        "type": "array"
      }
    },
    "type": "object"
  },
  "title": "Naver Place Reviews + Blog",
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "blogDate": {
            "format": "text",
            "label": "Blog Date"
          },
          "blogTitle": {
            "format": "text",
            "label": "Blog Post"
          },
          "placeName": {
            "format": "text",
            "label": "Place"
          },
          "reviewRating": {
            "format": "number",
            "label": "Rating"
          },
          "reviewText": {
            "format": "text",
            "label": "Review"
          },
          "reviewType": {
            "format": "text",
            "label": "Type"
          },
          "searchKeyword": {
            "format": "text",
            "label": "Keyword"
          }
        }
      },
      "title": "Reviews Overview",
      "transformation": {
        "fields": [
          "reviewType",
          "placeName",
          "searchKeyword",
          "reviewRating",
          "reviewText",
          "blogTitle",
          "blogDate"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Naver Place Visitor & Blog Review Finder

Naver Place is where most South Koreans check reviews before visiting a restaurant, cafe, clinic, or shop. This actor collects visitor reviews, linked Naver Blog posts, and aggregated rating statistics by place URL/ID or keyword search.

What this actor does

  • Visitor reviews at scale — text reviews and rating-only reviews from Naver's separate review streams, paginated 50 per request up to your maxReviews cap (1–5,000 per place)
  • Exact dates — review creation date and timestamp, visit date, and blog publish date, including reviews older than one year
  • Blog and cafe reviews — linked Naver Blog posts with title, excerpt, author, thumbnails, source type, and publish date, up to Naver's 100-per-place cap
  • Aggregated statistics — average rating, half-star distribution, review themes, top menus, voted-keyword counts, image/author counts, and text vs rating-only totals
  • Two start modes — give place URLs/IDs (including naver.me short links), search by keyword, or combine both
  • Incremental runs — filter by visit date and exclude known review IDs or blog URLs
  • Clean records — empty fields are omitted instead of returned as null

Output per record

Every record has a reviewType of visitor, blog, or stats.

Visitor review (reviewType: "visitor")

  • placeId, placeName, placeCategory, placeBusinessCategory, placeAddress, placeRoadAddress, placeRating, placeTotalReviews, placeBlogReviewCount, placeUrl — place identity
  • searchKeyword, searchRank — keyword that found the place and its search rank
  • reviewId, reviewText, reviewHasText, reviewRating — the review itself; reviewHasText is false for rating-only rows, and reviewRating is omitted when Naver withholds it on older reviews
  • reviewDate, reviewCreatedAt, visitDate, visitCount, visitCountLabel — when it was posted, when the visit happened, and how many visits the reviewer reports
  • reviewerName, reviewerProfileUrl, reviewerImageUrl, reviewerFollowerCount, reviewerReviewCount, reviewerAverageRating — reviewer identity and stats
  • votedKeywords[], visitTags[] — Naver's official review-vote tags and visit-context tags
  • reviewPhotos[], mediaCount — photo and video-thumbnail URLs (when includeReviewPhotos is enabled) and the total media count
  • reviewReplyText, reviewReplyDate, hasReply, replyStatus — the owner's reply
  • menuItem, originType, language, translatedText, reviewReactionCount, reviewViewCount — review context
  • scrapedAt — ISO 8601 timestamp

Blog review (reviewType: "blog")

  • Place identity and searchKeyword/searchRank, same as above
  • blogTitle, blogContents, blogContentsLength, blogUrl — post title, excerpt, excerpt length, and link
  • bloggerName, bloggerHome, bloggerProfileImageUrl — blogger identity
  • blogDate, blogSource, blogTypeName — publish date, source type (blog or cafe), and localized label
  • blogRank, isRepresentative, isSelfPaid — position, representative flag, and self-paid flag
  • blogThumbnailUrl, blogThumbnailUrls[] — primary thumbnail and all thumbnails
  • scrapedAt — ISO 8601 timestamp

Stats (reviewType: "stats", one per place)

  • Place identity and searchKeyword/searchRank
  • averageRating, totalReviewCount, starDistribution, ratingDistribution — average, total, integer histogram when available, and the exact half-star histogram
  • reviewThemes[], topMenus[], votedKeywordStats[] — theme labels, most-mentioned menu items, and voted-keyword counts
  • imageReviewCount, authorCount, totalVisitorReviews, textReviewCount, ratingReviewCount, blogReviewCount — review counts
  • scrapedVisitorReviews, scrapedBlogReviews, runRatingDistribution, runKeywordDistribution — what this run collected for the place
  • scrapedAt — ISO 8601 timestamp

Input

Field Type Default Description
placeUrls array – Naver Place URLs, naver.me links, or bare numeric place IDs
searchKeywords array – Keywords to discover places first; can be combined with placeUrls
maxPlacesPerKeyword integer 3 Places per keyword (1–100; Naver returns up to 100)
maxReviews integer 100 Visitor reviews per place across both streams (1–5,000)
includeVisitorReviews boolean true Collect visitor reviews
includeRatingOnlyReviews boolean true Also collect rating-only reviews from the separate stream
includeBlogReviews boolean true Collect linked blog and cafe posts
maxBlogReviews integer 100 Blog posts per place (1–100; Naver's hard cap)
includeReviewPhotos boolean false Include review photo and video-thumbnail URLs
includeReviewStats boolean true Emit one stats record per place
visitedSince date – Keep only reviews with a visit date on or after this date
excludeReviewIds array – Visitor review IDs and blog URLs to skip
maxConcurrency integer 3 Places scraped in parallel (1–10)
maxItems integer 100 Hard cap on total records across all places (1–5,000)
proxyConfiguration object – Optional proxy; direct requests are tried first and an Apify datacenter proxy is used only after a real block

Example: reviews for specific places

{
  "placeUrls": [
    "https://map.naver.com/p/entry/place/38239053",
    "1000750444"
  ],
  "maxReviews": 500,
  "includeRatingOnlyReviews": true,
  "includeReviewPhotos": true,
  "includeReviewStats": true,
  "maxItems": 1000
}

Example: discover places by keyword first

{
  "searchKeywords": ["강남 맛집", "홍대 카페"],
  "maxPlacesPerKeyword": 10,
  "maxReviews": 100,
  "includeBlogReviews": true,
  "maxBlogReviews": 20,
  "includeReviewStats": true,
  "maxItems": 2000
}

Example: only new reviews since a date

{
  "placeUrls": ["38239053"],
  "visitedSince": "2026-09-01",
  "excludeReviewIds": ["6abf13296171f06ddbf56400"],
  "maxReviews": 200
}

Use cases

  • Market entry research — read what local customers actually say about a category or area before entering the Korean market
  • Restaurant and cafe competitive analysis — compare ratings, rating distributions, voted keywords, and review volume across nearby competitors
  • Customer sentiment tracking — build a structured, NLP-ready archive of Korean-language reviews with exact dates and visit context
  • Brand reputation monitoring — track voted keywords, owner replies, and review themes for your own listed business
  • Academic research — study Korean consumer review behavior at scale, including rating-only reviews and blog coverage

FAQ

Is this affiliated with Naver? No. This is an independent, third-party actor that reads publicly available Naver Place pages and Naver's public review endpoints. It isn't operated by or affiliated with Naver.

Do I need a Naver login, cookie, or API key? No. The actor uses public, cookieless endpoints. No login, cookie, or API key is required.

How many visitor reviews can I get per place? Up to 5,000 per place with maxReviews. Naver paginates 50 reviews per request, and the actor follows the cursor until your cap or the end of the review stream. maxReviews counts both text reviews and rating-only reviews.

What are rating-only reviews? Some visitors leave a star rating without writing text. Naver serves those from a separate stream. Enable includeRatingOnlyReviews to include them; reviewHasText is false on those rows.

Why do some visitor reviews have no star rating? Naver returns individual star ratings only for its newest reviews on anonymous requests; older reviews in the same cursor stream come back with no rating. The actor omits the field rather than guessing. Text, dates, reviewer, tags, photos, and replies still fill normally, and the stats record's ratingDistribution covers every rating Naver reports for the place.

Why is blogDate now filled? The blog/cafe review endpoint returns an exact publish date (YYYY.MM.DD.). The actor normalizes it to YYYY-MM-DD. Blog posts are still capped at 100 per place by Naver.

Why are some stats fields missing for a place? Naver doesn't track an average rating, star distribution, themes, or menus for every vertical. Cafes and some clinics often have no average or histogram. Unavailable fields are omitted rather than guessed.

How exact are review dates? Review creation dates come from Naver's review ID timestamp, converted to Korea Standard Time, with the displayed date as a fallback. This fixes the wrong-year dates that short display strings like 21.10.21.목 used to produce. Visit dates come from Naver's exact visit-date field.

Why might reviewPhotos be empty even with includeReviewPhotos enabled? Not every review has photos or video. mediaCount tells you how many media items the review has; reviewPhotos is only populated when the review actually has media.

Do I need a proxy? No. The actor tries direct requests first and automatically escalates to an Apify datacenter proxy only if Naver blocks the request. You can supply your own proxy configuration if you prefer.

How fresh is the data? Each run reads Naver's current review endpoints, so review counts and content reflect what is published at run time. Naver's totals can drift slightly between requests because new reviews arrive continuously.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build pizAoyiv3kJIJ7ul8. Documentation is regenerated from the default published build; private drafts are not included.