Gmarket.co.kr Scraper - Products, Prices & Customer Reviews avatar

Gmarket.co.kr Scraper - Products, Prices & Customer Reviews

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Gmarket.co.kr Scraper - Products, Prices & Customer Reviews

Gmarket.co.kr Scraper - Products, Prices & Customer Reviews

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.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

0

Monthly active users

14 days ago

Last modified

Share

Gmarket Global Scraper: Products, Prices and Reviews

Gmarket Global Scraper turns Gmarket Global, the English-language storefront of one of South Korea's largest marketplaces, into a clean JSON dataset. Search by keyword or paste a search-result URL, then flip one toggle to pull customer reviews instead of product cards. Detail enrichment, on by default, adds the seller's legally required business disclosure when it can be read for a product. Export to JSON, CSV or Excel, or read the results straight through the API.

Why This Scraper?

  • 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 upstream API object, 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.
  • Built for schedules. Resume a large walk-all pull across separate runs, or turn on incremental mode so a recurring run returns only new, updated and genuinely reappeared records.

Use Cases

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

Data You Get

Sample shape: values are illustrative placeholders, not from a live listing.

FieldExample
goodsCode"0000000001"
title"Sample Product Title"
linkUrl"https://mg.gmarket.co.kr/Item?goodscode=0000000001"
imageUrl / additionalImages"https://gdimg.gmarket.co.kr/0000000001/still/280?ver=0" / list of extra image URLs
currentPriceKrw22800 (the price the buyer actually pays, null if the site does not report a sale price)
wasPriceKrw / savingsAmountKrw28500 / 5700 (wasPriceKrw is null when the item is not on a special; savingsAmountKrw is null when the site reports no discount amount)
discountRatePercent20 (null when not on special)
currencyPrice"$15.75"
isOnSpecialtrue
isBigSmilePromofalse (true when the item is enrolled in the sitewide BigSmile promotion)
isSponsoredfalse (true for a paid/ad placement)
isFreeShipping / deliveryInfotrue / "Free"
sellerCustNo"000000000"
miniShopUrl"https://mg.gmarket.co.kr/samplestore"
categoryCodeL / categoryCodeM / categoryCodeS"100000000" / "200000000" / "300000000"
overseaDeliveryAvailabletrue
translation.english / translation.chinese / translation.japanesetrue / true / false
sellerCompanyName / sellerPhone / sellerBusinessNumber"Sample Trading Co., Ltd." / "02-0000-0000" / "000-00-00000" (only when detail enrichment is on)
descriptionTextup to 3,000 characters of cleaned product description (detail enrichment only)
rawthe complete upstream product object
scrapedAt"2026-01-01T00:00:00.000Z"

When "Reviews only" is on, the actor pushes one record per review instead: productGoodsCode and productLinkUrl link the review back to its product, reviewId is the review's own id, authorNickname (Gmarket-masked) and authorLoginId (unmasked) identify the author, rating (against a ratingMax of 10) and deliveryRating carry the numeric scores, title and comment (plus their English translations, titleEnglish and commentEnglish, when Gmarket provides one) hold the review text, reviewDate and reviewDateText cover timing, hasPhotos and photoUrls cover attached images, variantInfo records the purchased option, sellerReply and sellerReplyDate carry any seller response, isPowerReviewer and readCount are engagement signals, and raw and scrapedAt round out the record the same way product records do.

How to Use

  1. Pick a mode: keyword search, or paste ready-made Gmarket Global search-result URLs.
  2. Fill in your keywords or URLs, and set any filters you want: price range, oversea delivery only, BigSmile promotion only.
  3. Decide whether you want products or reviews ("Reviews only"), and set maxPages and maxListings to size the run. Leave "Fetch detail pages" on for the full seller disclosure, or turn it off for a faster, leaner pull.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Keyword search, default settings:

{
"mode": "search",
"keywords": ["laptop"]
}

Keyword search with a price band, oversea delivery only, deeper pagination:

{
"mode": "search",
"keywords": ["headphones", "earbuds"],
"minPrice": 10000,
"maxPrice": 100000,
"overseaDeliveryOnly": true,
"maxPages": 3
}

Paste a search-result URL with your own filters already in it:

{
"mode": "url",
"urls": ["https://mg.gmarket.co.kr/Search/Search?keyword=phone&minPrice=50000&maxPrice=500000"],
"maxPages": 2
}

Reviews only, capped total:

