{
  "openapi": "3.0.1",
  "info": {
    "title": "Mercari Japan Scraper - Products, Sellers & Reviews",
    "description": "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.",
    "version": "1.0",
    "x-build-id": "DOTfDJ6vtm0npvcMf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~mercari-jp-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-mercari-jp-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/abotapi~mercari-jp-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-mercari-jp-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/abotapi~mercari-jp-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-mercari-jp-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Search Mode",
            "enum": [
              "search",
              "url",
              "reviews"
            ],
            "type": "string",
            "description": "How to find data to scrape. 'search' and 'url' return items; 'reviews' returns one row per review left for the listed seller IDs.",
            "default": "search"
          },
          "queries": {
            "title": "Search Keywords",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "title": "Item Status",
            "enum": [
              "any",
              "on_sale",
              "sold_out",
              "trading"
            ],
            "type": "string",
            "description": "Listing availability status (Search mode only).",
            "default": "on_sale"
          },
          "statuses": {
            "title": "Item Statuses (multi-select)",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional multi-select (Search mode only). Pick any combination of On sale, Sold out and In trade. When set it overrides \"Item Status\" above; leave empty to use the single select.",
            "items": {
              "type": "string",
              "enum": [
                "on_sale",
                "sold_out",
                "trading"
              ],
              "enumTitles": [
                "On sale",
                "Sold out",
                "In trade"
              ]
            }
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "score-desc",
              "created-desc",
              "created-asc",
              "price-asc",
              "price-desc",
              "num-likes-desc"
            ],
            "type": "string",
            "description": "Result ordering (Search mode only). Default = relevance score.",
            "default": "score-desc"
          },
          "minPrice": {
            "title": "Min Price (¥)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price in JPY. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Max Price (¥)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price in JPY. Leave empty for no maximum."
          },
          "itemCondition": {
            "title": "Item Condition",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string"
            }
          },
          "shippingPayer": {
            "title": "Shipping Paid By",
            "enum": [
              "any",
              "seller",
              "buyer"
            ],
            "type": "string",
            "description": "Who pays shipping (Search mode only).",
            "default": "any"
          },
          "categoryIds": {
            "title": "Category IDs",
            "type": "array",
            "description": "Category IDs (Search mode only): the number from a Mercari URL (category_id=859 is smartphones), or the category name in Japanese or English as Mercari shows it (for example Smartphones), looked up in Mercari's own category list. A name that matches nothing, or several categories, stops the run and says which. Leave empty for all categories.",
            "items": {
              "type": "string"
            }
          },
          "brandIds": {
            "title": "Brand IDs",
            "type": "array",
            "description": "Brand IDs (Search mode only): the number from a Mercari URL (brand_id=3272 is Apple), or the brand name as Mercari shows it (for example Apple or Nike), looked up in Mercari's own brand list. A name that matches nothing, or several brands, stops the run and says which.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeyword": {
            "title": "Exclude Keyword",
            "type": "string",
            "description": "Items matching this keyword are filtered out by the upstream search (Search mode only)."
          },
          "urls": {
            "title": "Marketplace URLs",
            "type": "array",
            "description": "Mercari Japan links (URL mode only), one per line. Accepted: search and category links (keyword, category_id, brand_id, status, price, condition, sort, seller_id, page_token), item pages (/item/<id>, /en/item/<id>, /shops/product/<id>, legacy item.mercari.com/jp/<id>/), and seller /user/profile/<id> or /user/reviews/<id> pages (surfaces every review). Filter-mode fields are ignored. Left untouched, URL mode scrapes the example of each shape; replace them with your own links. Unrecognised links log a warning.",
            "default": [
              "https://jp.mercari.com/search?keyword=iphone&sort=price&order=asc",
              "https://jp.mercari.com/search?category_id=859",
              "https://jp.mercari.com/search?keyword=iphone&page_token=v1%3A1",
              "https://jp.mercari.com/search?keyword=iphone&brand_id=3272&status=on_sale&price_min=1000&price_max=50000&item_condition_id=1",
              "https://jp.mercari.com/item/m98254537705",
              "https://jp.mercari.com/en/item/m10455274260",
              "https://jp.mercari.com/en/search?keyword=iphone",
              "https://jp.mercari.com/user/profile/140382083",
              "https://jp.mercari.com/user/reviews/186383006",
              "https://item.mercari.com/jp/m17042911590/"
            ],
            "items": {
              "type": "string"
            }
          },
          "sellerIds": {
            "title": "Seller IDs",
            "type": "array",
            "description": "Seller IDs or seller-page URLs (Reviews mode only). Each entry can be a numeric seller ID or a full /user/profile/<id> or /user/reviews/<id> URL; both work. Multi-seller supported; each seller's reviews are surfaced as separate rows.",
            "items": {
              "type": "string"
            }
          },
          "reviewSubject": {
            "title": "Review Subject",
            "enum": [
              "seller",
              "buyer",
              "both"
            ],
            "type": "string",
            "description": "Whether to fetch reviews left for the user as seller, as buyer, or both (Reviews mode only).",
            "default": "seller"
          },
          "reviewFame": {
            "title": "Review Rating Filter",
            "type": "array",
            "description": "Rating buckets to include (Reviews mode only). 'good' = positive, 'normal' = neutral, 'bad' = negative. Default = all three.",
            "items": {
              "type": "string"
            }
          },
          "maxPages": {
            "title": "Max Pages Per Search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional 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."
          },
          "maxListings": {
            "title": "Max Listings (Total)",
            "minimum": 0,
            "type": "integer",
            "description": "Cap across all keywords/URLs/sellers combined; applies to listings and to review rows in Reviews mode. Values above 100000 and 0 are both treated as 100000 (still capped by maxPages).",
            "default": 20
          },
          "fetchDetails": {
            "title": "Fetch Item Details",
            "type": "boolean",
            "description": "If true (Search/URL mode only), the actor visits each listing's detail page to enrich the record with full description, all photos, comment count, like count, and seller rating breakdown (good/normal/bad). Adds one request per listing.",
            "default": false
          },
          "proxy": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Apify Proxy default group is sufficient. Mercari Japan accepts requests from any geo. Country pin is optional."
          },
          "resumeFromRunId": {
            "title": "Resume from run ID",
            "type": "string",
            "description": "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. Leave empty for a normal run. For recurring daily monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring of the same search/URLs. The first run returns all matching items as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED items. UPDATED means a listing's content changed since the last run (price, status, title, description, photos, condition, shipping and similar fields); changedFields names exactly which. Live counters that move on their own are excluded from the comparison and never cause UPDATED: likes, comments count and the seller's rating/follower/sell-count statistics (they are still shown in the output). You can exclude more with \"Ignore fields when detecting changes\". Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those items returned (and billed). State is kept separately per search/URL and filter setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from run ID above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search/URL and filter settings, so different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged items (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return items that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired items (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return items that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max listings/Max pages capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Optional. Output field names (top-level, for example photos or description) to exclude from UPDATED change detection and from changedFields, in addition to the built-in exclusions (likes, comments count and seller statistics). Use this if a field in your setup changes on its own without a real listing change. The fields stay in the output; they just stop counting as a change. Changing this list does not re-bill your tracked items.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}