Competitor Ad Change Monitor (Meta Ad Library)
Pricing
$200.00 / 1,000 advertiser monitoreds
Go to Apify Store
Competitor Ad Change Monitor (Meta Ad Library)
Pricing
$200.00 / 1,000 advertiser monitoreds
You can access the Competitor Ad Change Monitor (Meta Ad Library) programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in Integrations settings in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.0", "x-build-id": "8GsH6GUAlIfVlOAPm" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/nexgendata~competitor-ad-change-monitor/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-nexgendata-competitor-ad-change-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/nexgendata~competitor-ad-change-monitor/runs": { "post": { "operationId": "runs-sync-nexgendata-competitor-ad-change-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/nexgendata~competitor-ad-change-monitor/run-sync": { "post": { "operationId": "run-sync-nexgendata-competitor-ad-change-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", "required": [ "advertisers" ], "properties": { "advertisers": { "title": "Advertisers to track", "type": "array", "description": "Competitor brand names, keywords, Facebook Page URLs, or numeric Page IDs to monitor in the Meta Ad Library. Examples: 'Nike', 'Allbirds', 'https://www.facebook.com/Nike', '15087023444'. Each run fetches each advertiser's current ads and diffs them against the last run.", "items": { "type": "string" } }, "region": { "title": "Region (country)", "type": "string", "description": "2-letter ISO country code for the Ad Library search (US, GB, DE, FR, CA, AU, ...). Ad Library results are country-specific, so keep this stable across runs for the same monitor.", "default": "US" }, "maxAdsPerAdvertiser": { "title": "Max ads per advertiser (hard cap)", "minimum": 1, "maximum": 200, "type": "integer", "description": "Hard cap on how many current ads to pull per advertiser each run. Keeps compute predictable and the diff fast. 20-50 is plenty for change monitoring.", "default": 30 }, "activeStatus": { "title": "Ad status to monitor", "enum": [ "active", "all" ], "type": "string", "description": "'Active' tracks currently-running ads (recommended for launch/kill alerts). 'All' also includes stopped ads.", "default": "active" }, "monitorId": { "title": "Monitor ID / state key (optional)", "type": "string", "description": "Optional stable identifier for this monitor's saved snapshot. Leave blank to auto-derive a key from the advertiser set + region. Set it explicitly if you want several scheduled monitors that each keep their own history." }, "perAdvertiserTimeoutSecs": { "title": "Per-advertiser fetch timeout (seconds)", "minimum": 30, "maximum": 280, "type": "integer", "description": "How long to wait for the underlying Meta Ad Library actor run per advertiser before moving on. 120-200 is typical.", "default": 180 }, "notionConnector": { "title": "Deliver changes to Notion (optional)", "type": "string", "description": "Optional. Connect your Notion workspace and the change report is also written as a Notion page in the same run — the Actor never sees your Notion credentials. Authorize a Notion MCP connector in Apify Console -> Settings -> API & Integrations, then select it here." }, "notionParentId": { "title": "Notion parent page ID (optional)", "type": "string", "description": "Optional. The Notion page ID to create the change-report page under. If blank, Notion creates a private page at workspace root." }, "supabaseConnector": { "title": "Deliver to Supabase (optional)", "type": "string", "description": "Optional. Connect your own Supabase project and the results are also inserted into a table in the same run — the Actor never sees your Supabase credentials. Authorize a write-scoped, project-scoped Supabase MCP connector in Apify Console (Settings -> Integrations), then select it here." }, "supabaseTable": { "title": "Supabase table name (optional)", "type": "string", "description": "Target table in the public schema (created if missing, with id, a jsonb data column, and a scraped_at timestamp). Default: nexgendata_leads.", "default": "nexgendata_leads" }, "supabaseProjectId": { "title": "Supabase project ID (optional)", "type": "string", "description": "Your Supabase project reference (e.g. abcdefghijklmnop). Required unless your connector URL is already project-scoped. Find it in your project URL: supabase.com/dashboard/project/THIS_PART." }, "deliveryDedup": { "title": "Deduplicate deliveries across runs", "type": "boolean", "description": "When on (default), records already delivered in a previous run are not delivered again to the same destination — so scheduled runs only push new items. Turn off to deliver every record on every run.", "default": true }, "slackConnector": { "title": "Send alerts to Slack (optional)", "type": "string", "description": "Optional. Connect your Slack workspace and get a message for each new change (first 5) plus a summary, every run. Authorize a Slack MCP connector in Apify Console (Settings -> Integrations) using your own Slack OAuth app, then select it here. The Actor never sees your Slack token." }, "slackChannel": { "title": "Slack channel", "type": "string", "description": "Channel to post to, e.g. #competitor-alerts (with or without the #). Required if a Slack connector is selected." } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Competitor Ad Change Monitor (Meta Ad Library) from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: