Mercari JP $0.8πŸ’° Listings | URLs | Reviews Scraper avatar

Mercari JP $0.8πŸ’° Listings | URLs | Reviews Scraper

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Mercari JP $0.8πŸ’° Listings | URLs | Reviews Scraper

Mercari JP $0.8πŸ’° Listings | URLs | Reviews Scraper

From $0.8/1K. Scrape items, sellers, and reviews from Mercari Japan (jp.mercari.com) at scale. Pull listing names, prices, conditions, all photos, shipping details, full seller descriptions, and rich seller profiles. Two input modes: keyword search with nine filters, or pass URLs directly.

Pricing

from $0.80 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

18

Total users

4

Monthly active users

4 hours ago

Last modified

Share

Mercari Japan Scraper

Scrape items, sellers, and reviews from Mercari Japan (jp.mercari.com) at scale. Pull listing names, prices, conditions, all photos, shipping details, full seller bios, and rich seller profiles (rating breakdown, sell count, star rating, follower counts, official-shop flag). Three input modes: keyword search with nine filters, paste marketplace URLs directly, or harvest every review left for one or more seller IDs. Output is structured JSON, ready for spreadsheets, dashboards, and pricing analysis.

Why This Scraper?

  • 90+ fields per listing, all flat: id, name, price, condition, brand, category breakdown, all photo URLs, full shipping block (payer, method, fee, duration), plus a complete seller-profile block (introduction text, rating breakdown, sell count, star rating, follower / following counts, KYC and SMS-verified flags).
  • Search-first input: type a keyword, pick filters; no need to hand-build URLs. Multi-keyword runs return representation from every keyword (proportional budget split).
  • URL mode for power users: paste any jp.mercari.com URL: search pages, item pages, or /user/profile/<id> and /user/reviews/<id> profile pages all work in one input list.
  • Reviews mode: pass one or more seller IDs and the actor surfaces every review left for those sellers as separate rows. Filter by subject (seller / buyer / both) and rating bucket (good / normal / bad).
  • Detail enrichment toggle: turn on fetchDetails to pull full descriptions, all photos at original resolution, comments, hashtags, full category breakdown, and rich seller profile (bio, follower counts, polarized rating split). Turn off for fastest lean runs.
  • Filter at source, not after: status, item condition, shipping-payer, price range, brand, category, exclude-keyword, sort, and order all flow into the upstream search; you pay for items you wanted, not items you filtered out.
  • Resilient session management: automatic retries with exponential back-off keep long runs stable.

Data You Get

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

Item rows (search / url modes)

FieldExample
idm00000000000
kinditem
urlhttps://jp.mercari.com/item/m00000000000
itemTypemarketplace (or shop)
nameSample Listing Title
price12000
currencyJPY
statuson_sale
itemConditionlike new
itemConditionId2
itemConditionSubnameSample condition description
categoryId0
categoryNameSample Category
categoryParentNameSample Parent Category
categoryRootNameSample Root Category
categoryPathSample Root > Sample Parent > Sample Category
itemBrandId0
itemBrandNameSample Brand
shippingPayerseller
shippingPayerNameSample shipping payer label
shippingMethodNameSample shipping method
shippingFromAreaSample prefecture
shippingDurationMinDays1
shippingDurationMaxDays2
shippingClassTotalFee0
thumbnailhttps://static.mercdn.net/thumb/item/webp/m00000000000_1.jpg
photos["https://static.mercdn.net/item/detail/orig/photos/m00000000000_1.jpg"]
descriptionFull seller description text appears here when fetchDetails=true.
numLikes0
numComments0
comments[{"userId":"0","userName":"Sample user","message":"Sample comment","createdAt":"2026-01-01T00:00:00+00:00"}]
hashtags["sample-tag"]
metaTitleSample SEO title
metaSubtitleSample SEO subtitle
isAnonymousShippingtrue
isOfferabletrue
isCancelabletrue
sellerId000000000
sellerNameSample seller name
sellerIntroductionSample seller bio text appears here when fetchDetails=true.
sellerScore0
sellerNumSellItems0
sellerNumRatings0
sellerStarRating5
sellerRatingsGood0
sellerRatingsNormal0
sellerRatingsBad0
sellerPolarizedRatingsGood0
sellerPolarizedRatingsBad0
sellerFollowerCount0
sellerFollowingCount0
sellerCreatedAt2020-01-01T00:00:00+00:00
sellerSmsVerifiedtrue
sellerIsOfficialfalse
sellerQuickShipperfalse
sellerPhotoUrlhttps://static.mercdn.net/members/resized/webp/000000000.jpg
sellerRawfull upstream seller block (verbatim β€” captures any field Mercari adds)
sellerProfileRawfull upstream /users/get_profile block (verbatim)
isLikedfalse
isNoPricefalse
createdAt2026-01-01T00:00:00+00:00
updatedAt2026-01-01T00:00:00+00:00

