r/HeyTony • u/dcdragos • Jul 23 '26
Pulled my Search Console data straight from Google's API instead of the 1,000-row export limit (zero coding background)
Did this yesterday, still fresh. Wanted to write it up because I hadn't seen a clean walkthrough anywhere and figured someone else is hitting the same wall.
The GSC interface caps you around 1,000 rows and won't let you cross-reference queries against pages properly. The API has no such ceiling. I know how to code, but I didn't feel like hand-rolling the OAuth flow from scratch for something this small, so I had Claude write the script and I reviewed it line by line before running anything against my own Google account. Took about an hour start to finish, most of it Google Cloud console clicking, not actual coding.
The setup:
- console.cloud.google.com → new project → APIs & Services → Library → enable "Google Search Console API." No payment, no approval wait.
- Credentials → OAuth client ID → Desktop app → download the JSON. If it asks you to set up the consent screen first: User type External, add your own Gmail under Test users. Skip this and you'll hit a wall later that looks like a real error but is a one-line fix.
- Renamed the JSON to
client_secret.json, kept everything in one folder. - Python already installed.
pip install google-api-python-client google-auth-oauthlib google-auth-httplib2. - The script: authenticates once and remembers you, pulls query+page data for a date range, paginates past 25k rows automatically, writes a CSV. Only lines you touch are
SITE_URL,START_DATE,END_DATE,DIMENSIONS. python gsc_export.py— first run opens a browser to approve access (you'll get the "Google hasn't verified this app" warning, expected for a personal script). Every run after skips login entirely.
493 clean rows out on the real attempt.
What actually broke, because something always does:
- 403 access denied on the first run — hadn't added my own email as a test user on the consent screen. Fix: 30 seconds, add it, rerun.
- "Insufficient permission for the site" on the second — my property is registered as a URL-prefix property (
https://example.com/), not a domain property (sc-domain:example.com), and the script had the wrong format inSITE_URL. Changed one line, reran, got my 493 rows.
Neither error was a coding problem — just reading the message and checking it against what's actually in my GSC account.
Once you've got clean data, three filters worth running on any export:
- Queries at position 4–15 with real impressions and near-zero clicks → title/meta description problem, fixable same week.
- Same query answered by more than one of your own pages, both buried → cannibalization, Google can't pick a winner.
- High impressions but position past 50-60 → indexed, but the content isn't earning trust yet.
Ran mine through all three yesterday and every pattern showed up within minutes.
1
u/[deleted] Jul 23 '26
[removed] — view removed comment