Website Tech Change Monitor avatar

Website Tech Change Monitor

Pricing

from $18.50 / 1,000 stack change alerts

Go to Apify Store
Website Tech Change Monitor

Website Tech Change Monitor

Watch a list of websites and hear only when their technology stack actually changes: a shop leaves WooCommerce, a prospect adds Shopify, an analytics tag disappears, a CDN switches. Each domain is remembered between runs, so an alert is always a real transition and a quiet check costs nothing.

Pricing

from $18.50 / 1,000 stack change alerts

Rating

0.0

(0)

Developer

Lowland Data

Lowland Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Watches a list of websites (clients, prospects, competitors) and alerts you only when something in their technology stack changes: a shop moves off WooCommerce, a prospect adds Shopify, a client's analytics tag disappears, a site switches CDN. It remembers every domain's stack between runs, so an alert always means a real transition, never "here is the same list again".

Live health record: lowlanddata.com/status/tech-change-monitor - 30-day success rate and daily canary results, failures included. Full input/output reference: tool page.

Organization-level data only: domains and technologies, never owners, never emails. The subscription tools that answer this question charge $250–995/month and sell contact data alongside; this one does neither.

Quick start (30 seconds)

  1. Paste the domains to watch, one per line.
  2. Hit Start once: the first run baselines each domain's current stack (one row per domain, flagged event: "baseline").
  3. Add a daily or weekly schedule. From then on, runs are silent until a stack actually changes:
{
"domain": "client-shop.be",
"event": "change",
"added": ["Shopify", "Klarna"],
"removed": ["WooCommerce", "WordPress"],
"ecommerce": "Shopify",
"cms": null,
"cdn": "Cloudflare",
"technologies": ["Cloudflare", "Google Tag Manager", "Klarna", "Shopify"],
"observedAt": "2026-09-05T14:00:00.000Z"
}

That row reads: the client replatformed from WooCommerce to Shopify and turned on Klarna. You knew before their newsletter did.

Who uses this

  • Agencies and freelancers watch client portfolios: a dropped analytics tag or a silent replatform is an account-management heads-up, delivered instead of discovered.
  • Sales teams watch prospect lists for buying signals: "moved to Shopify" is a better trigger than any cold-email cadence.
  • SaaS vendors watch whether customers' sites still carry their snippet, and what churned customers switched to.
  • Competitive watchers learn when a rival adds a payment method, an A/B tool, or a new frontend.

How the monitor thinks

  • First run = baseline. Every domain's stack is remembered (and delivered, unless emitBaseline is off).
  • After that, only transitions. A run where nothing changed delivers nothing and costs almost nothing.
  • added / removed list the exact technologies that appeared or vanished, and the flat columns show the current state.
  • Memory lives in a named key-value store in your account (stateStoreName). Inside it the record is keyed by the watch list itself plus minConfidence, so adding or removing a domain (or nudging the threshold) starts a fresh baseline for the whole list and charges it as one. Settle the list before you schedule it; resetState: true re-baselines deliberately. A domain not seen for 90 days ages out of the memory and baselines again.
  • An unreachable domain is not a change. Fetch failures are reported separately and leave the domain's memory untouched, so one flaky morning never floods you with fake "everything removed" alerts.
  • A change has to happen twice before you hear about it. Analytics tags load on consent, in some countries and not others, and a single fetch can miss one. A stack that differs from the remembered one is held back and only alerts when the next run sees the same thing, so what reaches you is a transition rather than a bad moment on the network.
  • Only the stack raises an alert. Detections that describe the connection rather than the site, HTTP/3 negotiated on one request for instance, stay in the technologies list and never trigger a billed alert.

How much does it cost?

Pay per outcome: $1.99 per 1,000 baseline rows, charged once when a domain is first seen, then about 2 cents per change alert. Watching 200 domains weekly costs $0.40 to baseline and, at a handful of real changes a month, some 15 cents a month after that, against the $250+/month the incumbent subscription tools charge. A check that finds nothing changed costs nothing.

Not technical? Let your AI assistant set it up

I want alerts when websites change their technology stack, using the Apify
actor lowlanddata/tech-change-monitor. Build me the input JSON.
Fields:
- domains: array of domains or URLs to watch (required)
- includeDns: boolean, watch the mail stack too (default true)
- minConfidence: 0-100 detection floor (default 50)
- emitBaseline: deliver the first-run snapshot (default true)
- stateStoreName: one name per watch list (default "tech-change-monitor-state")
Here is my list: <paste domains>
Give me the JSON only, then tell me how to schedule it weekly and get an
email when a run produces rows.

Input

FieldTypeDefaultNotes
domainsstring[]-The watch list; normalized to hostnames.
includeDnsbooleantrueMail-stack changes count too.
minConfidenceinteger50Detection floor; higher = fewer, surer alerts.
emitBaselinebooleantrueOff = silent first run.
stateStoreNamestringtech-change-monitor-stateOne per watch list.
resetStatebooleanfalseForget everything and re-baseline.

Use it from your code

curl -X POST \
"https://api.apify.com/v2/acts/lowlanddata~tech-change-monitor/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"domains":["client-a.be","client-b.nl"],"stateStoreName":"portfolio-watch"}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('lowlanddata/tech-change-monitor').call({
domains: ['prospect-1.de', 'prospect-2.fr'],
stateStoreName: 'prospects-q4',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient(token=os.environ["APIFY_TOKEN"])
run = client.actor("lowlanddata/tech-change-monitor").call(run_input={
"domains": open("portfolio.txt").read().split(),
"emitBaseline": False,
})
for alert in client.dataset(run["defaultDatasetId"]).iterate_items():
print(alert["domain"], "added:", alert.get("added"), "removed:", alert.get("removed"))

Use it with AI agents (MCP)

$claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/tech-change-monitor"

Cursor or Claude Desktop: add a custom connector with https://mcp.apify.com?actors=lowlanddata/tech-change-monitor. Runs are billed to your Apify account. Details: Apify MCP docs.

Prompts that work once connected:

  • "Watch these 20 client sites and tell me if any of them changes stack."
  • "Did anything on my prospect list move to Shopify since last week?"

Yes: one polite homepage request per domain per run, public DNS lookups, and only what the sites themselves announce. No logins, nothing bypassed, and no personal data of any kind in the source or the output.

Honest limits

  • Detection inherits the scanner's limits: headless frontends can mask the commerce engine, and an empty column means "not visible from the front door". Alerts fire on what the page shows changing. The corpus lists 7,722 technologies but this pair reads pages over HTTP without a browser, so the 2,332 fingerprints defined by JavaScript or DOM state are out of reach - about 5,400 are detectable, and a stack change confined to the rest is invisible here. Some rows are also implied rather than observed (a WordPress hit implies PHP), so an implied technology appearing or disappearing can move an alert without anything on the page having visibly changed.
  • A site A/B-testing its own frontend can genuinely flap between stacks; raise minConfidence or watch weekly instead of daily if a domain gets noisy.
  • Website Tech Scanner, the one-shot sibling: full stack detail with evidence per detection, no memory.

Troubleshooting

  • Second run returned nothing. That is the product working: nothing changed.
  • A wave of alerts after weeks of silence: check them before doubting them; platform migrations really do land in one deploy.
  • A domain keeps failing to fetch: it is listed in the run summary as a failure, uncharged; its memory stays intact until it is reachable again.