PS PrestaShop Gemiddeld

AI Competitor — Prijsmonitoring van concurrenten

Prijsmonitoring van concurrenten installeren en instellen in PrestaShop 8 en 9: concurrentprofielen, catalogus-crawl, AI-extractie, meldingen en analyses.

Bijgewerkt Moduleversie 1.1.1

Overzicht

AI Competitor volgt de prijzen van uw concurrenten rechtstreeks vanuit uw PrestaShop-backoffice. U legt een concurrent één keer vast, met zijn naam en zijn selectors; de module kan daarna de volledige lijst van zijn producten via zijn sitemap ophalen, die aan uw catalogus koppelen, de prijzen op vaste intervallen meten, betekenisvolle verschuivingen opmerken, u per e-mail waarschuwen en een aan uw strategie aangepaste prijs voorstellen.

Compatibel met PrestaShop 8.0 tot 9.x, PHP 7.4 tot 8.3, native multishop. Geen Composer-afhankelijkheid, geen externe JavaScript-bibliotheek.

Installatie

  1. Open in uw backoffice Modules → Modulebeheer → Een module uploaden.
  2. Upload het bestand dfaicompetitor.zip.
  3. De module maakt zijn tabellen aan en het menu Catalogus → AI Competitor, dat zes pagina’s bevat: dashboard, concurrenten, bewaakte URL’s, concurrentcatalogus, rapporten en analyses, import/export.

Na installatie wordt een uniek cron-token aangemaakt. U vindt het op het dashboard van de module.

Bijwerken vanaf een 1.0.x-versie

Upload gewoon de nieuwe ZIP over de bestaande installatie heen. Het upgradescript maakt de nieuwe tabellen aan, voegt de ontbrekende kolommen toe en genereert vooral een concurrentprofiel voor elke reeds gebruikte concurrentnaam voordat het de bijbehorende URL’s eraan koppelt. Uw bestaande gegevens blijven behouden en er hoeft niets opnieuw te worden ingevoerd.

Een pakket met hetzelfde versienummer als het reeds geïnstalleerde opnieuw installeren speelt het upgradescript niet opnieuw af, en de PHP-opcache kan de oude bestanden blijven serveren. Controleer na een upload altijd het versienummer op het dashboard.

Eerste configuratie

Open Catalogus → AI Competitor. Het dashboard bundelt de statistieken en vijf configuratieblokken.

AI-aanbieder

De AI-terugval is optioneel maar aanbevolen: hij neemt het over wanneer een concurrentsite noch gestructureerde gegevens noch een bruikbare selector biedt. Drie aanbieders worden ondersteund:

  • Mistral AI (standaard), het goedkoopst, aanbevolen model: mistral-small-latest
  • Anthropic Claude, de beste precisie op complexe pagina’s, aanbevolen model: claude-haiku-4-5-20251001
  • OpenAI, goed compromis, aanbevolen model: gpt-4o-mini

Vul de API-sleutel van de gekozen aanbieder in. Die wordt gemaskeerd getoond; laat het veld bij een latere opslag leeg om de bewaarde sleutel te behouden. U betaalt rechtstreeks aan de aanbieder, zonder opslag van DataFirefly.

Meldingen

  • Meldingsadres: ontvanger van de verzamelmeldingen en het weekrapport.
  • Drempel voor verandering in procent, standaard 3 %. Daaronder wordt geen melding aangemaakt.
  • Dag van het weekrapport, standaard maandag.

Scraping

  • URL’s per cron-batch: aantal URL’s dat bij elke doorloop wordt gemeten, standaard 20.
  • Standaardinterval in uren, toegepast op nieuwe URL’s, standaard 24 u.
  • HTTP-timeout en User-Agent. De meegeleverde User-Agent noemt de bot bij naam (DataFireflyBot); sommige sites laten een benoemde bot toe die ze anders zouden blokkeren.
  • Bewaartermijn van de historiek in dagen, standaard 180.

