Skip to main content
Business & Lab

1M Impressions per Month, $0 Revenue: A Programmatic SEO Post-Mortem

← Business & Lab

Written by Evren BalPublished  · 5 min read

A search field hangs above an open drawer, with an open door beyond it.
Discuss this article with your AI

This article was originally published on ProductLog: A million of impressions per month and $0 in revenue. A programmatic SEO post-mortem.

Almost a year ago, I launched camiler.org. It recently reached 1 million monthly impressions on Google Search and more than 10K clicks.

The total revenue from that visibility was $0.


camiler.org Performance Retrospective

MetricTargetActual ResultStatus
Monthly Impressions100K~1,000,000🟢 Met (Exceeded)
Monthly Clicks2K~10K+🟢 Met (Exceeded)
CTR (Click-Through)3.5%~1.2%🔴 Low (Due to Google Maps SERP widget)
Monthly Revenue$100$0🔴 Failed (AdSense rejection & low intent)

The system I built

The project was a directory of every mosque in Turkey. The automated pipeline was the most exciting part of the development process:

  1. Data Ingestion: I pulled the official mosque registry list from the government religious authority (Diyanet).
  2. Location Verification: I verified and mapped each entry against Google Maps APIs semi-automatically.
  3. Review Collection: I pulled user reviews for each verified location.
  4. AI Summarization: I used OpenAI APIs to compile and write a clean, readable summary for every single mosque.

I documented the original build, its data-quality limits, and its early results in the earlier camiler.org SEO experiment.

Thousands of pages, fully automated. The strategy was classic programmatic SEO: find a clear gap in Google's search results, and fill it at scale.


A programmatic SEO system gains search visibility while its revenue tray remains empty

Visibility did not translate into clicks at the same rate

In terms of visibility and indexation, the playbook worked: rankings started coming in quickly and impressions climbed. But it did not work flawlessly. CTR stayed well below target, and none of that visibility translated into revenue. If impressions and pageviews were the only scoreboard, this project would be a massive win.

However, the click-through rate (CTR) hovered around 1.2%. This is incredibly low, and the reason is highly instructive:

For local [place] mosque or [neighborhood] mosque searches, Google's own Maps Local Pack panel sits right at the top of the viewport. My directory site was directly competing against Google's own built-in answer widget, losing the majority of the clicks before searchers ever scrolled down to the organic results.


A data pipeline reaches search results while the commercial validation desk remains empty

The advertising revenue model did not work either

Once the traffic stabilized, the obvious monetization path was to put display ads on the pages. I applied to Google AdSense.

Rejected.

Sit with that paradox for a second. Google was perfectly happy to index my programmatic content and send a million search impressions my way, but their ad network judged the exact same content as "low-value" and refused to let me run ads. The simplest, most passive monetization path was closed by the very same company sending the traffic.


The failure was in validation before scaling

1. Traffic is Not Money

I knew this intellectually as a sentence, but I didn't truly understand it in my bones until I looked at a graph curving sharply upward alongside a bank balance that hadn't moved a single cent.

2. Commercial Intent is Everything

What converts traffic into actual revenue is a combination of commercial intent and monetizability. They are related, but they are not the same. Searchers showed little buying intent; the display-ad route I expected to use also failed. Someone looking up a local mosque's address or checking prayer times is not in a buying mindset. Before building, I had not validated a high-value advertiser or product fit. High search volume, unvalidated revenue potential.

That makes the real mistake a pre-build validation failure. Before scaling, I should have tested three assumptions that are obvious in hindsight: whether the Local Pack left enough click opportunity, whether this audience attracted advertisers or buyers, and whether AdSense would accept this kind of page. The pipeline answered “Can this rank?” It never answered “Can this become a business?”


What the experiment still proved

Despite the lack of revenue, the experiment was not a waste. The pipeline machine itself is genuinely powerful:

Find SERP GapIngest DatasetVerify via APIGenerate Value at ScaleRank The pipeline proved it could ingest data, publish at scale, and win visibility. It did not prove that the resulting demand could support a business. My mistake was aiming it at a niche whose commercial buyer and monetization path I had not validated. Pointing the same technical machine at an audience that spends money may change the economics, but that assumption still has to be validated before scaling.


The decision going forward

  • No More Time Investment: I am not investing another hour into attempting to monetize this site.
  • Frozen but Live: I am keeping the site live but frozen. It costs virtually nothing to run (just the domain renewal fee, hosted on a server I already run for other projects).
  • Wallet-First Niches: For my next programmatic project, the niche will be selected based on the buyer's wallet, not just the open gap in the SERPs.

In programmatic SEO, the central question is not whether pages will rank, but whether that visibility can meet a verifiable revenue model.

If this article was useful

Linking to it from a relevant page on your website or sharing it on social media genuinely helps it reach more people. Thank you for your support.

Linking and brand guidelines →