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

