Mercari Japan Scraper avatar

Mercari Japan Scraper

Pricing

from $2.23 / 1,000 results

Go to Apify Store
Mercari Japan Scraper

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

Axiom Works

Maintained by Community

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

FieldTypeDescription
id / itemIdstringMercari listing ID (starts with m for private sellers, alphanumeric for Mercari Shops)
sourceUrlstringLink to the listing on jp.mercari.com
titlestringListing title, in Japanese as written by the seller
priceintegerPrice in Japanese yen
currencystringAlways JPY
statusstringon_sale, trading or sold_out
isSoldbooleanTrue when the status is trading or sold_out
conditionIdintegerCondition code from 1 (new) to 6 (poor)
conditionstringEnglish condition label, such as "Like new"
conditionJastringCondition label in Japanese
listingTypestringc2c for private sellers, shops for Mercari Shops
imageUrlsarrayFull-size photo URLs
thumbnailUrlstringThumbnail image URL
categoryIdstringMercari category ID
categoryNamestringLeaf category name
categoryPathstringCategory path from root to leaf
brandNamestringBrand, when the listing has one
sellerIdstringSeller ID (shop ID for Mercari Shops)
sellerNamestringSeller display name
sellerStarRatingnumberSeller star rating from 0 to 5, including fractional scores; null when the seller has no ratings
sellerRatingCountintegerNumber of ratings the seller has received
sellerRatingGood / sellerRatingNormal / sellerRatingBadintegerRating breakdown (private sellers)
sellerListingsCountintegerNumber of items the seller has listed (private sellers)
descriptionstringFull listing description
shippingPayerstringseller when shipping is included, otherwise buyer
shippingMethodstringShipping method name
shippingFromAreastringPrefecture the item ships from
shippingDurationstringEstimated time to ship
likesCountintegerNumber of likes
commentsCountintegerNumber of comments (private sellers)
createdAtstringWhen the listing was created, ISO 8601
updatedAtstringLast update time, ISO 8601; for sold items this is roughly the sale time
searchQuerystringThe 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

  1. Open the Actor in Apify Console and go to the Input tab.
  2. Add one or more search keywords, or paste Mercari URLs. Keywords can be Japanese or English. Japanese keywords usually find more listings.
  3. Optionally set filters: status (all, on sale, sold), price range, condition, category, sort order and excluded words.
  4. Set maxItems to the number of listings you want per keyword or URL.
  5. 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_out and sort by newest. 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 patternWhat 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

FieldTypeDescription
searchQueriesarray of stringsKeywords to search, for example ["nintendo switch"]. Each runs separately.
startUrlsarrayMercari search, profile or listing URLs; strings or objects with a url property
itemIdsarrayPrivate-seller IDs such as m25970169864, or alphanumeric Mercari Shops product IDs; default empty
maxItemsintegerListings per keyword or URL, 1 to 5000, default 50
includeDetailsbooleanFetch seller rating, description, category and shipping, default true
statusstringall, on_sale or sold_out, default all
sortstringrelevance, newest, price or likes, default relevance
sortOrderstringdesc or asc, default desc
priceMin / priceMaxintegerPrice range in yen
conditionsarrayAny of new_unused, like_new, no_noticeable_damage, some_damage, damaged, poor
categoryIdsarrayMercari category IDs
excludeKeywordstringWords that listings must not contain
brandIdsarrayMercari brand IDs (the brand_id value in a search URL)
sellerIdsarrayOnly listings from these seller IDs; combine with keywords
freeShippingOnlybooleanOnly listings where the seller pays shipping (default false)
proxyConfigurationobjectOptional 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 ApifyClient
client = 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.

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.