{
  "openapi": "3.0.1",
  "info": {
    "title": "Joybuy Scraper - Prices & Reviews, 6 EU Marketplaces",
    "description": "Extract Joybuy product prices, specifications, images, delivery and customer reviews from all six European marketplaces. 68 fields per product, prices in GBP and EUR. Search by keyword, browse a whole category, or paste search and store page links. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "lJXgRH8q792argpdR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/clearpath~joybuy-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-clearpath-joybuy-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/clearpath~joybuy-scraper/runs": {
      "post": {
        "operationId": "runs-sync-clearpath-joybuy-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/clearpath~joybuy-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-clearpath-joybuy-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",
        "properties": {
          "keyword": {
            "title": "🔎 Search keyword",
            "type": "string",
            "description": "Enter what you would type into the Joybuy search box.<br><br>Joybuy trims its own answer for a keyword, so a single keyword returns roughly <b>1,000 products</b> however many exist. To collect a whole shelf, use <b>Category</b> below instead."
          },
          "category": {
            "title": "📂 Category",
            "type": "string",
            "description": "Browse a whole category instead of searching.<br><br>Category browsing is <b>not trimmed</b>, so it is the way to collect more than about 1,000 products. Pick a suggestion or type any category name, including deeper ones such as <code>Laptops</code> or <code>Coffee Machines</code>. Category names are matched to whatever the chosen marketplace calls that shelf."
          },
          "startUrls": {
            "title": "🔗 Search or store page links",
            "type": "array",
            "description": "Paste Joybuy <b>search</b> pages (<code>/s?k=...</code>) or <b>store</b> pages (<code>/store/...</code>). Filters already in the link are applied.<br><br>The link's website decides the marketplace and overrides <b>Marketplace</b> below, so a <code>joybuy.de</code> link is scraped as Germany.<br><br>Up to <b>100</b> links per run.<br><br>Individual product page links are handled by the <b>Joybuy Product Detail Scraper</b>.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "🔢 Max products",
            "minimum": 0,
            "type": "integer",
            "description": "How many products to collect. The run stops earlier when the search itself runs out of products.<br><br>Set <code>0</code> to collect everything available."
          },
          "country": {
            "title": "🌍 Marketplace",
            "enum": [
              "GB",
              "DE",
              "FR",
              "NL",
              "BE",
              "LU"
            ],
            "type": "string",
            "description": "Which Joybuy marketplace to scrape. It decides the products, the prices and the currency.<br><br>Belgium and Luxembourg are served the Dutch catalogue, with their own delivery address.",
            "default": "GB"
          },
          "language": {
            "title": "Language",
            "enum": [
              "en_GB",
              "de_DE",
              "fr_FR",
              "nl_NL"
            ],
            "type": "string",
            "description": "Optional. Leave empty for the marketplace's own language. English works on every marketplace, so you can read German prices in English."
          },
          "enrichWithDetails": {
            "title": "📦 Product details",
            "type": "boolean",
            "description": "Adds the full product page to every row: specifications, all images, category path, delivery promise, shipping cost, guarantees, variants, seller, bestseller rank, weight and dimensions.<br><br>Turn it off for faster, cheaper rows with just the search listing fields.",
            "default": true
          },
          "fetchReviews": {
            "title": "⭐ Customer reviews",
            "type": "boolean",
            "description": "Attaches customer reviews to every product: text, rating, date, photos, helpful votes and whether the purchase was verified.<br><br>Reviews are billed per review, and a quarter of products have none while a few have thousands, so the cost of a run with reviews depends on the products it finds. <b>Reviews per product</b> is the dial.",
            "default": false
          },
          "maxReviewsPerItem": {
            "title": "⭐ Reviews per product",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "The cap per product when <b>Customer reviews</b> is on.<br><br>Half of all products have fewer than 13 reviews, so <code>10</code> is a cheap, representative default. <code>1000</code> collects everything Joybuy makes available, which is its own ceiling per product."
          },
          "sortResultsBy": {
            "title": "Sort results",
            "enum": [
              "relevance",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Joybuy can only order part of its catalogue by price, so a sorted search sees <b>far fewer products</b> - between 18% and 42% of them in our measurements. Relevance is the only setting that sees everything, and the run tells you how much sorting cost you.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price to include, in the marketplace's own currency. Leave empty for no limit."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price to include, in the marketplace's own currency. Leave empty for no limit."
          },
          "brand": {
            "title": "Brand",
            "type": "string",
            "description": "Only products from this brand, for example <code>Acer</code>. The brand is matched against the brands Joybuy offers for your search, so a brand it does not stock for that search returns nothing rather than something else."
          },
          "attributeFilters": {
            "title": "Product options",
            "type": "array",
            "description": "Filter on the options Joybuy offers for your search, for example <code>Intel Core i7</code> or <code>16 GB</code>.<br><br>Options of the same kind widen the results, options of different kinds narrow them, exactly like the filters on the website. Anything unavailable for your search is reported in the run log.",
            "items": {
              "type": "string"
            }
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Skip products Joybuy cannot ship right now.",
            "default": false
          },
          "bestsellersOnly": {
            "title": "Bestsellers only",
            "type": "boolean",
            "description": "Keep only products carrying Joybuy's bestseller badge. This narrows the products you receive, not the products the run reads through, so pair it with a higher <b>Max products</b>.",
            "default": false
          },
          "lightningOffersOnly": {
            "title": "Lightning offers only",
            "type": "boolean",
            "description": "Keep only products in a lightning offer. Narrows the products you receive rather than the search.",
            "default": false
          },
          "fastDeliveryOnly": {
            "title": "Fast delivery only",
            "type": "boolean",
            "description": "Keep only products with a fast delivery promise. Narrows the products you receive rather than the search.",
            "default": false
          },
          "minRating": {
            "title": "Minimum rating",
            "enum": [
              "0",
              "3",
              "4"
            ],
            "type": "string",
            "description": "Keep only products rated at least this well. Products with no rating yet are dropped.",
            "default": "0"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}