Detail-only fields (description, comments, hashtags, full category breakdown, full shipping detail, complete seller profile including sellerIntroduction and follower counts) are populated only when fetchDetails=true. They appear as null placeholders otherwise so the row schema is identical across modes.

Review rows (reviews mode)

FieldExample
id000000000:0000000000 (sellerId:pagerId, stable across runs)
kindreview
urlhttps://jp.mercari.com/user/reviews/000000000
subjectseller (or buyer)
famegood (or normal / bad)
messageSample review text. May be empty when the rater left a rating without a comment.
createdAt2026-01-01T00:00:00+00:00
pagerId0000000000
raterId000000000
raterNameSample rater name
raterPhotoUrlhttps://static.mercdn.net/members/resized/webp/000000000.jpg
sellerId000000000
sellerProfileUrlhttps://jp.mercari.com/user/profile/000000000
sellerNameSample seller name
sellerIntroductionSample seller bio text
sellerScore0
sellerNumRatings0
sellerStarRating5
sellerRatingsGood0
sellerRatingsNormal0
sellerRatingsBad0
sellerFollowerCount0
sellerFollowingCount0
sellerIsOfficialfalse
sellerPhotoUrlhttps://static.mercdn.net/members/resized/webp/000000000.jpg

How to Use

Search by keyword + filters

{
"mode": "search",
"queries": ["nintendo switch"],
"status": "on_sale",
"sortBy": "created-desc",
"maxPages": 5,
"maxListings": 100,
"fetchDetails": false,
"proxy": { "useApifyProxy": true }
}

Multi-keyword run with price range

{
"mode": "search",
"queries": ["iphone 15", "iphone 14", "iphone 13"],
"status": "on_sale",
"minPrice": 30000,
"maxPrice": 80000,
"sortBy": "price-asc",
"maxPages": 10,
"maxListings": 300,
"proxy": { "useApifyProxy": true }
}

URL mode, multi-URL

{
"mode": "url",
"urls": [
"https://jp.mercari.com/search?keyword=lego&category_id=1115",
"https://jp.mercari.com/search?keyword=pokemon&sort=created_time&order=desc"
],
"maxPages": 3,
"maxListings": 200,
"proxy": { "useApifyProxy": true }
}

Direct item-page URLs (skip search, go straight to detail)

{
"mode": "url",
"urls": [
"https://jp.mercari.com/item/m00000000001",
"https://jp.mercari.com/item/m00000000002"
],
"fetchDetails": true,
"proxy": { "useApifyProxy": true }
}

When the URL is an item-page URL the actor goes straight to the detail endpoint, so every direct-item URL gets the full enriched record regardless of fetchDetails.

Reviews mode: harvest every review for one or more sellers

{
"mode": "reviews",
"sellerIds": ["140382083", "204551080"],
"reviewSubject": "seller",
"reviewFame": ["good", "normal", "bad"],
"maxPages": 5,
"maxListings": 500,
"proxy": { "useApifyProxy": true }
}

Each review becomes its own row. The seller's profile (name, bio, score, ratings breakdown, follower counts) is attached to every row, so a single CSV export already has the seller context next to each review.

URL mode shortcut for review pages

{
"mode": "url",
"urls": [
"https://jp.mercari.com/user/reviews/140382083",
"https://jp.mercari.com/user/profile/204551080"
],
"maxPages": 3,
"proxy": { "useApifyProxy": true }
}

Both /user/reviews/<id> and /user/profile/<id> URLs are recognised: the actor surfaces every review for those sellers alongside any other URLs in the list.

Resume a previous run (resumeFromRunId)

{
"mode": "search",
"queries": ["nintendo switch"],
"resumeFromRunId": "abCdEfGhIjKlMnOp"
}

Paste the run ID (or dataset ID) of an earlier run of this actor into resumeFromRunId. The actor reads that run's dataset first and skips every row it already contains β€” by item id in Search/URL mode, by seller+review id in Reviews mode β€” so this run only returns what's new. Useful for continuing a large maxPages-unbounded walk, or for periodic "what's new since last time" pulls. Leave empty for a normal run. An invalid id fails the run immediately, before any scraping starts.

