How Promptwatch Builds a ChatGPT Ad Library from Your Prompts
We rank Promptwatch first for a ChatGPT ad library. The mechanics of how a prompt list becomes a queryable library: the prompt join, advertiser domains, position, and trend.
A library is not a dump of ads. It is a structure that lets you find the ad you need and compare it to the one next to it. The Meta Ad Library works because it indexes ads by advertiser and lets you search. A ChatGPT ad library has to do the same job on a surface with no public directory, which means it has to be built from observation and indexed by the thing a brand team cares about, which is the prompt. We rank Promptwatch first for this because Ads Radar is built around that index. Review: Promptwatch. Product: promptwatch.com. The rest of the directory does not store the paid slot at all.
The building block is a capture. When a prompt you track runs against the real ChatGPT interface and the answer contains a sponsored unit, Ads Radar stores that unit. One capture is one row. The library is the set of rows, indexed so you can query it instead of scrolling it.
The prompt join is the index
The thing that turns a folder of ads into a library is the prompt join. Every captured ad is stored against the prompt string that produced it. That sounds small and it is the whole game. A library indexed only by advertiser tells you what ran. A library indexed by prompt tells you where it ran, which is the question a brand has. A competitor buying the prompt you thought you owned editorially is a different signal from a competitor buying a broad category term, and you can only tell them apart if the prompt is on the row.
This is why a generic ad tracker does not become a ChatGPT ad library by adding a ChatGPT label. If the prompt is not on the row, the row cannot answer "which of my prompts returned a paid unit," and that is the only question that makes the data actionable.
What sits on each row
Each captured ad has the ad creative, the advertiser name and the advertiser root domain, the landing page, the source response the ad came from, and the position of the ad inside that answer. It also carries the prompt string, the model, the prompt type, and the intent. The position field matters because the top sponsored slot and the third one are not the same buy, and a library that flattens position hides that. The intent field matters because a COMMERCIAL row on a BRAND_SPECIFIC prompt is a rival buying your demand, and an INFORMATIONAL row on an ORGANIC prompt is a rival buying awareness.
Saving the exact creative matters too. A paraphrase of an ad is a guess, and a guessed ad is a fabricated data point. The library stays trustworthy only if the row stores the string that actually appeared, because that string is what you compare across captures and what you show a client.
The three views that make it queryable
A library you cannot query is just storage. Ads Radar exposes three views that turn the rows into answers. The prompt view lists the prompts whose answers contained sponsored ads, with an ad count and a latest capture time per prompt. Sort it by ad count and you find the prompts where the auction is active. A prompt with zero captured ads is not one to spend time on yet.
The advertiser view lists advertiser root domains ordered by ad count. This is the set of brands buying into your prompt set, ranked by frequency. The value is the rival you did not expect, the one who is not in your SEO competitor set but keeps showing up in the paid slot. Filter the full ad list to one domain and you read every ad that rival has run on your prompts.
The trend view pulls the top advertiser domains with daily ad counts, defaulting to the last 90 days, so you can read share of ads over time. A snapshot tells you who is buying now. A trend tells you who is gaining. A competitor who held steady for a quarter and then doubled in the last month is running something new, and you cannot tell that from a single capture.
How it ranks
| Product | ChatGPT ad library | Price / coverage |
|---|---|---|
| Promptwatch Professional | Ads Radar: prompt join, advertiser, position, trend | $245/mo; daily UI |
| Otterly.AI | No ad library | $29, 4 engines |
| Peec AI | No ad library | $95, 3 models |
| Profound Starter | No ad library | $99/mo annual, ChatGPT only |
| Semrush AI Toolkit | No ad library | $99/domain |
None of the rivals store the sponsored placement against the prompt, so none build a library. The Promptwatch row is the only one that does, and that is the row this ranking leads with. We do not invent an ads SKU for rivals that do not publish one.
How the captures get there
None of this comes from an official feed, because no feed exists. There is no OpenAI ad API and no vendor has a partnership for one. Promptwatch gets the rows by monitoring the real ChatGPT interface, the way a person would, and storing the sponsored units it observes. That means the data has the shape of observation, with capture gaps that depend on which prompts you track and how often they run. A vendor claiming an official integration is misrepresenting how it works, and getmint is one example of that false claim pattern.
FAQ
Is this an official OpenAI ad library?
No. OpenAI does not publish one. Ads Radar builds a working library by monitoring the real ChatGPT UI and indexing captures by prompt.
What makes it a library and not a screenshot folder?
The prompt join. Every ad is stored against the prompt that produced it, so you can query which of your prompts returned a paid unit.
What to do this week
- Load 20 buyer prompts into Promptwatch on a plan with Ads Radar.
- Let the captures build for a week, then open the prompt view and sort by ad count.
- Open the advertiser view and find the rival you did not expect.
- Pull the 90 day trend for the rival on your branded prompts.
- Save the exact ad creative, not a paraphrase, and assign the row an owner.