Recent Comments
Case study · Parquet Service · Part 2: rebrand & transformation
How we turned a Paris floor contractor into a vertical marketplace built to scale across France
We built Parquet Service’s organic growth engine from zero, then rebuilt the company around it. In this second chapter we rebranded it, designed a pay-per-lead marketplace that connects homeowners in Île-de-France with independent flooring companies, built the product, the legal and trust framework behind it, and restructured SEO around the new model, ready to roll out region by region.
TL;DR
Where we started: a Paris floor-restoration brand whose organic demand, which we had built from zero ad budget, had outgrown what any crew could serve. What we did: we rebranded it, redesigned the business as a two-sided pay-per-lead marketplace, built the product, the trust and legal framework, and restructured SEO around it. Result: a scalable model live in Île-de-France, ready to replicate département by département.
Previously, in part 1
We built the engine: organic acquisition from zero
In November 2025 we launched Parquet Service as a Paris floor-restoration business with zero ad budget. We set the domain strategy around an aged domain, built a 228-article topical cluster covering every arrondissement, set up the Google Business Profile and wired an automated lead pipeline. Organic search became the company’s main source of clients within weeks.
Part 2
A year later, we rebuilt the company around it
This second chapter covers what we did next: a full rebrand, the move from executing jobs to running a two-sided marketplace, a product we built from scratch for flooring companies, and the legal and trust framework that makes it safe to scale.

Our scope
What we built and shipped
The challenge
Demand was no longer the bottleneck. Capacity was.
The SEO engine we built in year one kept bringing requests from all over Île-de-France. In a general-contractor model, every new district means more crews, more scheduling and more margin pressure: growth is capped by the size of the team, not by the market.
The question changed from “how do we win more jobs?” to “how do we turn this demand into a business that scales without a crew in every town?”
The decision
Move from doing the work to owning the demand.
We shifted Parquet Service from a general contractor to a vertical marketplace: homeowners describe their project for free, independent flooring companies in their area buy the contact. The brand keeps what it is best at (search visibility and qualified demand) and the supply side scales with every company that joins.
Vertical beats generic here: one trade, one vocabulary (sanding, vitrification, herringbone, m²), pricing that matches the job, and SEO pages that already rank for those exact intents.
Rebrand
From a local contractor look to a premium category brand
The marketplace needed to earn trust from two audiences at once: homeowners comparing quotes and companies paying for contacts. We rebuilt the identity around the material itself (warm wood tones, sand backgrounds, a confident ink black) and a single modern typeface, Instrument Sans.
- One design system shared by the public site and the pro platform, so clients and artisans recognise the same brand.
- We rebuilt every page: home, 6 service pages, pricing, blog and the 72 local pages, with legacy theme styles removed so the system stays consistent.
- We repositioned the copy from “we sand your floor” to “compare up to 5 flooring companies near you”, without losing the local intent the site already ranked for.
Palette & type
Contrast and restraint, the way premium interior brands use black.
The tone of oiled oak: the finish clients actually want.
Freshly sanded wood: calm backgrounds that let floor photos breathe.
Neutral surfaces and dividers that never compete with the wood.
Instrument Sans
Headlines, interface and emails in a single family, from the client form to the invoices. We deliberately avoided the orange-brown palette typical of trade contractors: the brand should feel like a design studio for floors, not a tradesman’s van. Text colours keep a readable contrast.
Business model
Simple for clients, fair for artisans
Clients
Free, no commitment. One short form, embedded on every local page, sends the project to up to 5 companies in their département.
Artisans
No subscription. They see the job (works, surface, town, timing, photos) before paying and buy only the contacts they want. Price scales with surface, from €15 to €45 per contact.
Platform rules
5 buyers max, 7-day window, chronological feed with no paid ranking. Referral credits replace sign-up freebies, so every free contact brings a new registered company.
Contractor model
One request = one job if won, delivered by one crew. A new district means hiring, equipment and travel time.
Marketplace model
One request can be sold up to 5 times, up to ~€225 per request at the top price tier, with no labour cost. A new zone needs a page and local companies, not a crew.
Unit economics shown as the model's ceiling, not as reported revenue.
Product
A premium interface on both sides
We built it from scratch on a modern stack, designed to feel like a professional tool rather than a lead list. Artisans get a clean feed, transparent pricing and instant access after payment; clients get a three-step form that works inside any page of the site.







