{
  "openapi": "3.0.1",
  "info": {
    "title": "Meta Ad Library Checker: Is a Brand Running Facebook Ads?",
    "description": "Check if a company is running Facebook or Instagram ads: give it a list of Facebook Pages, Page IDs or domains and get one row per brand from Meta's official Ad Library API. A Clay enrichment column. Full coverage for EU/UK-delivered ads. Bring your Meta token. Never charged for a miss.",
    "version": "1.0",
    "x-build-id": "2pNUhRjj2AdL1d3o1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~meta-ads-presence-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-meta-ads-presence-lookup",
        "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/accountable_eel~meta-ads-presence-lookup/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-meta-ads-presence-lookup",
        "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/accountable_eel~meta-ads-presence-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-meta-ads-presence-lookup",
        "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": [
          "pageQueries"
        ],
        "properties": {
          "pageQueries": {
            "title": "Facebook Pages or domains to check for Meta ads",
            "type": "array",
            "description": "One per line. A numeric Meta Ad Library Page ID, a Facebook Page name, or a company domain (domains are matched as best-effort text search, not a guaranteed domain-to-page mapping). Accepted formats: 156800974367001 (numeric Page ID — most reliable), Nike (Page name), nike.com (domain — best-effort). You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "metaAccessToken": {
            "title": "Your Meta Ad Library API access token",
            "type": "string",
            "description": "Apply at developers.facebook.com/docs/graph-api/reference/ads_archive and paste your own access token here — this actor never ships or shares a token. Never logged or stored anywhere but your own run input. Without a token every row is returned as a NEEDS_TOKEN miss so you can see the shape; nothing is fetched from Meta."
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep rows containing",
            "type": "array",
            "description": "Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip rows containing",
            "type": "array",
            "description": "Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "returnAds": {
            "title": "Also return one row per ad",
            "type": "boolean",
            "description": "Adds one row per active ad next to each brand's summary row: Ad Library ID and link, running-since date, platforms, body text, headline, link caption and description, languages, and EU reach where Meta shows it. Each ad row is billed as an ad (see Pricing). Every 50 ads is one more call against Meta's ~200 calls/hour token limit.",
            "default": false
          },
          "maxAdsPerBrand": {
            "title": "Max ads per brand",
            "type": "integer",
            "description": "How many active ads to read per brand when ad rows or monitoring are on, 1 to 500. Caps the ad rows (and the ad charges) per brand. For stopped-ad alerts, set it above the brand's ad count so the whole list is read.",
            "default": 50
          },
          "deltaMode": {
            "title": "Monitor: report new and stopped ads since the last run",
            "type": "boolean",
            "description": "Turns the list into a competitor watchlist. Each brand row gains new ads and stopped ads (IDs active last run, not active now) since the previous run. The first run has nothing to compare against, so it just remembers each brand. Schedule the same input daily or weekly.",
            "default": false
          },
          "alertOnNewAds": {
            "title": "New ads alert: return only ads not seen before",
            "type": "boolean",
            "description": "Returns ad rows only for ads this watchlist has never seen, so each scheduled run delivers just the competitor's new ads. Turns on monitoring and ad rows by itself. The first run returns every ad it reads as the starting list.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty to use one shared memory for this actor on your account. Name it to keep separate memories for separate schedules (\"competitors-eu\", \"clients\"). Naming a watchlist with the boxes above off still fills the since-last-run columns.",
            "default": ""
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "pageId",
                "rowType",
                "pageName",
                "activeAdCount",
                "earliestActiveSince",
                "platforms",
                "sampleAdLibraryUrls",
                "euReach",
                "adListComplete",
                "newAdCount",
                "stoppedAdCount",
                "stoppedAds",
                "adArchiveId",
                "adLibraryUrl",
                "adStartedAt",
                "adStopsAt",
                "adCreatedAt",
                "adPlatforms",
                "adBodyText",
                "adTitle",
                "adLinkCaption",
                "adLinkDescription",
                "adVersionCount",
                "adLanguages",
                "adEuReach",
                "isNewAd"
              ],
              "enumTitles": [
                "Page ID",
                "Row type (brand = summary row, ad = one ad)",
                "Page name",
                "Active ads found (this lookup: up to 50, or up to Max ads per brand with ad rows or monitoring on)",
                "Earliest start date among ads found",
                "Platforms (Facebook / Instagram / Audience Network / Messenger)",
                "Sample Ad Library links (public, no token)",
                "EU total reach (EU-targeted political/issue ads only)",
                "Whole active-ad list read (false = cut off at the cap)",
                "New ads since the last run (monitoring)",
                "Ads stopped since the last run (monitoring)",
                "Stopped ad IDs since the last run (monitoring)",
                "Ad Library ID (ad rows)",
                "Ad Library link (ad rows)",
                "Ad running since (ad rows)",
                "Ad scheduled end, if set (ad rows)",
                "Ad created (ad rows)",
                "Ad platforms (ad rows)",
                "Ad body text (ad rows)",
                "Ad link title / headline (ad rows)",
                "Ad link caption, usually the display domain (ad rows)",
                "Ad link description (ad rows)",
                "Creative versions in this ad (ad rows)",
                "Ad languages (ad rows)",
                "Ad EU total reach, where Meta shows it (ad rows)",
                "New since the last run (ad rows, monitoring)"
              ]
            },
            "default": [
              "pageId",
              "rowType",
              "pageName",
              "activeAdCount",
              "earliestActiveSince",
              "platforms",
              "sampleAdLibraryUrls",
              "euReach",
              "adListComplete",
              "newAdCount",
              "stoppedAdCount",
              "stoppedAds",
              "adArchiveId",
              "adLibraryUrl",
              "adStartedAt",
              "adStopsAt",
              "adCreatedAt",
              "adPlatforms",
              "adBodyText",
              "adTitle",
              "adLinkCaption",
              "adLinkDescription",
              "adVersionCount",
              "adLanguages",
              "adEuReach",
              "isNewAd"
            ]
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 1
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}