Universe

How to Automate Competitive Analysis With AI: A Living Sheet

10 min read

To automate competitive analysis with AI, have an agent build a competitor sheet in which every cell carries the page it came from, the exact words it was read from, and the date it was checked. Then run the same job every week and have it write down only what changed. The value is in a file that stays current and a short weekly diff, not in a one-off chat answer. A person still checks the three claims your team repeats most.

This is a build-along. It covers the columns, the prompts, how to check the output, how to deal with pricing hidden behind a demo form, and how to stop A/B tests and promo banners from reading as price changes. A copyable template is at the end.

What should automated competitive analysis with AI produce?#

Search for this topic and you mostly find two things. There are frameworks (SWOT, feature grids) that tell you what to think about, and there are pipelines: a scraper, n8n or Zapier, an LLM API call, and a Slack message. The pipelines are useful, but most guides stop at the digest. They don't show the finished comparison, and they don't say how to tell a real price change from a test variant.

A working setup produces four files:

  1. A claims ledger. One row per fact about a competitor, each with a source URL, a quote and a check date. This is the record.
  2. A comparison matrix. The familiar wide view, one row per competitor, generated from the ledger.
  3. A weekly change log. What moved since last week, with the old value, the new value and both sources.
  4. A battlecard and a summary deck. Built from verified rows only.

The ledger is the part people skip, and it's the part that makes the rest trustworthy. A wide matrix has no room for a source on every cell. A ledger does, and comparing this week's ledger to last week's is a plain row-by-row diff.

Here are the ways people build this today, as of September 2026:

ApproachGood atWeak at
Page-change monitors (e.g. Visualping)Watching specific URLs on a fixed interval, in the cloud. Visualping's plans include AI change summaries and an important-or-not flag, and there's a free tierThey tell you a page changed, not what your matrix should now say. You still maintain the comparison yourself
DIY pipeline (scraper + n8n + LLM API + Slack)Full control, cheap to run once it's builtYou build and maintain the scrapers, the diff logic, storage and alerts. JavaScript-rendered pricing pages need a real browser
CI platforms (Klue, Crayon)Sales teams at scale: battlecards where sellers work (Crayon names Salesforce and Slack), plus win-loss analysisNeither publishes pricing; both start with a sales conversation. Often more than a five-person team needs
An agent workspace on your own computerResearch, a sourced sheet, documents and a weekly job from one set of instructions, with a signed-in browser for pages you can legitimately seeScheduled jobs run on a computer that has to be on. You design the columns and check the output yourself

Which columns belong in a competitor matrix?#

Pick fields that someone acts on. If nobody would change a pitch, a price or a roadmap item because a field changed, leave it out.

FieldWhere it comes fromChangesNotes
Pricing (headline price per plan)Pricing pageRarely, but it mattersRecord the billing period and the unit (per seat, per month, flat)
Plans and limitsPricing page, docs, "compare plans" tablesOccasionallyLimits often live in the docs, not on the pricing page
ICP (who they sell to)Homepage, customer logos, case studiesSlowlyQuote the audience they name, not your guess
Key featuresProduct pages, docs, changelogOftenTrack only the 5–10 features that come up in deals
PositioningHomepage headline, page title, meta descriptionA few times a yearA new headline is often the first sign of a pivot
Hiring signalsCareers page or their public job boardWeeklyCount open roles by department. Ten new sales roles in a new region says something
ReviewsG2, Capterra, app storesContinuouslyReview sites often block automated access. Read a sample by hand or leave it out

Step 1: How do you build the first matrix with one prompt?#

Give the agent the competitor list, the fields, and strict rules about sources. The rules do most of the work:

Build a competitor ledger for: [Competitor A — site], [Competitor B — site], [Competitor C — site].

For each competitor, find: headline price per plan, billing period and unit,
plan limits, who they sell to, the features in features.txt, homepage
positioning (headline + page title), open roles by department, and review rating.

