← Terug naar PrijsSpot

Onderzoek naar beter zoeken, kiezen en vergelijken

ONDERZOEK EN IMPLEMENTATIE · 9 OKTOBER 2026

Opdracht: producten sneller en makkelijker kiezen, bruikbare beelden toevoegen, grensvergelijkingen onderzoeken en tankprijzen rond een gekozen locatie ontsluiten. Uitgangspunt: onduidelijke gegevens mogen geen schijnzekerheid worden.

1. Wat is onderzocht?

Er zijn vier onderzoekslijnen gecombineerd: zoeken en kiezen, productidentiteit en prijsvoorwaarden, beeldrechten, en toegestane bronnen voor Nederland, Duitsland en België. De bestaande interface en berekeningen zijn in de broncode beoordeeld. Officiële API-documentatie en licenties zijn gelezen en openbare endpoints zijn gericht bevraagd. Ook onafhankelijke gebruiksonderzoeken van Baymard en de toegankelijkheidspatronen van W3C zijn gebruikt.

Dit is een onderzoek met bronnen en een technische evaluatie, geen onderzoek met proefpersonen. De vertaling van algemene onderzoeksbevindingen naar PrijsSpot is een ontwerpkeuze. De verbeteringen zijn nog niet met echte gebruikers of op een fysieke iPhone getest.

2. De belangrijkste frictie in de eerdere versie

De bezoeker moest eerst langs de introductie voordat zoeken en vergelijken centraal kwamen te staan. Productsoorten filterden vooral de reeds geladen selectie. Dat kon ten onrechte lijken alsof er in een hele categorie niets beschikbaar was. Favorieten bewaarden slechts een identifier en waren na een andere zoekopdracht moeilijk terug te vinden. Het gekozen aantal en bundelvoorwaarden vroegen extra aandacht.

Voor prijzen kwamen daarnaast concrete risico’s naar voren: een apart ledenprijsveld werd als uitsluiting van de normale prijs gelezen; een tijdstip in de toekomst kon recent lijken; bij identieke barcodes werd tegenstrijdige inhoud niet geblokkeerd; en verpakkingseenheden moesten consequenter worden verwerkt. Die punten zijn in de berekening aangepast en getest.

3. Onderzoek vertaald naar de bediening

Baymards zoekonderzoek beschrijft verschillende intenties, zoals een bekend artikel en een productsoort, en het belang van het herkennen van onvolledige of afwijkende zoektermen. Voor PrijsSpot leidt dat tot één zichtbaar zoekveld voor merk, productsoort of barcode, met aanpasbare suggesties. Een spelfout wordt als voorstel getoond; de gebruiker beslist of die suggestie klopt.

Baymards onderzoek naar toegepaste filters ondersteunt een zichtbare weergave van actieve keuzes en eenvoudig verwijderen. Daarom staan merk, verpakking, winkel en overige filters als verwijderbare keuzes boven de resultaten. Een winkelfilter beïnvloedt ook het aanbod in het detailpaneel.

De zoeksuggesties volgen het W3C-comboboxpatroon: focus blijft in het invoerveld, pijltjestoetsen kiezen een optie, Enter neemt die over en Escape sluit de lijst. ARIA-attributen maken de actieve suggestie en open toestand kenbaar. Zichtbare focus, labels, statusmeldingen, een oversla-link en een mobiele layout zijn toegevoegd. Veel knoppen zijn minimaal 44 pixels hoog als ontwerpkeuze; dit is geen verklaring dat alle WCAG-eisen zijn getoetst.

