Aurelix

Tools › Marketing

Competitor Watch

Get only what is new about each competitor: new Meta and TikTok ads, page edits, new and re-priced products and jobs, $30.00 per 1,000 competitor checks, no login.

For agencies, e-commerce brands and marketers who want a competitor digest, not five scrapers. List competitors once; each scheduled run returns one plain-language report per competitor.

$30.00 per 1,000 competitor checks ($27.00 on paid Apify plans)

At a glance

What the Competitor Watch does

Input
Competitor domains (up to 25 per run), optionally with a Facebook page ID, a TikTok advertiser ID, pages to watch, a Shopify store or a careers page
Sources
Meta Ad Library, TikTok Ad Library (EU/EEA, UK, CH, TR), the competitor's own web pages, its Shopify product feed and its public job board
What you get
One competitor_report per competitor with a plain-language summary and counts, plus one change row per new ad, page change, new product, price change or new job
Memory
Named key-value store per state key: the first run saves a baseline, later runs return only what is new
Automate
Schedules, Slack incoming webhook, any webhook (Zapier, Make, n8n, email via those), API, MCP for AI agents

Who it is for

  • Marketing agencies: a weekly competitor digest per client, one state key per client, posted to the client's Slack channel
  • E-commerce and DTC brands: see the day a rival launches a product, cuts a price or starts a sale on its home page
  • Performance marketers: a running swipe file of competitors' new Meta and TikTok ad creatives with links to each ad
  • Product marketing and sales enablement: alerts when a competitor edits its pricing or features page
  • Founders and investors: one daily view of what competitors ship, advertise and hire for
  • AI agents: a tool that answers 'what did my competitors do this week?' from fresh public data

Output

What you get

  • competitor_report rows (one per competitor per run): status, baseline flag, a plain-language summary, counts of new Meta ads, new TikTok ads, page changes, new products, price changes and new jobs, up to 5 highlights, what is tracked now (Meta page and number of active ads, pages read, products, open roles) and a status per source
  • change rows (one per new item): source (meta_ads, tiktok_ads, website, shopify, jobs), change (new_ad, page_changed, new_product, price_change, new_job), title, one-line summary, link to the ad in its ad library or to the page, product or job, image, price and previous price, start date, and a data object with source-specific fields
  • OUTPUT record: a Slack-ready digest with one line per competitor, also sent to your Slack or webhook URL when something is new

Example

Input and output

Input

{
  "competitors": [
    "allbirds.com",
    {
      "domain": "glossier.com",
      "pages": [
        "/pages/about"
      ]
    }
  ],
  "sources": [
    "meta_ads",
    "website",
    "shopify",
    "jobs"
  ],
  "stateKey": "my-competitors",
  "watchPaths": [
    "/"
  ],
  "slackWebhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX"
}

One output record

{
  "record_type": "competitor_report",
  "state_key": "gate-w7",
  "competitor": "Gymshark",
  "competitor_key": "gymsharkcom",
  "domain": "gymshark.com",
  "status": "ok",
  "baseline": true,
  "summary": "First check of Gymshark: now tracking 30 active Meta ads (the newest of 5657), 25 recent TikTok ads, 1 web page, 5000 Shopify products, 10 open roles. From…",
  "new_items_total": 0,
  "new_meta_ads": 0,
  "new_tiktok_ads": 0,
  "pages_changed": 0,
  "new_products": 0,
  "price_changes": 0,
  "new_jobs": 0,
  "price_moves": {},
  "highlights": [],
  "tracking": {
    "meta_page_name": "Gymshark",
    "meta_page_id": "129669023798560",
    "meta_active_ads": 5657,
    "meta_ads_seen": 30,
    "tiktok_ads_seen": 25,
    "tiktok_region": "GB",
    "pages_watched": 1,
    "products_tracked": 5000,
    "store_currency": "USD",
    "open_roles": 10,
    "job_board": "greenhouse:gymshark",
    "roles_removed": 0
  },
  "sources": {
    "meta_ads": {
      "status": "ok",
      "baseline": true,
      "new_items": 0,
      "note": null
    },
    "tiktok_ads": {
      "status": "ok",
      "baseline": true,
      "new_items": 0,
      "note": null
    },
    "website": {
      "status": "ok",
      "baseline": true,
      "new_items": 0,
      "note": null
    },
    "shopify": {
      "status": "ok",
      "baseline": true,
      "new_items": 0,
      "note": null
    },
    "jobs": {
      "status": "ok",
      "baseline": true,
      "new_items": 0,
      "note": null
    }
  },
  "note": null,
  "previous_check_at": null,
  "checked_at": "2026-11-05T13:00:18Z",
  "source_url": "https://gymshark.com/",
  "scraped_at": "2026-11-05T13:00:18Z"
}

