Custom labels uit Channable hergebruiken in ChatGPT Ads
Je marge- en seizoenslabels uit Google Ads en Microsoft Ads kun je in ChatGPT Ads opnieuw gebruiken. In deze praktijktest laat ik zien hoe ik dat in Channable opbouwde, welke fout ik eerst maakte en wat er daarna in de interface verscheen.
10 september 2026
Praktijktest en documentatiecontrole: 9 september 2026.
In het kort
Je kunt je bestaande custom labels voor Google Ads en Microsoft Ads hergebruiken in ChatGPT Ads door ze vanuit Channable samen te voegen in het feedveld ads_metadata. In mijn CSV-feed doe ik dat met een tekstveld waarin de gevulde labels automatisch als JSON worden opgebouwd. Na uploaden verscheen Custom Label 0 tussen de productfilters van mijn ChatGPT Ads-advertentiegroep.
Je bestaande regels voor marge, seizoen of productgroepen blijven behouden. Je voegt alleen de omzetting voor de ChatGPT-feed toe. Daarmee kun je producten selecteren voor verschillende advertentiegroepen, zonder alle labelregels opnieuw te bedenken.
Dit stappenplan is voor marketeers die hun feeds in Channable beheren en al een werkende ChatGPT Ads-feed via CSV en SFTP hebben. De regelset die je bouwt bestaat uit acht secties: een start, vijf labelsecties, een afsluiting en een zoek-en-vervangstap.
Een voorbeeld van de inhoud van ads_metadata:
{"custom_label_0":"high_margin","custom_label_2":"winter"}Let op: je importeert hiermee geen campagnes of instellingen uit Google Ads. Je hergebruikt de productlabels uit dezelfde brondata.
Waarom ik dit wilde uitzoeken
ChatGPT Ads toont standaard productfilters als merk, prijs en productcategorie. Je eigen custom labels staan er niet vanzelf tussen, en juist daarmee bepaal ik welke producten samen een advertentiegroep vormen.
Tijdens mijn eerste tests met ChatGPT Ads wilde ik niet alleen een productfeed uploaden. Ik wilde ook kunnen bepalen welke producten samen in een advertentiegroep terechtkomen.
In Google Ads en Microsoft Ads werk ik daarvoor graag met custom labels. Een product met een hoge marge wil ik anders kunnen behandelen dan een product waarop weinig overblijft. En een seizoensartikel hoeft niet dezelfde aanpak te krijgen als een product dat het hele jaar relevant is.
Die indeling had ik in Channable al gemaakt. Het leek me onnodig om voor een nieuw advertentiekanaal opnieuw alle producten te gaan indelen. Ik zocht dus een manier om dezelfde waarden ook daar bruikbaar te maken.
Dat past bij hoe ik naar SEA voor webshops kijk: de commerciële logica achter je productselectie hoeft niet bij ieder kanaal opnieuw te beginnen.
Wat zijn custom labels en wat doe je ermee in ChatGPT Ads?
Custom labels zijn zelfgekozen kenmerken in je productfeed waarmee je producten indeelt. Google en Microsoft ondersteunen vijf labelvelden, van custom_label_0 tot en met custom_label_4; de betekenis van die velden bepaal je zelf. 1, 2
Een mogelijke indeling is:
| Veld | Gebruik | Voorbeeldwaarden |
|---|---|---|
custom_label_0 | Marge | high_margin, low_margin |
custom_label_1 | Productgroep | panelen, accessoires |
custom_label_2 | Seizoen | winter, all_year |
custom_label_3 | Performancegroep | bestseller, test |
custom_label_4 | Advertentieselectie | active, not_active |
Dit is een voorbeeld, geen indeling die je moet overnemen. In mijn eerste test gebruikte ik binnen label 0 bijvoorbeeld ook not_active. Het uitgangspunt was juist om mijn bestaande labels te behouden.
In ChatGPT Ads wilde ik die labels gebruiken voor productsegmentatie. OpenAI beschrijft ads_metadata als een veld voor aanvullende productfilters, waarmee je producten voor advertentiegroepen kunt organiseren. 3
Een label als high_margin is daarbij alleen een kenmerk. Het is geen opdracht aan ChatGPT Ads om automatisch meer te bieden of de marge te berekenen.
Waarom werkt custom_label_0 direct naar ads_metadata mappen niet?
Mijn eerste mapping leek logisch:
custom_label_0 → ads_metadataIn de CSV-preview stond vervolgens alleen:
low_marginDaarmee stuurde ik wel de waarde mee, maar niet de naam van het label waar die waarde bij hoorde.
De structuur die ik nodig had, was:
{"custom_label_0":"low_margin"}OpenAI specificeert ads_metadata als een object met tekstwaarden. Bij een CSV-export moet zo'n object als JSON in de cel staan. Alleen een veld hernoemen naar ads_metadata bouwt dat object dus niet voor je op. 4
Ik heb ook een objectveld met een subveld in Channable geprobeerd. In de mapping van mijn export kon ik alleen het subveld selecteren. Het resultaat bleef daardoor een losse labelwaarde.
Uiteindelijk bleek in mijn CSV-opzet een tekstveld met de volledige JSON-inhoud te werken. De CSV-preview was hier nuttiger dan de naam of het type van het interne veld: daarin zag ik wat er daadwerkelijk werd geëxporteerd.
Zo heb ik de regels in Channable ingericht
Ik gebruik één extra tekstveld en een regelset die de bestaande custom labels uitleest. Voor lege labels wordt niets toegevoegd. Ik hoef daardoor niet voor iedere combinatie een aparte JSON-waarde te maken.
De totale opbouw bestaat uit acht secties: één startsectie, vijf labelsecties, één afsluitsectie en één zoek-en-vervangsectie.
Deze uitleg gaat uit van een werkende ChatGPT Ads-feed via CSV en SFTP, zoals in mijn test. De overige verplichte productvelden moet je dus al correct aanleveren. Nog geen toegang tot ChatGPT Ads? Hoe adverteren in ChatGPT er in Nederland voor staat, lees je op onze ChatGPT Ads-pagina.
1. Behoud je bestaande custom-labelregels
Laat de regels die high_margin, low_margin, winter of andere waarden toekennen gewoon staan. De nieuwe regelset komt na de regels die de labels vullen.
Controleer wel of die waarden in je ChatGPT-export beschikbaar zijn. Labels die uitsluitend binnen de regels van je Google-export worden gevuld, moet je ook voor deze export laten berekenen. Je kunt daarvoor dezelfde logica kopiëren of onderbrengen in een gedeelde masterregelgroep. Channable ondersteunt masterregelgroepen voor meerdere exports. 5
De voorwaarden hoeven inhoudelijk niet te veranderen. Je hoeft alleen te kijken op welke plek je ze toepast.
2. Maak één tekstveld aan
Mijn extra projectveld heet:
chatgpt_ads_metadataIk heb dit aangemaakt als Tekst, zonder lijst met meerdere waarden. Dit veld bevat straks de complete JSON voor één product.

