The problem

An SEO team needed performance data from Google Search Console, but it was spread across 50 separate accounts. Exporting it by hand was slow, easy to get wrong, and meant the numbers were always out of date by the time anyone looked at them.

What I built

A scheduled pipeline on Windmill, written in Python, that collects Search Console data from all 50 accounts through the official API and puts it in one place, in one consistent format.

How it works:

  • One flow, many accounts. The flow loops over the list of accounts and processes them in parallel batches, so adding or removing an account is a one-line change.
  • Separate access per account. Each account has its own stored credentials, and every request goes out through that account’s own dedicated Bright Data proxy.
  • Reliable collection. The pipeline pulls queries, pages, clicks, impressions, CTR and average position for the chosen date range, handles API pagination and rate limits, and retries failed requests.
  • One dataset. Results from every account are normalized and written to a Grist table.
  • Failures are visible. If one account fails, the others keep running, and I get an alert that names the account and the error.

Result

  • Data from all 50 accounts is collected automatically on a schedule, with no manual exports.
  • Saves the team more than 10 hours a week.

Tools

Windmill, Python, Google Search Console API, Grist, Bright Data proxies (one per account).

Details are anonymized. The client has not been named and no figures are shown beyond what was approved.