Mercari Japan Products Scraper avatar

Mercari Japan Products Scraper

Pricing

from $1.44 / 1,000 japanese listings

Go to Apify Store
Mercari Japan Products Scraper

Mercari Japan Products Scraper

Export public Mercari Japan C2C listing titles, JPY asking prices, IDs, images and seller links. Search by keyword or item URL; optionally include public descriptions for recurring resale comparisons.

Pricing

from $1.44 / 1,000 japanese listings

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Categories

Share

Export public Mercari Japan products for recurring resale price and assortment comparisons. Search Japanese C2C inventory by keyword or paste supported search and item URLs. Get listing titles, JPY asking prices, stable IDs, canonical links, image URLs and public seller identifiers. Optionally include public item descriptions.

Who is it for?

Resellers comparing candidate purchases, analysts studying current assortment, and collectors watching model-specific inventory can export the same searches repeatedly. Use Japanese product names and exact model numbers to improve source relevance.

Why use it?

The Actor reads structured search responses rather than guessing prices from card text. Pagination follows Mercari's cursor, and deduplication uses the item ID across the whole run. An observed price is an asking price or current auction bid, not proof of a realized sale. Search relevance remains controlled by Mercari.

Getting started

  1. Enter a product phrase in Search keywords, for example nintendo switch.
  2. Set Maximum unique listings, initially 50.
  3. Enable Include item descriptions only when needed.
  4. Run and inspect the default dataset.
  5. Export JSON, CSV or Excel using Apify's dataset export options.
{"keywords":["nintendo switch"],"maxItems":50,"includeDetails":false}

Inputs

FieldBehavior
keywordsIndependent source searches; surrounding whitespace is trimmed. Not exact-match title filters.
startUrlsURL objects for supported public search or item pages, processed before keywords.
maxItemsGlobal accepted unique-row limit, default 50, range 1–5000. No unlimited mode.
includeDetailsAdd descriptions and item images to search records. Explicit item URLs always receive details.

Provide 1–20 sources total across keywords and URLs. At least one is required. When multiple sources overlap, the first occurrence supplies the source context. Later sources may not run when the global limit is reached.

Search and explicit item URLs

Search URLs must use https://jp.mercari.com/search?keyword=.... The only additional supported parameter is status=on_sale or status=sold_out. Other filters are rejected rather than silently ignored. Mercari's sold-out search may contain trading or completed status values; inspect status rather than assuming a sale date.

{"startUrls":[{"url":"https://jp.mercari.com/search?keyword=sony%20camera&status=sold_out"}],"maxItems":25}

Explicit public /item/m... URLs must have no query parameters. They always receive item details. Seller and condition fields may be null where public item data does not expose them. Mercari Shops records are excluded: this product exports Japanese C2C m... identifiers, not shop inventory.

Output fields

FieldMeaning
itemId, itemUrlStable public listing identity and link
title, price, currencyPublic title and observed JPY asking price/current bid
statusRaw source status: search codes such as ITEM_STATUS_ON_SALE, or item API values such as on_sale after enrichment; not a normalized enum or sale date
conditionIdSource condition identifier, not translated text
sellerId, sellerUrlPublic seller identity/profile link when exposed
brandPublic brand when exposed
imageUrlsSearch thumbnails or enriched item images
description, detailsStatusPublic description and whether details were loaded
sourceUrl, keywordFirst source context; keyword is null for explicit items
scrapedAtISO extraction timestamp

Missing optional fields are null. No private contacts, buyer identities, purchase actions, messages or seller reviews are collected.

Example output

This redacted example follows the tested output shape; listing and seller identifiers are illustrative.

{
"itemId": "m12345678901",
"itemUrl": "https://jp.mercari.com/item/m12345678901",
"title": "Nintendo Switch用ソフト「ピクミン4」",
"price": 3500,
"currency": "JPY",
"status": "ITEM_STATUS_ON_SALE",
"conditionId": "3",
"sellerId": "123456789",
"sellerUrl": "https://jp.mercari.com/user/profile/123456789",
"brand": "Nintendo Switch",
"imageUrls": ["https://static.mercdn.net/example.jpg"],
"description": null,
"detailsStatus": "not_requested",
"sourceUrl": "https://jp.mercari.com/search?keyword=nintendo+switch",
"keyword": "nintendo switch",
"scrapedAt": "2026-10-03T15:00:00.000Z"
}

How much does it cost to extract Mercari Japan products?

Pay-per-event pricing charges one start event and one item event for each accepted listing saved. There is no separate enrichment charge. The start event is $0.003. Per-listing prices are FREE $0.0027554, BRONZE $0.002396, SILVER $0.0018689, and GOLD/PLATINUM/DIAMOND $0.0014376. These are qualifying monthly Store spend tiers, not private per-Actor volume discounts. On BRONZE, estimated event totals are $0.005396 for 1 listing, $0.02696 for 10, $0.1228 for 50 and $0.2426 for 100. Estimates exclude taxes and account-specific adjustments. Duplicate, excluded and empty rows do not generate item events. A genuine empty search still incurs the start event.