Write artifacts/data/competitor-ledger.csv, one row per claim, with columns:
competitor, field, value, source_url, quote, checked_on, source_type, status.

Rules:
- Every value needs a source_url and the exact text it came from in `quote`.
- Read prices in a real browser, not from search snippets. If there is a
  monthly/annual toggle, record monthly, and note the annual price separately.
- If a price is not published, write value "not public" and quote what the
  page says instead ("Contact sales", "starting at", "per seat").
- source_type is one of: first-party, third-party, estimate.
- status is "unverified" for everything. Do not guess; leave a gap and say why.

Then write artifacts/data/competitor-matrix.csv (one row per competitor)
from the ledger, and list any fields you could not fill.

Three details matter. Reading prices in a browser matters because many pricing pages render the numbers with JavaScript, and search snippets are often months old. Recording monthly prices consistently matters because a toggle that defaults to annual is the most common source of a wrong number. And "not public" is an allowed answer. An agent that isn't told it may leave a gap will fill it with something.

In Universe this runs as one session. The agent searches, opens each page in a Chrome that runs on your Mac, and writes the two CSV files into the session's folder, where they open as editable datasheets. Every browser step is recorded with a screenshot, so you can replay how it got each number.

Step 2: Which claims should you check by hand?#

Not every row. Check the three claims your team will actually repeat to a customer:

  1. The headline price of the plan you compete with. Open the source link, set the toggle to monthly, and compare the quote.
  2. The one feature gap your sales team mentions most. "They don't have SSO" is the claim most likely to be out of date, and the most embarrassing when it's wrong.
  3. Their stated audience. If the battlecard says they sell to enterprises and their homepage now says "for startups", the whole card needs rewriting.

Change those rows' status to verified. While you check, look for these common mistakes:

  • An annual price read as monthly, or a per-seat price read as a flat fee.
  • A blog post or press release from last year cited as the current price.
  • A reseller's or partner's page taken for the competitor's own.
  • A "starting at" figure recorded as the price of the mid-tier plan.

If more than one of your three checks fails, don't patch the rows. Tighten the rule in the prompt that caused it and rerun that competitor.

Step 3: How do you turn the matrix into a battlecard and a summary deck?#

Build everything else from the ledger, never alongside it:

From artifacts/data/competitor-ledger.csv, using only rows with status
"verified" or source_type "first-party":

1. Write artifacts/docs/battlecard-[competitor].md: their positioning in their
   words, where they are strong, where we win, the three objections a buyer
   raises, and a short answer to each. Cite the ledger row's source_url after
   every factual sentence.
2. Write a 5-slide summary deck: the market in one slide, one slide per
   competitor, one slide on what changed this quarter.

The rule that keeps this honest: fix facts in the ledger, never in the battlecard. If a rep finds an error on the card, correct the row and regenerate the card. Otherwise the two drift apart, and the next weekly run puts the old error back.

In Universe the battlecard is a document and the deck is a presentation, both files in the same folder. To send them to someone outside the tool, a share link turns a file into a page. A share link is a snapshot, though, so send a new one after the card changes. For a sales team that works in the same place, put the session in a shared space so everyone reads the current files.

Step 4: How do you schedule a weekly "what changed" diff?#

Watch the pages where changes show up first:

  • Pricing page: prices, plan names, limits, the "most popular" badge.
  • Changelog or release notes: features that would change your battlecard.
  • Careers page or job board: open roles by department.
  • Homepage: the headline and page title.

Then schedule a job with a prompt like this:

Every Monday at 8:00: re-read the source_url of every ledger row for
the fields pricing, plans, features, positioning and hiring. For each row,
record the new value and quote, and compare it to the current value.

Write artifacts/docs/changes-[date].md with three sections:
- Confirmed: value differs from last week AND differed on last week's check too,
  or differs on two reads at least an hour apart today. Old value, new value,
  both quotes, source.
- Watching: seen once, not yet confirmed.
- New signals: roles or changelog entries that are not in the ledger yet.

Update the ledger only for Confirmed rows, setting status back to "unverified".
Do not post anywhere.

