---
title: "Competitor monitoring"
description: "Competitor monitoring for pricing pages, changelogs, feature pages and careers pages. Snapshot rival websites as Markdown, diff each run, alert on changes."
canonical: https://www.zenrows.com/use-cases/competitor-monitoring
updated: 2026-10-18
---

# Competitor monitoring

Competitor monitoring is the ongoing tracking of changes on competitor websites, such as pricing pages, feature pages, changelogs, docs and careers listings. Zenrows fetches each watched page as clean Markdown, protected and JavaScript-heavy sites included, and Batch rechecks the whole watchlist on a schedule, so you diff every snapshot and alert on what changed.

## Sample output: one change event

```json
{
  "competitor": "example-rival.com",
  "page_type": "pricing",
  "url": "https://www.example-rival.com/plans",
  "checked_at": "2026-10-16T06:00:00Z",
  "previous_check": "2026-10-18T06:00:00Z",
  "changed": true,
  "content_hash": "9f2c41e7",
  "diff": [
    { "section": "Pro plan", "before": "$49 per user per month", "after": "$59 per user per month" },
    { "section": "Pro plan features", "before": null, "after": "SSO included" },
    { "section": "Hero headline", "before": "Built for small teams", "after": "Built for growing teams" }
  ],
  "new_urls_found": [
    "https://www.example-rival.com/changelog/audit-logs"
  ],
  "alert": {
    "channel": "#competitor-watch",
    "owner": "product-marketing",
    "reason": "price change on pricing page"
  }
}
```

An illustrative change event built from two Markdown snapshots of the same pricing page: Zenrows returns the page, and the diff and the alert come from your own comparison step.

## What competitor monitoring covers

Competitor website monitoring starts from a watchlist: the 10 to 50 pages per rival where a change means something to product, sales or marketing. Each page type answers a different question.

| Job | Data you collect | Typical sources |
|---|---|---|
| Pricing page watch | Plan names, list prices, seat limits, discounts, free tier terms | Competitor pricing pages, plan comparison tables, checkout pages |
| Launch detection | New product, feature and integration pages | Changelogs, release notes, /integrations directories, sitemap.xml |
| Messaging tracking | Homepage headline, hero claims, new badges such as SOC 2 | Homepages, solution pages, campaign landing pages |
| Hiring watch | New roles, teams and office locations | Careers pages hosted on Greenhouse, Lever and Ashby |
| Docs and API changes | New endpoints, deprecations, rate limits | Developer docs, API references, status pages |
| Terms and policy changes | SLA wording, refund terms, data processing terms | Terms of service, trust centers, legal pages |

## Why competitor website monitoring breaks

A change detector can miss the price change that mattered, or fire on every cookie banner and rotating testimonial until nobody reads its alerts.

| What breaks | What it looks like | How Zenrows handles it |
|---|---|---|
| Blocked checks | Cloudflare or Akamai returns a challenge page, and your diff reports the whole page as changed | Zenrows' stealth gets through Cloudflare, Akamai and similar protections and returns the actual page |
| Prices drawn by JavaScript | The pricing table loads from a script, so raw HTML shows empty placeholders | A full browser render that waits for the pricing table to load returns the filled-in page, and page actions can click the annual toggle first |
| Noisy diffs | Timestamps, session IDs, logo carousels and A/B variants trigger false alerts | Markdown output drops markup and scripts so you compare text, and CSS selectors narrow a check to named fields |
| Regional pricing | A rival charges in pounds in the UK and shows other plans in the US | Geotargeting picks the country each request comes from, so you get every regional version |
| Pages nobody watches | A launch ships on a URL that was never on your list | Crawl walks the competitor's domain with include patterns such as `/changelog/` and returns the URLs it finds |

## How to monitor competitor websites with Zenrows

1. **Build the watchlist.** List the pages per competitor and tag each one with a page type and an owner who receives its alerts.
2. **Snapshot each page as Markdown.** Call Fetch with Markdown output and Adaptive Stealth Mode, which escalates to browser rendering and stealth only on the pages that need it.
3. **Diff against the last snapshot.** Compare the new Markdown with the stored copy, and skip lines you have marked as noise, such as dates and counters.
4. **Schedule the list.** Submit the watchlist to Batch daily, hourly for pricing pages during a rival's launch week, and run Crawl weekly to catch new URLs.
5. **Route the alert.** Post the diff to Slack or email with the URL and links to both snapshots, so the owner can judge it in one look.

```python Python
# pip install requests
import difflib, hashlib, pathlib, requests

params = {
    "apikey": "YOUR_ZENROWS_API_KEY",
    "url": COMPETITOR_PAGE_URL,  # e.g. a rival's pricing page
    "mode": "auto",  # Adaptive Stealth Mode
    "response_type": "markdown",
}
response = requests.get("https://api.zenrows.com/v1/", params=params)
response.raise_for_status()
current = response.text

store = pathlib.Path("snapshots") / (hashlib.sha1(COMPETITOR_PAGE_URL.encode()).hexdigest() + ".md")
previous = store.read_text() if store.exists() else ""
if current != previous:
    diff = difflib.unified_diff(previous.splitlines(), current.splitlines(), lineterm="")
    print("\n".join(diff))  # send this to Slack or your alerting tool
store.parent.mkdir(exist_ok=True)
store.write_text(current)
```

```bash cURL
# Find pages a competitor added: returns a crawl_id, read URLs from GET /v1/crawls/{crawl_id}
curl -X POST "https://api.zenrows.com/v1/crawls" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "COMPETITOR_HOME_URL",
    "max_items": 1000,
    "max_pages": 1000,
    "include_patterns": ["/changelog/", "/integrations/", "/plans"]
  }'
```

```bash CLI
npx -y @zenrows/cli init
# watchlist.jsonl: one {"url": "..."} per line. Recheck it as one job, as Markdown
zenrows batch create watchlist.jsonl --output markdown --wait
zenrows batch results <job-id> --out snapshots.jsonl
```

```text Claude Code (MCP)
# Connect once
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp

# Then ask:
Use Zenrows to fetch the plans page and the changelog of example-rival.com
as Markdown, compare them with the snapshots in ./snapshots, and list every
changed price, plan name and release note with its URL.
```

## Which Zenrows product fits

| If you need to | Use | Why |
|---|---|---|
| Snapshot a pricing or feature page on demand | [Fetch](/products/fetch) | Markdown output gives you stable text to diff, from protected sites included |
| Recheck hundreds of competitor pages every day | [Batch](/products/batch) | The whole watchlist runs as one job, with results by webhook |
| Find pages a competitor added since last week | [Crawl](/products/crawl) | Lists every URL on the domain that matches your include patterns |
| Run checks from a cron job or a terminal | [CLI](/cli) | One command submits the watchlist and follows the job to completion |

## What success looks like

| Measure | What good looks like | How to check it |
|---|---|---|
| Detection lag | A price or plan change reaches the owner within one check interval | Compare alert times with the dates on the competitor's changelog or announcement |
| Alert precision | Most alerts point at a real content change, not layout noise | Have owners label each alert as useful or noise for a month and review the ratio |
| Watchlist coverage | Every competitor in scope has its pricing, product, changelog and careers pages watched | Audit the watchlist against your competitor list each quarter |
| Check success | Every scheduled check returns the page, not a challenge or an empty body | Count failed and empty responses per run in the Batch results |
| Snapshot history | Every watched page has a dated archive you can quote in a battlecard | Spot-check that each alert links to both the old and the new snapshot |
| Run time | The full watchlist finishes well inside one check interval | Compare each Batch job's start and finish times with your schedule |

## Competitor monitoring FAQ

### What is competitor monitoring?

Competitor monitoring means checking competitor websites on a schedule and recording what changed: a new price, a renamed plan, a feature page, a hiring push, a rewritten headline. It is tactical and ongoing. The output is a stream of dated change events that product, sales and marketing teams act on, usually through alerts in Slack or email.

### What should I monitor on a competitor's website?

Start with the pages where a change forces a decision on your side: pricing, plan comparison, changelog or release notes, integrations, the homepage hero and careers. Add developer docs if you sell to engineers, and terms or trust pages if you compete on compliance. Ten to twenty pages per competitor is a practical start, and you can add pages as owners confirm which alerts they act on.

### How do I monitor a website for changes without false alerts?

Compare the visible text. Fetch each page as Markdown output so scripts, styles and tracking markup are gone, then ignore lines that change on every load, such as dates, counters and review carousels. For pricing tables, name the fields with CSS selectors and compare only those values.

### How often should I check competitor pages?

Daily suits most pricing, product and messaging pages. Check hourly during a known launch window or a sales event, and weekly for docs, terms and careers pages. Run Crawl on each competitor domain weekly as well, because launches often appear on new URLs rather than on pages you already watch.

### How is competitor monitoring different from competitive intelligence?

Competitor monitoring answers "what changed on their site today" for a fixed watchlist. Competitive intelligence is the broader program that combines those changes with reviews, hiring data, funding and partner moves to inform strategy and battlecards. Monitoring is usually one input into it. See competitive intelligence for that wider workflow.

### How do I track competitor pricing changes?

Add each competitor's plans page to the watchlist, then name the price, plan and limit fields with CSS selectors so a check compares values rather than the whole page. Fetch regional versions with geotargeting if the competitor prices by country, and click the annual toggle with page actions when monthly and annual prices differ. Alert only when a field value changes, and keep both snapshots for the battlecard. See price scraping for retail prices.

### Should I use a competitor monitoring tool or build my own?

Off-the-shelf competitor monitoring software suits a few dozen pages and an inbox of screenshots. Building on Zenrows suits teams that want change events in their own warehouse, CI platform or Slack workflow, with their own noise rules and field-level diffs. Zenrows fetches the pages, protected ones included, so what you build and own is the diff logic and the alert routing.

## Related use cases

- [Competitive intelligence](https://www.zenrows.com/use-cases/competitive-intelligence.md): Pricing, hiring, reviews, launches and partners across your market, structured for battlecards and strategy.
- [Competitor price scraping](https://www.zenrows.com/use-cases/price-scraping.md): Competitor prices, promotions, shipping and stock per SKU from retailers and marketplaces, refreshed on your schedule.
- [Competitor ad intelligence](https://www.zenrows.com/use-cases/competitor-ads.md): Creatives, copy and landing pages from ad libraries and paid search results, tracked by advertiser and country.
- [AI search monitoring](https://www.zenrows.com/use-cases/ai-search-monitoring.md): Answers, brand mentions and cited sources from ChatGPT, Perplexity, Gemini and AI Overviews, prompt by prompt.
- [Brand monitoring](https://www.zenrows.com/use-cases/brand-monitoring.md): Every mention of your brand in news, forums, reviews and search, as clean text for sentiment and alerts.

Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
