A premium furniture and lighting brand (name anonymised) sold online across the US, with a high average order and a long decision cycle. Shopify knew the orders, HubSpot knew almost nothing, and Google Ads was optimised on revenue per click. We connected the three, so that product margin, customer behaviour and customer value finally informed how the ads were bought. This is a composite case: client details are anonymised and illustrative, and no measured figures are implied.
Ads that learn from customers worth keeping, not only from the last click

The brand sold sofas, dining tables and lighting that people do not buy on a whim. Shoppers browsed for weeks, saved baskets, ordered fabric samples, asked for advice and often came back through a different channel before paying. The tools did not reflect that. Shopify held the orders. HubSpot was a mailing list that nobody trusted. Google Ads reported return on ad spend per order, which flattered the products that sold easily and said nothing about margin, returns or whether a customer ever bought again.
Shopping and Performance Max campaigns spent evenly across a catalogue where some items earned real profit and others barely covered shipping. People who abandoned a basket or asked for samples were invisible to the ad account, so the same shoppers were chased with generic ads or ignored altogether. Marketing argued with finance about what a good month looked like, because each side was looking at a different screen.
The founders did not want more tools. They wanted one version of the truth about which ads brought customers who were worth having.
We cleaned the product feed and enriched it with margin tiers, return-prone flags and collection logic, so that Google Ads could tell a profitable lamp from a loss-leader. Orders, refunds and repeat purchases flow from Shopify into HubSpot as they happen, instead of living in exports.
Every basket, sample request and design-advice enquiry now lands on a HubSpot contact with source and campaign attached. HubSpot CRM scores customers by real value, flags those likely to buy again and runs follow-ups for abandoned baskets and sample requests, with the sales team stepping in on the larger projects.
Conversions are imported with their margin and customer value, so Shopping, Performance Max and Search campaigns optimise toward profitable orders. Campaigns were restructured around product groups with different economics, and low-value segments were excluded rather than discounted.
Customer lists built in HubSpot feed Google Ads as Customer Match audiences: best customers for lookalike-style expansion, recent buyers to exclude from acquisition, lapsed customers for win-back. One shared report shows the path from click to basket to order to repeat order.
We traced what happened between a first click and a repeat order, listing every place where information stopped. That produced the data model, the fields HubSpot needed, and the short list of signals worth sending back to Google Ads.
We rebuilt the product feed with margin tiers, connected Shopify orders, refunds and baskets to HubSpot, and tested the sync against a sample of historical orders until finance recognised the numbers.
With reliable data we imported value-based conversions, restructured Shopping and Performance Max around product economics, and ran the new setup beside the old one before shifting budget gradually.
We switched on Customer Match audiences, basket and sample follow-ups and a single monthly report. The team now reviews value and repeat behaviour together and adjusts the catalogue, not only the bids.
Composite case based on typical engagements; client details anonymised and illustrative; no client name or measured figures implied.
Connecting the shop, the CRM and the ad account matters less for the dashboard than for the decisions it changes: what to bid on, whom to follow up and which customers to find more of.
We work with a limited number of clients to keep the quality high. If this case resonated, let's talk.