Work

Case studySands Entreprenad

An AI-native lead platform for a Stockholm roofing contractor.

From a single proof-of-concept landing page to a full digital presence they own outright — built and run end-to-end.

Role
End-to-end — build, SEO, paid, CRO
Industry
Roofing / construction
Location
Greater Stockholm
Build
Agentically, in Claude Code
17×
organic search visibility
~1,500% uplift in organic impressions (Search Console)
more leads, quarter over quarter
Across two comparable quarters
Owned
channel, not rented
From renting leads on marketplaces → their own engine

Out of the marketplace, into a channel they own.

Sands Entreprenad, a roofing contractor covering greater Stockholm, was dependent on expensive third-party lead marketplaces like Offerta — where you pay a high price per lead, get dropped into a “provider selection” for the customer to choose from, and pay whether or not you win the job. It’s costly, brutally competitive, and rents you demand you never own. The client wanted out — to build a lead-generation engine they fully own themselves.

The engagement started small and low-risk — an isolated landing page with paid ads driving to it, as a proof of concept. It performed well enough that the client asked me to rebuild their entire website, and from there I took ownership of their whole Google presence: paid search, SEO, reviews, Google Business Profile, and full click-to-job measurement — all funneling into a channel they own outright.

The platform was built agentically from inside Claude Code, with a deliberate code-plus-CMS architecture and a lightweight automation that gives the client a measurable lead funnel without a heavy CRM. The result: 17× organic search visibility and roughly 7× more leads quarter-over-quarter.

Renting demand, not owning it.

Before the rebuild, growth was capped by a channel Sands didn’t control.

  • Dependent on paid lead marketplaces (Offerta and similar): high cost per lead, placed in a bidding “provider selection” against several competitors, and charged with no guarantee of winning the work.
  • A competitive local market of expensive roofing keywords, and no structure to capture demand across the county’s municipalities.
  • An old site that didn’t turn visitors into quote requests.
  • No real focus on Google presence — search, reviews or profile.
The goal: a modern platform that ranks on local roofing searches, makes it effortless to request a quote, and traces every lead from ad click to closed job — so marketing can optimize toward actual work.

Proof before platform.

Rather than pitch a big rebuild cold, I started with a single isolated landing page and paid ads pointed at it — a contained, low-risk test of demand and messaging. It converted well enough that the client wanted the whole site rebuilt around the same approach. That proof is what earned the full mandate: platform, SEO, and the entire Google presence.

The Build

A modern platform, built agentically.

01

Platform & content architecture

A Next.js site of ~80 pages: 31 local-area pages (one per municipality), 40+ project references, and a guide library — a structure designed to capture demand across the whole county.

02

Lead generation & conversion

Multiple paths into one funnel, all feeding a single pipeline with GA4 conversion tracking imported to Google Ads at a value per lead:

  • An interactive “roof test” — the visitor answers a few questions and gets a personal assessment before the form.
  • A scripted chat widget on the same logic, with a real roofing expert as the avatar to feel human.
  • A quote form and a price calculator with the ROT deduction built in.
03

Performance — Core Web Vitals

Drone videos on project cards and the hero load without hurting speed: a still image as base layer, video fetched only as the element nears the viewport, respecting reduced-motion and data-saver modes.

04

Design & data quality

A “bold and clean” design line, real drone photography of actual roofs instead of placeholders, and a date-driven hero that rotates seasonal messaging automatically. I also ran a full reconciliation of the CMS’s 47 projects — using the actual quotes as ground truth to match the right images to the right project.

05

Agentic development in Claude Code

The whole platform was built agentically — but the interesting part was an architecture decision that emerged. I first built everything with content in code — fast, total control — but Sands’ editors needed to publish themselves, without a developer in the loop. So I broke the editorial parts out into a headless CMS (Sanity). The result is a deliberate hybrid: code owns what’s stable (area structure, design, logic); the CMS owns what the editor controls daily (projects, images, copy). Publish a new project and it appears automatically on the right area page and in the homepage feed. The unusual part: instead of clicking through a studio UI, I used Sanity’s MCP server to build the entire structure — schema, content model, entries, image uploads — directly from inside Claude Code, in the same flow as the code.