KeuzehulpGedrag in de nieuwe versieWaarom dit helpt
Zoeken bovenaanResultaten en bediening vormen het eerste werkgebiedMinder afstand tussen een vraag en het antwoord
SuggestiesMerken, productsoorten, recente termen en geladen productnamenMinder typen; herkenbare verbetering van enkele typefouten
Visuele startpuntenVier productsoorten met categoriebeelden starten een nieuwe bronzoekopdrachtEen bezoeker zonder exacte productnaam kan beginnen
Aantal als koopvraag1, 2, 4 of een eigen heel aantal van 1–99; geen stille wijziging bij een andere productkeuzeHet totaal sluit aan bij wat iemand wil kopen
Bundel uitlegbaarEen onvolledige bundel noemt de reden en biedt de knop Bekijk een passend aantalDe bezoeker ziet hoe een actie wel kan gelden
Filters en sorteringMerk, verpakking, winkel, tekst, berekenbaarheid; totaal, naam of eenheidsprijs per soortGerichter kiezen zonder een ontbrekende prijs als nul te behandelen
Maximaal vier vergelijkenAfzonderlijke varianten naast elkaar; alleen passende eenheden krijgen gezamenlijk eenheidsadviesPrijs kan meewegen zonder verschillende producten gelijk te verklaren
Favorieten terugvindenEen eigen overzicht met Opnieuw opvragen; oude prijsantwoorden worden niet opgeslagenHerhaalgebruik zonder verouderde prijzen terug te zetten
Fout herstellenZoekwoord behouden, opnieuw proberen en bredere productsoort zoekenEen lege lijst of storing blijft begrijpelijk
Rust bij snel zoekenEen laat bronantwoord kan een nieuwere zoekopdracht niet overschrijvenHet scherm blijft bij de laatste bedoeling van de bezoeker

4. Wanneer is een prijs vergelijkbaar?

Een titel als “Fleuril Color” is geen volledige productidentiteit. Inhoud, variant en voorwaarden zijn essentieel. De GS1 GTIN Management Standard is een achtergrondbron voor het onderscheiden van handelsartikelen. Onze toepassing: uitsluitend een geldige EAN-13 kan winkelvermeldingen samenbrengen. Zonder bruikbare barcode blijft een vermelding apart. Een barcode is een belangrijk signaal, geen vrijbrief om tegenstrijdige bronvelden te negeren.

De berekening gebruikt eurocenten voor het kassabedrag. Een expliciet bundeltotaal wordt vermenigvuldigd met het aantal complete bundels. Een afgerond gemiddeld bronbedrag wordt niet terugvermenigvuldigd om een kassabedrag te verzinnen. Een niet-bevestigde losse prijs en een referentieprijs worden niet gebruikt om een restverpakking te prijzen. Voor reguliere actieprijzen en ledenprijzen geldt de betekenis van de officiële API-velden.

GegevenBeslissing in PrijsSpot
Bundel van twee, gebruiker kiest één of drieGeen totaal wanneer de losse prijs niet bevestigd is
Losse actieprijs plus ledenprijsGewone prijs blijft beschikbaar; ledenprijs telt alleen na keuze mee
Ledenvoordeel bij een bundel met onduidelijke betekenisNiet op het bundeltotaal toegepast; beperking wordt genoemd
Zelfde barcode, andere expliciete inhoud of wasbeurtenConflictmelding; totalen worden niet gerangschikt
Oud, ontbrekend of toekomstig controletijdstipGeen recente berekenbare prijs
Expliciet 2 × 250 gramEen verpakking van totaal 500 gram voor eenheidsberekening
Twee soorten zonder overeenkomstige inhoudAfzonderlijke totalen, geen gezamenlijke liter/kilo/stukwinnaar
Een bekende en een ontbrekende prijs in de selectieGeen prijswinnaar tussen die twee producten

Deze controles voorkomen bepaalde fouten, maar kunnen een onjuiste prijs bij de bron niet bewijzen of herstellen. PrijsSpot kent de voorraad, kassabon, lokale filialenvoorwaarden en reisafstand van de bezoeker niet. “Laagste gevonden” blijft dus beperkt tot de opgenomen, berekenbare resultaten. Eenheidsprijzen zijn geen kwaliteitsoordeel.

5. Aanbiedingen in Nederland en België

PrijsProfeet heeft afzonderlijke Nederlandse en Belgische hosts. Beide worden gebruikt met hetzelfde openbare zoekcontract. De website biedt Nederland, België of beide aan. Bronland wordt door de server bepaald, zodat twee ketenvermeldingen uit verschillende landen niet als één winkel worden gelezen. Identieke, consistente barcodes kunnen wel in één productvergelijking voorkomen.