Coverage and limitations

This is a current public inventory snapshot, not a historical transaction database. Search ranking, availability and public fields can change. Exported prices do not prove sale amounts or dates. Auctions can expose current bids. Filters are limited to the documented keyword and status search route.

The Actor stops after source exhaustion or the global accepted-row limit. A source safety bound of 100 pages prevents runaway pagination; reaching it produces a failed run with a partial dataset. Removed or unavailable item details fail the run rather than masquerading as complete enrichment.

Reliability and troubleshooting

The implementation uses an anonymous Japanese-locale browser session for search bootstrap and a structured API cursor for pagination. Item enrichment bootstraps an anonymous public item browser session, then reuses ephemeral headers for sequential HTTP item requests, refreshing the session only under bounded conditions. Images, fonts and media are not downloaded; URLs remain in output. No login or customer cookies are required, and there is no automatic paid residential fallback.

A genuine source-confirmed empty search succeeds with zero rows. A blocked page, changed API response, unavailable detail or failed pagination fails the run. Any rows already saved are partial. Inspect the run log before treating a partial dataset as a completed export. Try a narrow keyword without enrichment to isolate a disappeared item page from a search issue.

Integrations

Export CSV to spreadsheets for sorting JPY prices and grouping brands. Use Apify schedules to repeat a stable input and compare itemId values downstream. Join exports by item ID to observe changing asking prices; the Actor itself does not provide history, alerts or a change feed.

Use dataset webhooks with your own downstream automation, or retrieve completed datasets through the API. Keep full datasets outside model context when using AI analysis.

API usage

Keep your Apify token private. Start one run and retain its run ID and dataset ID; do not restart merely to poll status.

curl -X POST "https://api.apify.com/v2/acts/automation-lab~mercari-jp-marketplace-listings/runs" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"keywords":["sony camera"],"maxItems":25}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/mercari-jp-marketplace-listings').call({ keywords: ['sony camera'], maxItems: 25 });
const rows = await client.dataset(run.defaultDatasetId).listItems({ limit: 25 });
console.log(rows.items);
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/mercari-jp-marketplace-listings').call(run_input={'keywords': ['sony camera'], 'maxItems': 25})
rows = client.dataset(run['defaultDatasetId']).list_items(limit=25)
print(rows.items)

MCP use

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/mercari-jp-marketplace-listings"

Claude Desktop, Cursor, and VS Code: use the equivalent remote HTTP server configuration supported by your client. Client authentication and transport setup can vary.

{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/mercari-jp-marketplace-listings"}}}

Discover actual schemas with tools/list. Actor selection also adds run and dataset tools; it does not expose exactly one tool. Example prompt (authorized consumer invocation): “Export 25 Mercari Japan camera listings, then summarize asking prices in JPY.”

Start once, retain the run/storage IDs and follow the same run. A call can return before completion. Poll the same run with bounded 2, 4, 8-second backoff capped at 10 seconds and a 120-second deadline; report pending at the deadline. On timeout, recover the known run instead of blindly restarting. Terminal failures mean partial data, not a complete export.

After success, use get-dataset-items with datasetId set to the run's defaultDatasetId, offset: 0, limit: 20, and needed fields (for example itemId,title,price,currency,status,itemUrl), using the argument types exposed by tools/list. Advance the source offset by each admitted page. Retrieve bounded untransformed JSON pages, at most 100 rows or 64 KiB admitted to model context. Track offsets and serialized bytes host-side; summarize or omit oversized rows with disclosure. If the client cannot intercept oversized responses, do not promise a hard byte guarantee. Report truncation and the continuation offset. Keep full exports in storage.

Legality and diagnostics

Use only public data for authorized purposes and comply with applicable laws, source terms and privacy obligations. This Actor is independent of Mercari and is not an official API. It does not buy products or contact users.

Failed operations send sanitized diagnostic input, exceptions and actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL query strings are removed; reports are retained for 30 days. No AI model processes input or scraped data at runtime. Browser cookies and session headers remain in memory and are discarded when contexts close; there is no persistent cache. Apify hosts run logs and datasets under your account's storage retention settings; you can delete them in Console or through the API. Public seller identifiers are personal-data context: avoid unnecessary redistribution. No other paid API or proxy service is used. For help, open a Store issue with the run URL and expected behavior; never post credentials.

FAQ

Does sold-out mean a verified sale price? No. It is a source search/status observation, not independently verified transaction evidence.

Why fewer results than requested? The source may be exhausted, duplicate records may be removed, or Shops IDs may be excluded. maxItems is a ceiling, not a minimum.

Can I filter by category or seller? Not in this version. Only keyword and optional URL status filters are supported.

Why does enrichment take longer? It adds an anonymous item-session browser bootstrap and an HTTP detail request per accepted listing, with bounded session refreshes. A removed item can cause a partial failed run.

For the separate US marketplace and USD prices, see Mercari US Listings Scraper. It is not a substitute for Japanese inventory or JPY comparisons.