{
  "openapi": "3.0.1",
  "info": {
    "title": "Bic Camera Scraper - Prices, Points, Specs & Reviews",
    "description": "Scrape Bic Camera (biccamera.com) products: JPY price, list price and discount, Bic Point amount and rate, stock and delivery, spec table, image gallery, colour and capacity variants, plus review text with author, date, star rating and variant reviewed. Search by keyword, category or pasted links.",
    "version": "1.0",
    "x-build-id": "DWHbdvvqB7nJhMYOU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~biccamera-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-biccamera-com-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~biccamera-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-biccamera-com-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~biccamera-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-biccamera-com-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": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "'search' finds products by keyword and/or category with the site's own sort orders and brand facet. 'url' scrapes any product, search-result, category or review page URL you paste, walking pagination forward automatically.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Search keywords",
            "uniqueItems": true,
            "type": "array",
            "description": "One keyword per line, in Japanese or English, e.g. 'カメラ', 'iPhone', 'Panasonic 冷蔵庫'. Japanese is encoded the way the site's own search box encodes it, so Japanese keywords work exactly as typed. Leave empty and set only Category below to browse a whole category.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category (optional)",
            "type": "string",
            "description": "A Bic Camera category code as it appears in a category page URL, e.g. '001120' or '001/120/001' for cameras. Narrows a keyword search, or browses the whole category when Search keywords is left empty."
          },
          "brand": {
            "title": "Brand (optional)",
            "type": "string",
            "description": "The site's own brand facet value, written exactly as the facet link shows it, for example 'ソニー｜SONY' or 'キヤノン｜CANON'. The brand printed on each returned row may put the two halves the other way round; that is the site's own labelling, not a mismatch. Leave empty for all brands."
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "RELEVANCE",
              "PRICE_ASC",
              "PRICE_DESC",
              "TOP_RATED",
              "MOST_REVIEWED",
              "FASTEST_DELIVERY",
              "RELEASE_DATE",
              "NEWEST"
            ],
            "type": "string",
            "description": "One of the site's own eight result orders. Applies to Search mode; in URL mode the order already in the pasted URL is kept.",
            "default": "RELEVANCE"
          },
          "includeDiscontinued": {
            "title": "Include discontinued products",
            "type": "boolean",
            "description": "Off by default, matching the site: results normally exclude products that are no longer sold. Turn on to include them, using the site's own switch. Applies to Search mode.",
            "default": false
          },
          "groupVariations": {
            "title": "Group colour and capacity variations",
            "type": "boolean",
            "description": "Off by default. Turn on to let the site collapse colour/capacity siblings of the same model into a single result instead of listing each one. Applies to Search mode.",
            "default": false
          },
          "urls": {
            "title": "URLs to scrape",
            "uniqueItems": true,
            "type": "array",
            "description": "Paste one or more Bic Camera product pages (https://www.biccamera.com/bc/item/<id>/), search-result pages (https://www.biccamera.com/bc/category/?q=...), or category pages (https://www.biccamera.com/bc/category/001/120/001/). Pagination continues forward from any page number already in the URL. Search-mode keyword, category, brand and sort settings are ignored in this mode.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price (JPY)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return products at or above this price, in yen. The site has no price-range filter of its own, so this is applied to the products this run reads; it narrows the output, not the pages fetched. Products whose price could not be read are excluded while any price bound is set."
          },
          "maxPrice": {
            "title": "Maximum price (JPY)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return products at or below this price, in yen. Applied to the products this run reads, the same way as Minimum price above."
          },
          "inStockOnly": {
            "title": "In-stock products only",
            "type": "boolean",
            "description": "Off by default. Turn on to drop products the site shows as sold out, suspended or discontinued. Applied to the products this run reads.",
            "default": false
          },
          "fetchDetails": {
            "title": "Fetch full product detail",
            "type": "boolean",
            "description": "Adds the full specification table, description, model number, manufacturer suggested retail price and discount, release date, breadcrumb category path, the full image gallery and colour/capacity variants from each product page. Costs one extra page read per product and adds the enrichment surcharge below. Title, brand, price, points, rating and review count are already returned without this toggle.",
            "default": false
          },
          "fetchReviews": {
            "title": "Fetch reviews",
            "type": "boolean",
            "description": "Adds each product's reviews: overall rating, total review count, a 1-5 star breakdown of the reviews fetched, and per review the author, date, star rating, title, body, helpful votes, purchase channel and the colour/capacity the reviewer bought. Products with no reviews return an empty list. Costs extra page reads per product and adds the enrichment surcharge.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on reviews fetched per product when Fetch reviews is on. Reviews come 10 per page, so a lower cap means fewer page reads. 0 = every review the site lists.",
            "default": 20
          },
          "maxPages": {
            "title": "Max result pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many result pages per keyword, category or pasted URL. Leave empty for no page limit: the run then stops at Max products total, or at the end of the results."
          },
          "maxItems": {
            "title": "Max products total",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on total products returned across every keyword and URL. 0 = unlimited (still bounded by Max result pages per search).",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Bic Camera only answers connections it recognises as a real browser inside Japan, so the default routes this run through a Japan-based connection built for sites that are strict about this. Change it only if you have your own Japanese proxies to use: other connection settings are refused by the site.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ],
              "apifyProxyCountry": "JP"
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large catalogue pull without returning or charging for products already collected there. Use this after an interrupted 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. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED products. Turn on Emit unchanged or Emit expired only when you also want those products returned (and billed). State is kept separately for each search, category, URL set and detail/review setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run 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, filters and detail/review 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 for, 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, not when Max products capped it or when Resume was used. This returns, and bills for, extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "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 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 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}