Gmarket.co.kr Scraper icon

Gmarket.co.kr Scraper

Scrape Gmarket.co.kr product listings and customer reviews into clean JSON. Search by keyword, paste product URLs, or use review-only mode with a…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Gmarket.co.kr Scraper at a glance

Gmarket.co.kr Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes review id, product id, reviewed product id, title and comment, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce, Developer Tools, Automation
Pricing
$2.00 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
28 options

Scrape Gmarket.co.kr product listings and customer reviews into clean JSON. Search by keyword, paste product URLs, or use review-only mode with a product ID. Fast, simple, and built for structured ecommerce data collection.

What Gmarket.co.kr Scraper can do

  • Two ways to find products. Search by one or more keywords (English or Korean both work), or paste ready-made Gmarket Global search-result URLs with your own filters already baked into the query string.
  • One toggle flips the whole output. Turn on "Reviews only" and the actor still uses your keywords or URLs to discover matching products, but pushes one record per customer review instead of one per product.
  • Detail enrichment on demand. An optional extra fetch per product adds description text, brand, and the seller's legally required disclosure: company name, manager name, customer-service phone, business registration number, and e-commerce sales registration.
  • Clean numeric prices, not just a raw feed. Was price, current price, KRW savings and discount percent are parsed and normalized into numeric fields on every product, alongside a converted currency price.
  • Nothing is silently dropped. Every record also carries a raw field with the complete original product record from the storefront, next to the parsed fields.
  • Ad and promotion signals. Filter to the sitewide BigSmile promotion, and read per-product flags for BigSmile enrollment and sponsored (paid) placement.

Choose what to collect

These inputs let you configure Gmarket.co.kr Scraper - Products, Prices & Customer Reviews. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestringPick how you want to drive the scrape. 'Keyword search' uses your keywords + filters; 'Paste URLs' uses Gmarket Global search-result URLs you already have.

Choices: search, url

keywordsarrayOne or more product keywords to search for (English or Korean both work). One run = one search per keyword × applied filters. Only used when mode is 'Keyword search'.
minPriceintegerMinimum sale price in Korean Won. Leave 0 for no minimum. Example: 10000 (≈ $7 USD).
maxPriceintegerMaximum sale price in Korean Won. Leave 0 for no maximum. Example: 100000 (≈ $70 USD).
overseaDeliveryOnlybooleanWhen on, returns only items that ship outside Korea. Verified to narrow results by ~75% on broad queries.
bigSmileOnlybooleanWhen on, returns only items participating in the BigSmile sitewide promotion.
sortBystringResult order for keyword and pasted-URL searches. The storefront has no best-selling order: Relevance and Gmarket ranking both use its ranking order. A sortType in a pasted URL wins over this field.

Choices: GLOBAL_RANKPOINT, GLOBAL_SELL_QTY, GLOBAL_LOW_PRICE, GLOBAL_HIGH_PRICE, GLOBAL_RECENT