Catalogus-crawl

  • Pagina’s per blok: aantal concurrentpagina’s dat in één doorloop wordt geopend, standaard 15.
  • Seconden per blok: tijdsbudget van elke doorloop, standaard 20. Houd het onder uw PHP-max_execution_time.
  • Koppeldrempel: minimale titelgelijkenis om een automatische koppeling te aanvaarden, standaard 82.
  • Koppelingen automatisch bewaken: maakt een bewaakte URL aan zodra een gecrawlde pagina aan een van uw producten wordt gekoppeld. Standaard uit.
  • Crawls vanuit cron voortzetten: standaard aan.

Aanpassingsstrategie

Drie strategieën bepalen de voorgestelde prijs, altijd berekend vanaf de goedkoopste concurrent:

  • Gelijktrekken: dezelfde prijs als de laagste concurrent.
  • X % onderbieden: X % eronder, standaard 1 %.
  • Premium op X %: X % erboven, voor een bewuste positionering in het hogere segment.

Een concurrent vastleggen

Sinds versie 1.1.0 is een concurrent een eigen record en niet langer een label dat bij elke URL opnieuw wordt ingetypt. Open Catalogus → AI Competitor → Concurrenten → Toevoegen. Het formulier heeft drie tabbladen.

Identiteit

De naam die overal wordt getoond, het domein zonder schema (voorbeeld.nl), de valuta, het meetinterval, de optie voor geforceerde AI-extractie en een vrij notitieveld. Het domein is wat de module toelaat een nieuwe URL automatisch aan de juiste concurrent te koppelen.

Selectors

De CSS-selectors voor de prijs, de productnaam, de SKU, de afbeelding en de beschikbaarheid. Laat ze leeg als de site JSON-LD publiceert, wat de meeste moderne webshops doen. Ondersteunde syntaxis: tag, .klasse, #id, [attribuut=waarde], afstammeling en direct kind. Voorbeeld: div.product-price > span.amount

Dat is de belangrijkste winst van het concurrentrecord: de dag dat een site zijn thema herbouwt en een selector breekt, corrigeert u die hier één keer en werkt de correctie door op alle URL’s van die concurrent die geen eigen selector hebben.

Catalogus-crawl

De sitemap-URL (leeg laten om de Sitemap:-richtlijnen uit de robots.txt van het domein te lezen), de URL van een startcategoriepagina, de selector voor de productlinks en die voor de link naar de volgende pagina, de URL-patronen om te behouden of te verwerpen, de wachttijd tussen twee aanvragen, het productplafond en de naleving van robots.txt.

De patronen aanvaarden een eenvoudige deeltekenreeks of een door schuine strepen begrensde reguliere expressie. In een Nederlandse webshop volstaat /product/ als behoudpatroon vaak om de productpagina’s te isoleren uit een sitemap die ook de blog en de CMS-pagina’s bevat.

De catalogus van een concurrent crawlen

Open Catalogus → AI Competitor → Concurrentcatalogus, kies de concurrent, de ontdekkingsbron en het productplafond, en start de crawl.

Er zijn twee bronnen beschikbaar:

  • Sitemap, aanbevolen. De module leest de ingestelde sitemap of die welke robots.txt aankondigt, volgt sitemap-indexen recursief en houdt de adressen over die bij uw patronen passen.
  • Categoriepagina’s, wanneer geen enkele sitemap bruikbaar is. De module start bij de lijst-URL, verzamelt de productlinks via de selector van de concurrent en volgt de link naar de volgende pagina.

Op het ontdekken volgt een verrijkingsfase die elke pagina opent, titel, SKU, EAN, merk, prijs, beschikbaarheid en afbeelding eruit haalt en daarna de koppeling aan uw catalogus probeert.

De crawl vordert in in tijd begrensde blokken, aangestuurd door de open pagina met een voortgangsbalk, en hervat bij elke cron-doorloop. Een sitemap met tienduizenden URL’s wordt verwerkt zonder ooit de max_execution_time van PHP te bereiken. U mag de pagina sluiten: het werk gaat via de cron door.

