Ik heb de meeste dagen een tabblad open dat alleen bronaantallen laat zien. Niets moois — geen grafieken, geen filters, gewoon een getal naast elk van de 1.375 sites waar we advertenties vandaan halen, met een tijdstempel van wanneer elke site voor het laatst heeft ingecheckt. De meeste dagen is het saai, op de manier waarop infrastructuur saai hoort te zijn. Deze zomer was dat niet zo, en ik denk dat het verhaal van wat er misging nuttiger is voor jou, als iemand die een auto zoekt, dan de meeste "hoe koop je een tweedehands auto"-tips die we in plaats daarvan hadden kunnen schrijven. Het gaat over wat "live data" eigenlijk betekent wanneer de bron daarvan 1.375 losse websites zijn die je niets verschuldigd zijn.
Medio juli: het getal waar ik trots op was
Medio juli hadden we het bronnenregister opgekrikt naar 1.190 bronnen verspreid over 73 regio's — het resultaat van een paar weken lang dubbele vermeldingen en dode links opschonen die ons eigen aantal stilletjes hadden opgeblazen. Ik weet nog dat ik dacht: 1.190 echte, ingecheckte bronnen, daar mag je trots op zijn. Dat zijn heel wat individuele dealersites, advertentiesites en veilingfeeds, elk met hun eigen HTML-structuur, hun eigen ratelimieten, hun eigen opvatting over of een scraper een klant is of een aanval.
Toen begon een inhaalcampagne die we al een tijdje draaiden — het afwerken van een wachtlijst van 683 bronnen die maandenlang was uitgesteld, sommige geblokkeerd, andere gewoon nooit gebouwd — vruchten af te werpen. In de tweede helft van juli werden 274 daarvan gebouwd en aangesloten. Tegen het einde van de maand stond de teller op 1.464 werkende bronnen. Dat is het soort week waar je een screenshot van maakt.
Begin augustus: 241 bronnen, weg
Dan komt het getal dat je week verpest: van de ene op de andere dag zakten 241 bronnen weg naar een verslechterde staat. Niet door iets wat wij deden — het account van onze proxyleverancier was verlopen aan de factuurkant, en een enorm deel van ons verkeer loopt via roterende IP's, juist om te voorkomen dat we geblokkeerd worden door sites die scrapers ratelimiten. Geen proxy's, geen verse pagina's, geen verse advertenties. Bronnen melden niet dat ze kapot zijn; ze stoppen gewoon stilletjes met het teruggeven van nieuwe data, terwijl hun oude advertenties er nog actueel uitzien.
Dit is het deel dat niet zichtbaar wordt in een advertentietelling op welke autosite dan ook, de onze inbegrepen, tenzij je er expliciet naar zoekt: een "live" marktplaats kan verouderde rijen naast verse rijen hebben staan en er van buitenaf identiek uitzien. We hebben nieuwe crawlopdrachten afhankelijk gemaakt van een echte proxy-gezondheidscheck, zodat een dode pool de kwaliteit niet stilletjes verder kon laten verslechteren, en we hebben de onderdelen van het schema gepauzeerd die het erger zouden hebben gemaakt. Het is geen glamoureus werk. Het is het soort werk waarbij, als je er nooit iets over hoort, dat betekent dat iemand zijn werk heeft gedaan.
Een zijopmerking, want die is het waard om gewoon hardop te zeggen: elke site die elke dag beweert een vast, rond advertentieaantal te hebben, is óf niet echt live, óf vertelt je niet over weken zoals deze.
De bevriezing
Het vernieuwen van de proxy loste het grootste deel op. Wat ik niet had verwacht, was dat de crawler zelf een paar weken later vastliep — een deadlock bij het afsluiten, waarbij achttien van de negentien werkerthreads in futex_wait bleven hangen, nul CPU-verbruik, 75 uur lang aan één stuk. Geen crash, geen foutlog die het tegen iemand uitschreeuwde. Gewoon... niets gebeurde er, terwijl het dashboard bleef laten zien dat de laatste geslaagde run actueel was. We hadden op die specifieke host nog geen waakhond geïnstalleerd, wat het soort zin is dat je alleen schrijft nadat je precies dat al één keer hebt meegemaakt.
We hebben de waakhond gebouwd. We hebben het schema gepauzeerd totdat de vernieuwing van de proxy bevestigd stabiel was, in plaats van het risico te lopen dat een half verslechterde crawl stilletjes goede rijen door slechte zou vervangen — een gecrawlde bron krijgt zijn advertenties vervangen, niet samengevoegd, dus een slechte run voegt niet zomaar geen data toe, hij kan actief goede rijen verwijderen en er slechtere voor in de plaats zetten. Die asymmetrie is waarom we liever een dag verouderd draaien dan verslechterd.
Waar het getal is uitgekomen
Hier is de stand van vandaag, en de vorm van de zes weken die ons hier hebben gebracht:
We zijn uitgekomen op 1.375 bronnen verspreid over 73 regio's, die 1.108.535 live advertenties voeden, waarvan er momenteel 12.823 zijn gemarkeerd als geprijsd onder hun regionale cohort. Dat is zo'n 90 bronnen minder dan de piek van juli — sommige van de 241 verslechterde bronnen zijn nooit volledig teruggekomen, een handvol waren sites die hun anti-botbeleid intussen hadden aangepast en herbouwd moesten worden in plaats van opnieuw verbonden. We werken er nog een paar af.
Wat dit eigenlijk voor jou waard is
Niets hiervan verandert welke auto je zou moeten kopen. Maar het zou wel moeten veranderen hoe je elk "live voorraad"-getal op elke autosite leest, niet alleen de onze. Frankrijk staat op dit moment bovenaan onze regionale telling met 67.569 advertenties, Japan volgt op de voet met 61.940, en die getallen bewegen — niet omdat de tweedehandsmarkt zelf zo snel schommelt, maar omdat de infrastructuur die haar in de gaten houdt dat doet. Een advertentie die drie dagen verouderd is omdat een bron was verslechterd, ziet er precies zo uit als een verse, tenzij het platform eerlijk is over het verschil.
We vertellen liever over de bevriezing van 75 uur dan te doen alsof ons getal nooit wankelt. Een dataset die nooit een slechte week toegeeft, is een dataset waar je juist meer wantrouwen tegen zou moeten hebben, niet minder.