{
"mode": "search",
"keywords": ["laptop"],
"reviewsOnly": true,
"maxReviewsPerProduct": 20,
"maxListings": 100
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/gmarket-global-scraper").call(run_input={"mode": "search", "keywords": ["laptop"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["currentPriceKrw"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/gmarket-global-scraper').call({ mode: 'search', keywords: ['laptop'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resume and recurring updates

These are two distinct features, and both live under "Resume & recurring updates" in the input:

  • resumeFromRunId continues ONE interrupted walk-all pull. Paste a previous run or dataset id, and this run loads every goodsCode or reviewId already saved there and skips them, so it only appends new records.
  • incrementalMode is for scheduling this actor repeatedly against the SAME search. The actor remembers the last run's records itself, keyed by your search scope (mode, keywords or URLs, price range, oversea and BigSmile filters, reviewsOnly, fetchDetails); override with stateKey to track multiple schedules explicitly. Every pushed record gets a changeType of NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED, plus changedFields, firstSeenAt and lastSeenAt.
    • By default only NEW, UPDATED and REAPPEARED are pushed and billed. Turn on emitUnchanged to also push (and pay for) a full snapshot every run.
    • emitExpired (off by default) pushes a tombstone row for a tracked record that no longer appears, but only after a run that scanned the complete tracked search. A capped, resumed, or partial run never marks anything expired, since it cannot tell "gone" apart from "not reached yet".
    • REAPPEARED itself can only happen for a record that a previous complete-scan run with emitExpired on actually marked as gone. Without that history, a listing that comes back is classified NEW again, not REAPPEARED.
    • The two entity kinds (products and reviews) are tracked in separate namespaces internally, so a product id and a review id never collide, and a new review never makes its parent product look UPDATED.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you have not authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestring"search""search" uses keywords plus filters; "url" uses pasted search-result URLs.
keywordsarraynone (prefill: ["laptop"])One or more product keywords, English or Korean both work. Search mode only.
minPriceinteger0Minimum sale price in KRW. 0 = no minimum.
maxPriceinteger0Maximum sale price in KRW. 0 = no maximum.
overseaDeliveryOnlybooleanfalseRestrict to items that ship outside Korea.
bigSmileOnlybooleanfalseRestrict to items in the sitewide BigSmile promotion.
urlsarraynone (prefill: ["https://mg.gmarket.co.kr/Search/Search?keyword=laptop"])One or more Gmarket Global search-result URLs. The actor reads keyword, category, price range and promotion flags straight from each URL's own query string. URL mode only.
reviewsOnlybooleanfalsePush one record per review instead of one per product. Still uses the same search or URL flow to discover products first.
maxReviewsPerProductinteger50Reviews-only mode: stop after this many reviews per product. Set 0 to walk every review the product has.
maxPagesinteger0Pages to walk per keyword or URL (up to 60 products per page). 0 = unlimited, walk all pages until the site runs out of results.
maxListingsinteger20Cap on total records output (products or reviews, depending on reviewsOnly). Set 0 to walk the entire catalogue.
fetchDetailsbooleantrueFetch each product's detail page to add description, brand and the full seller disclosure. Turn off for a faster, leaner scrape.
resumeFromRunIdstringnonePaste a previous run or dataset id to continue a large walk-all pull; already-saved records are skipped.
incrementalModebooleanfalseRecurring monitoring of the same search. See "Resume and recurring updates" above.
stateKeystringnoneIncremental mode only. Override the auto-derived search-scope key.
emitUnchangedbooleanfalseIncremental mode only. Also push (and bill) UNCHANGED records every run.
emitExpiredbooleanfalseIncremental mode only. Also push (and bill) a tombstone row for records that disappeared, after a complete scan.
proxyobjectnone (prefill: Apify Proxy switched on)Network connection settings. If this field is left out entirely, requests go out with no proxy configured at all.
mcpConnectorsarraynoneOptional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstringnoneNotion connector only: page under which item records are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live listing.

{
"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"
}

Plan Requirement

This actor's proxy field has no enforced schema default. The input UI pre-fills Apify Proxy switched on, and most runs leave it as shown; if you drive the actor purely through the API with the proxy field omitted, requests go out with no proxy at all. You pay per record delivered to the dataset, plus a separate event charge for each record where detail enrichment actually fetched and parsed seller or description data; a record suppressed by incremental mode or one whose detail fetch failed is never charged that surcharge. Check the Pricing tab for current rates.

FAQ

How much does it cost?

You pay per record delivered to the dataset, plus a small additional event charge for each record where detail enrichment (fetchDetails) successfully fetched and parsed seller or description data. A record that incremental mode suppresses as UNCHANGED, or one whose detail fetch fails, is never charged that surcharge. The Pricing tab shows current rates; use maxListings to cap the size, and the cost, of any run.

This actor collects only publicly available product listings and customer reviews. You are responsible for how you use the data: follow Gmarket's terms and the laws that apply to you, and get legal advice before any commercial redistribution, especially of the seller's registered business details or review authors' text.

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

🔗 Want more e-commerce data?

Pair this actor with these related scrapers from the same team:

🛒 Naver Shopping Scraper
Scrape Naver Shopping products by Korean or English keyword, or by URL. Returns 190+...
🛒 Coupang Scraper
Scrape Coupang.com products by keyword, category or URL. Extract 20+ fields including...
🛒 The Warehouse NZ Scraper
Scrape The Warehouse New Zealand search results, category pages, and direct product URLs...
🥦 Coles AU Scraper
Scrape Coles.com.au grocery products and customer reviews. Search by keyword, browse...
🛒 Kmart Scraper
Scrape products and customer reviews from Kmart.com.au. Search by keyword or use...
🛒 Cdiscount Scraper
Scrape product data from Cdiscount.com by keyword, category, or URL. Apply filters and...

👉 Browse all abotapi scrapers

💬 Support & custom scrapers

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.