Concurrenten die hun prijzen aanpassen zonder dat jij het merkt: dat kan je omzet kosten. Met Make, Puppeteer en Claude bouw je een automatische prijsmonitor die dagelijks concurrentenprijzen scrapt, vergelijkt met jouw tarieven en je waarschuwt wanneer actie nodig is. In deze handleiding bouw je het systeem stap voor stap op.
Stap 1: Voorbereiding
Voordat je begint heb je een aantal accounts en API-keys nodig. Zet deze eerst klaar zodat je het scenario straks in een keer kunt bouwen zonder onderbreking.
Benodigde accounts en tools:
Make (make.com) - gratis plan is voldoende voor begin. ScrapingBee account (scraping API met JS rendering, heeft gratis tier met 1.000 credits). Claude API key via console.anthropic.com. Google account voor Google Sheets en Gmail. Optioneel: Slack workspace als je daar alerts wilt ontvangen.
# .env bestand voor je lokale setup
SCRAPINGBEE_API_KEY=your_key_here
CLAUDE_API_KEY=sk-ant-your_key_here
GOOGLE_SHEETS_ID=your_spreadsheet_id
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxx
Stap 2: Doelpagina's identificeren
Bepaal welke concurrentenpagina's je wilt monitoren en welke CSS-selector de prijs bevat. Dit is het meest tijdrovende deel maar ook het fundament van het systeem.
Open de concurrentiepagina in Chrome DevTools (F12), ga naar Elements en zoek de prijscontainer. Rechtermuisklik op het prijselement en kies 'Copy selector'.
# Voorbeeld CSS-selectors per webshop type
SELECTORS = {
"webshop_a": {
"url": "https://concurrentA.nl/product/widget-pro",
"price_selector": ".product-price .current-price",
"name": "Widget Pro - Concurrent A"
},
"webshop_b": {
"url": "https://concurrentB.nl/widget-pro-2026",
"price_selector": "#price-box span.price",
"name": "Widget Pro - Concurrent B"
}
}
Stap 3: Make scenario aanmaken met cron-trigger
Maak een nieuw scenario aan in Make en stel de cron-trigger in op dagelijks 06:00. Zo heb je elke ochtend verse prijsdata voordat de werkdag begint.
Ga naar make.com, klik op 'Create a new scenario'. Kies als eerste module 'Schedule' en stel in: Every day at 06:00 (Amsterdam timezone). Sla het scenario op als 'Prijsmonitor - Dagelijkse Run'.
Stap 4: HTTP-module configureren voor ScrapingBee API
ScrapingBee handelt JavaScript rendering af, wat essentieel is voor moderne webshops die prijzen dynamisch laden via React of Vue. Configureer de HTTP-module als volgt:
# ScrapingBee API aanroep configuratie
URL: https://app.scrapingbee.com/api/v1/
Method: GET
Query parameters:
api_key: {{ScrapingBee API Key}}
url: {{URL van concurrent}}
render_js: true
wait: 2000
css_extractor: {
"price": "{{CSS selector}}"
}
Stel 'render_js' in op true voor dynamische pagina's. De 'wait' parameter (2000ms) geeft JavaScript de tijd om de prijs te laden voordat de pagina wordt gescrapt.
Stap 5: Prijs extraheren via regex in Make
De ruwe output van ScrapingBee bevat de prijs als tekst, inclusief valutasymbolen en spaties. Gebruik een regex in Make om de numerieke waarde te extraheren.
# Regex patronen voor Nederlandse prijsformaten
# Patroon 1: EUR 12,99 of 12,99 euro
(?:EUR|euro|€)\s*(\d+[,\.]\d{2})
# Patroon 2: 12,99 (decimale komma)
(\d{1,4}[,\.]\d{2})
# Make Text Parser regex:
{{replace(replace(1.price; "€"; ""); ","; ".")}}
# Converteert "€ 12,99" naar "12.99" (float)
Stap 6: Prijzen vergelijken met jouw Google Sheets database
Je houdt je eigen prijzen bij in Google Sheets. Make leest de huidige prijs op en berekent het verschil. Zo zie je in een oogopslag of een concurrent duurder of goedkoper is dan jij.
Google Sheets structuur: kolom A = productnaam, kolom B = jouw prijs, kolom C = laatste check datum, kolom D-F = concurrent 1,2,3 prijzen.
// Google Sheets formule voor prijsvergelijking
// Cel G2: percentage verschil concurrent vs jou
=((D2-B2)/B2)*100
// Voorwaardelijke opmaak: rood als concurrent >5% goedkoper
// Groen als concurrent duurder dan jij
Stap 7: Claude laten analyseren
Nu de ruwe data beschikbaar is, stuur je die naar Claude via de HTTP-module. Claude analyseert of het prijsverschil significant is en geeft een concreet advies.
// Claude API aanroep in Make (HTTP module)
URL: https://api.anthropic.com/v1/messages
Method: POST
Headers:
anthropic-version: 2023-06-01
x-api-key: {{Claude API Key}}
content-type: application/json
Body:
{
"model": "claude-opus-4-5",
"max_tokens": 500,
"messages": [{
"role": "user",
"content": "Analyseer dit prijsverschil voor een MKB-webshop.\nProduct: {{productnaam}}\nJouw prijs: EUR {{eigen_prijs}}\nConcurrent A: EUR {{prijs_a}}\nConcurrent B: EUR {{prijs_b}}\n\nGeef een concreet advies in max 3 zinnen. Is actie nodig? Zo ja, welke?"
}]
}
Stap 8: Alert sturen via Gmail en Slack
Als Claude aangeeft dat actie nodig is, stuur je automatisch een alert. Gebruik de Gmail-module voor het volledige rapport en optioneel een Slack webhook voor de snelle notificatie.
// Gmail module configuratie in Make
To: pricing-team@jouwbedrijf.nl
Subject: Prijsalert: {{productnaam}} - actie vereist
Body (HTML):
<h2>Prijsmonitor Alert - {{formatDate(now; "DD-MM-YYYY")}}</h2>
<p><strong>Product:</strong> {{productnaam}}</p>
<p><strong>Jouw prijs:</strong> EUR {{eigen_prijs}}</p>
<p><strong>Concurrent A:</strong> EUR {{prijs_a}}
({{round((prijs_a - eigen_prijs) / eigen_prijs * 100; 1)}}%)</p>
<h3>Claude's advies:</h3>
<p>{{claude_analyse}}</p>
Stap 9: Data loggen in Google Sheets
Log elke run in een apart tabblad voor historische analyse. Zo zie je prijstrends over tijd en kun je seizoenspatronen herkennen.
// Google Sheets - Append Row configuratie
Spreadsheet: Prijsmonitor Database
Sheet: Log
Values:
A: {{formatDate(now; "YYYY-MM-DD HH:mm")}}
B: {{productnaam}}
C: {{eigen_prijs}}
D: {{prijs_a}}
E: {{prijs_b}}
F: {{verschil_percentage}}
G: {{claude_advies_samenvatting}}
H: {{alert_verstuurd}}
Troubleshooting
Scraping geblokkeerd: Veel webshops blokkeren scrapers via bot-detectie. Gebruik ScrapingBee's 'stealth_proxy' optie of wissel IP-adressen. Overweeg ook de Apify Actor 'Web Scraper' als alternatief.
Dynamische prijzen laden niet: Verhoog de 'wait' parameter naar 3000-5000ms. Sommige webshops laden prijzen pas na gebruikersinteractie. Controleer of de prijs pas zichtbaar is na inloggen of na het toevoegen aan winkelwagen.
Currency-parsing fouten: Europese prijsformaten gebruiken komma als decimaalteken. Gebruik altijd replace() om komma's naar punten te converteren voor numerieke berekeningen. Verwijder ook punten als duizendtalscheidingsteken (1.299,99 wordt 1299.99).
Uitbreidingen
Automatische prijsaanpassing: Koppel het systeem aan je webshop API (WooCommerce, Shopify) om prijzen automatisch aan te passen als een concurrent significante wijzigingen doorvoert. Bouw een minimum marge-check in om onder de kostprijs te voorkomen.
Meerdere concurrenten monitoren: Gebruik een Google Sheets lijst als databron voor Make's Iterator module. Zo loop je automatisch door tientallen concurrenten zonder het scenario te kopiëren.
Historische grafieken: Gebruik Google Data Studio (Looker Studio) om de logdata te visualiseren als interactieve tijdlijn. Deel het dashboard met je team voor wekelijkse prijsreviews.