Show 21 more inputs
More input fields
InputWhat it controls
urlsarrayGmarket Global URLs, one per line. Supported: search results (/Search/Search?keyword=, with pageNo, minPrice, maxPrice, overseaTransYn, isBigSmile), category listings (/Category/List?lcId=), the category hub (/AllCategory, expanded to its top-level categories), product pages (/Item?goodscode=) and review pages (/Review/Review?GoodsCode=, routed to that product). item./www./m./global. hosts are read through the Global storefront; pages with no products (the homepage) are skipped with a warning. sellCustNo is not applied by the site. Leaving this empty in URL mode runs the example URLs below.
reviewsOnlybooleanWhen on, the actor still uses your keyword search or pasted URLs to discover products, but pushes one record per REVIEW instead of one record per product. Pair with maxReviewsPerProduct to cap how deep to walk each product.
maxReviewsPerProductintegerOnly applies when 'Reviews only' is on. Stop after this many reviews per product. The API serves 20 per page; the default of 20 is one page each. Set 0 to walk every review the product has. Reviews come back in Gmarket's default order (typically featured first; the storefront does not expose a sort control).
maxPagesintegerHow many pages to walk per keyword (or per URL). The API serves 60 items per page, so 1 page returns up to 60 products. 0 = unlimited (walk all pages until the site runs out of results).
maxListingsintegerStop the whole run once this many unique records have been collected. When 'Reviews only' is off this counts products; when on it counts reviews across all products. Default 20 keeps a run small; set 0 to walk the entire catalogue (unlimited).
fetchDetailsbooleanWhen on, makes one extra fetch per item to capture description text, brand, and full seller info (company name, manager, customer-service phone, business number, e-commerce sales registration). Turn off for a faster, leaner scrape with only the search-listing fields.
resumeFromRunIdstringOptional. Paste a previous run ID or dataset ID to continue a large walk-all pull: products/reviews already saved by that run are loaded before scraping starts and skipped, so this run only appends new records. Leave empty for a normal fresh run. Combine with 'Incremental mode' only to bootstrap a brand-new recurring monitor from a completed walk-all pull, if this search already has saved incremental state, the run fails fast instead of silently starting a second, overlapping baseline.
incrementalModebooleanWhen on, the actor remembers the products (or reviews, if 'Reviews only' is on) from the last run of this SAME search and only pushes what's NEW, UPDATED, or REAPPEARED since then, a different workflow from 'Resume from a prior run' above, which continues one specific interrupted run instead of remembering a search across scheduled runs. Every pushed record gets a changeType field. Compared: every product field (title, prices, discount, delivery, category, seller and detail fields, images, raw card data) or, for reviews, every review field (rating, text, translation, seller reply, photos). Excluded from comparison but still in the output: scrapedAt, the per-request sellerInfo.EncodedCustNo token, the review view counter (readCount / raw.ReadCount), and anything you list in 'Ignore fields when detecting changes'. A new review never makes its product UPDATED. Off by default so a plain run behaves exactly as before.
stateKeystringOnly used when 'Incremental mode' is on. Leave empty to auto-derive the tracked search from your mode/keywords/URLs/price range/'Reviews only'/'Fetch detail pages' settings (raising maxListings or maxPages does not start a new baseline). Set your own text here to track multiple schedules explicitly, or to keep the baseline stable even if you plan to change a filter later.
emitUnchangedbooleanOnly used when 'Incremental mode' is on. Off by default: a record that hasn't changed since the last run is neither pushed nor billed. Turn this on to also push (and pay for) every UNCHANGED record every run, useful if you want a complete snapshot each time instead of only the delta.
emitExpiredbooleanOnly used when 'Incremental mode' is on. Off by default. Turn this on to push (and pay for) an EXPIRED row for any previously-tracked product/review that no longer appears, only fires after a run that completed a full scan of the tracked search (a capped, resumed, or partial run never marks anything expired, since it can't tell 'gone' apart from 'not reached yet').
expireAfterMissedScansintegerOnly used when 'Incremental mode' and 'Emit records that disappeared' are on. A record is marked EXPIRED only after it was missing from this many CONSECUTIVE complete scans (counter resets when it is seen again). Default 1 = the next complete scan. EXPIRED means the listing stopped appearing in the search; without a detail probe that cannot tell a search-ranking drop from a delisting.
changeScopestringOnly used when 'Incremental mode' is on. 'all' (default) compares every field. 'priceAndStock' compares ONLY price fields (sell/original/sale price, was/current price, savings, discount, on-special flag): description, image, delivery and badge changes never create a billable UPDATED row. The search card has no separate stock field; a product that leaves the search appears as EXPIRED when enabled.

Choices: all, priceAndStock

compactUpdatesbooleanOnly used when 'Incremental mode' is on. UPDATED product rows contain only ids, link, current price and a priceChanges object with old/new values; NEW rows stay full. A compact row no longer carries seller or description data, so the detail-enrichment charge is not made for it.
ignoreFieldsForChangesarrayOnly used when 'Incremental mode' is on. Field names (dotted paths such as sellerInfo.CompanyName or raw.DiscountRate) that never count as a change and never appear in changedFields. The fields stay in the output. Applies to the next comparison against already-saved state without a one-time wave of UPDATED rows. Built-in exclusions always apply.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.
querystringAlias: a single search term, used only when keywords is empty.
startUrlsarrayAlias of urls, used only when urls is empty. Entries may be strings or {url} objects.
maxItemsintegerAlias of maxListings.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

reviewIdReview ID (text)
goodsCodeProduct ID (text)
productGoodsCodeReviewed product ID (text)
titleTitle (text)
commentComment (text)
linkUrlProduct URL (link)
productLinkUrlReviewed product URL (link)
imageUrlImage (image)
sellPriceKrwPrice ₩ (number)
currencyPriceUSD (text)
discountRateDisc % (text)
sellerCompanyNameSeller (text)
Show 30 more fields
overseaDeliveryAvailableOversea (boolean)
authorNicknameAuthor (text)
authorCountryCodeCountry (text)
ratingRating (number)
ratingMaxOut of (number)
reviewDateReview date (date)
hasPhotosPhotos? (boolean)
changeTypeChange (text)
changedFieldsChanged fields (array)
firstSeenAtFirst seen (date)
lastSeenAtLast seen (date)
scrapedAtScraped at (date)
deliveryRatingDelivery (number)
titleEnglishTitle (EN) (text)
commentEnglishBody (EN) (text)
reviewDateTextDate text (text)
photoUrlsPhoto URLs (array)
variantInfoVariant (text)
sellerReplySeller reply (text)
sellerReplyDateReply date (date)
isPowerReviewerPower user (boolean)
readCountViews (number)
isOnSpecialOn special (boolean)
wasPriceKrwWas ₩ (number)
currentPriceKrwNow ₩ (number)
savingsAmountKrwSave ₩ (number)
sellerPhonePhone (text)
sellerBusinessNumberBusiness no. (text)
sellerCustNoSeller ID (text)
miniShopUrlMini shop (link)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "goodsCode": "0000000001",
  "title": "Sample Product Title",
  "linkUrl": "https://mg.gmarket.co.kr/Item?goodscode=0000000001",
  "imageUrl": "https://gdimg.gmarket.co.kr/0000000001/still/280?ver=0",
  "sellPriceKrw": 22800,
  "currencyPrice": "$15.75",
  "discountRate": "20",
  "wasPriceKrw": 28500,
  "currentPriceKrw": 22800,
  "savingsAmountKrw": 5700,
  "discountRatePercent": 20,
  "isOnSpecial": true,
  "isBigSmilePromo": false,
  "isSponsored": false,
  "isFreeShipping": true,
  "deliveryInfo": "Free",
  "sellerCustNo": "000000000",
  "miniShopUrl": "https://mg.gmarket.co.kr/samplestore",
  "categoryCodeL": "100000000",
  "categoryCodeM": "200000000",
  "categoryCodeS": "300000000",
  "overseaDeliveryAvailable": true,
  "sellerCompanyName": "Sample Trading Co., Ltd.",
  "sellerManagerName": "John Doe",
  "sellerPhone": "02-0000-0000",
  "sellerBusinessNumber": "000-00-00000",
  "sellerEcommerceNumber": "0000-Seoul-0000",
  "descriptionText": "Sample product description text.",
  "brand": "SampleBrand",
  "translation": {
    "english": true,
    "chinese": true,
    "japanese": false
  },
  "raw": {},
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}