How it works
From a homeowner's form to a company's phone call
Request
3-step form on any of 72 local pages; bot check, consent recorded with version and timestamp.
Protection
Duplicate check, photos stripped of GPS, contacts encrypted before they touch the database.
Feed
Published to companies in the département; project visible, contact hidden, price by surface.
Payment
Stripe Checkout reserves a seat; only the signed webhook confirms it. 5 seats max.
Reveal
Contact unlocked for the buyer only; every access is logged.
Retention
Contacts deleted automatically after 90 days; anonymised project kept for statistics.
Risk framework
Every way a marketplace can go wrong, and the decision we made
A lead marketplace sits between two parties it does not control. Before launch we mapped the scenarios that could hurt clients, artisans or the brand, and turned each into a product rule, not a policy page.
| Risk | Decision built into the product |
|---|---|
| Fake or unqualified artisans buying client data | SIRET checked against the Sirene registry at signup; Kbis/RNE extract and insurance certificate (with expiry date) uploaded before any approval. One account per SIRET, so a blocked company cannot come back under a new login. |
| Spam, fake or repeated requests | Cloudflare Turnstile, honeypot and rate limits on the form. Same phone + same postcode cannot be sold twice while a request is live; more than 3 requests from one phone in 30 days are held for manual review instead of auto-publishing (agencies stay allowed). |
| One client sold over and over | Hard cap of 5 buyers per request, 7-day lifetime, chronological feed: no artisan can pay to jump the queue. |
| Address leaking through photos | Every uploaded photo is re-encoded server-side without EXIF/GPS metadata before artisans can preview it. Artisans see the job, not the location. |
| Disputes between client and artisan | The platform is positioned as a pure connection service. Artisans acknowledge on first login that a lead is not a contract, is non-refundable and that the platform does no mediation; the same wording is in both sets of terms. |
| Refund pressure and lead-quality complaints | Artisans can flag a bought lead (reason or free text). Flags are admin-only, never visible to competitors, and refunds stay a discretionary decision when several independent buyers confirm a bad lead. |
| Clients getting scammed by a bad actor | The thank-you screen and confirmation email tell clients never to send a deposit before meeting the artisan, agreeing on a written quote and checking their documents. |
| Personal data exposure | Client contacts encrypted with AES-256-GCM per request, database locked behind the server (row-level security deny-all), every contact reveal logged, contacts purged automatically after 90 days (30 for unfinished requests). Data hosted in Paris. |
| Regulatory risk (France / EU) | Terms for clients and for artisans written against the Code de la consommation (L111-7 platform transparency), the EU P2B regulation (notice periods for suspension and changes), GDPR (consent, retention, recipients) and the DSA. Artisan documents kept for the account's life plus 5 years as evidence. |
| Losing local rankings during the pivot | Google Business Profile kept as a local service listing; 61 duplicate and cannibalising URLs consolidated with 301 redirects into the new local pages instead of being deleted. |
Acquisition engine
SEO restructured around the new model
- 72 local pages (20 Paris arrondissements + inner suburbs), each with unique local content and the form embedded.
- Internal linking rebuilt: 810 keywords mapped to pillar pages, 2,773 contextual links, anchors taken from text that actually exists on the site.
- 61 URLs consolidated with 301 redirects: duplicate posts and old local posts competing with the new zone pages.
- Google Business Profile strengthened with services and categories while keeping its local listing intact.
Stack
Every choice has a reason
| Technology | Why |
|---|---|
| Next.js 15 + TypeScript | One codebase for the client form, the artisan app and the admin; server-side API routes keep secrets off the browser. |
| Supabase, Paris region | Postgres, auth and private file storage hosted in France: client data never leaves the EU, row-level security denies all direct access. |
| Stripe Checkout + webhooks | Card payments, receipts and refunds without building billing; only a signed webhook can unlock a contact. |
| AES-256-GCM encryption | Client contacts encrypted per request; even a database export reveals nothing without the application key. |
| Sirene API, Turnstile, sharp | Company registry check at signup, bot protection on the form, photos re-encoded without GPS metadata. |
| Hostinger + GitHub | Push-to-deploy and a scheduled cleanup job that enforces retention rules automatically. |
| WordPress, Elementor, Yoast, Internal Link Juicer | The acquisition site the team can still edit, with the form embedded and a rebuilt internal-linking graph. |
What's next
Île-de-France first, then France, one département at a time
The same template (local pages, embedded form, artisan supply in the zone) can be duplicated per département. Next steps: a steady publishing cadence on long-tail keywords, outreach to flooring companies to build supply ahead of demand, and expansion beyond the inner suburbs.
Figures from Google Search Console for parquetservice.fr. Product screenshots of the artisan feed and request detail use sample data.
Comments are closed.