De naam van dit interne veld mag je zelf kiezen. De naam van het uiteindelijke kanaalveld is ads_metadata.
3. Begin voor ieder product met een openingsaccolade
Maak een regel, bijvoorbeeld met de naam ChatGPT Ads metadata opbouwen. Begin met deze sectie:
ALS: alle items
DAN: neem chatgpt_ads_metadata
ACTIE: plaats waarde
WAARDE: {Hiermee begint de opbouw voor ieder product opnieuw. Je voorkomt dat je nieuwe fragmenten achter een al bestaande JSON-waarde plakt.
De volgende stappen zet je als losse secties in dezelfde regel. Channable voert regels en secties van boven naar beneden uit. Houd de volgorde hieronder daarom aan. 6
4. Voeg ieder gevuld custom label toe
Voeg voor custom_label_0 een sectie toe met deze voorwaarde:
ALS: custom_label_0 niet leeg is
DAN: neem chatgpt_ads_metadata
ACTIE: combineer waardeMet combineer waarde kun je vaste tekst en waarden uit andere velden samenvoegen. 7
Zet in de balk waarin je de combinatie samenstelt deze vier onderdelen direct achter elkaar:
| Onderdeel | Wat je invoegt |
|---|---|
| 1 | Het veld chatgpt_ads_metadata |
| 2 | De vaste tekst ,"custom_label_0":" |
| 3 | Het veld custom_label_0 |
| 4 | De vaste tekst " |
Schematisch ziet dat er zo uit:
[chatgpt_ads_metadata] + ,"custom_label_0":" + [custom_label_0] + "De vierkante haken en plustekens zijn alleen uitleg. In Channable selecteer je de velden als veldblokjes. Je typt de plustekens, haken en extra spaties niet in de waarde.
Voor een product met high_margin staat er na deze sectie:
{,"custom_label_0":"high_margin"Dit is nog geen complete JSON. Het veld is nog niet af.

Herhaal deze sectie voor custom_label_1, custom_label_2, custom_label_3 en custom_label_4. Pas telkens het nummer aan in de voorwaarde, de vaste tekst én het geselecteerde bronveld. Iedere sectie draait alleen als het betreffende label niet leeg is.
Gebruik alleen bronvelden die in je project bestaan. Een leeg veld overslaan is iets anders dan verwijzen naar een veld dat nog niet is aangemaakt.
Het eerste veldblokje, chatgpt_ads_metadata, blijft in iedere sectie staan. Daarmee neem je het resultaat van de vorige secties mee. Zonder dat blokje overschrijf je wat je al had opgebouwd.

5. Sluit de JSON af en verwijder de eerste komma
Na de vijf labelsecties voeg je een sectie voor alle items toe:
ALS: alle items
DAN: neem chatgpt_ads_metadata
ACTIE: combineer waarde
COMBINATIE: [chatgpt_ads_metadata] + }Daarna kies je in dezelfde regel voor vervang waarde; bij mij ziet dat eruit zoals op de screenshot hieronder. Ook deze sectie geldt voor alle items:
ALS: alle items
DAN: neem chatgpt_ads_metadata
ACTIE: vervang waarde
VAN: {,
VERVANG MET: {Laat het vinkje Gebruik regex uit staan; in mijn instelling staat Hoofdlettergevoelig ook uit. Je vervangt hier letterlijk de combinatie {, door {; er is geen regex-patroon nodig.
Waarom die eerste komma? Ieder gevuld label krijgt hetzelfde fragment met een komma ervoor. Daardoor hoef je niet apart te bepalen welk label als eerste gevuld is. Aan het einde haal je de overbodige komma na de openingsaccolade weg.

Als alleen label 0 en label 2 gevuld zijn, wordt het resultaat:
{"custom_label_0":"high_margin","custom_label_2":"winter"}Probeer de opbouw zelf
Zet labels aan of uit en zie hoe de regelset in Channable de JSON voor ads_metadata opbouwt, komma voor komma.
Staat een label uit, dan is het veld leeg in je feed en slaat de regelset het over.
De regelset, stap voor stap
- start
{ - label 0
,"custom_label_0":"high_margin" - label 1overgeslagen, leeg
- label 2
,"custom_label_2":"winter" - label 3overgeslagen, leeg
- label 4overgeslagen, leeg
- afsluiten
} - vervangenvervangt {, door {voor
{,"custom_label_0":"high_margin","custom_label_2":"winter"}na{"custom_label_0":"high_margin","custom_label_2":"winter"}
{"custom_label_0":"high_margin","custom_label_2":"winter"}6. Map het complete tekstveld naar ads_metadata
In de mapping van mijn ChatGPT-feed heb ik vervolgens dit ingesteld:
| Intern veld in Channable | Kanaalveld |
|---|---|
chatgpt_ads_metadata | ads_metadata |
Je exporteert dus de complete waarde die je net hebt opgebouwd, in plaats van het losse custom_label_0 of een subveld.
Mijn Google- en Microsoft-mappings hoeven daarvoor niet aangepast te worden. Die kunnen de oorspronkelijke custom-labelvelden blijven gebruiken.
7. Controleer de daadwerkelijke CSV-output
Open in Channable Bekijken en exporteren en bekijk de CSV-preview. Daar kun je de uiteindelijke export controleren, in plaats van alleen de interne projectvelden. 8
In de kolom ads_metadata wil je bijvoorbeeld dit zien:
{"custom_label_0":"low_margin","custom_label_2":"winter"}Controleer een product met één label, een product met meerdere labels en een product waarbij label 0 leeg is maar een later label wel gevuld is. Daarmee test je ook of het verwijderen van de eerste komma goed werkt.
Let op met bijzondere tekens. Deze eenvoudige combinatie voegt geen JSON-escaping toe. Gebruik voor deze opzet gecontroleerde labelwaarden zoals high_margin en winter. Waarden met dubbele aanhalingstekens, backslashes of regeleinden moet je eerst correct laten escapen. Anders kan de JSON ongeldig worden.
In een gedownload CSV-bestand kan een cel er zo uitzien:
"{""custom_label_0"":""high_margin""}"Die dubbele aanhalingstekens zijn CSV-escaping. Voeg ze niet zelf aan je interne veldwaarde toe. OpenAI beschrijft deze notatie ook in de feedspecificatie. 4
8. Upload de feed en controleer het filter in ChatGPT Ads
Na de controle heb ik mijn feed opnieuw via SFTP aangeleverd. OpenAI geeft aan dat verwerking enkele minuten tot enkele uren kan duren. Controleer de nieuwe upload in Uploadgeschiedenis en kijk ook naar eventuele fouten. 3
Daarna opende ik in ChatGPT Ads mijn advertentiegroep en ging ik naar:
Productfilters → Filter toevoegen
Daar stond nu Custom Label 0 tussen. Dat was de bevestiging die ik zocht: het label was nu ook echt bruikbaar in de interface van ChatGPT Ads.
Nagetekend in onze eigen stijl: zo verscheen Custom Label 0 tussen de productfilters van mijn advertentiegroep.
Hoe segmenteer je hiermee je ChatGPT Ads-campagnes?
Gebruik de labels om per advertentiegroep een productselectie te maken. Het campagnebudget stel je op campagneniveau in; de productfilters bepalen welke producten binnen de advertentiegroep mogen worden gebruikt. 9
Een eenvoudige opzet die ik hiermee zou maken:
| Advertentiegroep | Productfilter |
|---|---|
| Hoge marge | Custom Label 0 is high_margin |
| Lage marge | Custom Label 0 is low_margin |
Begin bijvoorbeeld met alleen de groep die je wilt testen. Je hoeft niet automatisch voor iedere labelwaarde een advertentiegroep aan te maken.
Voor afzonderlijke budgetten kun je de segmenten over aparte campagnes verdelen. Binnen de advertentiegroepen van die campagnes pas je de bijbehorende productfilters toe. Het label zelf regelt geen budgetverdeling. 9
Ik zou liever starten met twee productgroepen waar ik echt een andere beslissing voor wil nemen, dan meteen alle combinaties van vijf labels uitrollen. De structuur moet het testen makkelijker maken. Als hij vooral beheer oplevert, schiet je er weinig mee op.
Selecteer bewust wat wél mag meedoen
In mijn labels kwam ook not_active voor. Dat is een zelfgekozen waarde, geen automatische uitschakelknop.
Met een filter op alleen high_margin neem je producten met low_margin, not_active of een leeg label niet mee in die advertentiegroep. Controleer wel je andere advertentiegroepen: een groep zonder beperkende filters kan dezelfde producten nog steeds toelaten. 9
Kijk bij het instellen ook naar het aantal overeenkomende producten. OpenAI noemt dat aantal als dé controle voor je productselectie. Het tabblad Producten is een rapportageoverzicht en dus niet dezelfde check. 3
Wat deze test wel en niet heeft aangetoond
Ik heb in deze opzet de JSON opgebouwd, de export gecontroleerd en daarna Custom Label 0 in de filterlijst van ChatGPT Ads zien verschijnen.
Dat is geen bewijs dat een label automatisch meer omzet oplevert, of dat iedere mogelijke metadata-key in ieder account beschikbaar is. Test een extra label daarom eerst met een herkenbare waarde en controleer de productselectie voordat je er je campagnes op inricht.
Voor mij zit de winst voorlopig in het beheer. Ik kan de productindeling die ik al had, ook voor ChatGPT Ads gebruiken. Ik hoef geen tweede set marge- of seizoensregels te onderhouden die later van de oorspronkelijke indeling kan gaan afwijken.
Veelgestelde vragen
Moet ik mijn bestaande custom-labelregels aanpassen?
De inhoudelijke regels kunnen blijven staan. Zorg dat hun uitkomsten ook in je ChatGPT-export beschikbaar zijn. Daar voeg je de regelset toe die de gevulde labels omzet naar ads_metadata. De bestaande Google- en Microsoft-mappings kunnen ongewijzigd blijven.
Moet ik alle vijf custom labels vullen?
Nee. De beschreven regelset neemt alleen niet-lege waarden mee. Met alleen custom_label_0 krijg je dus een object met één label. Als alle labels leeg zijn, bouwt de regelset {} op. OpenAI leest dat als een product zonder metadata. 4
Moet ads_metadata in Channable een objectveld zijn?
Niet in de CSV-opzet die ik hier heb getest. Ik gebruik een tekstveld met complete JSON. Mijn eerdere mapping van een objectsubveld exporteerde alleen de losse labelwaarde. Controleer daarom altijd de uiteindelijke CSV, niet alleen het interne veldtype.
Kan ik custom_label_0 ook als losse feedkolom aanleveren?
OpenAI documenteert ook een Google-compatibele feedroute met custom_label_0 tot en met custom_label_4 als filterkolommen. Dat hangt af van het ingestelde feedformaat en de configuratie. In dit artikel beschrijf ik de route via ads_metadata, omdat ik die zelf heb getest. Er zijn dus meer aanlevermethodes. 4
Waarom verschijnt mijn custom label niet in ChatGPT Ads?
Controleer eerst of de juiste feed is bijgewerkt, of de verwerking klaar is en of de export geldige JSON bevat. Blijft het filter ontbreken, controleer dan of die metadata-key voor je integratie beschikbaar is. Een geslaagde bestandsoverdracht bewijst niet dat ieder veld als filter is verwerkt. 3, 4
Wordt een product met not_active automatisch uitgesloten?
Nee. not_active is in deze opzet alleen een labelwaarde. Je moet je productfilters zo instellen dat die producten niet binnen de gewenste selectie vallen. Controleer daarbij alle relevante advertentiegroepen, niet alleen de groep waarin je net een filter hebt toegevoegd.
Kopieer ik hiermee ook biedingen en campagne-instellingen uit Google Ads?
Nee. Deze regelset kopieert uitsluitend waarden uit je productvelden naar de metadata van je ChatGPT-feed. Campagnes, budgetten, biedingen en meetinrichting zijn afzonderlijke instellingen. Dezelfde productsegmentatie betekent dus niet dat de volledige campagneopzet wordt overgenomen.
Kan ik performance-labels uit Google Ads één op één gebruiken?
Technisch kun je die waarden met dezelfde regelset meenemen. Ik zou ze wel als uitgangspunt voor een test behandelen. Dat een product in Google Ads een bestseller is, maakt het nog geen bewezen winnaar in ChatGPT Ads. Houd de herkomst van zulke labels herkenbaar en beoordeel de resultaten per kanaal.
Mijn advies: behoud je labelregels en test de productselectie
Je hoeft je productsegmentatie niet opnieuw te bedenken omdat er een advertentiekanaal bij komt. In mijn Channable-opzet was een extra tekstveld met een generieke regelset voldoende om de bestaande labels in de juiste vorm aan te leveren.
De belangrijkste controle kwam daarna: verscheen het label ook echt in ChatGPT Ads? Bij mij wel. De volgende stap is zorgen dat de filters precies de producten selecteren waarmee je wilt adverteren.
Een bruikbaar label is een begin; uiteindelijk moet je kunnen beoordelen wat de gekozen productgroep oplevert.
Technische bronnen
- Google Merchant Center: Custom label 0–4
- Microsoft Advertising: Products Resource
- OpenAI: Create Campaigns from Product Feeds
- OpenAI: Products, stable file-upload specification
- Channable: Create master rule groups
- Channable: Rule sections
- Channable: Combine value
- Channable: Preview & export
- OpenAI: Product Feeds for Ads
Alle bronnen geraadpleegd op 9 september 2026.