De koppeling aan uw catalogus

De module probeert drie wegen, in afnemende betrouwbaarheid:

  1. EAN13, gezocht op uw producten en hun varianten. Zekere overeenkomst, score 100.
  2. Referentie, leveranciersreferentie of MPN. Score 95.
  3. Titelgelijkenis, met een weging die modelnummers en merken zwaarder laat tellen dan gewone woorden, en een aftrek wanneer beide titels sterk in lengte verschillen. De score moet de ingestelde drempel overschrijden, standaard 82.

Elke regel van de catalogus toont de methode en de score van zijn koppeling. Een twijfelachtige koppeling corrigeert u met de hand: het koppelveld biedt autoaanvulling op uw catalogus, op naam of op referentie. De knoppen Opnieuw koppelen draaien de bewerking opnieuw op de niet-gekoppelde regels, of op alle, wat handig is nadat u referenties aan uw kant hebt gecorrigeerd.

Een gekoppelde regel wordt via de knop Bewaken een bewaakte URL, of in bulk via de groepsactie op een selectie. De aangemaakte URL erft naam, selectors, valuta en interval van de concurrent.

Een URL met de hand toevoegen

De crawl vervangt losse invoer niet. Open Catalogus → AI Competitor → Bewaakte URL’s → Toevoegen:

  • Concurrent: het record waarvan de URL erft. Laat leeg om alles met de hand in te vullen.
  • Product: gekozen uit uw catalogus.
  • URL: het volledige adres van de productpagina van de concurrent.
  • Naam van de concurrent, CSS-selector, valuta, interval: ingevuld vanuit de concurrent wanneer u ze leeg laat.

Kiest u geen concurrent, dan zoekt de module degene wiens domein overeenkomt met het ingevoerde adres en koppelt de URL eraan. De knop Scrape bij elke regel start een onmiddellijke meting, handig om een URL meteen na het aanmaken te controleren.

Hoe de extractie werkt

Voor elke URL probeert de module vier methoden na elkaar en stopt bij de eerste die lukt:

  1. JSON-LD: de gestructureerde Product/Offer-gegevens, aanwezig op de overgrote meerderheid van webshops. Prijs, valuta, beschikbaarheid, en voor de crawl ook titel, SKU, GTIN en merk, worden rechtstreeks gelezen zonder configuratie.
  2. OpenGraph: de metatags product price amount.
  3. CSS-selector: die van de concurrent, of de eigen selector van de URL als die er is.
  4. AI: een opgeschoond HTML-fragment gaat naar uw aanbieder, die prijs, valuta en voorraadstatus teruggeeft. Internationale prijsnotaties worden afgehandeld (1 299,90 net als 1.234,56 of $49.99).

Begin altijd zonder CSS-selector: JSON-LD volstaat in de meeste gevallen. Voeg pas een selector of geforceerde AI toe als de kolom Status no_price toont.

Import en export

De pagina Import / Export dient om een configuratie van de ene shop naar de andere mee te nemen.

Concurrenten als JSON

De export levert een bestand met de namen, domeinen, selectors en crawl-instellingen. Vink de op te nemen concurrenten aan, of vink niets aan om ze allemaal te exporteren. Bij de import gebeurt de koppeling eerst op naam en daarna op domein; een selectievakje bepaalt of een reeds bestaande concurrent wordt bijgewerkt of overgeslagen, en een voorbeeldmodus meldt het resultaat zonder iets te schrijven.

Bewaakte URL’s als CSV

Verwachte kolommen: product_id, product_reference, competitor_name, competitor_domain, url, price_selector, currency_iso, use_ai_extraction, scrape_interval_hours, active.

Alleen competitor_name en url zijn verplicht, plus product_id of product_reference om te weten bij welk product de URL hoort. Een onbekende concurrentnaam maakt zijn record automatisch aan, zodat één bestand volstaat om een hele installatie op te starten. Het scheidingsteken wordt automatisch herkend, en de import start in voorbeeldmodus, die regel voor regel meldt wat er zou worden aangemaakt, bijgewerkt of overgeslagen.

