How Promptwatch Builds a ChatGPT Ad Library from Your Prompts
The mechanics of how a list of prompts becomes a ChatGPT ad library in Promptwatch: captures, the prompt join, advertiser domains, position, and the 90-day 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 that has no public directory, which means it has to be built from observation and indexed by the thing a brand team actually cares about, which is the prompt. This is how Promptwatch builds one from your prompts.
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 also 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. The prompt join is the difference between a screenshot collection and a library.
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 first is the prompt view, which 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 second is the advertiser view, which 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 third is the trend view, which 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 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.
The honest framing matters because it sets the right expectation. A library built on observation is a monitoring product with real limits. A library sold as an official feed implies completeness it cannot have. The first is a tool you can plan around. The second is a premise your plans will break on.
Where it sits in the plan
Ads Radar is a platform feature, not a standalone SKU. The commerce reports sit on Professional at $245/mo and above, and on the self serve agency plans (Kick-off $199, Growth $399, Scale $799). Essential at $95/mo covers mentions and citations but not the commerce views. Explore is free with 10 ChatGPT prompts. Site: promptwatch.com.
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.