Marktplaats.nl Publisher

Other

Marktplaats met self-healing diagnose en herstelpaden.

Install

openclaw skills 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.json en 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

  1. Bereid lokaal titel, omschrijving, prijs, conditie, levering/ophalen, categorie-kandidaten en fotolijst voor.
  2. Zoek bij merk/model betrouwbare publieke productinformatie op en verwerk die feitelijk.
  3. Houd de omschrijving meestal rond 3200-3500 tekens en voorkom keywordspam.
  4. Probe actuele categorieën en form state background-first.
  5. Gebruik Safari alleen als ingelogde sessiedrager wanneer dat nodig is.
  6. Vul echte React/formuliervelden en upload foto's via de echte uploader-flow.
  7. Controleer gratis/basic bundle, fototeller, titel, prijs, conditie en beschrijving vóór submit.
  8. Publiceer of wijzig pas na expliciete opdracht voor die advertentie.
  9. 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.length en 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:

  1. Gebruik de kladtekst als basis, maar herschrijf zelf naar een nette advertentietekst.
  2. Zoek productinformatie online bij fabrikant, handleiding of betrouwbare bron zodra merk/model bekend zijn.
  3. Vermeld gecontroleerde specificaties feitelijk en conservatief.
  4. Vermeld niet zomaar dat alle schroeven, pluggen, adapters of accessoires compleet zijn als dat niet zichtbaar of bevestigd is.
  5. Gebruik natuurlijke zoekvarianten, synoniemen en enkele veelgebruikte schrijfvarianten/spelfouten, maar geen platte keywordspam.
  6. 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, monitorbeugel
  • beeldschermarm, beeldscherm beugel
  • wandsteun, wand steun
  • muurbeugel, muur beugel
  • tv beugel, schermbeugel
  • VESA, vesa, incidenteel vessa
  • relevante merk- en modelvarianten

Gebruik een spelfoutvariant hooguit incidenteel en natuurlijk, niet overdreven.

Background-first volgorde

Gebruik deze volgorde voor plaatsing en bewerking:

  1. Local preparation

    • Maak titel, omschrijving, prijs/conditie/levering en fotolijst lokaal klaar.
    • Schrijf/werk lokale bestanden bij onder ~/Documents/OpenClaw/Data/marktplaats/<slug>/.

    Commentaar: lokaal voorbereiden is goedkoop, stil en veilig. Pas als de advertentie inhoudelijk klaar is, Marktplaats aanraken.

  2. 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.

  3. 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.

  4. DOM-event automation, geen handmatige UI

    • Vul inputs via DOM en echte input/change events.
    • 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.

  5. 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:

  1. Fout classificeren.
  2. Bewijs verzamelen zonder gevoelige data te loggen.
  3. Gerichte herstelpoging doen.
  4. Opnieuw verifiëren.
  5. Maximaal 2-3 herstelpogingen per foutklasse.
  6. 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:

  1. Probe opnieuw via browser-context-fetch om tijdelijke redirect uit te sluiten.
  2. Controleer of er een bestaande ingelogde Marktplaats-tab is.
  3. Als niet ingelogd: stop en vraag gebruiker om in te loggen. Geen wachtwoorden invullen of login omzeilen.
  4. 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, bucket ontbreekt of geeft fout.
  • Plaatsingspagina redirect naar categoriekeuze.
  • Form action bestaat, maar categorie-specifieke velden ontbreken.
  • Categorie-naam wijkt af van verwacht producttype.

Herstel:

  1. Zoek categorie opnieuw via Marktplaats-categoriebronnen of vergelijkbare advertenties.
  2. Open/probe de actuele categorie-plaatsingspagina.
  3. Gebruik actuele l1, l2, bucket, category full name en form fields als bron van waarheid.
  4. 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:

  1. Maak een formulier-snapshot: alle input, textarea, select, button, contenteditable, labels en foutteksten.
  2. Zoek op labels/tekst in plaats van alleen oude names/selectors.
  3. Bouw een nieuwe field-map: label -> input name/type/options/current value.
  4. Vul via native value setter + input/change events.
  5. 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-NL wijzigt, maar live tekst blijft oud.
  • Contenteditable editor toont oude tekst.
  • Tekst wordt afgekapt of laatste SEO-zin ontbreekt.

Herstel:

  1. Houd tekst rond/onder 3500 tekens.
  2. Vul de contenteditable editor via selectie + echte insert/input events.
  3. Zet hidden description_nl-NL alleen als fallback.
  4. Controleer vóór opslaan hidden field én waar mogelijk editor-inhoud.
  5. Controleer na opslaan live advertentiepagina.
  6. 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 24 of lager dan verwacht.
  • Upload endpoint geeft 400/413/415/500.
  • Bestanden zijn te groot, verkeerd type of HEIC/metadata-probleem.

