Three storefronts, three ad accounts and a CRM built from scratch.
Ela Wonen & Slapen is a Dutch furniture and bedding retailer with a Rotterdam showroom, and the official Netherlands dealer for Enza Home and Yatas Bedding. I run the online side of all three: the storefronts, the product feeds, the advertising, the CRM they work in every day, and the automation around a ten week delivery cycle.
What this case study is honest about
- The engineering and the cleanup are finished and measurable. The numbers above are real and come from the project record.
- The rebuilt advertising launched recently, so there is no twelve month revenue chart here yet. When there is one, it goes on this page, including the months that disappoint.
- The client's store URL is not published here at their request. The work is described in full; the address is theirs to share.
The situation
A furniture retailer selling three brands, with a physical showroom in Rotterdam and an online store on WooCommerce that had grown over years. Product data was inconsistent, the advertising had been set up by someone else and left running, and nobody could say which part of it was working, because the tracking was reporting the wrong thing.
Furniture makes all of this harder than it sounds. Orders are large, between roughly 750 and 2,500 euro for most of the range, and custom pieces take ten to twelve weeks to arrive. A customer researches for weeks and buys once. Any measurement that only looks at this month is measuring the wrong window.
Three storefronts, one of them a migration
The group sells three brands: its own, plus Enza Home and Yatas Bedding as the official Netherlands dealer. One store ran on ageing WooCommerce, the others did not exist online.
Two Shopify stores were built from scratch. The third was migrated off WooCommerce onto the same domain, keeping the search rankings: 373 products and 835 variants rebuilt, 68 collections remapped, and 739 redirects so no existing link breaks. It went live on 10 July 2026.
Three Merchant Center accounts, and a feed the official app could not build
Shopping ads only work if the product feed is right. Shopify has an official Google app for this. On the main store it silently refused, reporting a domain verification error that was not true.
I queried Merchant Center directly and proved nothing was wrong at Google: domain claimed, no account issues, 869 products already approved. The app itself was broken. So I bypassed it and wrote a feed pushing straight to the Content API. 822 offers went live with 0 errors, and the stale legacy feeds were retired so they stopped competing with it.
Advertising that was spending without producing
Google and Meta accounts across the group, mostly dormant or running on autopilot since another agency set them up.
One display campaign was running at roughly 300 euro a month for 213,000 impressions and zero conversions. A single keyword had absorbed 150 euro. The bidding was optimising toward a page view counted as a conversion, so the system was obeying a wrong instruction perfectly. The Meta side had a pixel recording thousands of add to cart events and not one purchase. All of it paused, tracking rebuilt first, then two focused campaigns instead of a spread.
A CRM, because they had no access to their own
The business ran on a CRM they did not control and could not get into. Their customer and order history was locked inside a system belonging to someone else.
I built a replacement from scratch in Django, with its own data model for customers, products, variants, orders, payments and suppliers, a full admin, a sales screen the showroom staff use, and a dashboard that flags orders needing attention: past the promised delivery date, missing an address, or deposit not received. The old data was migrated across.
Automation around the ten week wait
Custom furniture takes ten to twelve weeks to arrive. That is a long silence for a customer who has just spent two thousand euro, and a long stream of "where is my order" messages for the staff.
A customer-facing order tracking page, so people can check for themselves. Invoices carrying a QR code that opens the right order page directly. WhatsApp and email automation for the updates that used to be typed by hand, plus abandoned cart and browse abandonment flows on the store.
What went wrong
Two things, and they are the useful part.
The Google app never worked. I spent real time clearing every prerequisite it complained about, including making myself a verified owner of the domain in Search Console and removing a stale account link. The error did not move. The lesson was to stop trying to fix the tool and go around it, which is what the direct feed does. I should have reached that decision two days earlier than I did.
iDEAL could not simply be switched on. It is the payment method most Dutch shoppers expect, and the assumption going in was that Shopify would offer it as a toggle. It did not: the store was not eligible, for reasons not visible through any API. That is a migration risk worth knowing about before you start rather than after you have moved.
What is still open
Honest list. Product feed scheduling for ongoing sync, the legacy Merchant Center data sources still to be switched off, and the payment methods still being resolved. The rebuilt campaigns launch when the conversion tracking is verified, not before, because launching ads into broken measurement is how the previous 213,000 impressions happened.
Want the same look at your store?
The audit that found the zero euro products, the swapped legal pages and the ad spend buying nothing is the same 15 point check I run for free. Two working days, written, no call required.