Application · Paid Traffic & Performance Lead at PAWS

I'm James, Head of Marketing at Surface Scan.

We're a five-person 3D scanning and printing company. Over the last couple of years I've built the online ordering system we run our print room on, launched the Google Ads campaign that brings customers to it, and built the CRM that tells Google Ads which of those clicks turned into paid invoices. You asked to see four things, so here they are.

James Peskett
James PeskettHead of Marketing, Surface Scan
£100k+
in orders through RapidQuote, the ordering system I built
01
1.61xfrom 0.85x
ROAS in September on the Google Ads campaign I run, up from March
02
Aug 2026
when the CRM I built went live, feeding paid invoices back to Google Ads
03
01 · Something I built

RapidQuote 3D, the ordering system I built for Surface Scan.

It started as an online quoting tool and I've built it out to run our entire 3D printing operation. Customers upload their 3D models, pick materials and colours, chat with us if they're stuck, and check out. Behind that there's a full admin area for orders, quality control, shipping, inventory and machine maintenance. It's live on our website, processes thousands of orders a year and has taken well over £100k in orders. I built it with Claude Code, which is my version of Replit.

£100k+ in orders 1,000s of orders a year Live on surfacescan.co.uk
Want to try it? You'll need a 3D file, so grab this one first.
For customersUpload STL, STEP or OBJ files, choose materials and colours, get a price, AI live chat, secure checkout and customer accounts.
For usOrder management, quality control, shipping, inventory and machine maintenance, all in one admin area.
Emails and offersAutomatic order update emails, marketing emails, a custom discount system and an affiliate system.
In the print roomOrders download automatically to our shared file system. The team manage each job from a dedicated mobile app, and an AI agent keeps the app, the files and the admin in sync.
cube-test-file.stl · drag to rotate
20 × 20 × 20 mm284 trianglesthe file you can download
02 · Paid traffic, results and thinking

The Google Ads campaign I run to bring in 3D printing orders.

I launched it in February 2026 when the new version of RapidQuote went live. Since then I've scaled spend from around £800 a month to around £3,000 a month while ROAS has gone from 0.85x to 1.61x. These aren't crazy numbers, but it's steady growth on a limited budget in a niche, low-volume industry, as a five-person business competing with global printing bureaus. It also kept growing through the summer, which is normally our slow period.

£800 → £3,000 a month spend £42.30 → £114.66 average order, Aug to Sep October on track for the best month yet
  • Keywords. I started with generic keywords and gradually refined them into ad groups around why people are searching, like needing a part fast or needing a specific material.
  • The landing page. I realised the iframe was taking a few seconds to load, so people were arriving to our header, our footer and a blank screen. I added a placeholder that shows instantly until the full tool loads.
  • Mobile. Our customers have traditionally been desktop, but mobile clicks are a lot cheaper, so I optimised the tool for phones.
  • "Don't have a file?" A lot of people clicking through didn't have a file to print from. I added a live chat for them right next to the upload button so we capture them rather than lose them. I'm currently A/B testing different designs for that upload screen based on the questions we get asked most.
  • Tracking. This was the biggest struggle. With the tool in an iframe it was tricky getting gclid and gbraid to stick, sending accurate data back to Google Ads and showing the same numbers in the RapidQuote admin. I got there eventually, using Claude Code to test different methods, adding custom snippets and listeners to the site and keeping it all compliant. It's working well now.
  • Bidding. Once the analytics were solid I switched to Maximise Conversion Value. Average order value went from £42.30 in August to £114.66 in September.
  • The "don't have a file" chat. The clicks were fine, people just had nothing to upload. A chat turns that into an enquiry, and sometimes we end up scanning or designing the part for them as well.
  • Mobile. It would have been easy to ignore because our buyers are mostly desktop, but the cheaper clicks are on phones.
  • Doing the bidding change last. If I'd switched to Maximise Conversion Value before the tracking was fixed, Google would have been optimising towards bad data.
  • Splitting by intent. Once each ad group was about one reason for searching, the ad copy and the landing page could actually match it.
  • Launching with generic keywords. It spent money on searches with no real intent behind them, and there was nothing specific for the ads to say.
  • Assuming the landing page was fine because I'd built it. It was fine for people willing to wait for an iframe. People coming from an ad aren't.
  • Spending before the tracking was right. That cost me a couple of months of decisions on patchy data. May's 0.64x is on the chart because that's what happened.
  • Target ROAS. CPC has been creeping up, mostly from competitor bidding, so I'm bringing in a target ROAS and increasing it steadily to force CPC down without the ads dropping out.
  • The upload screen tests. A/B testing variations based on the questions customers ask us most.
  • Keep scaling. October is on track to be the best month so far, so the plan is to keep increasing spend as long as ROAS holds.
At PAWS: your funnel goes application, temperament result, booked call, then enrolment on a £2,998 programme. The first thing I'd want sorted is booked calls and enrolments feeding back into Meta and Google as conversions, the same loop I built at Surface Scan with paid invoices (chapter 03), so you're bidding for enrolments rather than cheap applications.
Monthly ROAS, Google Search campaign
RapidQuote 3D, 2026. Dashed line is break-even.
Monthly ROAS March to September 2026 March 0.85x, April 1.11x, May 0.64x, June 1.17x, July 1.34x, August 1.30x, September 1.61x. February had no tracking. October in progress. 2.0x 1.5x 0.5x 0 break-even no tracking Feb March: 0.85x 0.85 Mar April: 1.11x 1.11 Apr May: 0.64x 0.64 May June: 1.17x 1.17 Jun July: 1.34x 1.34 Jul August: 1.30x 1.30 Aug September: 1.61x 1.61 Sep in progress Oct

Simplified stats, since my current employer wouldn't want me sharing everything. Happy to go through the live account on a call.

03 · A workflow I built

The custom CRM I built for Surface Scan, live since August.

As well as the automation inside RapidQuote, I built us a CRM from scratch. The part most relevant to this role is the pipeline connecting our enquiries to Google Ads, so we know which ads turned into quotes and which turned into paid invoices.

1New enquiries create contacts automatically, whether they come in by email, web form, live chat or web chat. Web form enquiries bring their Google Ads identifier (gclid or gbraid) with them.
2Tasks are created for customer service from triggers, for example following up when an email hasn't had a reply, or chasing a payment.
3It's connected to Xero, so when a payment comes in the invoice updates to paid inside the CRM on its own.
4Quotes and paid invoices are fed back to Google Ads against the original click, which is what lets the campaign optimise for the enquiries that actually turn into money.
no reply → follow-up task overdue → chase payment Enquiry email · form · chat Contact created automatically + gclid / gbraid Quote sent pipeline stage Invoiced pipeline stage Paid via Xero automatic Google Ads conversion against the click quote sent + invoice paid → sent back as conversions so bidding optimises for enquiries that turn into money

Let's talk.

Email or call me, whichever's easier.

James Peskett