{
  "openapi": "3.0.1",
  "info": {
    "title": "noon Price & Seller Monitor (UAE, Egypt)",
    "description": "Track prices, stock and EVERY seller of noon.com products in the UAE and Egypt. Search by keyword, SKU or URL, see who undercuts whom, and in monitoring mode get (and pay for) only what changed since the last run.",
    "version": "0.1",
    "x-build-id": "hfCjA4u8O6su4ei6E"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ricardojcmateus~noon-price-seller-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ricardojcmateus-noon-price-seller-monitor",
        "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/ricardojcmateus~noon-price-seller-monitor/runs": {
      "post": {
        "operationId": "runs-sync-ricardojcmateus-noon-price-seller-monitor",
        "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/ricardojcmateus~noon-price-seller-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-ricardojcmateus-noon-price-seller-monitor",
        "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": {
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "noon storefronts to check. Each product is looked up in every selected country. Saudi Arabia is not supported yet (noon's Saudi storefront blocks automated access).",
            "items": {
              "type": "string",
              "enum": [
                "uae",
                "egypt"
              ],
              "enumTitles": [
                "United Arab Emirates",
                "Egypt"
              ]
            },
            "default": [
              "uae"
            ]
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search on noon, e.g. \"airpods\". Each results page gives 50-90 products.",
            "items": {
              "type": "string"
            }
          },
          "skus": {
            "title": "Product SKUs",
            "type": "array",
            "description": "noon SKUs to track, e.g. N70434494V (the code before /p/ in a product URL). Best for daily monitoring of a fixed list. Pasted product URLs are accepted too.",
            "items": {
              "type": "string"
            }
          },
          "productUrls": {
            "title": "Product URLs",
            "type": "array",
            "description": "Full noon product URLs, e.g. https://www.noon.com/uae-en/airpods-5/N70434494V/p/. The country and language are read from each URL.",
            "items": {
              "type": "string"
            }
          },
          "openProductPages": {
            "title": "Open product pages for search results",
            "type": "boolean",
            "description": "Off (default): prices and the featured seller come straight from the search results, 50-90 products per page — fast and cheap. On: every product page is opened to collect ALL sellers' offers (slower, charged as product results). SKUs and product URLs always open the product page.",
            "default": false
          },
          "includeOffers": {
            "title": "Include every seller's offer",
            "type": "boolean",
            "description": "For product pages, add the full list of sellers with their price, list price, stock signal, fulfilment and rating. Change detection uses it even when this is off.",
            "default": true
          },
          "maxResultsPerQuery": {
            "title": "Max products per keyword and country",
            "minimum": 1,
            "type": "integer",
            "description": "Stops paginating a search once this many products were queued.",
            "default": 100
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "ar"
            ],
            "type": "string",
            "description": "Language of product names.",
            "default": "en"
          },
          "monitorMode": {
            "title": "Monitoring mode",
            "type": "boolean",
            "description": "Remember results between runs and add previous price, price change, stock change and seller change to every result. Use with a schedule.",
            "default": false
          },
          "changesOnly": {
            "title": "Only output changes",
            "type": "boolean",
            "description": "Requires monitoring mode (ignored without it). Output (and pay for) only products that are new or whose price, stock or seller changed.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitoring state name",
            "type": "string",
            "description": "Name of the key-value store holding the last known values. Use a different name for each independent watch list.",
            "default": "noon-price-monitor-state"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel requests. Keep it low to stay polite and avoid blocks.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy servers used to reach noon. Residential (default) is recommended: in tests, noon blocked datacenter IPs on most requests and pages were lost, while residential completed every page.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "matchProxyCountry": {
            "title": "Use proxies from each storefront's country (experimental)",
            "type": "boolean",
            "description": "With Apify Proxy, fetch each storefront through IPs from its own country (UAE, Egypt), using the proxy group you selected above. Off by default: tests completed every page without it. Ignored if you pick a proxy country yourself or use your own proxies.",
            "default": false
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "noon throttles bursts of requests (HTTP 429). Keep this low.",
            "default": 30
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}