Use AI for the reading, not the finding. Pull a dataset from a source that only contains people spending real money, then use a model to screen, categorise, and summarise it. Asking a model to name your competitors from its own knowledge returns a plausible list rather than a real one, and plausible is the failure mode that costs you the most time.
Why not just ask the model
Because you get a list weighted toward whoever had the most written about them. It will confidently include companies that have pivoted or closed, and it will miss the small advertiser quietly outspending everyone in your category right now. Neither error announces itself.
The fix is to change the model’s job. It should not be the source of facts. It should be the thing that reads a large pile of real facts faster than you can.
Start with a source that filters for money
The best free competitor data is a public ad library, and the reason is the filter rather than the fields. Everyone in the results is spending money right now. A directory lists whoever registered. An ad library lists whoever is currently paying to be seen, which is a far more useful definition of “competitor.”
It also gives you the one field that substitutes for performance data. There is no spend or conversion number, but there is a start date and an active flag, and nobody keeps paying to run a losing ad. I have written up how to read longevity as a conversion signal separately, because it is the technique that makes the whole exercise worth doing.
The pipeline
| Stage | Who does it | Note |
|---|---|---|
| Pull ads by keyword | Script | Cache every raw response |
| Screen 585 → 30 real competitors | AI | Most results are adjacent, not competing |
| Categorise offers and price tiers | AI | Good at consistent buckets across hundreds of items |
| Compute longevity | Script | Arithmetic; never ask a model to do this |
| Visit sites, check claims | You | Ads and sites disagree more than you expect |
| Decide what it means | You | The only step that produces value |
Cache every raw response. This is the single most useful engineering decision in the whole workflow. It means you can re-run every filter, re-ask every question, and change your mind about the categories without spending a credit twice. My sweep cost 158 credits, and it would have cost several times that without caching, because the categories were wrong on the first two attempts.
What AI is genuinely good at here
Screening at volume. Going from 585 advertisers to the 30 actually selling what you sell is a judgement call repeated hundreds of times, applied consistently. That is exactly the shape of task where a model beats a tired human.
Consistent categorisation. Sorting 866 ads into offer types and price tiers by hand means the buckets drift by ad 300. A model applies the same definition to the last one as the first.
Summarising a long tail. After the top ten competitors, reading the rest yourself has terrible returns. A model can compress the remainder into “nothing new here except X.”
What it is bad at, and how it fails
Arithmetic on dates. Compute longevity in code. A model asked to work out days-live across hundreds of records will produce numbers that look right and are not, and there is no visual tell.
Knowing what it did not see. This is the dangerous one. If your data is truncated, the summary will be confident and wrong, and nothing in the output will indicate it was working from a partial set.
Judging significance. A model will faithfully report that four companies offer guarantees. It will not tell you that this is the most important sentence in the study. Deciding what matters is the part you cannot delegate, and it is the part that is worth money.
Three traps that produce confident wrong answers
All three cost me real time, and all three share a root cause: a response describes what it contains, never what it omitted.
Silent truncation. Results come back a page at a time. A response holding exactly the page size always has more behind it. Reading page one and stopping made every advertiser look far newer than they were, understating longevity roughly tenfold on my first pass. Any round number equal to your page size is a truncation, not a total.
False zeros. A name-based search that resolves the wrong record returns a legitimate, well-formed, completely misleading empty result. Emptiness reads as a finding, so nobody retries it. I wrote this one up separately as the false-zero machine.
Merging on the wrong key. Combining paginated results on anything derived from a name splits one advertiser into several fake competitors, inflating how crowded your market looks and deflating every per-competitor count.
What to actually extract
Having done this, the fields that repaid the effort:
- Days live per creative. The proof signal. Everything else is context.
- The published price, and where it appears. In my market only 3 of 30 published one on their own site, which turned out to be the most commercially useful finding in the study.
- Guarantee wording, verbatim. Paraphrasing destroys the thing you are studying.
- Whether the ad destination still works. Free to check. I found a company that had paid for 564 days of traffic into a 404.
- Whether the ad and the site agree. One company advertised a flat $10,000 while its site said “from $5K.”
Make it repeatable
The first sweep tells you the shape of the market. The diff between sweeps tells you who entered, who died, and which offers survived — and that is worth far more than any single snapshot.
Because raw responses are cached, a re-run is cheap. Put it on a schedule, keep the scripts, and treat the output as a market radar rather than a one-off report.
FAQ
How do you research competitors with AI?
Use it for reading, not finding. Pull a real dataset from a money-filtered source, then have a model screen, categorise, and summarise it.
What is the best free source?
Public ad libraries. Everyone in the results is spending money right now, and start dates let you infer which offers work.
What does a sweep cost?
Mine was 158 API credits for 866 ads across 30 companies. The expensive part is deciding what question you are answering.
Can I just ask a chatbot who my competitors are?
You will get a plausible list, not a real one — missing current small spenders and including companies that have closed.
The study this came from: 866 ads from 30 custom software companies. Want it run on your category? Tell me what you sell.