Concurrentcatalogus als CSV

Export van alles wat de crawl heeft gevonden, met het gekoppelde product, de methode en de score. Een selectievakje beperkt de export tot alleen de gekoppelde regels. Handig voor een offline controle of om te delen met uw inkoopteam.

De cron instellen

De periodieke werking steunt op een met token beveiligd endpoint, getoond op het dashboard. Plan de aanroep elke 30 minuten:

*/30 * * * * curl -s "https://uw-webshop.nl/index.php?fc=module&module=dfaicompetitor&controller=cron&token=UW_TOKEN" > /dev/null

Bij elke doorloop meet de cron de batch URL’s waarvan het interval is verstreken, verstuurt de wachtende meldingsmails, verzendt het weekrapport als het de juiste dag is, brengt een lopende catalogus-crawl één blok verder en ruimt de historiek op voorbij de ingestelde bewaartermijn. Het antwoord is een JSON-samenvatting.

Het token kan op elk moment vanuit het dashboard opnieuw worden gegenereerd, waarna de bestaande cronjobs moeten worden bijgewerkt. Handmatig starten kan ook via de knop Run cron now.

Meldingen

Er worden vijf meldingstypes gegenereerd, elk met een ernstgraad:

  • price_drop / price_rise: verschuiving boven de drempel. Een verschuiving van 10 % of meer wordt critical.
  • undercut: een concurrent duikt onder uw verkoopprijs inclusief btw. Altijd critical.
  • out_of_stock / back_in_stock: wijzigingen in beschikbaarheid, herkend via de gestructureerde gegevens of de AI.
  • scrape_error: pas na 3 opeenvolgende mislukkingen, om de ruis van tijdelijke storingen weg te nemen.

De meldingen worden per cron-doorloop gebundeld in één verzamelmail.

Rapporten en analyses

Het scherm Rapporten en analyses past in vier tabbladen, achter een permanent getoonde kengetallenbalk: vergeleken producten, aandeel producten waar u het goedkoopst bent, gemiddeld verschil met de laagste marktprijs, open meldingen, gezondheid van de scraping. Een periodekeuze dekt 7, 30 of 90 dagen.

Overzicht

Uw marktpositie als balk (het goedkoopst, ertussenin, het duurst), de producten waar u op prijs verliest, gerangschikt op aflopend verschil, die waar u ruimte hebt om te verhogen, een tabel per concurrent die toont wie u het vaakst onderbiedt, en de door de AI geschreven samenvatting. De kansen exporteren naar CSV.

Meldingen

De lijst filterbaar op type, ernst, status en vrije tekst, met een grafiek van het dagvolume per ernstgraad. Elke regel wordt afgevinkt of heropend zonder de pagina te herladen, en de teller van open meldingen werkt bij in de balk.

Productanalyse

Kies een bewaakt product: de module tekent uw prijs tegen die van elke concurrent over de periode, toont het aanpassingsvoorstel met de huidige en de voorgestelde prijs naast elkaar, en somt de bronnen op met bij elke bron een knop voor een onmiddellijke meting.

Sinds versie 1.1.0 legt elke meting ook uw eigen prijs van dat moment vast. Dat maakt de historiek van de verschillen reconstrueerbaar. In een webshop die vanaf een 1.0.x is bijgewerkt, wordt de curve van uw prijs pas exact vanaf de metingen na de update; daarvoor valt de module terug op uw huidige prijs.

Gezondheid

De URL’s die falen, met hun status, het aantal opeenvolgende mislukkingen, de laatste fout en een knop om opnieuw te proberen, plus een slaagpercentage per concurrent. Dit is de eerste plek om te kijken wanneer een cijfer vreemd lijkt: een concurrent waarvan de scraping is uitgevallen vertekent de gemiddelden.

Prijsvoorstel

