from zero to the first page of Google. an honest breakdown: metrics, what I built, which decisions and why, the product, the users, and where I mess up.
What I realised along the way: I learned to build and pull traffic at insane speed, but noticing that something I built had silently died - not yet (three silent failures in 8 weeks). From here the focus is one thing: finishing, not just building.
9 → 179 in 8 weeks (W7 partial, 5 days).
44 → 12. Best days already on page 1.
Clicks 231 → 580 (+151%) · impressions 10,955 → 21,179 (+93%) · CTR 2.11% → 2.74% · position 19.7 → 14.1. Cyprus = 82% of clicks. Mobile converts 3.4x better than desktop.
| Query | Was | Now |
|---|---|---|
| cars for sale nicosia | 30.6 | 16.0 ↑ |
| used cars cyprus | 41.1 | 44.8 ↓ |
| second hand cars cyprus | 36.8 | 40.1 ↓ |
Since I'm bragging about the first page above - here's the specifics, who's on it. Two caveats so you read it right. "Impressions" is my demand proxy: how many times Google showed me at all over 28 days (not the same as the full market volume). "Market estimate" is the monthly Cyprus volume from deep research (this is NOT a precise Keyword Planner number: order of magnitude, medium confidence; I'll pull the exact figures once I have a KP export). And here's what comes out: I'm on the first page for a pile of specifics, but mostly narrow, small-volume queries. And on the fat ones - deep. Exactly that unfinished door.
| Query | Position | Impressions 28d | Market estimate, /mo |
|---|---|---|---|
| μεταχειρισμένα αυτοκίνητα (used cars, Greek) | 10.2 | 33 | ~8,000 |
| φθηνά αυτοκίνητα μεταχ. κύπρος | 3.4 | 7 | ~900 |
| kia sportage for sale cyprus | 4.3 | 9 | ~1,200 |
| mitsubishi l200 cyprus price | 7.7 | 26 | ~700 |
| peugeot 208 cyprus | 8.1 | 14 | ~500 |
| toyota highlander cyprus | 8.0 | 8 | ~250 |
| used electric cars cyprus | 5.8 | 14 | ~120 |
| honda vezel 2027 | 9.1 | 31 | niche |
| allcars (brand) | 6.1 | 14 | growing |
Plus dozens of ultra-long-tail queries (specific model+year+price: "jeep renegade 2019 price used", "mazda demio 2013 price", "kia stonic price") sitting at positions 1-5, but with 1-4 impressions each. I'm at the top for them, the demand is just tiny. The table's main insight: my fattest query - the Greek "μεταχειρισμένα αυτοκίνητα" (~8,000/mo!) - hangs at position 10.2, right on the first-page threshold. This is literally the single high-volume query where I almost made it. One push into the top-5 and that's completely different traffic.
| Query | Position | Impressions 28d | Market estimate, /mo |
|---|---|---|---|
| cars for sale cyprus (biggest English) | deep | — | ~5,000 |
| used cars cyprus | 45 | 81 | ~4,000 |
| toyota cyprus → /cars/toyota | 22.0 | 686 | ~3,000 |
| bmw cyprus | not in top | — | ~2,500 |
| cars for sale nicosia | 15.7 | 43 | ~2,000 |
| second hand cars cyprus | 40.1 | 28 | ~1,500 |
| used cars limassol | 29.8 | 62 | ~1,200 |
| cars for sale larnaca | 16.2 | 40 | ~900 |
| volkswagen used cars | 26.7 | 51 | ~350 |
Look at the top of the table: the two fattest queries - cars for sale cyprus (~5,000/mo, biggest English) and bmw cyprus (~2,500/mo) - and I'm nowhere in results for either. BMW especially hurts: on the site itself it's query #1 (1,292 searches on clean data), yet on "bmw cyprus" in Google I'm invisible. Meaning from the outside I'm invisible exactly where demand is highest. That's the hole in the top, most valuable layer, and it needs a hub (see plan at the end).
~494+ in 8 weeks. W2 and W5 - peaks; W3 - a deliberate pause.
In short: public launch of allcars.cy - shipped the site itself, trilingual, security and the whole SEO/image layer at once.
In short: rolled out programmatic SEO (long-tail make+model+city), localized categories and GA4; plus taxonomy cleanup and reviving a dead data pipeline.
In short: the biggest throughput week - TCO/EV-grants combine + EV hub, depreciation foundation, GEO/LLM citation, and a risky compression of the biggest data table.
In short: a deliberate pause after the 96-PR peak - let the risks settle, don't chase bugs out of nowhere. Confirmed zero commits (checked by author and committer dates).
In short: microservices week - stood up specs-svc and silhouette-svc, ran a mass specs backfill, cleaned up listing-image quality.
In short: two flagships in one week - the Car-Data /v1 API and a full rewrite of the PWA Signal Dark; plus Deal Radar, the alerts/web-push backend, ops-console, and a second data source for the catalog. The busiest week of all.
In short: infra week - ops-hub and own CI/CD with no user features, auth on /api/*, Deal Radar v2, cross-platform history. Coincided with the 486 WAU peak (all-time max).
In short: identity-and-finish week - plate→VIN via an external provider end-to-end, the Web Push client, the /v1 contract finalized, ops-hub moved to prod, and finally fixing the long-silently-broken saved-search alerts.
Why: a listing with no photo = garbage, it kills trust in results. 3 languages - Cyprus is trilingual, and Greek queries showed up in GSC immediately. The data confirmed the bet.
Why: early GSC showed I was already top-8 on narrow long-tail queries, but page 4-5 on the fat ones. Build what already ranks. The data itself showed where to dig.
Why: the TCO calculator kept people ~29 minutes on the page - insane dwell time. If they stick, give them more tools. The DB shrink wasn't by choice - the disk was filling up.
Why: after 96 PRs, pushing further = catching bugs out of nowhere. We deliberately slowed down.
Why: silhouette generates images on its own budget (AI generation costs money), so isolating it behind a budget gate is safer. Specs are needed by both surfaces - logically a shared service.
Why: the PWA is the main mobile retention surface (users are mobile, per the data), the API is future distribution. We risked two big things in one week.
Why: deploy became the bottleneck, and then the cloud CI deploy died (~20 June). We invested - and hit the 486 WAU peak right then. Ship speed is a feature.
Why: VIN is the golden identity key, an external provider is the only legal channel. And digging through the data I found the saved-search alerts engine had NEVER sent a "new match". Instant decision - fix it, it's a direct hole in retention.
sessions from AI assistants (a new class of source), 62% engagement, from zero and with no spend. Already the 3rd-biggest channel and growing on its own.
BMW dominates - ~2x more than #2 (clean data, no dev tests).
median in the 6-20 band; ~15% power users (20+).
W6 peak (485) - 18 June spike (~6x), settled in 2 days. MAU growing: Apr 218 -> May 479 -> June 789.
search - the product core (67% of users searched).
buyers (hunters + criteria) = 41% of the base; sellers/own-car - a future paid audience.
of 947 searchers. Only 54 people ever clicked through to a seller. This is the main funnel blocker, not weekly return.
"new match" notifications ever (only delisted). A ghost feature, silent for months. Fixed in W7 - need to verify it actually sends.
Alerts looked done, PR merged, all green - yet notifications silently didn't send for weeks. Verify a feature ACTUALLY fires in prod.
The data pipeline was down 8 days, disk monitoring slept 5 days, alerts didn't send. Need quality thresholds and freshness alerts, not "seems to work".
I hit a wall not on positions but on indexing. Until Google indexed the inventory - an impressions ceiling. Once indexing moved - everything unlocked.
1,292 searches (clean data), ~2x more than #2. Demand straight off the screen - go hard on BMW and top-model content.
An ops-hub/CI week looked "featureless", but it sped up shipping - and the user peak hit right then. Speed is a feature.
W2 and W5 (96-100+ PRs) - great throughput, but that's exactly when risks pile up (a risky migration, the fastapi pin). Push - but double the caution.