Skip to content

Growth · Paid Search & Ops

Performance Marketing & Growth Ops

Took a 14,000-product textbook store from guesswork to a measured growth engine — Google Ads built around edition and ISBN intent, a Python repricing engine, and a catalogue-wide SEO clean-up. In the first month paid search ran at a 1.48% CTR and $0.46 CPC, and the store did 195 orders and $17k+ gross.

Role
Growth & Operations Lead (COO) · Google Ads · Pricing Automation · SEO
Client
US academic-textbook e-commerce business
Platform
Shopify · Google Ads · Python (Keepa / ISBNdb / Shopify APIs)
Year
2026
1.48%
Search CTR (Google Ads, first month)
$0.46
Average CPC (Google Ads, first month)
195
Orders in one month
$17k+
Gross sales in one month
81/100
SEO health score (site audit, Aug 2026)
10k+
Meta descriptions rewritten
Illustration of glass dashboard panels with a rising line chart, bar charts and a donut chart beside a stack of books and a shopping-cart icon, on dark green

Overview

An academic-textbook e-commerce business with a 14,000-product catalogue was competing against Amazon on price with manual pricing, no real paid-search structure, and a catalogue whose SEO was quietly broken. I took on growth and operations end to end: the paid-search programme, a pricing-automation engine, and the catalogue clean-up — and ran it on real numbers. I had designed and built this store's Shopify storefront earlier (see the Online Bookstore case), so this was the same store, now run for growth.

The challenge

Margins on textbooks are thin (15–25%), which puts a hard ceiling on what a customer can cost to acquire — roughly $12. Pricing had to track Amazon continuously across thousands of ISBNs without giving margin away. Conversion tracking was over-counting (184 conversions recorded against about 12 real orders), so nothing could be optimised honestly until that was fixed. And 98% of product pages carried meta descriptions far past the length Google shows, burying the store in search results.

Before / after

  • Before Meta descriptions: median 277 characters, 98% over Google's limit

    After Median 147, zero over 160

  • Before 184 conversions recorded against ~12 real orders

    After Tracking fixed — every decision on true orders

  • Before Manual pricing against a marketplace

    After Python repricing engine inside margin guardrails

  • Before Paid search: no structure

    After 1.48% CTR, $0.46 CPC on intent-led campaigns

Approach

  • Built the paid-search structure around buyer intent — ISBN and edition-number queries first, category terms second — across Search, Shopping and Performance Max, with a small brand-defence budget.
  • Wrote a Python repricing engine against the Keepa, ISBNdb and Shopify APIs to reprice against Amazon inside margin guardrails, instead of by hand.
  • Audited the full catalogue: rewrote 10,000+ over-length meta descriptions (median 277 → 147 characters, zero over 160, zero failures), fixed empty product descriptions and sitemap coverage, and shipped a WebP cover set to cut layout shift.
  • Found and fixed the conversion-counting defect so every decision ran on true orders, not inflated events.
  • Cut wasted spend by excluding queries for out-of-stock inventory and tightening to US-only delivery.

Outcome

A measurable engine instead of guesswork. In the first month paid search delivered 289k impressions and 4,286 clicks at a 1.48% CTR and $0.46 CPC — and edition-number queries alone returned roughly the full period's spend in tracked conversion value. The store did 195 orders and $17k+ gross in a month across 39 states, and a full-site SEO audit in August 2026 scored its health at 81/100.

Performance MarketingGoogle AdsRepricing EngineSEOShopifyAnalyticsVisit live site