Work Car import marketplace

Cars from Germany, priced as they will cost once they clear customs at home

A marketplace that brings German used-car listings to buyers outside the EU and quotes each car as a full landed cost — net price, import duty, shipping and the environmental payment — in three languages.

Sector
Automotive marketplace · Our product
Our part
Product and architecture, Listing ingest, Landed-cost engine, Multilingual catalog and SEO, Admin and buyer requests, Infrastructure
Built with
TypeScript, Next.js, PostgreSQL (Neon), Drizzle ORM, Apify, Cloudflare Workers, Cloudflare R2, Railway
Service
MVP development →
Concept illustration · Fictional identity and sample interface, not the original product. AI-generated artwork.

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.

  1. Listing collected New listings gathered from a German marketplace.
  2. Stored daily The dataset is queued and ingested once a day.
  3. Priced on arrival Duty, environmental payment and shipping added to the net price.
  4. Shown in three languages Catalog and listing pages in every interface language.
  5. Buyer request Sent from the listing, answered from the admin area.
How a German listing becomes a local offer. Schematic; no customer data.

Working on something similar?

Book a 30-minute call or send a brief. If the scope is clear, you get a written fixed quote within one or two business days.