Menu

Not sure what you need? let’s connect

Talk to us
All work

Radar Insolvency

A Laravel package that crawls public insolvency registers across Europe on a daily schedule and hands every new business insolvency to Platform within a day of publication.

Client
Allaoui Technologies
Services
Custom web applications
Stack
Laravel 13 · PHP 8.5 · Livewire 4 · Puppeteer

About the client

Allaoui Technologies is the technology arm of the Allaoui group in Aachen, which trades printing, finishing and packaging machinery worldwide. It builds the Platform that runs the group’s business with Radar, which watches the machine market for the installed base, insolvencies, and other signals.

The challenge

No two registers work alike.

Allaoui needs to know about a business insolvency as soon as it appears in a public register. Every country publishes these notices in its own register, and no two registers work alike. Many render their pages with JavaScript, paginate in their own way, split a notice across a list and a detail page, or publish it as a PDF. Dates come in local formats and time zones, and private persons are listed next to businesses. Allaoui’s first plan was to build the crawlers straight into the Platform codebase.

The approach

Why a separate package.

We suggested keeping the crawlers out of the Platform codebase and putting them in a Laravel package of their own. The package handles crawling, scheduling, storage, and deduplication. Platform installs it with Composer, listens for two events, record created and record updated, and gets every notice in the same normalized shape, whichever country it came from.

Registers change their markup without warning, and every change means fixing a crawler. In a separate package, that fix happens in a small codebase with its own tests, away from the rest of Platform. Upgrades stay contained too: the package has already moved to newer Laravel and Livewire versions.

What we did

01

Package foundation

Crawl runs, records, queue jobs, and Artisan commands.

02

Crawl driver

A Puppeteer-based driver that follows steps defined in config, including actions, pagination and list-to-detail loops.

03

Country modules

A source definition and an item mapper for each register.

04

One record shape

Dates, industry codes, administrators and company details mapped the same way for every country.

05

Dashboard and scheduling

A Livewire dashboard with run results, and a crawl day and time for each country.

Filtering

Businesses only.

Allaoui only needs businesses, so each country module narrows the search as far as its register allows, using the register’s own filters, company registration numbers, legal forms or a list of company-name keywords to skip. Much of that filtering runs in the browser before the crawler opens a detail page, which keeps the number of loaded pages down. Anything that slips through is checked again before it is saved.

Scaling

Adding a country.

New countries follow one pattern. A single command scaffolds the source definition and the mapper, and most of the work is describing the register’s pages in config and mapping its fields. The package started with Germany in April 2026 and covered eleven countries by September.

outcome

Allaoui now gets new business insolvencies from eleven countries every day. After filtering, a country returns anywhere from tens to hundreds of results a day, depending on the register. Each record is stored once per country and registered ID, and Platform is notified whenever a record is created or changes. The daily feed makes the team’s manual searching and filtering easier.

Results

11

Countries crawled every day

<1 day

From publication in a register to Platform

10s–100s

Business insolvencies per country, per day, after filtering

Something similar in mind?

Next project

Buying Guides

Contact us

Let’s push the
boundaries.