Keeping the output a file, not a message, is deliberate. You read the diff, then decide what goes to the team. In Universe, sending, paying and posting wait for you; reading and drafting don't. Universe also keeps up to 24 earlier versions of each file on the Mac, with a diff, so you can compare this Monday's ledger to last Monday's without writing that logic yourself.

A scheduled job in Universe runs on a Mac, not in the cloud, so that Mac has to be on. Universe can register a wake so the job runs. For a laptop that's closed on Monday mornings, a second Mac can do the run. There's more on that in running agents overnight on a spare Mac and on recurring jobs in general in scheduling a weekly AI report.

How do you handle pricing behind a demo form or a login?#

Demo-only pricing. Klue and Crayon, for example, publish no prices and ask you to contact sales (as of September 2026). Your agent should record not public and quote the page. Around that gap there are often public signals. Some vendors list contract prices on cloud marketplaces such as AWS Marketplace. Plan limits sometimes appear in the docs. Review sites carry user-reported prices. Put those in the ledger with source_type: third-party or estimate, never first-party. Don't submit a demo request under a made-up identity to get a quote.

Pages behind a login. Some useful pages need an account: a trial workspace, a partner portal, a marketplace listing. Only use accounts you actually hold. Terms you clicked to accept bind you, and many SaaS terms forbid using a product to build a competing one. hiQ Labs won its computer-crime argument over public LinkedIn data and still paid $500,000 in a 2022 consent judgment for breaching LinkedIn's user agreement. Logged-out public pages are the safer default. This isn't legal advice.

For pages you're entitled to see, Universe copies a Chrome profile you're already signed into and runs its own Chrome on that copy, so the agent doesn't need your password. The copy stays on your Mac and isn't synced. The details and the risks are in letting an agent work on sites that need your login.

CAPTCHAs and bot walls. Stop. Don't have an agent solve or route around them. Platforms have started suing over getting around anti-bot measures, not only over scraping itself: Google sued SerpApi in December 2025 on exactly that ground. A field you can only fill by getting past a bot wall is a field to fill by hand, or to drop.

How do you avoid false alarms from A/B tests and banners?#

A monitor that goes off every week gets ignored within a month. These rules keep the diff quiet until something real happens:

  • Compare extracted fields, not page text. "Pro, $49, monthly, per seat" either changed or it didn't. Rotating testimonials, a new logo strip and a reworded paragraph shouldn't count.
  • Require two sightings. Pricing A/B tests show different visitors different numbers. A change seen on two separate reads, or on two consecutive weeks, is real. A change seen once goes under "Watching".
  • Fix the viewing conditions. Same toggle position (monthly), same currency and region, logged out. Prices that change with your location aren't changes. Record the currency with the value.
  • Keep an ignore list. Cookie notices, promo banners ("20% off this week"), countdown timers and chat widgets. A limited-time discount is worth a note in "New signals", not a price change in the ledger.
  • Keep the evidence. The quote in each row is the proof. When a number moves, both the old and the new quote are in the change log, and that's usually enough to see whether it's a test.

Template: the competitor matrix columns#

Copy this into competitor-ledger.csv. The rows describe a made-up company, to show the format:

competitor,field,value,source_url,quote,checked_on,source_type,status
Acme Analytics,price_pro_monthly,49 USD per seat,https://acme.example/pricing,"Pro $49 per seat / month, billed monthly",2026-09-14,first-party,verified
Acme Analytics,price_enterprise,not public,https://acme.example/pricing,"Enterprise: Contact sales",2026-09-14,first-party,verified
Acme Analytics,limit_pro_projects,25 projects,https://acme.example/docs/limits,"Pro workspaces can have up to 25 projects",2026-09-14,first-party,unverified
Acme Analytics,icp,mid-market finance teams,https://acme.example,"Built for finance teams at growing companies",2026-09-14,first-party,verified
Acme Analytics,feature_sso,Enterprise only,https://acme.example/pricing,"SAML SSO — Enterprise",2026-09-14,first-party,unverified
Acme Analytics,positioning_headline,Close the books in days,https://acme.example,"Close the books in days, not weeks",2026-09-14,first-party,unverified
Acme Analytics,hiring_sales_open_roles,6,https://acme.example/careers,"Sales (6 open roles)",2026-09-14,first-party,unverified
Acme Analytics,review_rating,not collected,,,2026-09-14,,