The actor also checkpoints its own progress in the run's key-value store, so a platform migration or a Resurrect of a failed/aborted run continues that exact run β€” same dataset, no duplicate rows, no double charges β€” with no input changes needed.

Incremental changes for scheduled runs (incrementalMode)

Resume continues one specific interrupted run. Incremental mode is for the opposite case: running the same search/URLs again and again (e.g. a daily schedule) and getting only what changed.

{
"mode": "search",
"queries": ["nintendo switch"],
"incrementalMode": true,
"emitUnchanged": false,
"emitExpired": true
}

Turn on incrementalMode and every row gets a changeType: NEW (first time seen), UPDATED (a tracked field changed since last run β€” see changedFields), UNCHANGED (nothing changed β€” hidden by default), REAPPEARED (back after being marked expired), or EXPIRED (was tracked, no longer found β€” opt-in, only emitted once a run fully scans the tracked search). Each row also carries firstSeenAt and lastSeenAt.

  • stateKey β€” optional. Name a monitoring campaign to keep its state stable, or leave empty to let the actor derive a key automatically from the search/URL and filter settings (Item status, Item condition, Shipping payer, Category IDs, Brand IDs, Sort, Min/Max price, Exclude keyword, and fetchDetails) β€” two differently-filtered runs never share a baseline.
  • emitUnchanged β€” off by default. Turning it on also returns (and bills) UNCHANGED rows.
  • emitExpired β€” off by default. Turning it on also returns (and bills) EXPIRED rows, but only once a run reaches the natural end of every tracked search/URL with no maxListings/maxPages cap and no resumeFromRunId β€” an incomplete scan can't tell "gone" from "not reached yet".
  • State is stored server-side (never re-fetches the site to compare), so classification costs no extra requests. fetchDetails items are still fetched to compute their fingerprint even when the result is suppressed β€” only the returned/billed row and the detail-enrichment surcharge are gated on the change, not the fetch itself.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (keyword + filters), url (paste marketplace URLs), or reviews (seller IDs).
queriesstring[][]Search keywords (Search mode). Japanese and English both work.
urlsstring[][]URLs (URL mode): jp.mercari.com/search?..., /item/..., /shops/product/..., /user/profile/..., /user/reviews/...
sellerIdsstring[][]Numeric seller IDs (Reviews mode). Find one at the end of any /user/profile/ or /user/reviews/ URL.
reviewSubjectstringsellerseller, buyer, or both (Reviews mode). Whether to fetch reviews left for the user as seller, as buyer, or both.
reviewFamestring[]all 3Rating buckets to include (Reviews mode): any of good, normal, bad.
statusstringon_saleItem status filter (Search mode): any, on_sale, sold_out, trading.
itemConditionstring[][]Numeric condition IDs: 1=new, 2=like new, 3=light wear, 4=some wear, 5=heavy wear, 6=poor.
shippingPayerstringanyany, seller (free shipping), buyer.
categoryIdsstring[][]Numeric category IDs (find via Mercari URL params: category_id=...).
brandIdsstring[][]Numeric brand IDs (brand_id=...).
sortBystringscore-descscore-desc, created-desc, created-asc, price-asc, price-desc, num-likes-desc.
minPriceintegernoneMin price in JPY.
maxPriceintegernoneMax price in JPY.
excludeKeywordstringemptyItems matching this term are filtered upstream.
maxPagesintegernoneOptional bound on pages walked per keyword / URL / seller. ~20 listings per page in Search/URL mode; up to 100 reviews per page in Reviews mode. Leave empty to walk every result page.
maxListingsinteger20Cap across all keywords/URLs/sellers combined. Set 0 for unlimited (capped only by maxPages).
fetchDetailsbooleanfalseIf true (Search/URL mode only), visit each item's detail page for full data. Adds one request per listing.
resumeFromRunIdstringnonePaste a previous run ID (or dataset ID) from this actor. Rows already collected there are skipped, so this run only returns new ones.
incrementalModebooleanfalseTurn on for daily/recurring monitoring of the same search/URLs β€” classifies every row as NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED.
stateKeystringnoneNames the incremental-mode monitoring campaign. Leave empty to auto-derive from the search/URL + filter settings.
emitUnchangedbooleanfalseIncremental mode only: also return (and bill) UNCHANGED rows.
emitExpiredbooleanfalseIncremental mode only: also return (and bill) EXPIRED rows, once a run fully scans the tracked search.
proxyobjectApify defaultProxy settings.

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 haven't 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.

