{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Ads Checker: Is a Company Running LinkedIn Ads?",
    "description": "Check LinkedIn Ads for a list of companies without login, by company name, from LinkedIn's Ad Library. Enrich a prospect list with ad activity: ad count, ads in the last 30 days, sample links. Clay enrichment. Spy on and monitor competitor ads: alert when a competitor starts or stops LinkedIn Ads.",
    "version": "1.0",
    "x-build-id": "JJOYdMSMPpxcYoajz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~linkedin-ads-presence-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-linkedin-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~linkedin-ads-presence-lookup/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-linkedin-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~linkedin-ads-presence-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-linkedin-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": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Companies or brands to check",
            "type": "array",
            "description": "One company or brand name per line, exactly as it appears on LinkedIn. This is a NAME match only, not a domain match (unlike some enrichment actors in this catalogue) — LinkedIn's Ad Library has no domain filter. Accepted formats: Notion, Brex, Stripe. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "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 company's summary row: Ad Library ID and link, creative type, text, headline, CTA, destination link, images/video, and EEA transparency details (run dates, impressions range, targeting parameters) where available. Each ad row is billed as an ad (see Pricing). Reads up to 'Max ads per company' ads.",
            "default": false
          },
          "maxAdsPerBrand": {
            "title": "Max ads per company",
            "type": "integer",
            "description": "How many active ads to read per company when ad rows or monitoring are on, 1 to 24. Caps the ad rows (and the ad charges) per company. Default 10.",
            "default": 10
          },
          "downloadCreatives": {
            "title": "Download ad creatives (images, videos, posters)",
            "type": "boolean",
            "description": "Downloads each ad's images, progressive MP4 videos and poster thumbnails into the run's key-value store, adding a creativeFiles array to each ad row with direct KV store URLs, dimensions, sha256 hashes, and duration. Stored files are billed under the 'creative-file' event (see Pricing). Reads up to 'Max creatives per company' files. Default false.",
            "default": false
          },
          "maxCreativesPerCompany": {
            "title": "Max creatives per company",
            "type": "integer",
            "description": "Maximum number of creative files (images, videos, posters) to download per company when creative downloads are on, 1 to 100. Caps stored files and creative-file charges per company. Default 20.",
            "default": 20
          },
          "maxMb": {
            "title": "Max file size (MB)",
            "type": "integer",
            "description": "Maximum file size in MB for any single creative download, 1 to 500. Files exceeding this limit are skipped with an error entry and not charged. Default 100.",
            "default": 100
          },
          "deltaMode": {
            "title": "Only return companies whose ad presence changed since the last run",
            "type": "boolean",
            "description": "Turns this actor into a competitor ad monitor. A company is reported only when it started or stopped running LinkedIn ads (the 'Active in last 30 days?' flag flipped), or when its ads in the last 30 days or its total ad count moved by more than 'Minimum change (%)' since the numbers it last reported. Companies that did not change come back as an uncharged 'UNCHANGED' row (hide them with 'Hide rows with no result'). The first run has nothing to compare against, so it reports every company and stores its numbers as the baseline. This watches presence and volume, not individual new ads: the Ad Library's first page is a small sample in no date order.",
            "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
          },
          "changeThresholdPct": {
            "title": "Minimum change (%)",
            "type": "integer",
            "description": "How far, in percent, 'Ads shown in last 30 days' or 'Ads in library (exact)' must move since the last report before a company counts as scaled up or down. Starting or stopping always counts. Default 25.",
            "default": 25
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty and the watchlist is identified by your list of companies, so editing the list starts a fresh baseline. Type your own name to keep baselines when you add or remove a company. Naming a watchlist with the checkbox above off returns every company but still fills 'Presence changed?', 'Change type' and 'Change (%)', so you can filter them yourself in Sheets, n8n or Make.",
            "default": ""
          },
          "quietRunOutput": {
            "title": "What a quiet monitoring run writes to the dataset",
            "enum": [
              "summary",
              "none"
            ],
            "type": "string",
            "description": "A quiet run is a company with no new ads since the last run. \"One summary row\" (the default) keeps the company row with newAdCount 0. \"Nothing\" writes zero items, so a bot or integration reading the dataset never has to skip rows. A company that failed still returns its error row.",
            "default": "summary"
          },
          "notifyUrl": {
            "title": "Send alerts to (Discord or Slack webhook, Telegram bot link, or any URL)",
            "type": "string",
            "description": "Optional. After the company is billed, each NEW ad is posted here as one message: advertiser, ad text, headline, creative, CTA, and link. Discord or Slack: paste the channel's webhook URL. Telegram: https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat id>. Any other URL receives JSON. Messages are free, and a message that fails never fails the run (the row's notifyErrors says why). Stored encrypted, never logged or written to the results. Needs 'New ads alert' turned on."
          },
          "notifyFormat": {
            "title": "Message format",
            "enum": [
              "auto",
              "discord",
              "slack",
              "telegram",
              "json"
            ],
            "type": "string",
            "description": "Leave on \"Detect from the link\": discord.com links get Discord messages, hooks.slack.com Slack, api.telegram.org Telegram, anything else JSON. Pick one only to override that.",
            "default": "auto"
          },
          "maxNotificationsPerRun": {
            "title": "Most alert messages per run",
            "type": "integer",
            "description": "Up to 100. Above this, one \"+N more\" message says how many more ads are in the run's dataset, so a busy first run never floods the channel. 0 sends only that one summary message.",
            "default": 20
          },
          "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": [
                "rowType",
                "advertiserName",
                "adCount",
                "adsLast30d",
                "activeLast30d",
                "adTypesInSample",
                "sampleAds",
                "adLibraryUrl",
                "isNew",
                "changeType",
                "changePct",
                "monitorFirstSeenAt",
                "adListComplete",
                "newAdCount",
                "stoppedAdCount",
                "stoppedAds",
                "adId",
                "adUrl",
                "creativeType",
                "creativeLabel",
                "paidForBy",
                "adText",
                "headline",
                "cta",
                "destinationUrl",
                "adTextLinks",
                "imageUrls",
                "videoUrls",
                "videoPosterUrl",
                "ranFrom",
                "ranTo",
                "impressionsRange",
                "impressionsByCountry",
                "eeaDataVisible",
                "targetingLanguages",
                "targetingLocations",
                "targetingParameters",
                "isNewAd",
                "notifyErrors"
              ],
              "enumTitles": [
                "Row type (brand = summary row, ad = one ad)",
                "Advertiser",
                "Ads in library (exact)",
                "Ads shown in last 30 days",
                "Active in last 30 days?",
                "Ad types (sampled)",
                "Sample ads",
                "Ad Library search page",
                "Presence changed?",
                "Change type",
                "Change (%)",
                "Monitored since",
                "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)",
                "Creative type (ad rows)",
                "Creative format (ad rows)",
                "Paid for by (ad rows)",
                "Ad text / commentary (ad rows)",
                "Headline (ad rows)",
                "Call to action (ad rows)",
                "Destination link (ad rows)",
                "Links in commentary (ad rows)",
                "Image URLs (ad rows)",
                "Video URLs (ad rows)",
                "Video poster URL (ad rows)",
                "Running since (EEA ad rows)",
                "Ran until (EEA ad rows)",
                "Total impressions range (EEA ad rows)",
                "Impressions by country (EEA ad rows)",
                "EEA transparency data present (ad rows)",
                "Targeted languages (EEA ad rows)",
                "Targeted locations (EEA ad rows)",
                "Targeting parameters (EEA ad rows)",
                "New since last run (ad rows, monitoring)",
                "Notification errors (alerts)"
              ]
            },
            "default": [
              "rowType",
              "advertiserName",
              "adCount",
              "adsLast30d",
              "activeLast30d",
              "adTypesInSample",
              "sampleAds",
              "adLibraryUrl",
              "isNew",
              "changeType",
              "changePct",
              "monitorFirstSeenAt",
              "adListComplete",
              "newAdCount",
              "stoppedAdCount",
              "stoppedAds",
              "adId",
              "adUrl",
              "creativeType",
              "creativeLabel",
              "paidForBy",
              "adText",
              "headline",
              "cta",
              "destinationUrl",
              "adTextLinks",
              "imageUrls",
              "videoUrls",
              "videoPosterUrl",
              "ranFrom",
              "ranTo",
              "impressionsRange",
              "impressionsByCountry",
              "eeaDataVisible",
              "targetingLanguages",
              "targetingLocations",
              "targetingParameters",
              "isNewAd",
              "notifyErrors"
            ]
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}