Op 9 oktober is de Belgische Fleuril-zoekopdracht met een echt HTTP 200-antwoord gecontroleerd. De bron leverde onder meer Color- en Black-varianten met inhoud en geldigheidsdatums. Dit is een steekproef van de koppeling, geen bewijs van volledige Belgische dekking. Een storing van één land wordt bij een gecombineerde zoekopdracht apart gemeld.

Volgens de PrijsProfeet-voorwaarden mag een eigen product op de bron draaien, met bronvermelding voor gratis gebruik. PrijsSpot linkt naar de passende landelijke bron. We bouwen geen historische kopie of bulkexport. De interne websitezoekdienst is geen aangeboden vervangende datafeed. Prijsantwoorden worden hoogstens vijf minuten tijdelijk hergebruikt. Voor commerciële groei moeten capaciteit en voorwaarden opnieuw beoordeeld worden.

6. Duitse A-merken: wat kan nu en wat nog niet?

Er is geen geverifieerde vrij toegankelijke volledige Duitse supermarktfeed aangesloten. Een Duitse productnaam die op een Nederlandse lijkt, wordt daarom niet als hetzelfde artikel of als goedkoper alternatief gepresenteerd. De eerste werkende route is de openbare Open Prices API: op aanvraag zoeken naar waarnemingen van exact dezelfde barcode en alleen Duitse, eurogedenomineerde resultaten tonen.

Deze waarnemingen hebben een waarnemingsdatum, winkelinformatie en soms bijzondere voorwaarden. De website houdt ze apart van aanbiedingen. Een kilo-, actie-, leden- of bundelwaarneming wordt niet zonder meer als losse prijs vergeleken. Er is geen automatisch actueel goedkoopste-label. Een lege uitkomst bewijst niet dat een product in Duitsland ontbreekt.

De query bekijkt maximaal drie pagina’s van honderd waarnemingen; maximaal dertig passende Duitse vermeldingen worden getoond. De API vermeldt wanneer de geschiedenis of weergave begrensd is. De productie-API is met een algemeen verzoek en gerichte queries gecontroleerd; enkele geteste Fleuril- en winkelqueries leverden nul treffers op. Dat is een dekkingsbeperking die zichtbaar blijft, geen reden om een prijs te genereren.

Open Prices gebruikt ODbL-voorwaarden. Bronvermelding en scheiding van de waarnemingen blijven behouden; er wordt geen gecombineerde historische databank met de aanbiedingenbron opgebouwd. Voor een rijkere actuele Duitse vergelijking is een overeengekomen winkel- of partnerfeed nodig. Awin beschrijft productfeeds voor partners, met prijs, link en productvelden. Toegang en merchantrechten zijn geen vanzelfsprekendheid; die route is onderzocht, maar nog niet aangesloten.

7. Actuele brandstof rond een locatie

Er zijn twee verschillende vragen: “waar sta ik?” en “welke prijs geldt bij een pomp?”. Ze vereisen verschillende bronnen. De locatiezoeker gebruikt een lokale index met 13.417 plaatscentra uit GeoNames, CC BY 4.0: Nederland, Duitsland en België. Het extract van 9 oktober omvat plaatsen met ten minste 500 inwoners. Land en coördinaten helpen naamgenoten onderscheiden. Een plaatscentrum wordt nooit als een exact huisadres voorgesteld.

De browserlocatie wordt uitsluitend na een klik gevraagd. Weigeren blokkeert plaatszoeken niet. De nauwkeurigheid van het apparaat wordt getoond. Coördinaten worden niet in favorieten of een persoonlijk locatieprofiel gezet. De gekozen locatie en brandstof bepalen een expliciete aanvraag; er wordt niet automatisch continu naar een provider gepolld.

LandOnderzochte routeUitkomst
DuitslandTankerkönig / MTS-KGedocumenteerde koppeling gebouwd; persoonlijke sleutel nog verbinden
NederlandDirectLease en commerciële leveranciers onderzochtGeen vrij herbruikbare stationsprijsfeed met geverifieerde toegang verbonden
BelgiëFOD Economie en commerciële leveranciers onderzochtOfficiële maximumprijs is beschikbaar als informatie, maar geen lokale pompprijsfeed verbonden

