Mercari Japan Scraper - Products, Sellers & Reviews
Pricing
from $0.80 / 1,000 results
Mercari Japan Scraper - Products, Sellers & Reviews
From $0.80/1K. Scrape Mercari Japan listings, sellers and reviews at scale. Extract names, prices, conditions, photos, shipping details, descriptions and seller profiles. Search by keyword with nine filters or paste Mercari URLs directly.
Pricing
from $0.80 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
31
Total users
8
Monthly active users
2 days ago
Last modified
Categories
Share
Mercari Japan Scraper: Items, Sellers & Reviews
Mercari Japan Scraper turns Mercari (jp.mercari.com), Japan's largest consumer marketplace app, into structured data. Search by keyword with nine filters, paste marketplace URLs directly, or pull every review left for one or more sellers. Get listing names, prices, condition, brand, category, photos, shipping details and full seller profiles (rating breakdown, sell count, follower counts, official flag), then export to JSON, CSV or Excel, or pull results straight into your app through the API.
Why This Scraper?
- Three ways to find data. Search by keyword with nine filters, paste any jp.mercari.com search, item or profile URL, or list seller IDs to pull their review history.
- Detail enrichment on demand. Turn on
fetchDetailsto add full descriptions, every photo, comments, hashtags and a complete seller profile (bio, follower counts, rating split). Leave it off for lean, fast runs. - Rich seller data. With
fetchDetailson, listings carry the seller's score, sell count, star rating, ratings breakdown, follower counts, official flag and SMS-verified status; review rows always carry the reviewed seller's score, ratings breakdown, follower counts and official flag. - Filter at the source. Status, condition, shipping payer, price range, brand, category and exclude-keyword all flow into the search itself, so you only pay for items you actually wanted.
- Multi-keyword and multi-seller runs. List several keywords, URLs or seller IDs in one run; searches share the budget so each keyword or search URL gets a share, and Max Listings caps the whole run.
- Built for monitoring. Incremental mode returns only new, changed, reappeared or expired listings on repeat runs, and Resume continues one interrupted run without re-collecting or re-billing rows it already has.
Use Cases
- Resellers and arbitrage: compare prices for the same keyword or category across many listings and sellers before buying or listing.
- Seller due diligence: pull a seller's full review history, rating breakdown and follower counts before a trade.
- Price and market monitoring: track a keyword or category over time with incremental mode and inspect
changedFieldsfor what moved. - Brand and category watching: keep an eye on a set of brand or category IDs and get only the new listings on each run.
- Marketplace analytics: feed listing and seller data into a spreadsheet, dashboard or BI tool.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
id | m12345678901 |
url | https://jp.mercari.com/item/m12345678901 |
itemType | marketplace (or shop) |
name | Nintendo Switch 有機ELモデル 本体 |
price | 28000 |
currency | JPY |
status | on_sale |
itemCondition | like new |
categoryId | 112 |
itemBrandName | Nintendo |
shippingPayer | seller |
thumbnail | https://static.mercdn.net/thumb/item/webp/m12345678901_1.jpg |
photos | ["https://static.mercdn.net/item/detail/orig/photos/m12345678901_1.jpg"] |
sellerId | 123456789 |
createdAt | 2026-01-01T00:00:00+00:00 |
An item row carries no kind field. Turning on fetchDetails additionally fills description, sellerName, itemConditionSubname, categoryName, categoryPath, shippingMethodName, numLikes, numComments, comments, hashtags, and the full seller profile (sellerIntroduction, sellerScore, sellerStarRating, sellerFollowerCount, sellerFollowingCount, sellerIsOfficial, sellerSmsVerified); those columns are null when detail enrichment is off, so every row has the same shape either way. A review row (reviews mode) carries kind: review, subject (seller or buyer), fame (good/normal/bad), message, raterName, an id of <sellerId>:<pagerId> that stays stable across runs, and the reviewed seller's profile: sellerId, sellerName, sellerProfileUrl, sellerIntroduction, sellerNumRatings, sellerStarRating, sellerRatingsGood/sellerRatingsNormal/sellerRatingsBad, sellerFollowerCount, sellerFollowingCount and sellerIsOfficial, so a single export already has seller context next to each review.
How to Use
- Pick a mode:
search(keyword + filters),url(paste marketplace links), orreviews(seller IDs). - Fill in the fields for that mode, and turn on Fetch Item Details if you need full descriptions, all photos or rich seller profiles.
- Set Max Listings (and optionally Max Pages Per Search) to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Search by keyword with filters:
{"mode": "search","queries": ["nintendo switch"],"status": "on_sale","sortBy": "created-desc","maxListings": 100}
Multi-keyword search with a price range and condition filter:
{"mode": "search","queries": ["iphone 15", "iphone 14"],"minPrice": 30000,"maxPrice": 80000,"itemCondition": ["1", "2"],"maxListings": 200}
URL mode: a search link plus a direct item page, enriched:
{"mode": "url","urls": ["https://jp.mercari.com/search?keyword=pokemon&sort=created_time&order=desc","https://jp.mercari.com/item/m12345678901"],"fetchDetails": true,"maxListings": 150}
Reviews mode: harvest one seller's review history:
{"mode": "reviews","sellerIds": ["123456789", "https://jp.mercari.com/user/profile/140382083"],"reviewSubject": "seller","maxListings": 300}
Each sellerIds entry can be a bare numeric ID or the full /user/profile/<id> / /user/reviews/<id> URL; both work, and you can mix them in one list.
/user/profile/<id> and /user/reviews/<id> URLs work the same way in url mode: any such URL is treated as an implicit reviews request for that seller, alongside any other URLs in the list.
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/mercari-jp-scraper").call(run_input={"mode": "search", "queries": ["nintendo switch"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["name"], item["price"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/mercari-jp-scraper').call({ mode: 'search', queries: ['nintendo switch'] });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
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor reads that dataset first, skipping every item and review it already contains, so this run only returns what is new. An invalid ID fails the run immediately, before any scraping starts. The actor also checkpoints its own progress, so a platform migration or a Resurrect of a failed run continues that exact run with no duplicate rows. - Incremental mode (
incrementalMode) is for running the same search or URLs again and again (for example, daily) and getting only what changed. Review rows are not classified. Each item row is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEARED, orEXPIRED(only after a run that scanned the whole tracked scope, and only withemitExpired). State is kept per search/URL/filter combination in a dedicated store and compared without re-visiting the site, so classification costs no extra requests.stateKeynames or shares that state; leaving it empty derives a key automatically from the search scope and filters. Turning on Incremental mode together with Resume on a search that already has tracked state fails the run with a clear message, since the two features would otherwise disagree on the baseline.
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.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto 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
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword + filters), url (paste marketplace URLs), or reviews (seller IDs). |
queries | array | none (prefill: ["nintendo switch"]) | Keywords to search for (Search mode only). Multi-keyword supported. Japanese and English both work. Each keyword runs its own paginated search; results are combined. |
status | string | on_sale | Listing availability status (Search mode only): any, on_sale, sold_out, trading. |
sortBy | string | score-desc | Result ordering (Search mode only): score-desc, created-desc, created-asc, price-asc, price-desc, num-likes-desc. |
minPrice | integer | none | Minimum price in JPY. Leave empty for no minimum. |
maxPrice | integer | none | Maximum price in JPY. Leave empty for no maximum. |
itemCondition | array | none (prefill: empty) | Filter by condition (Search mode only). Multiple selectable: 1=New, 2=Like new, 3=No noticeable scratches, 4=Some scratches, 5=Damaged, 6=Poor condition. |
shippingPayer | string | any | Who pays shipping (Search mode only): any, seller (free shipping), buyer. |
categoryIds | array | none (prefill: empty) | Numeric category IDs (Search mode only). Find IDs by inspecting any Mercari category URL, for example category_id=859 for iPhone. Leave empty for all categories. |
brandIds | array | none (prefill: empty) | Numeric brand IDs (Search mode only). Found in Mercari URL params as brand_id=.... |
excludeKeyword | string | none | Items matching this keyword are filtered out by the upstream search (Search mode only). |
urls | array | none (prefill: sample URL) | Direct Mercari Japan search or category URLs (URL mode only). Multi-URL supported. Filter-mode fields above are ignored. Pagination starts from the URL's page_token and walks forward. /user/profile/<id> and /user/reviews/<id> URLs are also accepted: the actor surfaces every review for that seller. |
sellerIds | array | none (prefill: ["https://jp.mercari.com/user/profile/140382083", "140382083"]) | Seller IDs or seller-page URLs (Reviews mode only): a bare numeric ID ("140382083") or the full /user/profile/<id> / /user/reviews/<id> URL both work, and you can mix them in one list. Multi-seller supported; each seller's reviews are surfaced as separate rows. |
reviewSubject | string | seller | Whether to fetch reviews left for the user as seller, as buyer, or both (Reviews mode only): seller, buyer, both. |
reviewFame | array | none (prefill: all three) | Rating buckets to include (Reviews mode only): good, normal, bad. Leave empty for all three. |
maxPages | integer | none (prefill: 0 = walk every page) | Optional bound on pages walked per keyword / URL / seller. About 20 listings per page in Search/URL mode; up to 100 reviews per page in Reviews mode. |
maxListings | integer | 20 | Cap across all keywords/URLs/sellers combined. Set 0 for unlimited (capped only by maxPages). |
resumeFromRunId | string | none | Optional: paste a previous run ID (or dataset ID) from this actor. Rows already collected there are skipped, so this run only returns new ones. |
incrementalMode | boolean | false | Turn on for daily or recurring monitoring of the same search/URLs. Classifies every item row as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED. Review rows are not classified. |
stateKey | string | none | Optional. Names a monitoring campaign to keep its state stable, or lets differently-configured runs deliberately share state. Leave empty to auto-derive a key from the search/URL and filter settings. |
emitUnchanged | boolean | false | Also return (and bill) items that have not changed since the last run, marked UNCHANGED. |
emitExpired | boolean | false | Also return (and bill) items that were present before but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked scope. |
fetchDetails | boolean | false | If true (Search/URL mode only), the actor visits each listing's detail page to add full description, all photos, comment count, like count and seller rating breakdown. Adds one request per listing. |
proxy | object | none (prefill: Apify Proxy) | Connection settings. |
mcpConnectors | array | none | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | none | Notion connector only: page under which records are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"id": "m12345678901","url": "https://jp.mercari.com/item/m12345678901","itemType": "marketplace","name": "Nintendo Switch 有機ELモデル 本体 ホワイト","price": 28000,"currency": "JPY","status": "on_sale","itemCondition": "no noticeable scratches or stains","itemConditionSubname": "目立った傷や汚れなし","categoryId": "112","categoryName": "家庭用ゲーム本体","categoryPath": "ゲーム・おもちゃ・グッズ > テレビゲーム > 家庭用ゲーム本体","itemBrandId": "1234","itemBrandName": "Nintendo","shippingPayer": "seller","shippingMethodName": "らくらくメルカリ便","thumbnail": "https://static.mercdn.net/thumb/item/webp/m12345678901_1.jpg","photos": ["https://static.mercdn.net/item/detail/orig/photos/m12345678901_1.jpg","https://static.mercdn.net/item/detail/orig/photos/m12345678901_2.jpg"],"description": "新品未使用に近い状態です。動作確認済みです。箱と付属品すべて揃っています。","numLikes": 12,"numComments": 2,"hashtags": ["ニンテンドースイッチ", "任天堂"],"sellerId": "123456789","sellerName": "サンプル太郎","sellerIntroduction": "フォロー割引あります。よろしくお願いします。","sellerScore": 348,"sellerNumRatings": 350,"sellerStarRating": 5,"sellerFollowerCount": 42,"sellerFollowingCount": 10,"sellerIsOfficial": false,"sellerSmsVerified": true,"createdAt": "2026-01-01T00:00:00+00:00","updatedAt": "2026-01-05T00:00:00+00:00"}
A review row (Reviews mode, or a /user/profile//user/reviews URL) has a different shape: id (<sellerId>:<pagerId>), kind set to review, subject, fame, message, createdAt, raterId/raterName, plus the reviewed seller's profile fields shown in the Data You Get section above.
Plan Requirement
The default proxy setting works out of the box: Mercari Japan does not require a specific geography. An optional country pin is available under Connection if you want requests to originate from Japan specifically; it is not required for the actor to return full data.
FAQ
How much does it cost?
You pay per record returned. Turning on fetchDetails adds a small surcharge only for rows that are actually returned, never for rows suppressed by incremental mode. A direct /item/<id> URL in url mode always incurs that same detail surcharge, even with fetchDetails off, since fetching the item page is the only way to resolve it. The Pricing tab shows the current rates. Use Max Listings to cap the cost of any run.
Is it legal to scrape Mercari?
This actor collects only publicly available marketplace data. You are responsible for how you use it: follow Mercari's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing prices and conditions are generally facts, but seller photos, bios and review text may be subject to third-party rights.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated, reappeared or expired records against a state the actor keeps for that search, and unchanged ones are not billed unless you opt in with emitUnchanged.
What's the difference between Resume and Incremental mode?
They solve different problems. Resume (resumeFromRunId) continues one specific interrupted run so it does not restart from scratch. Incremental mode is for running the same search or URLs repeatedly (for example, every day) and getting only what changed each time. Using both together on a search that already has incremental state fails the run, since the actor cannot tell which baseline to use.
Why did my run fail instead of returning an empty dataset?
A run fails only when it cannot be trusted to mean anything: an invalid resumeFromRunId, or turning on Incremental mode with Resume on a search that already has tracked state. Everything else, including the site rejecting requests, a keyword with no matches, or no keywords/URLs/seller IDs at all, finishes as a normal successful run with an empty (or partial) dataset and a status message explaining why.
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 results into Notion, Linear or Airtable.
🔗 Want more e-commerce data?
Pair this actor with these related scrapers from the same team:
| 👗 ZOZOTOWN Scrape ZOZOTOWN (zozo.jp), Japan's largest fashion marketplace: name, brand, JPY price... | 🛒 Nitori Japan Furniture & Home Goods Scraper Scrape Nitori Japan (nitori-net.jp) furniture and home goods by keyword, category or... |
| 🧩 Rakuten Scrape Rakuten Ichiba (rakuten.co.jp): name, JPY price, reference price and discount... | 🛒 Depop Scraper From $1/1K. Scrape Depop search results, listings, shops, and reviews to JSON, CSV, or... |
| 🧩 Suumo.jp Scraper Scrape Suumo, Japan's largest property portal: rental rooms with rent, management fees... | 🧩 Isetan Mitsukoshi Scrape the Isetan Mitsukoshi department store online shop (mistore.jp). Search by keyword... |
💬 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 contact@abotapi.com or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.