{
  "openapi": "3.0.1",
  "info": {
    "title": "Rakuten - Products, Variants & Reviews",
    "description": "Scrape Rakuten Ichiba (rakuten.co.jp): name, JPY price, reference price and discount, Rakuten points, shipping, stock, shop, genre, tags, images, size/colour variants with per-variant price, specs, and customer reviews with star breakdown and shop replies. Search or paste URLs; incremental mode.",
    "version": "1.0",
    "x-build-id": "0AdQtYeZJrk5th80J"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~rakuten-ichiba-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-rakuten-ichiba-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~rakuten-ichiba-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-rakuten-ichiba-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~rakuten-ichiba-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-rakuten-ichiba-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"
            ],
            "type": "string",
            "description": "How to find products. 'search' builds Rakuten Ichiba searches from keywords, genres and shops. 'url' takes Rakuten URLs you already have: search results, category pages, whole-shop pages, product pages and review pages.",
            "default": "search"
          },
          "queries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search on Rakuten Ichiba (Search mode only). Japanese and English both work. Each keyword runs its own paginated search and the results are combined.",
            "items": {
              "type": "string"
            }
          },
          "genreIds": {
            "title": "Genre (category) IDs",
            "type": "array",
            "description": "Rakuten genre IDs, for example 100316 for Water & Soft Drinks. With keywords, each keyword is searched inside each genre. Without keywords, each genre is browsed on its own. Find an ID in any rakuten.co.jp/category/<id>/ URL.",
            "items": {
              "type": "string"
            }
          },
          "tagIds": {
            "title": "Tag IDs (brand and spec filters)",
            "type": "array",
            "description": "Rakuten tag IDs, used for brand and specification facets (for example 1011693 for UCC). Several tags in the same group are combined as 'any of'. Note: Rakuten's own search URLs cannot apply a genre and tags at the same time, so if you also set a genre the tags are ignored.",
            "items": {
              "type": "string"
            }
          },
          "shopUrlCodes": {
            "title": "Shop codes (whole catalogue)",
            "type": "array",
            "description": "Shop codes, for example 'sawaicoffee-tea' from item.rakuten.co.jp/sawaicoffee-tea/... Each shop's full catalogue is walked page by page. Works with or without keywords.",
            "items": {
              "type": "string"
            }
          },
          "shopId": {
            "title": "Restrict to one shop (numeric shop ID)",
            "minimum": 1,
            "type": "integer",
            "description": "Numeric Rakuten shop ID. When set, keyword and genre searches only return products from that shop."
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "standard",
              "price-asc",
              "price-desc",
              "total-price-asc",
              "total-price-desc",
              "newest",
              "review-count",
              "review-rating"
            ],
            "type": "string",
            "description": "Result ordering applied by Rakuten itself (Search mode only).",
            "default": "standard"
          },
          "minPrice": {
            "title": "Min price (JPY)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price in yen (Search mode only). Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Max price (JPY)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price in yen (Search mode only). Leave empty for no maximum."
          },
          "minRating": {
            "title": "Minimum review rating",
            "enum": [
              "",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Only return products rated at least this highly (Search mode only). Rakuten supports these three steps.",
            "default": ""
          },
          "condition": {
            "title": "Item condition",
            "enum": [
              "any",
              "new",
              "used"
            ],
            "type": "string",
            "description": "Filter by new or used (Search mode only).",
            "default": "any"
          },
          "urls": {
            "title": "Rakuten URLs",
            "type": "array",
            "description": "Rakuten Ichiba URLs (URL mode only). Search results (search.rakuten.co.jp/search/mall/...), category pages (www.rakuten.co.jp/category/<id>/), whole-shop pages (search.rakuten.co.jp/search/inshop/<shop>/), product pages (item.rakuten.co.jp/<shop>/<item>/) and review pages (review.rakuten.co.jp/item/1/...) are all accepted. Listing URLs are walked forward page by page; the filters above are ignored because the URL already carries its own.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max products (total)",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on products returned across every keyword, genre, shop and URL combined. Set 0 for unlimited, bounded only by Max pages and by how many results Rakuten makes reachable for a query.",
            "default": 50
          },
          "maxPages": {
            "title": "Max result pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional bound on result pages per keyword, genre, shop or URL. Rakuten returns about 45 products per page. Leave empty or 0 for no page limit."
          },
          "fetchDetails": {
            "title": "Fetch product details",
            "type": "boolean",
            "description": "Adds the full description, the specification table, all images, every size and colour variant with its own price and points, the shipping carriers, and the reference ('was') price plus discount percent, which Rakuten publishes only on the product page. Charges the per-product enrichment surcharge.",
            "default": false
          },
          "fetchReviews": {
            "title": "Fetch reviews",
            "type": "boolean",
            "description": "Adds individual reviews (rating, title, text, reviewer nickname, date, helpful count, purchased variant, shop reply and review photos), the 1-to-5 star rating breakdown, and Rakuten's own AI review summary. Charges the same per-product enrichment surcharge, once per product, whether or not you also turn on Fetch product details.",
            "default": false
          },
          "maxReviewsPerItem": {
            "title": "Max reviews per product",
            "minimum": 0,
            "type": "integer",
            "description": "How many reviews to return per product when Fetch reviews is on. Rakuten publishes 30 per review page, so 30 is the cheapest setting. Set 0 to return every review a product has, which can be thousands of reviews.",
            "default": 30
          },
          "resumeFromRunId": {
            "title": "Resume from run ID",
            "type": "string",
            "description": "Optional: paste a previous run ID (or dataset ID) from this actor. Products already collected there are skipped, so this run only returns new ones. Leave empty for a normal run. For recurring 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 or URLs. The first run returns every matching product as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED products, with changedFields naming exactly what moved (price, stock, points, discount). Turn on Emit unchanged or Emit expired only when you also want those rows returned, and billed. State is kept separately per search 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 and filter settings, so different searches never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products 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 want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products 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 with no unreadable pages, never when Max items or Max pages capped it and never when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "The Apify Proxy default group is enough, and it works on every plan. Switch to a different proxy group only if a run reports pages it could not read.",
            "default": {
              "useApifyProxy": true
            }
          },
          "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 product (title plus 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 product pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max products to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on products 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}