Tankerkönig biedt E5, E10 en diesel voor Duitse stations. De adapter verwerkt prijs, openstatus en stationslocatie. De gedocumenteerde grens van 25 km en één nieuwe aanvraag per minuut wordt serverbreed afgedwongen. Een gelijk antwoord wordt één minuut gecachet. De demonstratiesleutel geeft volgens de leverancier geen echte prijzen; die wordt in PrijsSpot geweigerd. De echte persoonlijke sleutel ontbreekt op dit moment.

Na verbinding toont de site drie decimalen per liter en een berekend tanktotaal. Gesloten stations en onbekende prijzen kunnen geen goedkoopste-label krijgen. De actuele lijst geeft geen laatste prijswijziging per station: daarom staat er “opgevraagd”, niet “prijs bijgewerkt”. Na vijf minuten vervalt de winnaarstatus van het getoonde antwoord. Dit is een conservatieve ontwerpgrens, geen door de bron gegarandeerde actualiteit.

DirectLease Tankservice is als externe dienst gelinkt. Een openbare interface is geen bevestigde licentie om haar achterliggende API te kopiëren. De Belgische FOD-maximumprijzen worden evenmin gebruikt om een goedkoop station aan te wijzen. TomTom Fuel Prices vraagt afzonderlijke toegang en is volgens de documentatie geen gewone gratis/PAYG-API; geschiktheid en rechten voor deze website moeten eerst bevestigd worden.

8. Een lagere literprijs kan een duurdere rit zijn

De omrijhulp is gebouwd als invultool met prijs bij de normale pomp, prijs bij de andere pomp, te tanken liters, extra heen- en terugkilometers en eigen verbruik. De berekening is: prijsverschil maal te tanken liters, min extra kilometers maal verbruik per kilometer maal de alternatieve literprijs. Er wordt één keer op centen afgerond. Tijd, slijtage, verkeer, afwijkend rijverbruik en wijzigingen onderweg vallen buiten de schatting.

Dit is bewust geen automatisch reisadvies. Een hemelsbrede afstand is geen gereden omweg. De routeknop opent Google Maps; pas een latere routebron met passende gebruiksrechten en voldoende actuele gegevens kan een echte rijafstand leveren. Tot die tijd vult de bezoeker extra kilometers zelf in.

9. Afbeeldingen en toestemming

Er zijn vier echte categoriebeelden geselecteerd, lokaal geleverd en visueel gecontroleerd: was/textiel, afwas, mondverzorging en koffie. De Unsplash License staat de gekozen commerciële toepassing toe. Elke foto heeft een auteur, oorspronkelijke bronpagina en licentielink op de creditpagina. Het zijn navigatiebeelden; er wordt geen merkverpakking nagebootst.

Supermarkt-packshots uit een image_url-veld zijn niet overgenomen. PrijsProfeet laat de beeldrechten bij de rechthebbenden. Ook de Open Food Facts-licentietoelichting maakt onderscheid tussen databankrechten en fotografie. Voor exacte packshots moeten per bron de rechten, eventuele derdenrechten en creditvoorwaarden beoordeeld worden. Er wordt geen algemene garantie gegeven dat alle productbeelden vrij te gebruiken zijn.

10. Fouten melden zonder onbetrouwbare wijzigingen

Een bezoeker kan bij een aanbod, Duitse waarneming of verbonden tankstation een mogelijke fout doorgeven: prijs, identiteit, verlopen actie, ledenvoorwaarde, gesloten station of iets anders. Optioneel horen daar een geziene prijs en datum bij. Na succesvolle opslag volgt een meldnummer. Bij een fout blijft de tekst staan. Meldingen worden als pending in serveropslag bewaard; niemand kan via het formulier een prijs overschrijven.

Het endpoint controleert oorsprong, velden, prijsformaat, datums en omvang. Er is een limiet van tien meldingen per uur per afgeschermde verbindingsteller. Het IP-adres wordt niet in de melding opgeslagen; een geheime HMAC en dagelijkse datum vormen de teller. Er is geen publiek leesendpoint voor de meldingen. Een zelfstandige beheeromgeving, bewijsuploads en doorsturen naar bronbeheerders zijn nog niet toegevoegd. Er wordt geen gegarandeerde beoordelingstermijn beloofd.

