{
  "openapi": "3.0.1",
  "info": {
    "title": "PriceRunner Competitor Price & Rating Monitor",
    "description": "Track what every merchant charges for a product. Search PriceRunner by keyword or monitor product IDs on a schedule, and get each seller's price, shipping, stock and delivery window, plus the min/max spread, rating, review count and full specs. UK, SE, DK and NO.",
    "version": "0.1",
    "x-build-id": "MpYZvMvfv7gAjVKci"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapyx~pricerunner-price-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapyx-pricerunner-price-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/scrapyx~pricerunner-price-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapyx-pricerunner-price-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/scrapyx~pricerunner-price-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapyx-pricerunner-price-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": {
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Product keywords to search, one per entry — e.g. 'iphone 15' or 'gaming laptop'. Use this to discover what competitors are selling. Each query can page to about 1,100 products; upstream caps the paging offset at 1,000 regardless of how many matches it reports.",
            "default": [
              "iphone 15"
            ],
            "items": {
              "type": "string"
            }
          },
          "productIds": {
            "title": "Product IDs to track",
            "type": "array",
            "description": "Numeric PriceRunner product IDs to monitor directly, taken from a product URL (the 10-digit number in /pl/27-3472630395/...). Use this for scheduled price tracking of products you already identified. Offers and ratings are always fetched for these, regardless of the 'Include offers' toggle.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country site",
            "enum": [
              "UK",
              "SE",
              "DK",
              "NO"
            ],
            "type": "string",
            "description": "Which PriceRunner market to query. Prices, merchants and stock all differ by market. Germany is not offered: pricerunner.de returns 404 and redirects to klarna.com with no product data.",
            "default": "UK"
          },
          "includeOffers": {
            "title": "Include offers, merchants and ratings",
            "type": "boolean",
            "description": "For each product found by search, also fetch every merchant offer (price, shipping, stock, delivery window), the merchant list, full specifications and the rating summary. This is the competitor-price comparison. Costs 2 extra requests per product, so it is off by default.",
            "default": false
          },
          "maxProductsPerQuery": {
            "title": "Max products per query",
            "minimum": 1,
            "maximum": 1100,
            "type": "integer",
            "description": "Stop after this many products per search query. Upstream's own hard ceiling is about 1,100 per query because it rejects a paging offset above 1,000 — split into narrower queries to go beyond that.",
            "default": 100
          },
          "sortBy": {
            "title": "Offer sort order",
            "enum": [
              "RECOMMENDED",
              "PRICE_ASC",
              "PRICE_DESC"
            ],
            "type": "string",
            "description": "How merchant offers are ordered within each product's offer list. Does not change which products a search returns.",
            "default": "RECOMMENDED"
          },
          "pageSize": {
            "title": "Products per request",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many products to request per paging call. Upstream accepts up to 100 exactly and answers 400 'size must be less than or equal to 100' above that. The first page always returns 20 regardless, because it comes from a different endpoint that also carries the facet data.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Max concurrent requests",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "Upper bound on requests in flight across all queries and detail fetches. Paging within one query is always sequential regardless, because each page depends on the previous offset.",
            "default": 4
          },
          "minRequestInterval": {
            "title": "Min seconds between requests",
            "type": "string",
            "description": "Minimum delay between the START of consecutive requests. This, not concurrency, is the honest speed control: once the rate cap binds, extra concurrency buys nothing.",
            "default": "0.25"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used for every request. Residential is the default and is pinned to the selected market's country. Datacenter exits are answered HTTP 403 by PriceRunner's API regardless of TLS fingerprint (measured: 4/4 attempts failed from datacenter, the same build succeeded from residential), and prices and merchant availability differ per market, so the country pin is a correctness setting too.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}