# Ad Creative Change Tracker � Longevity & Delta Engine (Vigia) (`om_kh/vigia-ad-creative-delta`) Actor

Detects actionable creative changes in customer-authorized ad datasets.

- **URL**: https://apify.com/om\_kh/vigia-ad-creative-delta.md
- **Developed by:** [omar khandji](https://apify.com/om_kh) (community)
- **Categories:** Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 actionable ad changes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Ad Creative Change Tracker — Delta & Longevity Engine (Vigia)

**Turn your own ad exports into competitive intelligence — pay only for real creative changes.**

Feed Vigia the ad data you already have (from Meta Ads Library, Google Ads Transparency Center, your own exports, or any source you're authorized to use) and get back only what changed: new creatives, changed copy/landing pages, and ended ads — plus which creatives have been running long enough to be a proven winner.

### Why choose Vigia

- **Only changes, only charged for changes** — most ad trackers bill per ad extracted whether it changed or not. Vigia's ended ads are free, and unchanged ads generate nothing.
- **"Long-running creative" signal** — in monitor mode Vigia tracks how many runs each creative has survived and flags `long_running_creative`. A creative still live after 5+ checks is a proven winner, not a test — the same intelligence ad-spy tools charge extra for.
- **Ended-ad longevity** — when a creative finally rotates out, Vigia tells you how long it ran (`runs_seen`), so you know if your competitor's campaigns are fast-testing or committed.
- **Aggregate signal** — each run returns an `ad_signal`: new/changed/ended counts, how many long-running creatives are currently live, and the single longest-running creative that just ended.
- **Fair pricing** — hard `maxTotalChargeUsd` cap; never billed without a result.

### Honest positioning

This actor does **not** scrape Meta, Google, or TikTok itself — it's a delta and longevity engine over ad data **you already have** (your own export, or output from a licensed ad-library actor). If you need the raw ad fetch too, chain this actor after a dedicated ad-library scraper, the same pattern Vigia uses for its SERP rank tracker.

### Input

- `currentAds` / `previousAds` — your ad records (`ad_id`, `creative`, `landing_url`, ...).
- `monitorEnabled` / `monitorId` — persistent delta mode; first run is a free baseline.
- `maxTotalChargeUsd` — hard spend cap.

### Output

One row per change: `change_type` (new/changed/ended), `record_id`, `creative_fingerprint`, `runs_seen`, `long_running_creative`. Plus a `RUN_SUMMARY.json` with the aggregate `ad_signal`.

### FAQ

**Does this actor fetch ads from Facebook/Google itself?** No — see Honest positioning above.
**Why two separate change types (new vs changed)?** So you can tell a brand-new campaign from a copy tweak on an existing one.
**Is monitor mode required?** No, but without it you lose the longevity signal (`runs_seen`, `long_running_creative`), which needs history across runs.

# Actor input Schema

## `previousAds` (type: `array`):

Ads from the prior run; used to identify changes.
## `currentAds` (type: `array`):

Current authorized ad data to compare.
## `maxTotalChargeUsd` (type: `number`):

Hard maximum amount that this run may charge.
## `sources` (type: `array`):

Declare every upstream source before this run. Each item needs name, authorization, and estimated_cost_usd.
## `monitorEnabled` (type: `boolean`):

The first monitored run stores a free baseline. Later runs deliver and charge only new results.
## `monitorId` (type: `string`):

Pins the persistent baseline to a name of your choice, so separate targets never share state. Leave empty to derive it automatically.

## Actor input object example

```json
{
  "previousAds": [],
  "currentAds": [
    {
      "ad_id": "example-1",
      "creative": "Example offer",
      "landing_url": "https://example.com/offer"
    }
  ],
  "maxTotalChargeUsd": 1,
  "sources": [
    {
      "name": "Customer-authorized input",
      "authorization": "customer_authorized",
      "estimated_cost_usd": 0
    }
  ],
  "monitorEnabled": false,
  "monitorId": ""
}
````

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("om_kh/vigia-ad-creative-delta").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("om_kh/vigia-ad-creative-delta").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call om_kh/vigia-ad-creative-delta --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=om_kh/vigia-ad-creative-delta",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Ad Creative Change Tracker � Longevity & Delta Engine (Vigia)",
        "description": "Detects actionable creative changes in customer-authorized ad datasets.",
        "version": "0.1",
        "x-build-id": "9idPRgHl8nl4dlO4h"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/om_kh~vigia-ad-creative-delta/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-om_kh-vigia-ad-creative-delta",
                "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/om_kh~vigia-ad-creative-delta/runs": {
            "post": {
                "operationId": "runs-sync-om_kh-vigia-ad-creative-delta",
                "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/om_kh~vigia-ad-creative-delta/run-sync": {
            "post": {
                "operationId": "run-sync-om_kh-vigia-ad-creative-delta",
                "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": [
                    "currentAds",
                    "maxTotalChargeUsd"
                ],
                "properties": {
                    "previousAds": {
                        "title": "Previous ads",
                        "type": "array",
                        "description": "Ads from the prior run; used to identify changes.",
                        "default": []
                    },
                    "currentAds": {
                        "title": "Current ads",
                        "type": "array",
                        "description": "Current authorized ad data to compare.",
                        "default": [
                            {
                                "ad_id": "example-1",
                                "creative": "Example offer",
                                "landing_url": "https://example.com/offer"
                            }
                        ]
                    },
                    "maxTotalChargeUsd": {
                        "title": "Maximum Vigia charge (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Hard maximum amount that this run may charge.",
                        "default": 1
                    },
                    "sources": {
                        "title": "Declared upstream sources and estimated costs",
                        "type": "array",
                        "description": "Declare every upstream source before this run. Each item needs name, authorization, and estimated_cost_usd.",
                        "default": [
                            {
                                "name": "Customer-authorized input",
                                "authorization": "customer_authorized",
                                "estimated_cost_usd": 0
                            }
                        ]
                    },
                    "monitorEnabled": {
                        "title": "Monitor only new results",
                        "type": "boolean",
                        "description": "The first monitored run stores a free baseline. Later runs deliver and charge only new results.",
                        "default": false
                    },
                    "monitorId": {
                        "title": "Monitor ID (optional)",
                        "type": "string",
                        "description": "Pins the persistent baseline to a name of your choice, so separate targets never share state. Leave empty to derive it automatically.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