Output Example

Sample records: values are illustrative placeholders.

Item record (search / url modes)

{
"id": "m00000000000",
"kind": "item",
"url": "https://jp.mercari.com/item/m00000000000",
"itemType": "marketplace",
"name": "Sample Listing Title",
"price": 12000,
"currency": "JPY",
"status": "on_sale",
"itemCondition": "like new",
"itemConditionSubname": "Sample condition description",
"categoryId": "0",
"categoryName": "Sample Category",
"categoryPath": "Sample Root > Sample Parent > Sample Category",
"itemBrandId": "0",
"itemBrandName": "Sample Brand",
"shippingPayer": "seller",
"shippingPayerName": "Sample shipping payer label",
"shippingMethodName": "Sample shipping method",
"shippingFromArea": "Sample prefecture",
"shippingDurationMinDays": 1,
"shippingDurationMaxDays": 2,
"thumbnail": "https://static.mercdn.net/thumb/item/webp/m00000000000_1.jpg",
"photos": [
"https://static.mercdn.net/item/detail/orig/photos/m00000000000_1.jpg",
"https://static.mercdn.net/item/detail/orig/photos/m00000000000_2.jpg"
],
"description": "Full seller description text appears here when fetchDetails=true.",
"numLikes": 0,
"numComments": 0,
"hashtags": ["sample-tag"],
"isAnonymousShipping": true,
"isOfferable": true,
"isCancelable": true,
"sellerId": "000000000",
"sellerName": "Sample seller name",
"sellerIntroduction": "Sample seller bio text appears here when fetchDetails=true.",
"sellerScore": 0,
"sellerNumRatings": 0,
"sellerStarRating": 5,
"sellerFollowerCount": 0,
"sellerFollowingCount": 0,
"sellerCreatedAt": "2020-01-01T00:00:00+00:00",
"sellerSmsVerified": true,
"sellerIsOfficial": false,
"createdAt": "2026-01-01T00:00:00+00:00",
"updatedAt": "2026-01-01T00:00:00+00:00"
}

Review record (reviews mode)

{
"id": "000000000:0000000000",
"kind": "review",
"url": "https://jp.mercari.com/user/reviews/000000000",
"subject": "seller",
"fame": "good",
"message": "Sample review message text.",
"createdAt": "2026-01-01T00:00:00+00:00",
"pagerId": "0000000000",
"raterId": "000000000",
"raterName": "Sample rater name",
"raterPhotoUrl": "https://static.mercdn.net/members/resized/webp/000000000.jpg",
"sellerId": "000000000",
"sellerProfileUrl": "https://jp.mercari.com/user/profile/000000000",
"sellerName": "Sample seller name",
"sellerIntroduction": "Sample seller bio text",
"sellerScore": 0,
"sellerNumRatings": 0,
"sellerStarRating": 5,
"sellerRatingsGood": 0,
"sellerRatingsNormal": 0,
"sellerRatingsBad": 0,
"sellerFollowerCount": 0,
"sellerFollowingCount": 0,
"sellerIsOfficial": false,
"sellerPhotoUrl": "https://static.mercdn.net/members/resized/webp/000000000.jpg"
}

Plan Requirement

This actor runs cleanly on the Apify Free plan. The default Apify Proxy group is sufficient; no residential or specialty proxies are required.

If you do choose residential, a Japan country pin (apifyProxyCountry: JP) gives you the same view a buyer in Japan sees: prices, shipping options, and inventory match exactly. Without a country pin you may occasionally see slightly different sponsored placements.

Tips

  • For large catalogue dumps (10K+ items per keyword), run multiple keywords in one job: the per-search budget split makes sure all keywords get representation, and a single actor run is faster and simpler than several.
  • Leave fetchDetails: false for the fastest extraction. Turn on only if you need full descriptions, comment threads, hashtags, full category breakdowns, or rich seller profiles (introduction, follower counts, polarized rating split).
  • excludeKeyword is applied upstream, so excluded items never count against your maxListings budget.
  • In Reviews mode, each page returns up to 100 reviews. Walking 5 pages covers 500 reviews per seller; raise maxPages for sellers with thousands of ratings.
  • The id of a review row is <sellerId>:<pagerId>, stable across runs, so re-running the same input produces the same dataset row IDs and incremental sync stays simple.