The wide matrix, one row per competitor, generated from the ledger:

competitorICPentry pricemid-tier priceenterprisekey gaps vs uspositioningsales roles openlast changed

And the weekly change log skeleton:

# Competitor changes — week of 2026-09-14
## Confirmed
- Acme Analytics · price_pro_monthly: 49 → 59 USD per seat. Source, old quote, new quote.
## Watching
## New signals

The same structure works for other research lists. Building a B2B lead list with an agent uses the one-row-per-verified-fact idea for prospects.

Where does Universe fit, and when is something else better?#

Universe is a Mac app that runs agents on the Claude or ChatGPT account you already pay for. For this job it covers each piece above in one place. Agents search the web, read pages in a Chrome signed in as you, and write the ledger, matrix, battlecard and deck as real files. Recurring jobs run on schedule. Version history shows what changed in each file. You can save the instructions as a skill so every weekly run follows the same rules. The browser and schedules are on the free plan; see pricing for the limits, and features for the rest.

Something else is the better choice in these cases:

  • You only need an alert when a page changes, and your computer is often off. A cloud page monitor like Visualping checks on a fixed interval whether your Mac is on or not. Universe's schedules need a Mac that's awake.
  • You run a large sales team that lives in Salesforce. Klue and Crayon deliver battlecards into the tools sellers already use and add win-loss programmes. That's a different job from keeping a sourced sheet, and they're built for it.
  • You're on Windows or Linux. Universe is Mac only. A DIY pipeline or a cloud tool will serve you better.

If you're a small team that wants a competitor sheet you can trust, rebuilt from sources every week, download Universe and start with Step 1 on your three closest competitors. If the agent-workspace idea is new to you, what an AI agent workspace is explains it in plain terms.

Questions#

How accurate is AI competitive analysis?
It is accurate when every claim carries the page it came from and the exact text it was read from, and weak when it doesn't. The common errors are predictable: annual prices read as monthly, per-seat read as flat, an old blog post cited as the current price, or a partner's product mixed up with the competitor's. Require a source and a quote for every cell, then check the few claims your team repeats most by hand.
Is it legal to scrape competitor websites with AI?
In the US, reading public pages that anyone can see without logging in is generally not a computer-crime issue after hiQ v. LinkedIn (Ninth Circuit, 2022). Contracts are a separate question. hiQ still paid $500,000 in a 2022 consent judgment over breaching LinkedIn's terms. Once you log in and accept terms, those terms bind you. Stay logged out where you can, go at a human pace, don't bypass CAPTCHAs, and ask a lawyer about anything commercial.
How often should competitor monitoring run?
Weekly suits most teams. Pricing pages, changelogs and careers pages rarely change more than a few times a month, and a weekly diff is short enough that someone actually reads it. Daily checks make sense for the week around a competitor's launch or a price change you expect. Checking every hour mostly finds A/B tests and rotating banners.
Can AI find competitor pricing that is only available by demo request?
Not honestly from the pricing page, because the number isn't there. A good agent records the price as not public and writes down what the page does say, such as per seat or starting from. It can also collect the public signals around it: plan limits in the docs, prices some vendors list on cloud marketplaces, and user-reported prices on review sites, each marked as a third-party estimate. It should never invent a figure.
What should an AI competitor analysis template include?
One row per claim, not one row per competitor. The minimum columns are competitor, field (price, plan, ICP, feature, positioning, hiring, reviews), value, source URL, the exact quote, the date checked, and a status of unverified, verified or not public. The wide comparison matrix, the battlecard and the weekly change log are all generated from that one file.