Verlopen cache/tellergegevens en meldingen ouder dan 90 dagen worden opgeruimd bij een volgende melding. Een dagelijks opschoonproces is nog een vervolgstap, zodat daadwerkelijke verwijdering bij weinig verkeer niet aan een harde termijn wordt gekoppeld. De privacytekst vermeldt dit.

11. Wat is gecontroleerd en wat blijft onzeker?

Automatische tests controleren kassabedragen, bundels, ledenkeuze, tijdgrenzen, tegenstrijdige inhoud, landgroepering, filters, suggesties, eenheden, liters, omrijden, plaatszoeken, bronstoringen, tijdelijke opslag, rate limits en correctieopslag. De databasequery’s zijn ook op echte SQLite-tabellen met de gegenereerde migratie uitgevoerd. De interface is in een DOM-testomgeving bediend, waaronder toetsenbord, favorieten, snelle zoekwissels, locatieweigering en een opslagfout.

De publicatiebouw controleert dat de Worker geldig ESM is, alle lokale pagina’s en scripts bereikbaar zijn en afbeeldingen als echte JPEG-bytes zijn opgenomen. De productie-API’s worden gericht gecontroleerd. De Duitse tankadapter is met tests van het gedocumenteerde contract gecontroleerd, maar een actuele stationsopvraag kan pas met een echte sleutel worden geverifieerd.

De browseromgeving van deze werksessie is geblokkeerd bij het hervatten van beveiligde inlogstatus. Daardoor is geen visuele browsercontrole of fysieke iPhone-controle voltooid. DOM-tests bewijzen interacties, geen foutloze weergave of volledige toegankelijkheid. Ook daadwerkelijke winkelprijzen, een volledige landenprijsdekking en een meetbare verbetering van gebruiksgemak zijn hiermee niet bewezen.

12. Volgende stappen met de meeste waarde

  1. Duitse tankbron verbinden. Een persoonlijke Tankerkönig-sleutel via de serverconfiguratie; daarna echte opvragen in verschillende grensregio’s, brandstoffen en radii controleren.
  2. NL/BE tankprijsrechten en dekking regelen. Vraag een expliciet stationsprijscontract: landdekking, tijdstempels, openstatus, voorwaarden, cache, toegestane websiteweergave en capaciteit. Geen nationale gemiddelde prijs als vervanging.
  3. Duitse winkelpartner aansluiten. Begin met een afgebakende categorie en handelaar. Vereis GTIN, variant, inhoud, actuele verkoopprijs, filialen/online-scope, verzendkosten en voorwaarden. Een feed zonder betrouwbare identifiers wordt niet stil samengevoegd.
  4. Een klein gebruikersonderzoek. Laat vijf mensen zonder uitleg hun product vinden, een juiste bundel kiezen, twee verpakkingen vergelijken, een favoriet terugvinden en een locatie weigeren. Meet taakvoltooiing, fouten, tijd en onzekerheid; behandel vijf testers niet als representatieve marktmeting.
  5. Mobiele en toegankelijkheidscontrole. Controleer fysieke iPhone, VoiceOver, toetsenbord, 200% tekstvergroting, kleine schermen en lange productnamen. Pas op basis daarvan aan.
  6. Beheer voor correcties en bronkwaliteit. Voeg een afgeschermde controlelijst, beoordeling, bewijsbeleid en dagelijks opschonen toe. Bij twijfel uitsluiten; corrigeer niet op populariteit van een onbevestigde melding.
  7. Latere keuzehulp alleen met voldoende data. Een boodschappenmand, persoonlijke voorkeurswinkels, prijsalerts en een reisbewuste grensvergelijking kunnen nuttig zijn. Ze vereisen vollediger reguliere prijzen, betrouwbare routekosten en toestemming voor eventuele accounts of berichten. Die voorwaarden ontbreken nu nog.

Bronnen

De gelinkte primaire documentatie en eigen publicaties van onderzoeksorganisaties zijn geraadpleegd op 9 oktober 2026. Beschikbaarheid, licenties en API-contracten kunnen wijzigen. De gemaakte ontwerp- en implementatiekeuzes zijn hierboven als onze toepassing beschreven; aanbevolen vervolgonderzoek is niet als uitgevoerd resultaat gepresenteerd.