DEV Community

Juan Torchia
Juan Torchia

Posted on • Originally published at juanchi.dev

OpenAI is selling ad placements by prompt relevance — I simulated it with my own logs

Why did it take us decades to realize Google was selling us as the product, but we already know exactly how it's going to work with LLMs before the ad unit even exists?

I spent three days processing the news that OpenAI now has an ad partner selling placements based on prompt relevance, and I couldn't shake this feeling of accelerated déjà vu. With web search, the corruption was slow. Years of innocent SEO, then black hat, then link buying, then Google Shopping, then ads dressed up as organic results. We noticed it gradually — like the proverbial boiling frog.

With LLMs the cycle is going to be different. We already know the mechanism. We can already project it. And that, paradoxically, makes it more disturbing, not less.

I grabbed my ChatGPT query logs from the last six months and got to work.

Prompt-relevance advertising in LLMs: how the model works

The announced mechanic is conceptually simple and operationally terrifying: an advertiser defines keywords, search intents, or user profiles. When your prompt matches that definition, OpenAI's ad partner can insert sponsored content into the response.

It's not a banner. It's not a result tagged with "Ad" in the corner. It's text generated inside the flow of a response you already trust.

The difference from Google is structural:

# Google: visible physical separation
[AD] Buy Nike sneakers - nike.com
[AD] Running shoe deals - amazon.com
---
Organic results:
1. Running shoe guide 2026...

# LLM with prompt-relevance ads: invisible separation
"For long-distance running, specialists recommend
footwear with superior cushioning. Brands like [SPONSORED_BRAND]
offer models with X technology that..."
# No dividing line. No label. Just flow.
Enter fullscreen mode Exit fullscreen mode

The question of whether OpenAI will clearly label sponsored content is legitimate. The more uncomfortable question is: does it matter if they label it, if the language model has already incorporated that content as part of its coherent response?

I trust a label inside a generated response less than I trust a visually separate banner. The very architecture of the LLM works against ad transparency.

I opened my logs. What I found before the product exists

I have a habit of exporting my ChatGPT conversations every two weeks and saving them to a local folder. Architecture notes, technical queries, post brainstorming. They are, basically, my externalized stream of thought.

I'm writing this with full awareness that I've already talked about what happens when your tools' data isn't as private as you think. With LLMs the vector is different, but the nerve is the same: the metadata of how you think is more valuable than the explicit content.

I ran a simple analysis on my last 340 queries:

import json
from collections import Counter
from datetime import datetime

# Load my ChatGPT exports
def analyze_prompts_for_ad_relevance(json_file):
    with open(json_file, 'r', encoding='utf-8') as f:
        conversations = json.load(f)

    prompts = []
    for conv in conversations:
        for message in conv.get('mapping', {}).values():
            if message.get('message', {}).get('author', {}).get('role') == 'user':
                content = message['message'].get('content', {})
                if isinstance(content, dict):
                    parts = content.get('parts', [])
                    text = ' '.join([p for p in parts if isinstance(p, str)])
                    if text.strip():
                        prompts.append(text)

    return prompts

def project_ad_relevance(prompts):
    """
    Simulating what a prompt-based ad targeting system would do.
    Real categories based on my own queries.
    """
    categories = {
        'hosting_infrastructure': [
            'railway', 'vercel', 'docker', 'deployment', 'postgres',
            'server', 'vps', 'cloud', 'kubernetes'
        ],
        'dev_tools': [
            'vscode', 'cursor', 'ide', 'extension', 'plugin',
            'typescript', 'eslint', 'prettier'
        ],
        'software_purchase_decisions': [
            'best', 'alternative', 'compare', 'recommend',
            'worth it', 'price', 'cost', 'free'
        ],
        'problems_with_existing_product': [
            'not working', 'error', 'problem with', 'bug',
            'how to fix', 'solution for'
        ]
    }

    results = {cat: [] for cat in categories}

    for prompt in prompts:
        prompt_lower = prompt.lower()
        for category, keywords in categories.items():
            if any(kw in prompt_lower for kw in keywords):
                results[category].append(prompt[:100])  # First 100 chars only

    return results

# Run the analysis
prompts = analyze_prompts_for_ad_relevance('chatgpt_export_2026.json')
results = project_ad_relevance(prompts)

for category, queries in results.items():
    print(f"\n=== {category.upper()} ===")
    print(f"Monetizable queries: {len(queries)}")
    if queries:
        print(f"Example: {queries[0]}")
Enter fullscreen mode Exit fullscreen mode

Real results:

  • hosting_infrastructure: 47 monetizable queries. Railway, Vercel, and AWS competitors could bid on my deployment questions.
  • dev_tools: 89 queries. Cursor AI vs Copilot, VS Code extensions, tooling choices.
  • software_purchase_decisions: 31 queries. These are the most obvious — I'm literally asking for a recommendation.
  • problems_with_existing_product: 23 queries. This is the category that disturbed me most.

That last one is what made me close the laptop and go for a walk. When I ask ChatGPT how to solve a problem with a specific tool, I'm at peak frustration and peak openness to switching. I am exactly the qualified lead an advertiser would pay premium CPM for.

This isn't sci-fi. It's the same targeting every platform uses. Except the delivery vector is a voice I've already learned to treat as neutral.