06

Automation — a lead funnel without a heavy CRM

The quote form posts to an edge API route, which calls a Google Apps Script webhook; the script writes the lead into a Google Sheet and emails Sands simultaneously — the same event fires the GA4 / Google Ads conversion. The client works in a tool they already know, gets every request in their inbox, and pays no CRM cost. I hardened the script after a real production incident (a formatting quirk shifted where new rows landed), so it always writes to the correct row.

The Google Presence

Built and run end-to-end.

01

Paid Search

Built and managed the Google Ads program with clean branded ads, a disciplined negative-keyword strategy, CPC caps and dayparting — kept efficient rather than spendy — with value-based bidding driven by the imported lead value, so it optimizes toward real requests, not clicks.

02

SEO — programmatic & technical

The 31 area pages carry unique content with auto-generated per-municipality meta descriptions. A hub-and-spoke internal-linking structure concentrates authority on the money pages with varied anchor text. Structured data (BreadcrumbList, FAQ), visible breadcrumbs, and 301 redirects during the migration consolidate the old site’s authority instead of splitting it.

03

Reviews & Google Business Profile

The client had never focused on this. I built a review-generation process and grew their Google reviews, and optimized the Business Profile to drive local-pack and Maps visibility — the fastest route to showing up for high-intent local roofing searches.

04

Measurement rigor

Robust tracking end-to-end (fixed a form-submit event so bidding could finally see real leads; hardened the automation), an automated weekly Ads + GA4 + Search Console report, and an offline-conversion loop designed to optimize toward closed, profitable jobs rather than raw lead volume. Along the way I navigated real platform issues — Google’s auto-apply removing strategic keywords, a “Limited Ad Serving” policy cap, and brand-name confusion with a near-identical competitor — and resolved each.

Compounding, not renting.

After the new platform, the multi-path lead funnel and the full Google presence went live.

Owned

Owned the channel

Sands went from renting leads on marketplaces — paying per lead with no guarantee of the job — to a lead-generation engine they fully own, where the cost is a fixed platform they control and every lead comes to them first, not to a bidding pool.

17×

SEO impact — 17× organic visibility

Organic search impressions grew roughly 1,500% (Search Console) — a 17× uplift — as the 80-page architecture, programmatic area pages, internal-linking structure and 301 consolidation matured. Organic went from a non-factor to a genuine channel, producing leads on its own for the first time.

Business impact — 7× more leads

Across two comparable quarters, inbound leads rose roughly 7× — driven by the new platform, the multi-path funnel (roof test, chat widget, calculator, quote form) and the full Google presence.

Built to compound

  • A scalable platform where every new project the client publishes automatically strengthens a relevant area page.
  • An editorial workspace the client owns, with no developer dependency.
  • A measurable funnel from ad click to quote request, with value-based bidding optimizing toward closed, profitable jobs.
  • A growing Google review base and optimized Business Profile driving local-pack visibility.

They were renting their leads — paying per lead on a marketplace, with no guarantee of the job. I built them a channel they own outright: one landing page that became an entire digital presence, ranking 17× higher and generating 7× the leads, every request traced from click to closed job.

Erik WernerGreow
Next.js (App Router)ReactTypeScriptTailwindSanity CMS (via Sanity MCP)Google Apps Script + SheetsGA4 & Google AdsVercelBuilt in Claude Code

End-to-end ownership.

Engineering, agentic build workflow, SEO strategy, paid search, Google Business Profile & reviews, conversion design, CMS architecture, and copy.

Want a channel you own?

If you’re renting demand on a marketplace, let’s talk about building an engine you control instead.

Book a call →