Ga naar hoofdinhoud

Doelgroepen

Met Doelgroepen bouw je een herbruikbare, gerichte groep bezoekers op basis van gedrag, bestelhistorie, klantwaarde en evenement-affiniteit. Je ziet live hoeveel bezoekers eraan voldoen, slaat de doelgroep op en gebruikt 'm voor een e-mail campagne.

Je vindt het onder Bezoekers & berichten → Doelgroepen. Klik op Nieuwe doelgroep om er een te maken.

Doelgroepen vs. Selecties maken? Selecties is de oudere filter-tool. Doelgroepen is de nieuwe, krachtigere builder: geneste EN/OF/GEEN-logica, "kocht X maar niet Y", en voorberekende klantwaarde-velden (RFM, recency, levensfase).

Hoe het werkt​

Doelgroep bewerken met Genereer met AI, de voorwaardenbouwer en de live preview

Een doelgroep heeft een Naam, een optionele Omschrijving, een Type en Voorwaarden. De voorwaarden zijn opgebouwd uit groepen en voorwaarden.

  • Voorwaarde — één regel: een veld, een operator en een waarde. Bijvoorbeeld: Woonplaats · bevat · Amsterdam.
  • Groep — bundelt voorwaarden met een logica-schakelaar:
    • EN — voldoet aan álle voorwaarden.
    • OF — voldoet aan mínstens één.
    • GEEN — voldoet aan géén ervan (uitsluiten).
  • Subgroep — een groep binnen een groep, voor combinaties als A EN (B OF C).
  • Heeft (niet) gekocht — een speciaal blok dat test of de bezoeker wél of géén ticket heeft dat aan criteria voldoet. Hiermee maak je "kocht X maar niet Y". Zie hieronder.

Onderaan toont de Live preview het aantal bezoekers en een voorbeeldlijst. Die beweegt mee terwijl je bouwt; met Ververs reken je opnieuw.

Heeft (niet) gekocht​

Met de knop Heeft (niet) gekocht voeg je een blok toe. Bovenin het blok kies je:

  • Heeft wél — de bezoeker heeft een ticket dat aan álle voorwaarden in het blok voldoet.
  • Heeft géén — de bezoeker heeft géén ticket dat aan de voorwaarden voldoet.

Binnen het blok kun je alleen velden kiezen die over een ticket of bestelling gaan (zoals Evenement, Hoofd-evenement, Categorie, Tags, Kaartsoort, Locatie, Besteldatum). Alle voorwaarden in één blok gelden voor hetzelfde ticket: Evenement = X en Besteldatum na -1y betekent "een ticket voor X, besteld in het afgelopen jaar".

Heeft géén telt per e-mailadres. Heeft iemand meerdere accounts met hetzelfde e-mailadres, en is met één daarvan een passend ticket gekocht, dan valt die persoon buiten de doelgroep. Zo krijgt iemand die al een kaartje heeft niet alsnog de mail via een ander account. Heeft wél kijkt per account.

Opgelost (september 2026): een "heeft (niet) gekocht"-blok waarvan de voorwaarden als "één van" (OF) of "geen van" zijn gecombineerd, bijvoorbeeld uit een opgeslagen of door AI voorgestelde doelgroep, selecteerde (bijna) iedereen. Zo'n blok selecteert nu alleen de juiste mensen. Twijfel je over een oudere doelgroep, open 'm dan en controleer het aantal in de Live preview.

Datums​

Datumvelden accepteren een vaste datum (2024-01-01) of een relatieve waarde die altijd actueel blijft: today, -30d, -90d, -1y. Onder elk datumveld staan snelknoppen (Vandaag · 7 dgn · 30 dgn · 90 dgn · 1 jaar). De standaard-operator voor datums is "na" — meestal wil je "in de laatste N dagen".

Type: dynamisch of statisch​

  • Dynamisch — herberekenen bij gebruik (standaard) — de doelgroep wordt op het moment van gebruik opnieuw berekend. Voor een campagne is dat het verzendmoment: iemand die dan aan de voorwaarden voldoet, zit erin.
  • Statisch — bevroren lijst — een vaste momentopname.

Genereer met AI​

