Amirali YaghoutiSenior Software Engineer

python Case study

Google Search Console Extractor

Search Console holds the only first-party record of how a site actually performs in search, and its interface is built for looking, not for working. This pulls the data out into a shape that supports comparison over time.

The business problem

The Search Console UI answers one question at a time and forgets it. Real work needs the data locally, in a consistent structure. I want to compare a set of pages month over month, find queries where a page ranks but earns no clicks, and see whether a change helped. Exporting by hand produces inconsistent files that cannot be compared.

What I delivered

  • A Python extractor pulling query, page and performance data from the Search Console API into a consistent structured output.
  • A stable output schema, so an extract taken this month is directly comparable to one taken last month.
  • Query-and-page level detail rather than site-level totals, since the useful decisions are always about a specific page.
  • Repeatable runs, so the extract is a command rather than a sequence of interface clicks somebody has to remember.

Technical approach

  • First-party data only. Third-party rank estimates are useful for competitors and misleading for your own site when the real numbers are available.
  • I fixed the schema deliberately, because the whole value of a periodic extract is that the periods can be compared.
  • I keep extraction separate from analysis, so a change in what I want to know does not mean re-fetching what I already have.
  • Output lands in a format that both a script and a person can open, since some of these questions are answered by looking.

Result and evidence

I make SEO decisions on the store against Search Console's own query and page data, on a repeatable cadence rather than from a snapshot somebody happened to take.

Commercial value

Search work without measurement is guessing with extra steps. Owning the extract is what makes it possible to say whether a change worked.

implementation-brief.readme

Readable implementation brief

implementation_brief {
  project: "Google Search Console Extractor"
  stack: "Python, Search Console API"
  grain: "query x page x period, not site totals"
  schema: "fixed and stable, so periods are comparable"
  separation: "extraction is independent of analysis"
  cadence: "repeatable command, not manual UI export"
  principle: "first-party data over third-party estimates"
}

What this project shows

The fixed schema is the choice that matters. An extract that changes shape between runs is a report, not a dataset, and it cannot answer the only question worth asking: did things get better?

Separating extraction from analysis is what keeps the historical record intact when the questions change.