Marktplaats.nl Publisher
/install marktplaats-publisher
Marktplaats verkoopassistent: background-first, SEO rond 3500 tekens, self-healing
Publicatie En Platformscope
Publisher: Roel Broersma.
- Zoek- en categoriecommands zijn cross-platform en vereisen Node.js 18+.
- De volledige plaatsings- en bewerkworkflow is op dit moment macOS/Safari-gebaseerd, omdat de probe-helper Safari via AppleScript gebruikt als ingelogde browsercontext.
- Safari wordt gebruikt als sessiedrager; cookies, sessietokens en XSRF/auth-waarden mogen niet worden geëxporteerd of gelogd.
- Niet-macOS omgevingen kunnen de zoek/category CLI en de procedurele instructies gebruiken, maar hebben voor publiceren/bewerken een eigen browser-session adapter nodig.
- Chrome-ondersteuning is conceptueel mogelijk, maar deze publicatie bevat nu een Safari-gebaseerde helper.
Doel
Gebruik deze skill voor Marktplaats-advertenties: voorbereiden, categorie/formulier inspecteren, foto's uploaden, plaatsen, bewerken, controleren en lokaal registreren.
Belangrijk uitgangspunt: werk zoveel mogelijk background-first en sessie-veilig. Vermijd storende foreground-browserbediening. Gebruik Safari/Chrome alleen als sessiebron of geïsoleerde automation-context wanneer HTTP/browser-fetch niet genoeg is.
Commentaar: bestuur niet zomaar de actieve browser van de gebruiker. De juiste volgorde is: eerst API/scrape/browser-context, pas daarna een geïsoleerde browser-tab als het echt moet.
Werkingsgebied
Deze skill is vooral bedoeld voor normale, lage-volume Marktplaats-verkoop:
- Een enkele advertentie voorbereiden, plaatsen, bewerken of controleren.
- Kladtekst omzetten naar een nette, feitelijke en SEO-rijke advertentietekst.
- Categorieën en formulierstatus actueel bepalen via scraping/API/browser-context in plaats van oude vaste category-id's.
- Foto's uploaden en pas als geslaagd beschouwen wanneer form state en zichtbare teller kloppen.
- Werken met een al ingelogde Marktplaats-sessie zonder cookies of tokens te exporteren.
- Lokale privéregistratie bijhouden van concept, prijs, foto's, status, live URL en verificatie.
Niet bedoeld voor:
- Bulkposten, professionele campagnevoering of automatisch doorplaatsen van veel advertenties.
- Omzeilen van login, captcha, MFA, WAF, anti-bot of andere beveiligingsmechanismen.
- Stil selecteren van betaalde promoties, betaalde bundels, urgent/topadvertentie/homepage-opties of upsells.
- Doorzetten wanneer Marktplaats voor de categorie of accountstatus geen gratis route aanbiedt.
- Verkoop van gereguleerde, risicovolle of policy-gevoelige goederen zonder aparte menselijke check.
- Veronderstellen dat Marktplaats een stabiele API heeft; UI, React-state, categorieën en validatie kunnen wijzigen.
Commentaar: behandel deze skill als een veilige verkoopassistent voor normale advertenties, niet als algemene Marktplaats-bot.
Kernregels
- Publiceer of wijzig alleen na expliciete opdracht voor die specifieke advertentie.
- Geen betaalde opties zonder expliciet akkoord.
- Geen cookies, sessietokens, XSRF-tokens of auth-waarden tonen of loggen.
- Geen captcha, login, WAF of beveiligingsstap omzeilen.
- Stop bij betaalflow, captcha, login challenge of onduidelijke verplichte velden.
- Houd lokale administratie bij in
~/Documents/OpenClaw/Data/marktplaats/advertenties.jsonen per-advertentiemap.
Commentaar: sessiegebruik mag, sessie-extractie/logging niet. Gebruik een ingelogde browsercontext alleen als veilige uitvoeromgeving; print nooit auth-data.
Gratis Advertentie Focus
Standaard is de workflow gericht op gratis of nul-euro advertenties:
- Kies de gratis/basic advertentievorm wanneer Marktplaats die aanbiedt.
- Controleer vóór submit dat betaalde opties uit staan en dat het totaalbedrag nul of duidelijk niet-betaald is.
- Stop als Marktplaats naar betaling, promotie-upsell, niet-nul totaal of verplichte betaalroute gaat.
- Betaalde opties mogen alleen wanneer de gebruiker die optie expliciet voor die specifieke advertentie vraagt.
- Forceer geen workaround als een categorie of accountstatus geen gratis route toont.
Commentaar: “gratis route niet gevonden” is een stopconditie, geen reden om blind een betaalde flow te accepteren.
Werkwijze In Het Kort
- Bereid lokaal titel, omschrijving, prijs, conditie, levering/ophalen, categorie-kandidaten en fotolijst voor.
- Zoek bij merk/model betrouwbare publieke productinformatie op en verwerk die feitelijk.
- Houd de omschrijving meestal rond 3200-3500 tekens en voorkom keywordspam.
- Probe actuele categorieën en form state background-first.
- Gebruik Safari alleen als ingelogde sessiedrager wanneer dat nodig is.
- Vul echte React/formuliervelden en upload foto's via de echte uploader-flow.
- Controleer gratis/basic bundle, fototeller, titel, prijs, conditie en beschrijving vóór submit.
- Publiceer of wijzig pas na expliciete opdracht voor die advertentie.
- Verifieer de live advertentiepagina en werk het lokale register bij.
Commentaar: elke stap moet bewijs opleveren. Een submit zonder live verificatie is niet “klaar”.
Omschrijving en SEO
Voor Marktplaats-advertenties moet de omschrijving standaard rijk en SEO-geoptimaliseerd zijn, maar rond/onder 3500 tekens blijven.
- Richtwaarde: circa 3200-3500 tekens.
- Bovenmarge: ga alleen boven 3500 tekens als de live Marktplaats-editor dit expliciet accepteert en de laatste zin na submit zichtbaar blijft.
- Als de gebruiker om 2000 woorden vraagt, interpreteer dat als: inhoudelijk rijk, SEO-breed en goed aangevuld. Forceer geen 2000 woorden wanneer Marktplaats het veld praktisch afkapt.
- Controleer vóór submit altijd
description_nl-NL.lengthen of het einde van de tekst, inclusief SEO-/zoekvariantensectie, aanwezig is. - Controleer na submit live op de advertentiepagina of de nieuwe tekst zichtbaar is.
Commentaar: de praktische regel is niet “zoveel mogelijk woorden”, maar “maximaal nuttige SEO binnen wat Marktplaats zichtbaar accepteert”. Eerdere live tests lieten zien dat circa 3.5k tekens betrouwbaar werkt en veel langere teksten onbetrouwbaar kunnen worden.
SEO-werkwijze:
- Gebruik de kladtekst als basis, maar herschrijf zelf naar een nette advertentietekst.
- Zoek productinformatie online bij fabrikant, handleiding of betrouwbare bron zodra merk/model bekend zijn.
- Vermeld gecontroleerde specificaties feitelijk en conservatief.
- Vermeld niet zomaar dat alle schroeven, pluggen, adapters of accessoires compleet zijn als dat niet zichtbaar of bevestigd is.
- Gebruik natuurlijke zoekvarianten, synoniemen en enkele veelgebruikte schrijfvarianten/spelfouten, maar geen platte keywordspam.
- Bouw de tekst scanbaar op met korte kopjes of alinea's.
Commentaar: SEO-varianten moeten klinken alsof een mens het advertentieveld slim invult, niet alsof er onderaan een spamwoordenlijst staat.
Voor monitor-/tv-beugels zijn nuttige varianten:
monitorarm,monitor arm,monitorbeugelbeeldschermarm,beeldscherm beugelwandsteun,wand steunmuurbeugel,muur beugeltv beugel,schermbeugelVESA,vesa, incidenteelvessa- relevante merk- en modelvarianten
Gebruik een spelfoutvariant hooguit incidenteel en natuurlijk, niet overdreven.
Background-first volgorde
Gebruik deze volgorde voor plaatsing en bewerking:
-
Local preparation
- Maak titel, omschrijving, prijs/conditie/levering en fotolijst lokaal klaar.
- Schrijf/werk lokale bestanden bij onder
~/Documents/OpenClaw/Data/marktplaats/\x3Cslug>/.
Commentaar: lokaal voorbereiden is goedkoop, stil en veilig. Pas als de advertentie inhoudelijk klaar is, Marktplaats aanraken.
-
HTTP/browser-fetch probe zonder foreground
- Gebruik waar mogelijk een fetch/XHR vanuit bestaande ingelogde browsercontext, zonder cookies te exporteren.
- Gebruik normale Safari- of Chrome-user-agent voor gewone HTTP-probes.
- Doel: form action, categorievelden, bestaande image ids/urls, beschrijving, prijs en edit/place status inspecteren.
- Browsercontext-fetch mag dezelfde sessie gebruiken, maar mag cookies/tokens niet printen.
Commentaar: dit is de voorkeursroute. Als server HTML leeg is maar browser-fetch authenticated werkt, gebruik die sessie als transportlaag zonder UI te kapen.
-
Geïsoleerde tab alleen indien nodig
- Als DOM/React-flow nodig is, open of gebruik een dedicated Marktplaats-tab/window.
- Bewaar vooraf de huidige actieve window/tab en herstel die na afloop waar mogelijk.
- Selecteer tabs op URL/ad-id, niet op aanname van
front document. - Minimaliseer
activate, System Events, keypresses en visuele foreground-wissels. - Gebruik geen coördinaatklikken.
Commentaar: meerdere tabs kunnen door elkaar lopen. Maak altijd eerst een tab-inventaris en match exact op advertentie-id of edit-URL.
-
DOM-event automation, geen handmatige UI
- Vul inputs via DOM en echte
input/changeevents. - Gebruik de echte Marktplaats React-flow waar nodig, vooral voor rich-text editor, foto-uploader en bundle/radio-keuzes.
- Klik knoppen via DOM-event op basis van tekst/selector, niet via schermcoördinaten.
Commentaar: hidden fields direct zetten kan soms lijken te werken, maar React-validatie kan het negeren. Bij rijke editor: editor zelf vullen én hidden field controleren.
- Vul inputs via DOM en echte
-
Live verificatie
- Controleer na submit de live advertentiepagina.
- Verifieer titel, omschrijving, prijs, foto-aantal, status en geen betaalde opties.
- Werk lokaal register bij.
Commentaar: “submit gelukt” telt pas als live advertentiepagina de nieuwe inhoud toont. Vooral controleren op laatste SEO-zin, prijs en foto-aantal.
Self-healing protocol
Gebruik self-healing bij normale technische breuken, maar niet bij security-, captcha-, betaal- of login-uitdagingen die menselijke actie vereisen.
Self-healing betekent hier:
- Fout classificeren.
- Bewijs verzamelen zonder gevoelige data te loggen.
- Gerichte herstelpoging doen.
- Opnieuw verifiëren.
- Maximaal 2-3 herstelpogingen per foutklasse.
- Stoppen en helder rapporteren als herstel onzeker of risicovol wordt.
Commentaar: self-healing is geen vrijbrief om blind door te drukken. Het is een gecontroleerde diagnose- en herstel-ladder.
Foutklasse: uitgelogd of sessie verlopen
Signalen:
- Redirect naar loginpagina.
- HTTP 401/403 bij browser-fetch.
- Plaats/editpagina toont geen formulier maar login/consent/security tekst.
- Marktplaats-accountnaam ontbreekt waar die normaal zichtbaar is.
Herstel:
- Probe opnieuw via browser-context-fetch om tijdelijke redirect uit te sluiten.
- Controleer of er een bestaande ingelogde Marktplaats-tab is.
- Als niet ingelogd: stop en vraag gebruiker om in te loggen. Geen wachtwoorden invullen of login omzeilen.
- Als gebruiker inlogt: hervat vanaf probe, niet vanaf half-ingevuld formulier.
Stopconditie:
- Captcha, MFA, login challenge of security prompt: stoppen en rapporteren.
Foutklasse: categorieën of categorie-id's gewijzigd
Signalen:
- Oude
l1,l2,bucketontbreekt of geeft fout. - Plaatsingspagina redirect naar categoriekeuze.
- Form action bestaat, maar categorie-specifieke velden ontbreken.
- Categorie-naam wijkt af van verwacht producttype.
Herstel:
- Zoek categorie opnieuw via Marktplaats-categoriebronnen of vergelijkbare advertenties.
- Open/probe de actuele categorie-plaatsingspagina.
- Gebruik actuele
l1,l2,bucket, category full name en form fields als bron van waarheid. - Als meerdere categorieën plausibel zijn, kies conservatief en motiveer kort; vraag alleen als het verkooprisico reëel is.
Stopconditie:
- Geen passende categorie met vertrouwen te bepalen of categorie vereist betaald/zakelijk pad.
Foutklasse: veldnamen/formulierstructuur gewijzigd
Signalen:
- Bekende selectors ontbreken:
description_nl-NL,price.value,images.ids,selectedBundle, etc. - React-componenten renderen anders dan verwacht.
- FormData mist verplichte waarden ondanks DOM-set.
Herstel:
- Maak een formulier-snapshot: alle
input,textarea,select,button,contenteditable, labels en foutteksten. - Zoek op labels/tekst in plaats van alleen oude names/selectors.
- Bouw een nieuwe field-map: label -> input name/type/options/current value.
- Vul via native value setter +
input/changeevents. - Verifieer met
new FormData(form)en zichtbare foutteksten.
Stopconditie:
- Verplicht veld blijft onbekend of lijkt juridisch/betalingsgerelateerd.
Foutklasse: rich-text omschrijving werkt niet
Signalen:
- Hidden
description_nl-NLwijzigt, maar live tekst blijft oud. - Contenteditable editor toont oude tekst.
- Tekst wordt afgekapt of laatste SEO-zin ontbreekt.
Herstel:
- Houd tekst rond/onder 3500 tekens.
- Vul de contenteditable editor via selectie + echte insert/input events.
- Zet hidden
description_nl-NLalleen als fallback. - Controleer vóór opslaan hidden field én waar mogelijk editor-inhoud.
- Controleer na opslaan live advertentiepagina.
- Als tekst afkapt: compacter herschrijven; niet blijven forceren.
Stopconditie:
- Nieuwe tekst verschijnt niet live na gecontroleerde update.
Foutklasse: foto-upload faalt
Signalen:
- API geeft image id maar geen
images.urls. - Fototeller blijft
0 van 24of lager dan verwacht. - Upload endpoint geeft 400/413/415/500.
- Bestanden zijn te groot, verkeerd type of HEIC/metadata-probleem.
Herstel:
- Controleer bestandspaden, bestandsgrootte en MIME/type.
- Converteer of verklein kopieën waar nodig; bewaar originelen lokaal.
- Gebruik echte Marktplaats file-input/React-uploader wanneer mogelijk.
- Wacht op upload-completion en controleer:
images.idsimages.urls- zichtbare fototeller
- Retry per foto maximaal 2 keer.
- Als API-upload wel werkt maar React niet: voer file-input-flow opnieuw uit, niet alleen hidden fields injecteren.
Stopconditie:
- Minder foto's gekoppeld dan bedoeld en gebruiker gaf geen toestemming om met minder foto's te plaatsen.
Foutklasse: gratis advertentievorm/bundle niet geselecteerd
Signalen:
- Fouttekst zoals
Je hebt geen advertentievorm gekozen. selectedBundleleeg.- Gratis radio/card zichtbaar maar niet checked.
- Totaalbedrag niet
0,00.
Herstel:
- Selecteer echte gratis radio/card via DOM-event op label/input.
- Controleer
bundle-selection=FREEenselectedBundle=FREEindien aanwezig. - Controleer totaalbedrag.
- Betaalde opties uitzetten: etalage, urgent, homepage, promoted, plus/premium.
Stopconditie:
- Gratis route is niet beschikbaar of Marktplaats stuurt naar betaling.
Foutklasse: submit geeft validatiefouten
Signalen:
- Pagina blijft op place/edit-form.
- Foutteksten bij foto, beschrijving, prijs, conditie, bundle, postcode of levering.
- Geen redirect naar live advertentie.
Herstel:
- Lees zichtbare foutteksten.
- Map fouttekst naar veld.
- Herstel alleen dat veld.
- Verifieer FormData en zichtbare staat opnieuw.
- Submit maximaal 2 keer na gerichte fixes.
Stopconditie:
- Fouttekst is onduidelijk of vereist keuze die de gebruiker moet maken.
Foutklasse: browserautomation hangt of stoort foreground
Signalen:
do JavaScripttimeout.- AppleScript/automation proces blijft hangen.
- Verkeerde tab/window actief.
- Browser komt naar voorgrond of blijft navigeren.
Herstel:
- Stop nieuwe browseracties.
- Inventariseer processen en tabs.
- Kill alleen vastgelopen automation-processen, niet de browser zelf.
- Herselecteer exacte Marktplaats-tab op URL/ad-id.
- Als foreground stoort: terug naar background/browser-fetch of vraag gebruiker kort.
Stopconditie:
- Browserautomation blijft foreground verstoren en er is geen veilige background-route.
Foutklasse: Marktplaats UI of bundels wijzigen onverwacht
Signalen:
- Nieuwe betaalopties verschijnen.
- Knoppen/labels zijn hernoemd.
- Formulier bevat extra verplichte velden.
- Preview/submit flow heeft extra tussenstap.
Herstel:
- Snapshot de huidige UI/form labels.
- Zoek gratis/standaard/0 euro route opnieuw.
- Gebruik tekstlabels en prijs/totaal als bron van waarheid, niet oude selectors.
- Stop als route juridisch/betalingsgerelateerd of onzeker wordt.
Foutklasse: advertentie live maar register niet bijgewerkt
Signalen:
- Live URL bekend, maar
advertenties.jsonmist record of oude status. - Per-advertentie
ad.jsonontbreekt.
Herstel:
- Lees live advertentiegegevens.
- Werk centrale
advertenties.jsonbij. - Maak/update per-advertentie
ad.jsonendescription.md. - Valideer JSON.
Escalatie naar zwaardere redeneermodus
Als een self-healing poging faalt door veranderde Marktplaats-structuur, onbekende React-flow, of inconsistente form state:
- Stop met submitten.
- Maak een compacte technische snapshot zonder cookies/tokens.
- Analyseer met de zwaarste beschikbare redeneermodus/modelconfiguratie in de omgeving.
- Gebruik geen fictieve modelnaam als harde afhankelijkheid.
- Als de omgeving later een zwaarder model/reasoningniveau aanbiedt, mag deze skill dat prefereren voor diagnose.
- Rapporteer kort: foutklasse, bewijs, geprobeerd herstel, veilig vervolg.
Commentaar: noem dit geen verplichte
GPT 5.5 xtreme high thinkingafhankelijkheid. Formuleer het als “gebruik de zwaarste beschikbare redeneermodus” zodat de skill toekomstvast blijft.
Nieuwe advertentie plaatsen
- Maak SEO-omschrijving rond/onder 3500 tekens.
- Zoek productinfo online wanneer merk/model bekend zijn.
- Kies categorie en probe categorie/formulier background-first.
- Vul titel, beschrijving, conditie, prijs en levering.
- Upload foto's via echte uploader-flow.
- Selecteer gratis advertentievorm waar relevant; totaal moet
0,00zijn tenzij de gebruiker expliciet betaalde opties wil. - Verifieer vóór submit:
- titel \x3C= 60 tekens
- omschrijving compleet en rond/onder 3500 tekens
- foto-teller klopt
- prijs/conditie/levering kloppen
- betaalde opties uit
- Submit via echte knop.
- Verifieer live advertentiepagina en werk register bij.
- Als iets faalt, gebruik het self-healing protocol en stop bij stopcondities.
Commentaar: als Marktplaats terugkomt met validatiefout, lees de fouttekst en herstel gericht. Niet opnieuw blind submitten.
Bestaande advertentie bewerken
- Open/bepaal edit-URL:
https://www.marktplaats.nl/plaats/\x3CadId>/edit - Gebruik bij voorkeur background/browser-fetch voor inspectie.
- Als React-editor nodig is, selecteer expliciet de edit-tab op URL/ad-id.
- Controleer:
form#syi-forminput[name="description_nl-NL"]- rich-text editor
[contenteditable="true"][role="textbox"] - bestaande
images.idsenimages.urls - prijs, conditie, levering, foto's
- Vul React-vriendelijk:
- titel via input + events
- omschrijving in contenteditable editor via selectie +
document.execCommand('insertText', false, text)of vergelijkbare echte editor-input - zet hidden
description_nl-NLals fallback, maar hidden field alleen is niet voldoende bewijs
- Verifieer vóór opslaan:
- titel \x3C= 60
- omschrijving rond/onder 3500 tekens
- laatste zin/zoekvarianten aanwezig in
description_nl-NL - foto ids/urls intact
- betaalde opties uit
- Klik echte
Opslaan-knop via DOM-event. - Verifieer live op
/seller/view/\x3CadId>dat nieuwe titel/omschrijving zichtbaar zijn. - Werk lokaal register en
ad.jsonbij. - Als iets faalt, gebruik het self-healing protocol en stop bij stopcondities.
Commentaar: de zichtbare editor kan anders rapporteren dan hidden field. Bewijs is pas voldoende als de live advertentie na opslaan de nieuwe tekst toont.
Lokaal register
Centrale locatie:
~/Documents/OpenClaw/Data/marktplaats/advertenties.json
Per advertentie:
~/Documents/OpenClaw/Data/marktplaats/\x3Cslug>/ad.json
~/Documents/OpenClaw/Data/marktplaats/\x3Cslug>/description.md
~/Documents/OpenClaw/Data/marktplaats/\x3Cslug>/photos/
Werk bij na dry-run, plaatsing, wijziging, validatiefout, verwijdering, statuscheck of herplaatsing.
Commentaar: het register is niet alleen administratie; het voorkomt dat toekomstige taken opnieuw moeten gokken welke prijs, titel, foto's of status gelden.
Stopcondities
Stop en rapporteer wanneer:
- Marktplaats naar betalen/captcha/login/security challenge gaat.
- De edit/plaats-pagina betaalde opties verplicht lijkt te maken.
- De omschrijving ondanks compacte tekst niet volledig wordt geaccepteerd.
- De foto-uploader geen zichtbare fototeller/
images.urlsopbouwt. - Er onzekerheid is over foto's, prijs, conditie of meegeleverde onderdelen.
- Browserautomation foreground sterk verstoort en er geen background-route meer is.
- Self-healing dezelfde foutklasse 2-3 keer niet oplost.
Commentaar: stoppen is hier beter dan “nog even proberen” als dat de browser stoort of een betaal/security-flow raakt.
Generieke lessons learned
- Niet de actieve browser willekeurig kapen.
- Eerst background/browser-fetch/probe.
- Als browsercontext nodig is, gebruik een dedicated tab, exact op URL/ad-id geselecteerd, en herstel context.
- Houd omschrijving rond/onder 3500 tekens.
- Bij foto-upload zijn API-id's alleen niet genoeg; React moet ook urls en fototeller hebben.
- Bij edit is hidden field alleen niet genoeg bewijs; live advertentiepagina is de waarheid.
- Concrete advertentie-id's, persoonlijke namen en productcases horen niet als permanente voorbeelden in deze skill; bewaar zulke details alleen in het lokale advertentieregister of taakverslag.
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install marktplaats-publisher - After installation, invoke the skill by name or use
/marktplaats-publisher - Provide required inputs per the skill's parameter spec and get structured output
What is Marktplaats.nl Publisher?
Marktplaats met self-healing diagnose en herstelpaden. It is an AI Agent Skill for Claude Code / OpenClaw, with 44 downloads so far.
How do I install Marktplaats.nl Publisher?
Run "/install marktplaats-publisher" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Marktplaats.nl Publisher free?
Yes, Marktplaats.nl Publisher is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Marktplaats.nl Publisher support?
Marktplaats.nl Publisher is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Marktplaats.nl Publisher?
It is built and maintained by Roel Broersma (@roelbroersma); the current version is v0.4.4.