In het blok Genereer met AI beschrijf je je doelgroep in gewone taal, bijvoorbeeld Trouwe klanten uit Utrecht die het afgelopen jaar niets kochten, maar wel ooit een jazzconcert bezochten. Klik op Genereer voorwaarden: de AI vult de voorwaarden hieronder in. Er wordt niets automatisch opgeslagen; controleer en pas aan vóór je opslaat.

  • Met CRM+ kun je onbeperkt genereren.
  • Zonder CRM+ heb je 10 gratis AI-generaties. Naast de knop zie je hoeveel je er nog over hebt. Zijn ze op, dan zie je dat je kunt upgraden naar CRM+.
  • Alleen een geslaagde generatie telt mee.
  • Het tegoed is gedeeld met Nieuwe campagne met AI bij E-mail campagnes: daar maakt de AI in één poging een doelgroep, een mail en een verzendmoment.

Beschikbare velden​

GroepVelden
KlantenE-mailadres, Woonplaats, Postcode, Land, AVG opt-in (incidentele e-mail), Nieuwsbrief opt-in, Extra opt-in
BestellingBesteldatum, Betaalstatus, Orderbedrag, Betaalmethode, Ticketstatus, Check-in datum, Kaartsoort, Locatie, Taal, Actiecode
EvenementenEvenement, Hoofd-evenement, Categorie, Tags, Evenementdatum
WachtlijstWachtlijst-evenement, Wachtlijst-type, Wachtlijst-aanmelddatum
Klantwaarde (voorberekend, CRM+)Laatste bestelling, Eerste bestelling, Aantal bestellingen, Aantal verschillende events, Aantal tickets (lifetime), Aantal keer ingecheckt, Lifetime besteed (€), Gem. orderbedrag (€), Totaal gedoneerd (€), Laatste evenementdatum, Klantsegment (RFM), Levensfase

De opt-in-velden hebben de waarden Aangemeld en Niet aangemeld.

Opt-in en campagnes: een campagne slaat bij verzending altijd iedereen over bij wie de AVG opt-in (incidentele e-mail) uit staat. Wil je alleen nieuwsbrief-abonnees mailen, voeg dan zelf Nieuwsbrief opt-in · is · Aangemeld toe.

Klantsegment (RFM) en Levensfase​

De Klantwaarde-velden zijn per klant voorberekend (zie Voor beheerders onderaan) en horen bij het CRM+ pakket. Zonder CRM+ zijn ze niet te kiezen en staat (CRM+ pakket) achter de naam.

  • Klantsegment (RFM) — op basis van Recency (hoe recent), Frequency (hoe vaak) en Monetary (hoeveel besteed): Kampioenen, Trouwe klanten, Nieuw, Potentieel, Risico (afhakend), Eenmalige koper, Sluimerend, Verloren, Nog niet gekocht.
  • Levensfase — op basis van hoe lang geleden de laatste bestelling was: Nieuw, Actief, Sluimerend (6-12 mnd), Lapsed (1-2 jaar), Verloren (>2 jaar), Nog niet gekocht.

Kies je zo'n veld, dan legt Hoe worden deze segmenten bepaald? onder de voorwaarde uit hoe elk segment wordt berekend.

Wachtlijst​

Wie zich via de webshop voor een wachtlijst aanmeldt, leg je hiermee vast — en blijft selecteerbaar, óók nadat ze een seintje hebben gehad. (De operationele wachtrij wordt namelijk geleegd zodra mensen genotificeerd zijn; dit signaal blijft bestaan.)

  • Wachtlijst-evenement — voor welk evenement ze op de wachtlijst staan/stonden. Met de operator heeft een waarde selecteer je iedereen die op een wachtlijst staat.
  • Wachtlijst-type — Seintje (notify) of Auto-bestelling (order).
  • Wachtlijst-aanmelddatum — wanneer ze zich aanmeldden (datumveld, relatieve waarden zoals -30d mogelijk).

Voorbeelden van selecties​

Elke rij hieronder is een complete doelgroep. Blokken "Heeft wél/géén gekocht" staan cursief.

Bedanken & nazorg​

DoelBouw 'm zo
Bedankmail aan kopers van een eventHeeft wél gekocht: Evenement = Concert X
Doneerders bedankenTotaal gedoneerd (€) · groter dan · 0
Pre-event mail voor een hele festivalreeksHeeft wél gekocht: Hoofd-evenement = Festival X

Retentie & win-back​