From a real run of this tool; long text and lists shortened here.

How to use it

Three steps

  1. Paste your competitors' website domains into Competitors, one each (allbirds.com, glossier.com), pick what to watch and give the watchlist a state key.
  2. Run it once to save the baseline, then schedule it daily or weekly with the same state key; add a Slack or webhook URL for the digest.
  3. Read one competitor_report per competitor (the summary says it in plain words) and the change rows under it, or let your Slack channel do the reading.

API

Call it from Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("aurelix/competitor-watch").call(run_input={'competitors': ['allbirds.com',
                 {'domain': 'glossier.com', 'pages': ['/pages/about']}],
 'sources': ['meta_ads', 'website', 'shopify', 'jobs'],
 'stateKey': 'my-competitors',
 'watchPaths': ['/'],
 'slackWebhookUrl': 'https://hooks.slack.com/services/T000/B000/XXXX'})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

pip install apify-client. The same input works from the Apify console, a schedule, Make, n8n, Zapier or an AI agent through the Apify MCP server.

Pricing

Pay per result

Per 1,000 competitor checks, free plan$30.00
Per 1,000 competitor checks, paid plans$27.00
New item, per 1,000, free plan$1.00
Start fee per run$0.01

Live prices from the Apify Store; no subscription and no platform usage billed on top. See the Store page.

Honest limits

