The starting point
A buyer outside the EU looking at a car in Germany sees a German price, not what the car will cost once it has cleared customs at home. Working that out takes the duty tables, the engine, the car's age, exchange rates and shipping — and the catalog has to keep up with listings that change every day.
What we were responsible for
We built the product end to end: the data pipeline, the landed-cost calculation, the public catalog in three languages, the admin area and the hosting.
What we built
-
Daily listing ingest
Listings are collected with Apify. A webhook queues each new dataset, and a daily run stores the listings, retires the ones that disappeared and refreshes exchange rates.
-
Landed cost as pure functions
Duty, the environmental payment and shipping are calculated in euro cents in a separate package with no database or network, then shown in the buyer's currency, dollars or euros. Internal fees never reach the browser.
-
A fast catalog in three languages
Three interface languages with proper language links for search engines. Listing pages are generated on first visit and cached; photos are served through an image proxy at the edge.
-
Admin and buyer requests
Staff sign in to an admin area, filter cars, correct details that the next sync will not overwrite, and answer requests buyers send from listing pages.
-
Social posts
A local tool drafts Instagram and Facebook posts for listings, with captions written by Claude.
Why it was hard
-
The law, not a guess
Duty depends on engine size, fuel and age under published tables, and a quote is refused rather than shown at an invented exchange rate.
-
Listings change every day
Each sync updates, retires and brings back listings without wiping manual corrections.
-
Cheap to run
The ingest runs once a day and exits, instead of a worker that is paid for around the clock.
Where it stands
The catalog, listing pages, landed-cost quotes, buyer requests, admin area and daily ingest are built, with CI that checks the build, the parser, the webhook and image URLs on every change.
- Listing collected New listings gathered from a German marketplace.
- Stored daily The dataset is queued and ingested once a day.
- Priced on arrival Duty, environmental payment and shipping added to the net price.
- Shown in three languages Catalog and listing pages in every interface language.
- Buyer request Sent from the listing, answered from the admin area.