Herstel:

  1. Controleer bestandspaden, bestandsgrootte en MIME/type.
  2. Converteer of verklein kopieën waar nodig; bewaar originelen lokaal.
  3. Gebruik echte Marktplaats file-input/React-uploader wanneer mogelijk.
  4. Wacht op upload-completion en controleer:
    • images.ids
    • images.urls
    • zichtbare fototeller
  5. Retry per foto maximaal 2 keer.
  6. 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.
  • selectedBundle leeg.
  • Gratis radio/card zichtbaar maar niet checked.
  • Totaalbedrag niet 0,00.

Herstel:

  1. Selecteer echte gratis radio/card via DOM-event op label/input.
  2. Controleer bundle-selection=FREE en selectedBundle=FREE indien aanwezig.
  3. Controleer totaalbedrag.
  4. 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:

  1. Lees zichtbare foutteksten.
  2. Map fouttekst naar veld.
  3. Herstel alleen dat veld.
  4. Verifieer FormData en zichtbare staat opnieuw.
  5. 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 JavaScript timeout.
  • AppleScript/automation proces blijft hangen.
  • Verkeerde tab/window actief.
  • Browser komt naar voorgrond of blijft navigeren.

Herstel:

  1. Stop nieuwe browseracties.
  2. Inventariseer processen en tabs.
  3. Kill alleen vastgelopen automation-processen, niet de browser zelf.
  4. Herselecteer exacte Marktplaats-tab op URL/ad-id.
  5. 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:

  1. Snapshot de huidige UI/form labels.
  2. Zoek gratis/standaard/0 euro route opnieuw.
  3. Gebruik tekstlabels en prijs/totaal als bron van waarheid, niet oude selectors.
  4. Stop als route juridisch/betalingsgerelateerd of onzeker wordt.

Foutklasse: advertentie live maar register niet bijgewerkt

Signalen:

  • Live URL bekend, maar advertenties.json mist record of oude status.
  • Per-advertentie ad.json ontbreekt.

Herstel:

  1. Lees live advertentiegegevens.
  2. Werk centrale advertenties.json bij.
  3. Maak/update per-advertentie ad.json en description.md.
  4. Valideer JSON.

Escalatie naar zwaardere redeneermodus

Als een self-healing poging faalt door veranderde Marktplaats-structuur, onbekende React-flow, of inconsistente form state:

  1. Stop met submitten.
  2. Maak een compacte technische snapshot zonder cookies/tokens.
  3. Analyseer met de zwaarste beschikbare redeneermodus/modelconfiguratie in de omgeving.
  4. Gebruik geen fictieve modelnaam als harde afhankelijkheid.
  5. Als de omgeving later een zwaarder model/reasoningniveau aanbiedt, mag deze skill dat prefereren voor diagnose.
  6. Rapporteer kort: foutklasse, bewijs, geprobeerd herstel, veilig vervolg.

Commentaar: noem dit geen verplichte GPT 5.5 xtreme high thinking afhankelijkheid. Formuleer het als “gebruik de zwaarste beschikbare redeneermodus” zodat de skill toekomstvast blijft.

Nieuwe advertentie plaatsen

  1. Maak SEO-omschrijving rond/onder 3500 tekens.
  2. Zoek productinfo online wanneer merk/model bekend zijn.
  3. Kies categorie en probe categorie/formulier background-first.
  4. Vul titel, beschrijving, conditie, prijs en levering.
  5. Upload foto's via echte uploader-flow.
  6. Selecteer gratis advertentievorm waar relevant; totaal moet 0,00 zijn tenzij de gebruiker expliciet betaalde opties wil.
  7. Verifieer vóór submit:
    • titel <= 60 tekens
    • omschrijving compleet en rond/onder 3500 tekens
    • foto-teller klopt
    • prijs/conditie/levering kloppen
    • betaalde opties uit
  8. Submit via echte knop.
  9. Verifieer live advertentiepagina en werk register bij.
  10. 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

  1. Open/bepaal edit-URL: https://www.marktplaats.nl/plaats/<adId>/edit
  2. Gebruik bij voorkeur background/browser-fetch voor inspectie.
  3. Als React-editor nodig is, selecteer expliciet de edit-tab op URL/ad-id.
  4. Controleer:
    • form#syi-form
    • input[name="description_nl-NL"]
    • rich-text editor [contenteditable="true"][role="textbox"]
    • bestaande images.ids en images.urls
    • prijs, conditie, levering, foto's
  5. 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-NL als fallback, maar hidden field alleen is niet voldoende bewijs
  6. Verifieer vóór opslaan:
    • titel <= 60
    • omschrijving rond/onder 3500 tekens
    • laatste zin/zoekvarianten aanwezig in description_nl-NL
    • foto ids/urls intact
    • betaalde opties uit
  7. Klik echte Opslaan-knop via DOM-event.
  8. Verifieer live op /seller/view/<adId> dat nieuwe titel/omschrijving zichtbaar zijn.
  9. Werk lokaal register en ad.json bij.
  10. 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/<slug>/ad.json ~/Documents/OpenClaw/Data/marktplaats/<slug>/description.md ~/Documents/OpenClaw/Data/marktplaats/<slug>/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.urls opbouwt.
  • 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.