{
  "openapi": "3.0.1",
  "info": {
    "title": "Product Price & Stock Monitor: any shop's schema.org data",
    "description": "Get price, currency, stock, GTIN (UPC/EAN), SKU, MPN, brand, name and image from any shop's product pages, read from their schema.org Product data. Paste product URLs or whole stores (Shopify, WooCommerce and more, via sitemaps). Monitor mode returns only changed prices and stock.",
    "version": "1.1",
    "x-build-id": "THC2dGRGH8WTqJpuf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/humble-echidna~product-offers/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-humble-echidna-product-offers",
        "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/humble-echidna~product-offers/runs": {
      "post": {
        "operationId": "runs-sync-humble-echidna-product-offers",
        "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/humble-echidna~product-offers/run-sync": {
      "post": {
        "operationId": "run-sync-humble-echidna-product-offers",
        "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": {
          "productUrls": {
            "title": "Product page URLs",
            "type": "array",
            "description": "Product pages to read, one per line, e.g. https://store.example.com/products/blue-mug, from any shop that publishes schema.org Product data (most Shopify, WooCommerce, Magento and BigCommerce shops do). Each page returns one product with its offers. Up to 10,000 URLs. Ignored when `stores` or `datasetId` is set.",
            "default": [
              "https://store.wikimedia.org/products/wikipedia-pens",
              "https://store.wikimedia.org/products/wikimedia-project-stickers-pack-of-14",
              "https://store.wikimedia.org/products/black-wikipedia-globe-t-shirt-with-wikipedia-written-in-multiple-languages"
            ],
            "items": {
              "type": "string"
            }
          },
          "stores": {
            "title": "Or: whole stores (from their product sitemaps)",
            "type": "array",
            "description": "Shops to read in full, one per line: a home page (store.example.com) or a sitemap URL. Product pages are found in the shop's product sitemaps (e.g. Shopify's sitemap_products_1.xml), up to Max pages per store each. Up to 50 stores. When set, `productUrls` is ignored. Ignored when `datasetId` is set.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Or: product URLs from a dataset (chain after another actor)",
            "type": "string",
            "description": "Default empty. One of your Apify datasets, picked here or given by id, e.g. an e-commerce scraper's or Sitemap URL Extractor's results; to chain this actor after another in an integration, `{{resource.defaultDatasetId}}`. Each item's product page URL is read like a line of `productUrls`; `productUrls` and `stores` are ignored. Duplicates are read once. Each row carries sourceTitle and sourceIndex from its item. Reads at most 20,000 items and 10,000 URLs, read-only."
          },
          "datasetUrlField": {
            "title": "Field with the product URL (dataset)",
            "type": "string",
            "description": "Only with `datasetId`: the item field that holds the product page URL, e.g. `url`, or a dotted path such as `product.url`. Leave empty (the default) to find it automatically: the first of productUrl, url, link and loadedUrl that has a web address in the first 100 items, then the same names one level down (product.url)."
          },
          "urlPatterns": {
            "title": "URL patterns (stores)",
            "type": "array",
            "description": "Only with `stores`: read only product pages whose URL matches one of these, e.g. `*/products/*` or `/collections/mugs/`. `*` matches anything and the pattern must then match the whole URL; without `*` it matches anywhere in the URL. Case-insensitive. Leave empty (the default) for every product page.",
            "items": {
              "type": "string"
            }
          },
          "maxPagesPerStore": {
            "title": "Max pages per store",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Only with `stores`: the most product pages read per store, in the order its sitemaps list them, from 1 to 10,000. Default 100. Pages that give no product (not a product page, blocked) count too but aren't charged.",
            "default": 100
          },
          "onlyChangedProducts": {
            "title": "Only changed prices and stock since the last run",
            "type": "boolean",
            "description": "For scheduled monitoring. Each run compares every product with the last run of this task and returns only new products and those whose price, currency or availability changed (or a variant's), with what changed and the previous price. The first run returns every product and is the baseline. Unchanged products aren't returned and cost less. Changing the URL patterns starts a new baseline; a new `datasetId` doesn't, so a chained run compares with the last run too.",
            "default": false
          },
          "maxResults": {
            "title": "Max results per run",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many products in total (with Only changed products on: products checked, returned or not), e.g. 500. Minimum 1; leave empty (the default) for no limit. The run also stops cleanly at the maximum cost per run you set in the run options, whichever comes first."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}