DoelBouw 'm zo
Lapsed (al een jaar niets gekocht)Laatste bestelling · voor · -1y
Sluimerende VIP's (gerichte win-back)Laatste bestelling · voor · -1y EN Lifetime besteed (€) · groter of gelijk aan · 100
One-and-done activerenAantal bestellingen · is · 1
Verloren klanten via segmentKlantsegment (RFM) · is · Verloren

Loyaliteit & waarde​

DoelBouw 'm zo
Trouwe fansAantal verschillende events · groter of gelijk aan · 3
TopklantenKlantsegment (RFM) · is · Kampioenen
VIP op bestedingLifetime besteed (€) · groter of gelijk aan · 500
Nieuwe klanten verwelkomenLevensfase · is · Nieuw

Cross-sell & gedrag (kocht X maar niet Y)​

DoelBouw 'm zo
Kocht X, mist het vervolgHeeft wél gekocht: Evenement = X EN Heeft géén gekocht: Evenement = Y
Genre-fan die een titel mistHeeft wél gekocht: Categorie = Jazz EN Heeft géén gekocht: Evenement = Z
Bezoekers van een locatieHeeft wél gekocht: Locatie = Theater Y

Wachtlijst​

DoelBouw 'm zo
Wachtlijst van een event informerenWachtlijst-evenement = Concert X
Wilde erbij, maar kocht nietWachtlijst-evenement = Concert X EN Heeft géén gekocht: Evenement = Concert X
Iedereen die ooit op een wachtlijst stondWachtlijst-evenement · heeft een waarde

Demografisch & combinaties​

DoelBouw 'm zo
Lokale doelgroepWoonplaats · bevat · Amsterdam
Nieuwsbrief-abonnees in een regioNieuwsbrief opt-in · is · Aangemeld EN Postcode · begint met · 10
Loyaal in een categorieAantal verschillende events · groter of gelijk aan · 2 EN Heeft wél gekocht: Categorie = Theater

Tip: combineer de Klantwaarde-velden met "Heeft (niet) gekocht" voor scherpe doelgroepen — bijv. Lapsed EN Heeft wél gekocht: Festival X = oud-bezoekers van precies dat festival om terug te halen.

Voor beheerders​

De Klantwaarde-velden (RFM, recency, aantallen, levensfase) staan in een voorberekende tabel user_stats (1 rij per klant). Die wordt herberekend met:

php artisan segments:rebuild-stats --tenant=<database>

In productie draait dit nachtelijk per tenant. Een nieuwe doelgroep gebruikt altijd de laatst berekende waarden; tussentijdse aankopen tellen pas mee na de volgende herberekening. Klanten zonder user_stats-rij (aangemaakt na de laatste herberekening) hebben lege Klantwaarde-velden.

Wachtlijst-data — aanmeldingen worden duurzaam vastgelegd in waitlist_signup (geschreven door tickets bij aanmelding via WaitinglistController), los van de vluchtige waiting-queue die na notificatie + grace wordt opgeschoond. De engine joint hierop net als op order/seat. Dit werkt vooruit: alleen aanmeldingen vanaf het live gaan van de feature worden bewaard — al geprunde aanmeldingen zijn weg. De migratie 2026-05-31-waitlist-signup-tenant.sql doet eenmalig een backfill van wie er op dat moment nog in waiting staat.

Aandachtspunten in de data:

  • Check-in / aanwezigheid — seat_checked_date gebruikt nuldatums in plaats van leeg. Gebruik daarom het veld "Aantal keer ingecheckt" (≥ 1) voor wie echt is geweest, niet "Check-in datum · heeft een waarde".
  • Geldige bestellingen — statistieken tellen alleen bestellingen met status ord (niet geannuleerd/verwijderd).
  • Heeft géén gekocht correleert op User.user_email (stoelen van elk account met hetzelfde adres); heeft wél gekocht op seat_user_id = user_id. De eigen match van het blok staat genest binnen de correlatie; none = "een ticket dat aan geen van de regels voldoet".
  • Opt-in staat per account. Heeft één account van een e-mailadres opt-in aan en een ander account uit, dan kan het adres in de doelgroep vallen via het account mét opt-in.
  • Negaties laten lege waarden vallen: "GEEN: Woonplaats = Amsterdam" en is niet sluiten ook mensen zonder woonplaats uit.

Gerelateerd​