The gotchas nobody is talking about yet

The hallucination-as-ad problem

LLMs already hallucinate brands and products that don't exist. How do you distinguish, inside a response, between a genuine hallucination and sponsored content that sounds equally fluent? A "sponsored" label in generated text has the same visual weight as any other sentence. The trust context was already established by the sentences before it.

Working with AI agents already requires thinking about who controls what gets executed and under what conditions. With ads in the loop, you're adding a layer of external intent that the agent can't declare — because it has no access to its own post-ad-deal training biases.

The agents-that-make-purchases problem

This is where the model breaks down conceptually. Today I ask ChatGPT what tool to use and then I go buy it. In the very near future — which is already arriving — an agent can receive the recommendation and execute the purchase directly.

We're already thinking about how to verify that an agent is who it claims to be. The next level is: how do you know that the action an agent is taking isn't influenced by sponsored content it processed as part of its own context?

The invisible system prompt problem

OpenAI has already modified model behavior between versions in ways that aren't always obvious. I've been tracking diffs in system prompts between Claude versions and the pattern is clear: behavior changes, documentation comes late. How are you going to audit whether a behavior change is a model improvement or an advertiser preference?

The outsourced trust chain problem

The ad partner is not OpenAI. It's a third party. With access to the relevance layer of your prompts. If any of this reminds you of what happened with the outsourced supply chain threat model, it's because the risk pattern is identical: you trust the primary vendor, but the attack vector is the partner you didn't even know existed.

// The real trust chain when you use ChatGPT with ads
interface TrustChain {
  openai: 'you trust directly';          // Your declared relationship
  adPartner: 'you never agreed to this'; // Who has your prompt
  advertisers: 'you have no idea who';   // Who bought your intent
  dataBrokers: 'could be more layers';   // Who knows
}

// This isn't paranoia. It's the declared business model.
Enter fullscreen mode Exit fullscreen mode

FAQ: advertising in LLMs and prompt relevance

How exactly does the prompt-relevance advertising system in ChatGPT work?

The model, based on what's leaked, works similarly to keyword targeting in search but applied to the semantic content of your prompt. The ad partner categorizes user intents and advertisers bid to appear in responses where those intents are present. The technical difference from Google is that there's no SERP — the content integrates directly into the generated response.

Will it be labeled as advertising?

OpenAI said yes, sponsored content will be labeled. The practical problem is that a text label inside a flow of generated text carries far less visual weight than a separate banner. The language model is also trained to generate coherent responses, which means sponsored content will be syntactically integrated with the rest of the answer.

Does OpenAI sell my prompts to advertisers?

The important technical distinction is between selling the content of your prompts and selling the inferred intent category. According to the announced model, advertisers buy relevance categories, not your raw prompts. That's the same thing the digital advertising ecosystem said in 2005. It's not necessarily a lie, but the history of ad tech suggests the distance between those two things tends to shrink over time.

Does this affect technical responses or only consumer ones?

This is the question I care most about. My analysis of my own logs shows that queries about dev tools, infrastructure, and architecture decisions are perfectly monetizable. If you're a developer using ChatGPT for technical decisions, your queries are qualified leads for software vendors. There's no reason the targeting would be limited to consumer queries.

Are there alternatives without this business model?

For now, yes — local models like Ollama with Llama or Mistral don't have an ad layer. But "for now" is the key phrase: the business model for closed LLMs eventually needs to monetize beyond subscriptions, and open LLMs have their own problem vectors. Diversifying what you use for what type of query becomes a reasonable strategy.

Should I change how I use ChatGPT knowing this?

Depends on what kind of queries you're making. For creative brainstorming or pure code, the impact is probably low. For queries that involve product comparisons, tool recommendations, or purchase decisions, the question of whether the response has an external influence vector is already legitimate. I started separating: technical queries where I want neutrality versus queries where I'm explicitly seeking a recommendation. It's not a solution, but it's awareness.

The model corrupts faster this time. That has to change something in us

With Google it took us years to learn to distinguish ad from organic, to develop ad blindness, to build the skepticism needed to navigate a contaminated SERP. We learned it slowly because the phenomenon developed slowly.

With LLMs the cycle is compressed. We already know the mechanism before the product exists. That gives us something we didn't have the first time: the ability to develop the appropriate skepticism before the behavior is already installed.

My practical conclusion, after reviewing my 340 queries and projecting which ones would be monetizable, is this: the problem isn't that ads exist in LLMs. The problem is that the LLM format has no honest structural separation between response and sponsored content. Google, with all its problems, at least maintains a left column and a right column. A SERP tells you visually "here's where the algorithm's choice ends and here's where what someone paid for starts."

A natural language response has no such separation possible. And that's a design problem that no text label is going to fully solve.

I'm going to keep using ChatGPT. But the next time it gives me a tool recommendation or suggests a platform for a project, I'm going to ask myself a question I didn't ask before: is this the best result for my context, or is it the best result for the context of someone who paid to be here?

I didn't have to ask that before. Now I do.

Have you analyzed your own logs yet? Export your ChatGPT conversations and check how many of your queries would be 'prompt-relevant' to an advertiser. The exercise is more disturbing than you'd expect.


This article was originally published on juanchi.dev

Top comments (0)