What it does not do

  • Ads: at most 30 ads per competitor and ad library per run (Meta: the page's 30 most recent active ads; TikTok: the 30 most recently shown). A brand that launches more than 30 ads between two runs shows only the newest 30; run it more often. Meta can rate-limit; the Actor then retries on residential proxy and marks the source partial if it still stops early.
  • Page detection works when the brand's Facebook page is named like the brand or the domain; otherwise give facebookPageId.
  • TikTok covers only the EU/EEA, the UK, Switzerland and Turkey, and loads in a real headless browser, which makes it the slowest source; if TikTok times out on long lists, run with 2 GB of memory.
  • Website changes are text changes. Images, layout and content that appears only after JavaScript runs are not compared; pages that need JavaScript are reported in the note and not charged.
  • Shopify only, and only stores whose public products.json feed is open and allowed by robots.txt; up to 5,000 products per store and run (larger catalogues are compared on their first 5,000 products in the feed's order, so a launch further down the feed can be missed).
  • Shopify can rate-limit long catalogue reads from cloud servers; the report then says how many products were compared (status partial), and products not compared that run are compared on a later run.
  • Jobs: the seven job-board systems listed above; for companies on other systems the job-board search finds nothing. That search still counts as checking the competitor, so if it is the only source that ran, the competitor is charged once (status no_match), like any other search that finds nothing.
  • No Google ads, news mentions, traffic or keyword data.
  • Up to 25 competitors per run; use several state keys for longer lists.
  • Give competitors as domains. A brand name without a domain cannot be matched safely for ads or pages: it gets ads only with facebookPageId or a TikTok advertiser ID. With 'jobs' on, its job board is still looked up by its name, and that search makes it a charged competitor check.
  • If TikTok refuses a search or Meta blocks, that source is skipped for the rest of the run (said in the status and in each report's note) and the competitors are checked again next run. If no source answers for 3 competitors that can be searched, the run stops there and only the start fee is charged; the competitors not reached are checked first in the next run.
  • Each competitor's report, charges and memory are saved as soon as it is checked. Competitors are checked three at a time. When your maximum charge is reached, competitors not started yet are not read at all, and the ones already being checked in that group of three are finished but neither reported nor charged. When the run timeout is reached, the ones still being checked are cancelled. Nothing is charged for any of them, and all are checked first in the next run. If no source answers at all within 75 seconds, the run stops there.
  • Page text is compared in blocks of three words or more; shorter lines (a lone price or a two-word label) are not tracked on their own.

FAQ

Questions buyers ask

How much does the Competitor Watch cost?

$30.00 per 1,000 competitor checks ($27.00 on paid Apify plans), billed through your Apify account; you pay only for results. Apify's free plan includes $5 of credit a month, enough for about 166 competitor checks.

When is a competitor charged?

A competitor is charged once per run when at least one source was searched, whether or not anything new was found. That includes a check where a source was searched but no matching account was found (for example a US brand with no TikTok ads in Europe). A competitor is free only when no source could be searched at all: no domain or ID, or every source was down or blocked. New items add $0.001 each.

What is a competitor check and when am I charged?

One competitor checked in one run is one competitor-check ($0.03). It is charged when at least one source was searched for that competitor, whether or not anything new was found, and also when a search found no matching account (status no_match), because the check was done. Each new item in the report adds $0.001. A competitor where no source could be searched (status not_found or failed: no domain or ID, or every source down or blocked) costs nothing.

Why did my first run return no ads or products?

The first run of a state key is the baseline: it saves every ad, page, product and job it can see, and the report says how many it now tracks. Only the competitor-check fee is charged. From the second run with the same state key you get only what is new.

Can I watch competitors for several clients?

Yes. Use one state key per client (for example client-acme) and one saved task or schedule per key. Each key has its own memory, so runs for one client never use up another client's changes.

How does it make sure an ad is really my competitor's?

A page or advertiser named like your competitor is accepted only when its ads link to the competitor's own domain or a country version of it (a different ending such as .online is treated as another business), and on TikTok every new ad is checked against the accepted advertiser before it is reported. The report's tracking field shows the Facebook page used (meta_page_name, meta_page_id). To choose yourself, give the competitor as an object with facebookPageId (the number in view_all_page_id=...) or tiktokAdvertiser (the advertiser ID from the TikTok Ad Library).

Does TikTok work for US brands?

Only for ads they run in Europe, the UK, Switzerland or Turkey: TikTok's public Ad Library covers those regions only. Pick the country in tiktokCountry. A brand that advertises only in the US shows no TikTok ads.

Which pages should I watch?

The home page, the pricing page and the main collection or 'new arrivals' page tell you the most. Put the paths in Pages to watch (they are used for every competitor) or add pages to a single competitor with the pages field. Up to 10 pages per competitor.

Can I get the digest by email?

The Actor posts to a Slack incoming webhook or to any webhook URL. To get it by email, point the webhook at a Zapier, Make or n8n flow that sends the text as an email.

What if a competitor is not on Shopify?

The Shopify source reports 'not a Shopify store' for it and adds no charge of its own; the other sources still run. Checking the store still counts as a search, so a competitor whose only source was Shopify is charged once (status no_match).

Is it legal to monitor competitors?

It reads only public data any logged-out visitor can see: ads in the public Meta and TikTok ad libraries, the competitor's own public pages and product feed, and its public job board. It never logs in, obeys robots.txt on websites, skips political and person-named advertisers, and leaves customer reviews and testimonials out of the page text it tracks, so reviewers' names are not returned. Laws and site terms differ by country and use, so check what applies to you; this is not legal advice.

Guides

Tutorials using this tool

Related

Related tools

Try the Competitor Watch

Open it on the Apify Store, paste the example input above and click Start. Results download as CSV, Excel or JSON.