Ways to use this data

  • Price and market research: track KRW and converted prices, discount rates and savings across a catalog of Korean products.
  • Cross-border sourcing: filter to items with oversea delivery available, and pull the seller's registered business details before you commit to a supplier.
  • Reputation monitoring: pull every review for a set of products, including ratings, delivery scores and seller replies, to watch how a listing is received.
  • Marketplace and competitor tracking: schedule the actor with incremental mode to catch new listings, price changes and delisted products without re-scraping everything each time.
  • Promotion and ad audits: use the BigSmile and sponsored-placement flags to see which listings are running the sitewide promotion or a paid placement.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Gmarket.co.kr Scraper return?

The documented output for Gmarket.co.kr Scraper includes review id, product id, reviewed product id, title, comment, product url, reviewed product url and image. Availability of each field depends on the source page and the selected mode.

How much does Gmarket.co.kr Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new, changed or removed listings on a schedule?

Yes. Schedule the actor and turn on incremental mode. Each run then returns only NEW, UPDATED and REAPPEARED records by default. Turn on emitUnchanged for a full snapshot every run instead, or emitExpired to also get a tombstone row for listings that dropped out, but only once a run has scanned the complete tracked search; a capped, resumed or partial run never marks anything expired. REAPPEARED itself only happens for a listing that a prior complete-scan run with emitExpired on already marked as gone; without that history a returning listing is classified NEW again.

What is the difference between "Resume from a prior run" and "Incremental mode"?

resumeFromRunId continues ONE interrupted walk-all pull: it loads the ids already saved in that specific run's dataset and skips them, so a big pull picks up where it left off. Incremental mode is for scheduling the SAME search repeatedly: it remembers the last run's records itself, keyed by your search scope, and classifies each new run's records against that memory. The two can be combined once, to bootstrap a new incremental baseline from a completed walk-all pull, but the actor refuses the combination if this search already has saved incremental state, so a run never silently starts a second, overlapping baseline.

Why might a run fail instead of just returning an empty dataset?

The run fails outright in four cases: no keywords in search mode, no usable URLs in URL mode, a resumeFromRunId that does not resolve to a readable run or dataset, or Incremental mode combined with resumeFromRunId when that search already has saved incremental state. If nothing at all was scanned, the run finishes successfully with a "No items returned" status message and an empty dataset. If a page fetch fails after retries partway through an otherwise productive run, that search stops early but the run still finishes successfully with whatever partial data it already collected, without a separate status message.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of each record into Notion, Linear or Airtable at the end of the run, up to maxNotifyListings records per connector (default 50).

Ready to collect with Gmarket.co.kr Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.