In het tabblad productanalyse toont de module uw huidige prijs, het minimum, het gemiddelde en het maximum van de concurrenten, de bronnen en de voorgestelde prijs volgens uw strategie. De knop Toepassen schrijft de prijs naar het PrestaShop-product.

Toepassen gebeurt nooit automatisch. Dat is een bewuste keuze om neerwaartse spiralen te vermijden tussen concurrenten die hetzelfde soort gereedschap gebruiken. De omrekening van prijs inclusief naar exclusief btw gebeurt automatisch op basis van het btw-tarief van het product.

Problemen oplossen

De crawl vindt geen enkele pagina

Controleer eerst of het domein van de concurrent zonder schema en zonder www. is ingevuld. Open daarna https://domein/robots.txt in een browser: bevat die geen enkele Sitemap:-richtlijn, vul dan de sitemap-URL met de hand in op het concurrentrecord. Bestaat de sitemap maar wordt er niets behouden, dan is uw filterpatroon waarschijnlijk te streng: maak het leeg om te zien wat er terugkomt en verscherp het daarna.

De crawl vindt pagina’s die geen producten zijn

Vul als behoudpatroon het segment in dat de productpagina’s van de site gemeen hebben, bijvoorbeeld /product/ of /p/, en als verwerppatroon wat het resultaat vervuilt, bijvoorbeeld /blog/. Leeg daarna de catalogus van de concurrent en start opnieuw.

Veel pagina’s blijven ongekoppeld

Kijk eerst of de concurrentpagina’s een SKU of een EAN tonen: zonder gemeenschappelijke identificatie kan alleen titelgelijkenis werken. Vul de SKU-selector in op het concurrentrecord, start de crawl opnieuw en gebruik daarna Opnieuw koppelen. Verschillen uw titels sterk van die van de concurrent, verlaag dan de koppeldrempel naar 75 en controleer de verkregen koppelingen voordat u het zo laat.

Status “no_price”

Geen van de methoden heeft een prijs gevonden. Controleer de URL in een browser, voeg een CSS-selector voor de prijs toe op het concurrentrecord, of schakel geforceerde AI-extractie in.

Status “error” of “blocked”

error betekent dat de pagina niet heeft geantwoord (HTTP 400 en hoger, of een timeout). blocked betekent dat de robots.txt van de site dat adres aan onze bot verbiedt. In het eerste geval past u de User-Agent aan, verhoogt u de timeout of verruimt u het interval. In het tweede is het een beslissing van de doelsite die u zelf moet afwegen.

De AI-extractie werkt niet

Controleer of de API-sleutel geldig is en of het model bij uw aanbieder bestaat. Fouten bij AI-aanroepen worden gelogd in Geavanceerde parameters → Logboeken met het voorvoegsel [dfaicompetitor].

De e-mails komen niet aan

Test de e-mailconfiguratie van PrestaShop in Geavanceerde parameters → E-mail. De module gebruikt het native mailsysteem met eigen sjablonen in het Frans en het Engels.

Goede praktijk en naleving

  • Laat de naleving van robots.txt aan staan. Ze geldt zowel bij het ontdekken als bij het lezen van de productpagina’s, respecteert een gepubliceerde Crawl-delay en past de voorrangsregel van de standaard toe: passen zowel een Allow als een Disallow, dan wint de langste regel.
  • Houd bij de eerste crawl van een site die u niet kent een wachttijd van minstens een seconde en een redelijk productplafond aan.
  • Verruim de meetintervallen: 6 tot 24 u per URL volstaat ruimschoots voor prijsmonitoring.
  • Behoud een herkenbare User-Agent. Dat is de eerlijke praktijk die in concurrentiemonitoring wordt verwacht, en sommige sites dulden een benoemde bot die ze anders zouden blokkeren.
  • Het uitlezen van openbare prijzen is in Europa in de regel geoorloofd, maar u blijft verantwoordelijk voor het gebruik van de verzamelde gegevens en voor de beoordeling van de gebruiksvoorwaarden van de bezochte sites.
Was deze pagina nuttig?

Loopt u nog vast? Neem contact op met support