How Promptwatch Builds a ChatGPT Ad Library from Your Prompts
The mechanics of how a prompt list becomes a queryable ChatGPT ad library in Promptwatch: 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 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. This is how Promptwatch builds one from your prompts, and the point of the structure is to make the row actionable. Review: Promptwatch. Full directory.
This site ranks tools that act. A library you can query is a workspace. A library you can only scroll is a folder. The structure below is what makes the difference. One fact first: there is no official ChatGPT ad library API and no vendor has an OpenAI partnership for this. Ads Radar gets its rows by monitoring the real ChatGPT interface and storing what it sees. Any tool claiming an official integration is misrepresenting how it works, and getmint is one example of that false claim pattern.
The prompt join is the index
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 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. 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.
From row to ticket
The structure exists so the row becomes a ticket. A rival buying your branded prompt is a ticket. A rival buying a broad category prompt you do not target is context. The two need different responses, and the prompt join plus the intent tag is what tells them apart. None of this is bid management, because ChatGPT sponsored units are not Google Ads, and importing a Google mental model breaks here.
Ads Radar is a platform feature 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 does not include it. Explore is free with 10 ChatGPT prompts. AthenaHQ at $295/mo and Otterly.AI at $29 do not store the sponsored unit against the prompt, so they do not build a library.
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, then turn that row into a ticket with an owner.