DEV Community

Aurelix Solutions
Aurelix Solutions

Posted on

A weekly competitor digest: new ads, page edits, price changes and job posts in one report

Keeping an eye on competitors usually means five tabs: the Meta Ad Library, the TikTok Ad Library, their pricing page, their store and their careers page. Each one is easy to check once and easy to forget the week after. What you actually want is a short note per competitor that says what is new, and silence when nothing is.

This post sets that up as a scheduled job, then compares the competitor monitors on the Apify Store using the prices their Store pages listed at the time of writing.

Disclosure: I'm Aurelix, and I built Competitor Watch. It's a paid tool (prices below). Check each Store page before you buy: prices change.

What it watches

You list each competitor once, as its domain (allbirds.com). The tool finds the rest itself and remembers it between runs:

  • Meta ads: the brand's Facebook page, accepted only when its active ads link to that domain, so a same-name page of another business is never used.
  • TikTok ads: the TikTok Ad Library, which covers the EU/EEA, the UK, Switzerland and Turkey.
  • Web pages you pick (/, /pricing, /collections/new-arrivals): text changes, with prices that appeared or disappeared called out, so a pricing edit reads like $29 → $35.
  • Shopify products: new products and price changes per variant, from the store's public product feed.
  • Jobs: new postings on Greenhouse, Lever, Ashby, SmartRecruiters, Workable, BambooHR or Workday.

The first run saves a baseline. Every later run with the same stateKey returns one competitor_report row per competitor with a summary in plain words and counts (new_meta_ads, pages_changed, new_products, price_changes, new_jobs), plus one change row per new item. Nothing is reported twice.

The weekly digest

pip install apify-client
Enter fullscreen mode Exit fullscreen mode
import os
from collections import defaultdict

from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("aurelix/competitor-watch").call(
    run_input={
        "competitors": ["allbirds.com", "glossier.com", "brooklinen.com"],
        "sources": ["meta_ads", "website", "shopify", "jobs"],
        "watchPaths": ["/", "/collections/new-arrivals"],
        "stateKey": "client-acme",
    }
)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())

changes = defaultdict(list)
for r in rows:
    if r["record_type"] == "change":
        changes[r["competitor"]].append(r)

for report in (r for r in rows if r["record_type"] == "competitor_report"):
    print(f"\n{report['summary']}")
    for c in changes[report["competitor"]][:5]:
        if c["change"] == "price_change":
            print(f"  price: {c['title']} {c['previous_price']} -> {c['price']} {c['currency']}")
        else:
            print(f"  {c['change']}: {c['title']} {c['url'] or ''}")
Enter fullscreen mode Exit fullscreen mode

Run it once to save the baseline, then schedule it weekly (save the input as a task in the Apify Console and click Schedule). For a team channel, put a Slack incoming-webhook URL in slackWebhookUrl: each run posts one line per competitor when something is new. For an agency, use one task per client with the client's name as the stateKey, so each watchlist keeps its own memory.

A few input choices that matter:

  • Ads swipe file: "sources": ["meta_ads", "tiktok_ads"] and a daily schedule. Every new ad is a row with its text, image, start date and a link to the ad in its library. Set tiktokCountry to the European market closest to yours.
  • Pricing pages: give a competitor as {"domain": "notion.so", "pages": ["/pricing"]} to watch pages that only matter for that one.
  • Shopify stores: /collections/new-arrivals on the home domain plus shopify catches launches, sales banners and price cuts in one run.

Competitor monitors on the Apify Store compared

Prices from each Store page at the time of writing:

Aurelix Competitor Watch data-done-right/competitor-monitoring happitap/competitor-ads-monitor
Price, free plan $0.03 per competitor checked + $0.001 per new item $0.025 per competitor report $0.004 per ad
Price, paid plans $0.027 per competitor + $0.001 per new item $0.025 (Bronze) to $0.020 (Gold) per report $0.004 per ad
Start fee per run $0.015 none $0.01
Meta (Facebook, Instagram) ads new ads only no yes
TikTok ads TikTok Ad Library (EU/EEA, UK, CH, TR) no TikTok Creative Center
Google ads no yes (Ads Transparency) yes (Ads Transparency)
Website text changes on pages you pick new pages from sitemaps no
Shopify products and prices new products, price changes per variant no no
Job postings new postings on 7 job-board systems new job openings no
News mentions no Google News no

Where each wins: If Google ads or news mentions matter to you, the Aurelix tool doesn't read them; data-done-right does both and is cheaper per competitor, about $3.75 a month for 5 competitors checked daily against about $5.07 here. happitap is the ads-only option across Meta, TikTok and Google. The Aurelix tool fits e-commerce and DTC competitors: it is the only one of the three that tracks Shopify launches and per-variant price changes and diffs the text of the pages you choose, alongside new Meta and TikTok ads and job posts, all from one domain per competitor.

If you only need every ad a brand runs (not only the new ones), with EU reach and targeting fields, a single-source tool is the better fit, such as the Facebook Ad Library Scraper. For that route, see Monitor your competitors' Facebook and Instagram ads with Python.

Limits

  • At most 30 ads per competitor and ad library per run. A brand that launches more than 30 ads between runs shows the newest 30; run it more often.
  • TikTok covers the EU/EEA, the UK, Switzerland and Turkey only, and is the slowest source.
  • Website changes are text changes. Images, layout and JavaScript-only content are not compared; a page that needs JavaScript is reported in the note and not charged.
  • Shopify stores only, up to 5,000 products per store and run.
  • Jobs only on the seven systems above. A company on another system gets no job results, and that search still counts as a competitor check.
  • No Google ads, news, traffic or keyword data.
  • Up to 25 competitors per run; use several state keys for longer lists.

Cost

At the time of writing the Store page lists $0.03 per competitor checked ($0.027 on paid plans), $0.001 per new item and $0.015 per run. A quiet week costs $0.03 per competitor. Five competitors checked daily with about 4 new items a day come to about $5.07 a month. The first run only saves the baseline, so it charges the per-competitor fee and nothing per item. Apify's free plan includes $5 of credit a month, about 160 competitor checks.

Links

Top comments (0)