Mercari Japan Scraper
Pricing
from $2.23 / 1,000 results
Mercari Japan Scraper
Scrapes Mercari Japan search results and returns structured listing records with titles, condition, sale status, seller ratings, categories, shipping details and photo links. Supports private-seller listings and Mercari Shops, with optional per-listing details.
Pricing
from $2.23 / 1,000 results
Rating
0.0
(0)
Developer
Axiom Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Returns: one row per Mercari Japan listing with title, price, status, condition, sellerName, sellerStarRating, sourceUrl.
Input: {"searchQueries": ["nintendo switch"], "status": "on_sale", "maxItems": 50}
Best for: resale price research, sourcing under a price limit, sold-price history.
This Mercari Japan scraper provides structured public listing data for Mercari Japan API workflows.
{"id": "m44713430834","sourceUrl": "https://jp.mercari.com/item/m44713430834","title": "Nintendo Switch バイオハザード オリジンズコレクション","price": 3200,"currency": "JPY","status": "on_sale","condition": "No noticeable scratches or stains","sellerName": "Ko_tr15"}
What does Mercari Japan Scraper do?
Mercari Japan Scraper collects listings from the Mercari Japan marketplace and returns them as clean, structured records. You give it search keywords, a Mercari search URL, a seller profile URL, single listing URLs or item IDs, and it returns one record per listing with the price in yen, the condition, the sold status, the seller's star rating, the category, shipping details and photo links.
It is built for three common jobs:
- Price research. Search for a product, filter to sold listings and read the final prices to see what an item really sells for.
- Sourcing and resale. Find new listings under a price limit, in a chosen condition, and check how reliable the seller is before you buy.
- Market monitoring. Track how many listings exist for a keyword, how fast they sell and how prices move, by running the Actor on a schedule.
The Actor reads public listing data without a login or browser. Both private sellers and Mercari Shops are supported; listingType identifies each record.
What data can you get?
Each record describes one listing. Fields that Mercari does not provide for a listing are returned as null.
| Field | Type | Description |
|---|---|---|
id / itemId | string | Mercari listing ID (starts with m for private sellers, alphanumeric for Mercari Shops) |
sourceUrl | string | Link to the listing on jp.mercari.com |
title | string | Listing title, in Japanese as written by the seller |
price | integer | Price in Japanese yen |
currency | string | Always JPY |
status | string | on_sale, trading or sold_out |
isSold | boolean | True when the status is trading or sold_out |
conditionId | integer | Condition code from 1 (new) to 6 (poor) |
condition | string | English condition label, such as "Like new" |
conditionJa | string | Condition label in Japanese |
listingType | string | c2c for private sellers, shops for Mercari Shops |
imageUrls | array | Full-size photo URLs |
thumbnailUrl | string | Thumbnail image URL |
categoryId | string | Mercari category ID |
categoryName | string | Leaf category name |
categoryPath | string | Category path from root to leaf |
brandName | string | Brand, when the listing has one |
sellerId | string | Seller ID (shop ID for Mercari Shops) |
sellerName | string | Seller display name |
sellerStarRating | number | Seller star rating from 0 to 5, including fractional scores; null when the seller has no ratings |
sellerRatingCount | integer | Number of ratings the seller has received |
sellerRatingGood / sellerRatingNormal / sellerRatingBad | integer | Rating breakdown (private sellers) |
sellerListingsCount | integer | Number of items the seller has listed (private sellers) |
description | string | Full listing description |
shippingPayer | string | seller when shipping is included, otherwise buyer |
shippingMethod | string | Shipping method name |
shippingFromArea | string | Prefecture the item ships from |
shippingDuration | string | Estimated time to ship |
likesCount | integer | Number of likes |
commentsCount | integer | Number of comments (private sellers) |
createdAt | string | When the listing was created, ISO 8601 |
updatedAt | string | Last update time, ISO 8601; for sold items this is roughly the sale time |
searchQuery | string | The keyword or URL that produced the record |
The fields from sellerName onward, plus categoryName, categoryPath, description and the shipping fields, come from the per-listing detail data. Turn off includeDetails to skip them and get a faster, search-only run.
How to use Mercari Japan Scraper
- Open the Actor in Apify Console and go to the Input tab.
- Add one or more search keywords, or paste Mercari URLs. Keywords can be Japanese or English. Japanese keywords usually find more listings.
- Optionally set filters: status (all, on sale, sold), price range, condition, category, sort order and excluded words.
- Set
maxItemsto the number of listings you want per keyword or URL. - Click Start. When the run finishes, open the Output tab to view the table or download the dataset as JSON, CSV, Excel or XML.
Tips:
- To research sold prices, set status to
sold_outand sort bynewest. Sold items keep their final price. - To copy a search from the website, apply your filters on jp.mercari.com, copy the address bar URL and paste it into Mercari URLs. Keyword, status, sort, price range, condition, category and brand are read from the URL.
- To list everything a seller has on offer, paste their profile URL, for example
https://jp.mercari.com/user/profile/105354275.
Refresh known item IDs
Use itemIds when your catalog already stores Mercari listing identifiers. For example, {"itemIds":["m25970169864"],"maxItems":1} loads the same public detail data as its listing URL. An ID beginning with m followed by digits selects the private-seller endpoint; other alphanumeric IDs select Mercari Shops. You can mix IDs with keyword searches and URLs. A listing found earlier in the run is not saved again. Single-item inputs always fetch details, even with includeDetails: false, because there is no search record to copy.
An unavailable ID produces no dataset row. A blocked lookup is retried, then skipped with a clear status message, allowing later targets to continue. Search-only runs still save the available search fields if an optional detail request fails. No error or placeholder rows are returned.
Supported URLs
| URL pattern | What happens |
|---|---|
jp.mercari.com/search?... | Runs that search with the filters from the URL |
jp.mercari.com/user/profile/{sellerId} | Returns the seller's listings, newest first |
jp.mercari.com/item/{id} | Returns that single private-seller listing |
jp.mercari.com/shops/product/{id} | Returns that single Mercari Shops listing |
Any other URL is skipped with a warning in the log. The /en/ language prefix is accepted.
Input
| Field | Type | Description |
|---|---|---|
searchQueries | array of strings | Keywords to search, for example ["nintendo switch"]. Each runs separately. |
startUrls | array | Mercari search, profile or listing URLs; strings or objects with a url property |
itemIds | array | Private-seller IDs such as m25970169864, or alphanumeric Mercari Shops product IDs; default empty |
maxItems | integer | Listings per keyword or URL, 1 to 5000, default 50 |
includeDetails | boolean | Fetch seller rating, description, category and shipping, default true |
status | string | all, on_sale or sold_out, default all |
sort | string | relevance, newest, price or likes, default relevance |
sortOrder | string | desc or asc, default desc |
priceMin / priceMax | integer | Price range in yen |
conditions | array | Any of new_unused, like_new, no_noticeable_damage, some_damage, damaged, poor |
categoryIds | array | Mercari category IDs |
excludeKeyword | string | Words that listings must not contain |
brandIds | array | Mercari brand IDs (the brand_id value in a search URL) |
sellerIds | array | Only listings from these seller IDs; combine with keywords |
freeShippingOnly | boolean | Only listings where the seller pays shipping (default false) |
proxyConfiguration | object | Optional Apify Proxy settings |
The sold_out status returns both sold items and items in the middle of a transaction, which matches the "Sold" filter on the Mercari website.
When you use startUrls with a search URL, the filters in that URL take priority over the matching input fields.
Example input
{"searchQueries": ["nintendo switch"],"status": "sold_out","sort": "newest","priceMin": 1000,"priceMax": 30000,"conditions": ["new_unused", "like_new"],"maxItems": 30,"includeDetails": true}
Output
Every record is pushed to the default dataset. Here is a shortened example for a private-seller listing:
{"id": "m42279407418","itemId": "m42279407418","sourceUrl": "https://jp.mercari.com/item/m42279407418","title": "ペーパーマリオ オリガミキング Nintendo Switch","price": 1999,"currency": "JPY","status": "trading","isSold": true,"conditionId": 3,"condition": "No noticeable scratches or stains","conditionJa": "目立った傷や汚れなし","listingType": "c2c","categoryId": "702","categoryName": "Nintendo Switch","categoryPath": "ゲーム・おもちゃ・グッズ > テレビゲーム > Nintendo Switch","brandName": null,"sellerId": "935662983","sellerName": "yuyu","sellerStarRating": 5,"sellerRatingCount": 399,"sellerRatingGood": 399,"sellerRatingNormal": 0,"sellerRatingBad": 0,"sellerListingsCount": 335,"shippingPayer": "seller","shippingMethod": "ゆうゆうメルカリ便","shippingFromArea": "未定","shippingDuration": "1~2日で発送","likesCount": 0,"commentsCount": 0,"searchQuery": "nintendo switch"}
Mercari Shops listings have the same structure. The rating breakdown, seller listing count and comment count are null for them, because Mercari does not publish those values for shops. Their sellerStarRating and sellerRatingCount come from the shop's review score.
A RUN_SUMMARY record in the key-value store lists, for each keyword or URL, how many results Mercari reported, how many pages were read, how many items were saved and how many detail lookups failed.
Text such as titles, descriptions, condition names and shipping methods is Japanese, exactly as listed. Field names, status values and the English condition label are in English. No machine translation is applied.
How much does it cost?
The Actor is charged per result: you pay for each listing saved to the dataset. The exact rate is shown on the Pricing tab of the Actor page,. Use maxItems to limit each search and Apify's maximum cost per run to cap spending across all targets. When that spending limit is reached, the Actor stops successfully and says so in its final status. Detail requests are limited to the number of results the remaining budget allows. Setting includeDetails to false makes runs finish sooner and use less compute.
Empty searches cost nothing in results, because nothing is saved when a keyword has no matches.
Use with AI agents (MCP)
You can call this Actor from any MCP-compatible AI assistant through the Apify MCP server. Add this to your MCP client configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=axiomworks/mercari-japan-scraper"}}}
Example prompts:
- "Find the 20 most recent sold listings for 'nintendo switch' on Mercari Japan and tell me the median price in yen."
- "Search Mercari Japan for ポケモンカード in new or like-new condition, sorted by lowest price, and list the cheapest 10 with their seller ratings."
- "Show me everything seller 105354275 currently has listed on Mercari Japan."
Use maxItems to keep agent responses short.
Integrations and API
You can run the Actor from code with the Apify API clients, and connect it to other tools through Apify integrations, webhooks and schedules.
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("axiomworks/mercari-japan-scraper").call(run_input={"searchQueries": ["nintendo switch"],"status": "sold_out","sort": "newest","maxItems": 30,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["price"], item["status"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('axiomworks/mercari-japan-scraper').call({searchQueries: ['nintendo switch'],status: 'sold_out',sort: 'newest',maxItems: 30,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((i) => process.stdout.write(`${i.title} ${i.price}\n`));
cURL
curl -X POST "https://api.apify.com/v2/acts/axiomworks~mercari-japan-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries": ["nintendo switch"], "status": "sold_out", "maxItems": 30}'
Schedule the Actor to run daily and compare datasets over time to follow price changes for a keyword.
FAQ
Do I need a Mercari account or cookies? No. The Actor only reads public listing data that anyone can see without logging in.
How many listings can I get per search?
Up to 5000 per keyword or URL with maxItems. Mercari reports at most 15000 matches per search and deep pages can end early, so very broad searches may return fewer than requested. Narrow the search with filters or split it into several searches.
Does maxItems apply to all keywords together?
No. It applies to each keyword or URL separately. Two keywords with maxItems 15 can return up to 30 listings in total. A listing that already appeared for an earlier keyword is not saved twice in the same run.
Why are some seller fields empty?
Seller details, description, category and shipping come from the detail data, so they are empty when includeDetails is false. Private-seller-only fields, such as the good, normal and bad rating counts, are empty for Mercari Shops listings. A seller with no ratings yet has no star rating.
What does the sold status mean?
on_sale means the item can still be bought. trading means a buyer has already purchased it and the deal is in progress. sold_out means the sale is complete. isSold is true for the last two.
Can I find out when an item sold?
Mercari does not publish an exact sale time. For sold items, updatedAt is a close approximation.
What happens if my keyword finds nothing? The run succeeds with zero items and a status message that names the keyword. Nothing is added to the dataset.
What happens on errors or blocks? Blocked or unresolved targets finish successfully with zero rows and a message explaining what to change. Requests start at most twice per second. Direct access is the default; a 403 or 429 response triggers retries through Apify Proxy when available. The HTTP client tries a failed request up to three times with increasing waits. If a detail lookup still fails, the listing is saved with its search fields and the failure is counted in the run summary. You can also enable the proxy option from the start.
Are prices in yen?
Yes. All prices are Japanese yen as integers, with currency set to JPY.
Is the data in English? Titles and descriptions are in the language the seller used, usually Japanese. Status values, field names and the English condition label are in English.
Is it legal to scrape Mercari?
The Actor collects public Mercari listing information and seller ratings without logging in. Consider applicable privacy rules and the rights attached to listing photos and descriptions before using or republishing the output. Mercari's terms and robots.txt may restrict automated access. Keep request volumes modest and review the requirements that apply to your project.
Mercari Japan Scraper is not affiliated with, endorsed by or sponsored by Mercari. This section is general information, not legal advice.
Feedback
If a field is missing, a filter does not behave as you expect or a run fails, open an issue from the Actor page in Apify Console with the run link and input. Suggestions for new fields or filters are welcome.