{
  "openapi": "3.0.1",
  "info": {
    "title": "Competitor Watch | Competitor Monitoring & Ads Tracker",
    "description": "Extract only what is new about each competitor since your last run: new Meta and TikTok ads, changed web pages, new and re-priced Shopify products and new jobs, in one plain-language report per competitor. A competitor ads tracker and site monitor in one. $30.00 per 1,000 competitor checks.",
    "version": "0.1",
    "x-build-id": "BykPa4QYExrUMxklK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/aurelix~competitor-watch/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-aurelix-competitor-watch",
        "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/aurelix~competitor-watch/runs": {
      "post": {
        "operationId": "runs-sync-aurelix-competitor-watch",
        "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/aurelix~competitor-watch/run-sync": {
      "post": {
        "operationId": "run-sync-aurelix-competitor-watch",
        "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": [
          "competitors"
        ],
        "properties": {
          "competitors": {
            "title": "Competitors (domains)",
            "type": "array",
            "description": "Competitors to watch, up to 25 per run. Give each one as its website domain, e.g. 'allbirds.com': the domain is what the Actor uses to find the brand's Facebook page and TikTok advertiser (only accounts whose ads link to that domain), its Shopify product feed, its pages and its job board. A plain brand name such as 'Allbirds' gets no ads and no site checks unless you give it as an object with IDs; with 'jobs' on, its job board is still looked up by name. A competitor is charged once per run when at least one source was searched, whether or not anything new was found (a search that finds no matching account still counts); a competitor where no source could be searched is free. Objects override what is detected, e.g. {\"domain\": \"gymshark.com\", \"name\": \"Gymshark\", \"facebookPageId\": \"129669023798560\", \"tiktokAdvertiser\": \"7210820606949064706\", \"pages\": [\"/pages/about-us\"], \"shopifyStore\": \"gymshark.com\", \"careersUrl\": \"https://careers.gymshark.com\"}. 'tiktokAdvertiser' is the advertiser ID from the TikTok Ad Library (adv_biz_ids) or a name to search for.",
            "default": []
          },
          "sources": {
            "title": "What to watch",
            "type": "array",
            "description": "Sources checked for every competitor: 'meta_ads' (new Facebook and Instagram ads in the Meta Ad Library), 'tiktok_ads' (new ads in the TikTok Ad Library; EU/EEA, UK, Switzerland and Turkey only), 'website' (text changes on the Pages to watch), 'shopify' (new and re-priced products, when the site is a Shopify store) and 'jobs' (new postings on the company's public job board). Example: [\"meta_ads\", \"website\", \"shopify\"].",
            "items": {
              "type": "string",
              "enum": [
                "meta_ads",
                "tiktok_ads",
                "website",
                "shopify",
                "jobs"
              ],
              "enumTitles": [
                "Meta (Facebook and Instagram) ads",
                "TikTok ads",
                "Website changes",
                "Shopify products and prices",
                "Job postings"
              ]
            },
            "default": [
              "meta_ads",
              "website",
              "shopify"
            ]
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Name of this watchlist's memory, e.g. 'my-competitors' or 'client-acme'. Every run with the same key reports only what is new since the previous run with that key; use a different key per schedule or client. Letters, digits, '-', '_' and '.' (other characters become '-').",
            "default": "default"
          },
          "watchPaths": {
            "title": "Pages to watch (paths on each competitor's site)",
            "type": "array",
            "description": "Paths checked on every competitor's domain for text changes, e.g. ['/', '/pricing', '/collections/new-arrivals']. Up to 10 pages per competitor in total, including any 'pages' given in a competitor object. Pages that cannot be read are reported, not charged.",
            "default": [
              "/"
            ],
            "items": {
              "type": "string"
            }
          },
          "metaCountry": {
            "title": "Meta ads country",
            "type": "string",
            "description": "Two-letter ISO code of the country whose active Meta ads are checked, e.g. 'US' or 'GB', or 'ALL' for every country.",
            "default": "ALL"
          },
          "tiktokCountry": {
            "title": "TikTok ads country",
            "type": "string",
            "description": "Country searched in the TikTok Ad Library, which covers only the EU/EEA, the UK, Switzerland and Turkey, e.g. 'GB', 'FR' or 'DE'.",
            "default": "GB"
          },
          "maxAdsPerCompetitor": {
            "title": "Max ads read per competitor and ad library",
            "minimum": 10,
            "maximum": 30,
            "type": "integer",
            "description": "How many of each competitor's most recent ads are read per run and ad library, e.g. 30 (also the maximum: one page of Meta results). Ads already seen are free.",
            "default": 30
          },
          "maxProductsPerCompetitor": {
            "title": "Max Shopify products per competitor",
            "minimum": 250,
            "maximum": 5000,
            "type": "integer",
            "description": "Upper limit of catalogue products compared per store and run, e.g. 5000 (also the maximum, which keeps every run's price above its cost). Larger stores are compared on their first 5,000 products in Shopify's feed order.",
            "default": 5000
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL (optional)",
            "type": "string",
            "description": "Slack incoming-webhook URL, e.g. https://hooks.slack.com/services/T000/B000/XXXX. After a run that found something new, the digest (one line per competitor) is posted there. Leave empty for none."
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "Any http(s) URL, e.g. a Zapier, Make or n8n webhook that emails or forwards the digest. After a run that found something new it receives JSON with 'text' (the digest), 'stateKey', 'checkedAt', 'newItems' and 'competitors'. Leave empty for none."
          },
          "proxyConfiguration": {
            "title": "Proxy for the Meta Ad Library",
            "type": "object",
            "description": "Proxy used only for the Meta Ad Library. The default starts on Apify datacenter proxy and switches to residential proxy (included in the price) once Meta rate-limits it.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}