{
  "openapi": "3.0.1",
  "info": {
    "title": "Ad Activity Tracker — Companies Running Ads & Ad Volume",
    "description": "Which companies are running ads right now, how many active ads each one has, on which platforms, since when — and whether that is ramping, slowing or just stopped. One advertiser row per company with creatives, landing pages, momentum vs your last run and who to sell to. Dataset-only, MCP-ready.",
    "version": "0.1",
    "x-build-id": "h7YKDYBe0b9Hc5a0w"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/inovaflow~ad-activity-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-inovaflow-ad-activity-tracker",
        "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/inovaflow~ad-activity-tracker/runs": {
      "post": {
        "operationId": "runs-sync-inovaflow-ad-activity-tracker",
        "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/inovaflow~ad-activity-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-inovaflow-ad-activity-tracker",
        "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": {
          "companies": {
            "title": "Companies to track",
            "maxItems": 500,
            "type": "array",
            "description": "One per line: a domain (`gong.io`) or a brand name (`Gong`). A domain is matched most reliably, because ads that point at the company's own site prove which advertiser it is. You can also paste a Meta page id as `page:1234567890`.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (discovery mode)",
            "maxItems": 20,
            "type": "array",
            "description": "Used only when the company list is empty: find the companies running ads that mention these words, e.g. `project management software`, `CRM for startups`. Each keyword is searched in each country below.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "maxItems": 10,
            "type": "array",
            "description": "Two-letter country codes, one per line — ad libraries report per country, so `US` and `DE` can give very different counts for the same advertiser. The first country is used for the company watchlist.",
            "default": [
              "US"
            ],
            "items": {
              "type": "string"
            }
          },
          "useAdLibrary": {
            "title": "Public ad library (active ad counts & creatives)",
            "type": "boolean",
            "description": "Reads the public ad library for the exact number of ads each advertiser is running right now, plus the creatives, the landing pages, the surfaces and the dates. This is the source of the volume number — keep it on.",
            "default": true
          },
          "useSiteScan": {
            "title": "Website ad-tag scan (which platforms they buy on)",
            "type": "boolean",
            "description": "Reads the company's own homepage and lists the ad platforms it is tagged for — Google Ads, LinkedIn, TikTok, Reddit, Microsoft, Pinterest and more. Ad libraries cannot count those, but a live conversion tag proves the company is paying for them. Free, one request per company.",
            "default": true
          },
          "includeInactiveAds": {
            "title": "Include ads that have stopped",
            "type": "boolean",
            "description": "By default only ads that are live right now are counted — that is what makes the number a signal. Turn this on to include stopped ads, e.g. for a historical teardown of a competitor's campaigns.",
            "default": false
          },
          "onlyAdvertisers": {
            "title": "Only companies that are actually running ads",
            "type": "boolean",
            "description": "Drop companies where no live ads and no ad tags were found. Off by default, because \"they are not advertising\" is often the answer you asked for.",
            "default": false
          },
          "minActiveAds": {
            "title": "Minimum active ads",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Only report companies running at least this many ads right now. Leave at 0 to report everyone checked.",
            "default": 0
          },
          "maxCompanies": {
            "title": "Maximum companies to report",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Cap on delivered rows (highest signal score first). Also caps what you pay.",
            "default": 100
          },
          "maxCreatives": {
            "title": "Sample creatives per company",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "How many example ads to keep on each row (newest first, one per landing page). Set to 0 for counts only.",
            "default": 5
          },
          "watchId": {
            "title": "Watch ID (for momentum across runs)",
            "type": "string",
            "description": "Optional name for this watch, e.g. `competitors-us`. Runs sharing a Watch ID share the ad-count history, so an agent can poll one watch on a schedule. Leave empty to derive it from the companies, keywords and countries."
          },
          "maxAdvertisersPerKeyword": {
            "title": "Advertisers per keyword (discovery mode)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many advertisers to keep from each keyword search before the exact ad counts are read.",
            "default": 15
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Concurrent ad-library reads. Keep it low — the library rate-limits an IP that reads too fast, and each session has to pass a check first.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy for the ad library",
            "type": "object",
            "description": "The ad library rate-limits datacenter ranges, so Apify residential proxy (included in Apify Proxy) is the default and is strongly recommended. The website scan always goes direct.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}